问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

TCP 有超时重传,为什么还需要快速重传机制?

创作时间:
作者:
@小白创作中心

TCP 有超时重传,为什么还需要快速重传机制?

引用
CSDN
1.
https://m.blog.csdn.net/qq_39279448/article/details/145587080

在TCP(传输控制协议)传输过程中,数据丢失是不可避免的。TCP通过超时重传和快速重传机制来保证数据传输的可靠性。那么,既然有超时重传,为什么还需要快速重传机制?接下来深入探讨这两个机制的区别、超时重传的局限性以及快速重传的必要性。

TCP 超时重传机制

什么是超时重传?

TCP发送数据时,每个数据包都会设置一个超时时间(RTO,Retransmission Timeout),如果在该时间内没有收到接收方的ACK(确认应答),则认为数据包丢失,触发重传。

RTO(超时重传时间)如何计算?

TCP采用自适应超时计算,通常使用加权平均RTT(Round-Trip Time,往返时间)估算RTO:

其中:

  • RTT_sample:单次往返时间测量值
  • SRTT(平滑RTT):历史RTT的加权平均值
  • RTTVAR(RTT偏差):测量值的变化范围
  • α(一般设为0.125)

超时重传的局限性

  1. RTO计算存在延迟
    RTO通常较长(典型值在200ms以上),如果等到超时才重传,恢复速度会很慢。

  2. 适应性差
    TCP采用指数回退(Exponential Backoff)调整RTO,每次超时重传后,RTO值会成倍增长,这可能导致传输恢复变慢。

  3. 丢失检测滞后
    如果数据包丢失但仍有部分数据包被成功接收,TCP需要等待整个超时时间才能检测到丢失,这影响了整体吞吐量。

快速重传机制

什么是快速重传?

TCP采用累计确认(Cumulative Acknowledgment)机制,即接收方只会确认最后一个按序到达的数据包,如果某个数据包丢失,后续数据包仍然可能被接收,并导致ACK反复确认最后一个正确接收的包。

快速重传(Fast Retransmit)机制就是基于重复ACK触发的:

  • 发送方如果连续收到3个重复ACK(Duplicate ACK),就可以推测某个数据包可能丢失,而不必等待RTO触发超时重传。
  • 发送方立即重传该数据包,从而加速数据恢复。

快速重传的优点

  1. 减少超时等待,缩短恢复时间
    避免了等待完整RTO,能够更快地进行数据恢复。

  2. 不影响RTT计算
    由于没有发生真正的超时,TCP的RTT估算不会受到指数回退的影响,从而保持更稳定的RTO计算。

  3. 提高吞吐量
    及时重传丢失的数据包,减少了窗口阻塞,保证了数据流的连续性。

快速重传的触发条件

  • 发送方收到连续3个相同的ACK(Duplicate ACK)
  • 立即重传对应的丢失数据包,而不等待超时

快速重传和超时重传的对比

机制
触发条件
触发时机
影响
超时重传(Timeout Retransmission)
RTO过期未收到ACK
影响吞吐量
快速重传(Fast Retransmit)
收到3个重复ACK
提高传输效率

核心区别:快速重传是基于ACK反馈,而超时重传是基于定时器。

为什么TCP需要同时使用超时重传和快速重传?

虽然快速重传能提高效率,但它有局限性:

  1. 丢包发生在窗口开始位置时,可能不会触发3个重复ACK
  • 如果窗口很小(例如初始慢启动),可能无法积累足够的重复ACK。
  • 解决方案:必须依赖超时重传进行恢复。
  1. 多个数据包丢失时,快速重传可能不够用
  • 例如,大量数据丢失会导致TCP序列号乱序,可能不会出现3个重复ACK。
  • 解决方案:超时重传仍然是最后的兜底策略。
  1. ACK丢失导致误判
  • 例如,ACK丢失导致发送方无法收到3个重复ACK,就无法触发快速重传。
  • 解决方案:最终仍然需要超时重传来保证数据可靠交付。

快速重传的优化:快速恢复(Fast Recovery)

如果丢包导致窗口缩小,TCP可能会进入拥塞避免状态,这会影响传输速率。

快速恢复(Fast Recovery)

  • 在快速重传后,不进入慢启动,而是直接进入拥塞避免(Congestion Avoidance),避免窗口回缩过猛。
  • 主要用于Reno和NewReno版本的TCP。

示意流程

  1. 发生丢包,收到3个重复ACK,触发快速重传。
  2. 进入快速恢复模式,减小窗口而不进入慢启动。
  3. 收到新ACK后,恢复正常传输。

总结

  • 超时重传是TCP保证可靠性的基础,但它的等待时间长,影响吞吐量。
  • 快速重传能在3个重复ACK时立即恢复丢包,提高传输效率。
  • 两者结合使TCP能够既可靠又高效地传输数据,其中快速重传是优化吞吐量的关键,而超时重传是兜底策略。
  • 快速恢复(Fast Recovery)进一步优化了快速重传后的拥塞控制,防止窗口过度回缩,提高性能。

最终结论:快速重传不能完全替代超时重传,但它大幅优化了TCP丢包恢复的效率,两者相辅相成,使TCP既能高效传输,又能保证可靠性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号