美文网首页
2018-11-15

2018-11-15

作者: sunnyslxie | 来源:发表于2018-11-23 15:23 被阅读0次

    数据传输协议

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

    相关文章

      网友评论

          本文标题:2018-11-15

          本文链接:https://www.haomeiwen.com/subject/tvpyfqtx.html