2018-11-15
数据传输协议
一、TCP协议
TCP协议是面向连接、可靠的数据传输协议
数据从应用层发下来,会在每一层加上头部信息进行封装,然后发送数据接收端,所有数据的发送和接收其实是数据的封装和解封装的过程。
由于TCP是可靠的传输,无论哪一方向另一方发送数据之前,都必须在双方之间建立一个三次握手的协议,断开连接就必须建立四次挥手的协议。
1.1 TCP的三次握手协议
在Tcp/Ip协议中,TCP提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号,并交换TCP窗口大小信息。
下图为TCP的通信过程:
index.jpeg
1.1.1 三次握手具体过程
① 第一次握手
客户端向服务器发送连接请求报文,然后客户端处于进入SYN_SEND状态,等待服务器的确认。(客户端的建立连接并等待确认)
② 第二次握手
服务器收到SYN报文,并对这个SYN报文段进行确认,同时发送SYN请求信息,服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并将信息发送客户端,然后服务器进入SYN_RECV状态。(服务器端发送相关报文段信息并等待连接)
③ 第三次握手
客户端收到SYN+ACK报文段,向服务器发送ACK报文段,当报文发送完毕就完成了Tcp三次握手协议。(客户端接收到服务器端信息并实现连接)
1.1.2 四次挥手具体过程
① 第一次挥手
客户端向服务器端发送一个FIN报文段,服务器端进入FIN_WAIT状态,表示已经没有数据向服务器端发送了。
② 第二次挥手
服务器端收到客户端发送过来的FIN报文,向客户端回一个ACK报文,服务器端进入CLOSE_WAIT状态,并告诉客户端它也没有数据发送了。
③ 第三次挥手
服务器端向客户端发送FIN报文,请求关闭连接。
④ 第四次挥手
客户端接收到服务器端的FIN报文,并向服务器端回一个ACK报文,关闭连接。
由于TCP保证了数据传输的可靠性,所以对性能消耗也会变大,数据传输的效率也会变低。
二、UDP协议
和TCP一样,UDP也属于传输层协议,其主要作用是将网络数据流量压缩成数据包的形式,内容组成为报文头+具体传输的数据。
2.1 UDP特征
① UDP是无连接传输协议;
② 由于传输数据不需要建立连接,因此也就不需要维护连接状态,包括收发状态;
③ UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小;
④ 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制;
⑤ UDP尽最大努力交付,但不保证可靠交付;
⑥ UDP是面向报文的。
总结以下:UDP连接具有资源消耗少,处理速度的优点,使用通常音频、视频、普通数据使用UDP传输数据较多。
三、TCP和UDP的区别
① TCP是面向连接的,保证传输数据的可靠安全,而UDP是非面向连接的,不可靠但高效率;
② TCP占用资源多,而UDP占用资源少;
③ TCP是流模式(通信双方是互相、明确的),而UDP是报文模式;
④ 应用场景不同。
四、TCP的粘包和UDP的丢包
4.1 TCP的粘包
TCP的粘包现象
是指:发送方发送的若干数据包到接收方接收时粘成一包,从接收缓冲区来看就是,后一包数据的头紧接着前一包数据的尾。
TCP粘包处理方法
应用程序在处理从缓存读取的分组时,读完一条数据就紧接着读取下一条数据,直到所有的数据都被处理。
4.2 UDP的丢包
UDP丢包现象
是指由于UDP是不可靠连接,受到各种因素影响,数据包可能会在接收过程中丢失一部分,从而导致数据的不完整。