• TCP实现可靠传输


    1. TCP 和 UDP的区别:

    • TCP面向连接;UDP无连接
    • TCP保证数据的可靠传输,数据传送无差错,不丢失,无重复,按序到达;UDP不保证可靠交付
    • TCP连接一对一;UDP支持更广泛
    • UDP实时性好,效率高,适用场景:短消息传输,大量客户端,对数据安全性要求不高但实时性要求高
    • TCP面向数据流;UDP面向数据报

    2. TCP如何保证数据传输的可靠性?

      1. 序列号ACK信号:发送方按照顺序给要发送的数据包的每个字节都标上编号。接收方接收到发送方的数据包之后,回传一个ACK信号,标识下一个需求的数据包初始字节编号。

      2. 超时重发:在等待接收方回传的ACK信号超时后,发送方重发数据包。一旦开始重传,下一次等待的时间间隔指数增长,重发一定次数后还是收不到ACK信号,将强制终止连接。

      3. TCP的连接管理:建立连接的三次握手和断开连接的四次挥手。

      4. 以段为单位发送数据包:在建立TCP连接的同时,两端协商发送数据包的单位,称为“最大消息长度”:MSS。 【TCP数据(MSS字节)】【TCP首部(20字节)】【IP首部(20字节)】

      5. 滑动窗口:以段为单位发送数据包,每发送一个数据包需要等待一个ACK信号,当数据包往返时间越长效率越低。滑动窗口中窗口前端为已发送但为收到ACK的数据,后端为待发送数据。发送端一次发送多个数据,接收端回传收到的连续数据的ACK信号,缓存缺失数据之后的数据包(保持顺序)。发送端当收到ACK信号时,窗口向前依次移动,直到遇到有数据未确认时停止。一段时间后启动超时重传,接收端若收到缺失数据,则和缓存数据一起发送ACK信号,否则,抛弃缓存数据。

      6. 流量控制:TCP首部有一个字段来通知窗口的大小,接收端通过设置来主动控制传输流量。

      7. 拥塞控制:发送端通过拥塞窗口主动控制传输流量。慢启动:防止双方通信刚开始就传送大量数据包,发送端拥塞窗口初始设置为1MSS,每接受一个ACK信号,窗口扩大为两倍。发送数据时,取拥塞窗口和滑动窗口的较小值。同时设定一个慢启动阈值,当拥塞窗口大小超过阈值时,改为线性增长,直到网络拥塞。拥塞时将慢启动阈值设置为当前窗口的的一半,并将拥塞窗口的值设置为1,然后再次重复操作。

    3. TCP三次握手

      

       为什么需要三次?

      1. 确认信息对等,客户端和服务端需要确认自己和对方收发报文的能力

      第一次握手,Server确认了自己收报文,和Client发报文的能力

      第二次握手,Client确认了自己收/发报文和Server收/发报文的能力

      如果没有第三次,那么Server将无法确认自己发报文和Client收报文的能力

      2. 防止超时产生的脏连接

      客户端发送的连接请求超时到达,服务器接收后,如果没有第三次握手确认,而直接建立连接,这个连接是脏连接。而三次握手中,这种超时握手,客户端因为状态不是SYN_SENT,将会丢弃服务端的二次握手,服务端收不到三次握手,最终超时,连接建立失败。

    4. TCP四次挥手

      

      第一次挥手,客户端发送FIN,客户端不再发送数据

      第二次挥手,服务端返回ACK,告知客户端收到请求,并进入CLOSED_WAIT状态,代表服务端进入收尾阶段,发送剩余数据关闭资源等等。

      第三次挥手,服务端返回FIN,进入LAST_ACK状态,等待客户端确认应答

      第四次挥手,客户端返回ACK,进入TIME_WAIT状态(持续2MSL时间),在此期间若再没有收到服务端请求,则关闭连接进入CLOSED状态

      为什么是2MSL?

      MSL是报文在网络上生存的最长时间。假设最后一次挥手的ACK丢失,而它的最大生存时间是MSL,服务端未收到ACK则会重发FIN,重发的报文生存时间也是MSL,两者一共2MSL。如果在最长等待时间中都未收到服务端的消息,则确认服务端已经关闭,则自己也可关闭了。

    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    Leetcode: Flatten Binary Tree to Linked List
    POJ 1180 Batch Scheduling
    STL容器
    关于bfs时间轴
    dfs遍历痕迹的清理
    dfs、遍历与for
    在各OJ上的名号
    哈尔滨理工大学第七届程序设计竞赛初赛(BFS多队列顺序)
    东北林业大学第12届ACM(打表)
    浙江工业大学迎新预赛(容器的使用)
  • 原文地址:https://www.cnblogs.com/walker993/p/9570902.html
Copyright © 2020-2023  润新知