基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

TCP 如何保证可靠传输?

知识点图片

TCP(传输控制协议)通过一系列复杂的机制,在不可靠的 IP 层之上构建了一个可靠的传输层。所谓的“可靠”,指的是数据在传输过程中无差错、不丢失、不重复、且按序到达

以下是 TCP 保证可靠传输的 7 大核心机制:

1. 校验和 (Checksum)

  • 作用: 保证数据内容的完整性。
  • 机制: TCP 首部中有一个校验和字段。发送方在发送数据前计算校验和,接收方收到数据后重新计算。如果计算结果不一致,说明数据在传输过程中发生了比特翻转或损坏,接收方会直接丢弃该数据包(不发送 ACK),等待发送方超时重传。

2. 序列号 (Sequence Number)

  • 作用: 解决数据包的乱序重复问题。
  • 机制: TCP 将每个字节的数据都进行了编号。
    • 去重: 如果接收方收到重复的序列号,会丢弃重复数据。
    • 排序: IP 包到达的顺序可能是不确定的,接收方根据序列号将乱序到达的数据包重新排序,然后再交付给应用层。

3. 确认应答机制 (ACK)

  • 作用: 告知发送方数据已被成功接收。
  • 机制: 接收方收到数据后,会回复一个 ACK(Acknowledgment)报文。ACK 中的确认号(Ack Number)表示“该序号之前的数据我都收到了,请下次从这个序号开始发送”。

4. 重传机制 (Retransmission)

这是 TCP 应对丢包的核心手段,主要分为两种:

  • 超时重传 (Timeout Retransmission):
    • 发送方发出数据后启动一个定时器。如果在规定时间(RTO,Retransmission TimeOut)内没有收到 ACK,就认为数据丢失,重新发送。
    • 注:RTO 是动态计算的,略大于 RTT(往返时间)。
  • 快速重传 (Fast Retransmit):
    • 如果接收方收到了乱序的数据报文段(比如收到了 M1, M2, M4,缺失了 M3),它会立即连续发送 3 个针对 M2 的重复 ACK。
    • 发送方一旦收到 3 个连续的重复 ACK,就知道 M3 丢失了,于是立即重传 M3,而不需要等待超时定时器到期。这大大提高了效率。

5. 流量控制 (Flow Control)

  • 作用: 防止发送方发得太快,把接收方“淹没”。
  • 机制: 滑动窗口 (Sliding Window)
    • TCP 头里有一个 Window 字段,接收方通过它告诉发送方自己缓冲区还能接收多少数据(rwnd)。
    • 发送方根据这个值控制发送速度。如果接收窗口为 0,发送方会停止发送,并启动一个“零窗口探测定时器”来轮询接收方窗口何时恢复。

6. 拥塞控制 (Congestion Control)

  • 作用: 防止过多的数据注入到网络中,导致网络链路过载(堵车)。
  • 机制: 发送方维护一个拥塞窗口 (cwnd),根据网络状况调整发送速度。主要包含四个算法:
    1. 慢启动 (Slow Start): 连接刚建立时,指数级增长发送窗口,试探网络承受能力。
    2. 拥塞避免 (Congestion Avoidance): 当窗口达到阈值(ssthresh)后,线性增长窗口,避免网络过早拥塞。
    3. 拥塞发生: 当检测到丢包(超时或收到重复ACK)时,认为网络拥塞,缩小窗口。
    4. 快速恢复 (Fast Recovery): 配合快速重传使用,在丢包后不直接回到慢启动状态,而是将窗口减半后开始拥塞避免,以保持较高的传输效率。

7. 连接管理 (Connection Management)

  • 三次握手: 确保双方都能发送和接收数据,并同步初始序列号(ISN)。
  • 四次挥手: 确保双方的数据都已发送完毕,连接安全关闭。

总结

TCP 的可靠性不仅仅是靠“重传”,而是一个系统工程:

  1. 坏了怎么办? -> 校验和
  2. 乱了/重了怎么办? -> 序列号
  3. 丢了怎么办? -> ACK + 重传机制
  4. 发太快接收方受不了怎么办? -> 流量控制(滑动窗口)
  5. 发太快网络受不了怎么办? -> 拥塞控制
00:00
00:00