一、协议
- TCP
- UDP
- TCP/IP
- HTTP
- HTTPS
二、OSI七层模型(开放系统互连参考模型)
注:本文由下往上排列
物理层
、数据链路层
和网络层
通常被称作媒体层
,是网络工程师
所研究的对象。
(一)物理层:把二进制转换成电流,电流转换成二进制,数据的比特流
- 起始位
- 数据
- 地址
- 校验
- 截止位
中继器:作用对电信号放大
(二)数据链路层:标准帧格式
(三)网络层:
阻塞:接收数据的时候要去处理
- 选择最优路径
- 分组数据包
传输层
、会话层
、表示层
和应用层
则被称作主机层
,是用户所面向和关心的内容
。
(四)传输层
端口号(PORT):每一个应用程序有很多服务,每一个服务对应着一个端口号
(五)会话层
(六)表示层
(七)应用层
四、Socket
1、Socket理论知识
-
1、
HTTP协议
:基于TCP连接的,主要解决如何包装数据,对应于应用层; -
2、
TCP/UTP协议
:主要解决数据如何在网络中传输,对应于传输层; -
3、
IP协议
:对应于网络层;
注:三者本质上没有可比性。
-
在传输数据时,可以只使用传输层(
TCP/IP
),但是那样的话,由于没有应用层
,便无法识别数据内容
,如果想要使传输的数据有意义
,则必须
使用应用层协议
,应用层协议很多,有HTTP
、FTP
、TELNET
等等,也可以自己定义应用层协议。web
使用HTTP
作传输层协议,以封装HTTP文本信息
,然后使用TCP/IP
做传输层协议将它发送到网络上。 -
TCP/IP
:传输层协议,主要解决数据如何在网络中传输。
Stocket
-
1、Socket是对
TCP/IP
协议的封装,Socket
本身并不是协议
,而是一个调用接口(API)
,通过Socket
,我们才能使用TCP/IP
协议。 -
2、Socket描述了一个
IP
、端口对
。它简化了程序员的操作
,知道对方的IP
以及PORT
就可以给对方发送消息,再由服务器端来处理发送的这些消息。所以,Socket
一定包含了通信的双方
,即客户端(Client)
与服务端(Server)
。
TCP
- 1、TCP是
面向连接
的、传输可靠
(保证数据正确性
且保证数据顺序
)、用于传输大量数据
(流模式)、速度慢
,建立连接需要开销较多
(时间,系统资源)。
- 2、TCP是一种
流模式的协议
,是面向连接的,也就是说,在连接持续的过程中,Socket中收到的数据都是由同一台主机发出的
(劫持什么的不考虑),因此,知道保证数据是有序的到达就行了
,至于每次读取多少数据不关心
。
TCP三次握手
- 三次握手(
Three-way Handshake
),是指建立一个TCP连接时,需要客户端
和服务器
总共发送3个包
。三次握手的目的
是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息。在Socket编程中,客户端执行connect()时,将触发三次握手。
注:
SYN(synchronous)是同步标志
ACK (Acknowledgement)是确认标志
Seq是序列号
-
第一次握手:客户端发送一个TCP的SYN标志位置1的包,指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号字段里。
-
第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号设置为客户的序列号加1以,即X+1。
-
第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写序列号的+1。
-
关于三次握手,或许你可以这样记忆:
- 1、「喂喂喂,能听到吗?」
- 2、「没问题。能听到就回一声。」
- 3、「没问题。」
TCP四次挥手
四次挥手的流程如下:
iOS:网络知识梳理:四次挥手.png- 当
Server端
收到Client端
的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送,故需要四步握手。
iOS:网络知识梳理:TCP.jpgTCP客户端-服务器程序设计基本框架
UDP
-
UDP是面向无连接、传输不可靠、用于传输少量数据(数据包模式)、速度快的传输层协议。注意,UDP传输的是数据报包,而TCP是流。
-
UDP是面向无连接的协议,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一个报文的数据,则会乱套。比如,主机A向发送了报文P1,主机B发送了报文P2,如果能够读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一起,这样的数据是没有意义的。
iOS:网络知识梳理:UDP.jpgUDP客户端-服务端程序设计基本框架
2、Socket的通信过程
-
- 1、服务端利用Socket监听端口;
- 2、客户端发起连接;
- 3、服务端返回信息,建立连接,开始通信;
- 4、客户端,服务端断开连接。
3、Socket原理
-
套接字(socket)是通信的基石,是支持
TCP/IP协议
的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议
,本地主机的IP地址
,本地进程的协议端口
,远地主机的IP地址
,远地进程的协议端口
。 -
应用层通过传输层进行数据通信时,
TCP
会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP
连接或多个应用程序进程可能需要通过同一个TCP协议
端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议
交互提供了套接字(Socket)
接口。应用层可以和传输层通过Socket
接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
4、Socket连接
-
建立Socket连接
至少需要一对套接字
,其中一个运行于客户端,称为ClientSocket
,另一个运行于服务器端,称为ServerSocket
。 -
套接字之间的连接过程分为三个步骤:
-
服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求;
-
客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求;
-
连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
-