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是不可靠连接,受到各种因素影响,数据包可能会在接收过程中丢失一部分,从而导致数据的不完整。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 3,550评论 0 6
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,144评论 6 174
  • 传输层提供的服务 传输层的功能 从通信和信息处理的角度看 ,传输层向它上面的应用层提供通信服务,它属于面向通信部分...
    CodeKing2017阅读 3,699评论 1 9
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,100评论 0 8
  • 本文主要通过整理网络上的资料,整理出的关于TCP方面的简单理论知识。作为Java程序员虽然更多的时候我们都是直接调...
    tomas家的小拨浪鼓阅读 5,641评论 1 100