面试官提问:
请解释 TCP 中的 RTT、RTO 与超时重传机制,它们之间有什么关系?什么情况下会触发重传?
应聘者参考回答:
在 TCP 协议中,为了保证可靠传输,发送方会为每个发送的数据段设置一个超时时间,一旦在该时间内未收到 ACK,就会触发重传机制。
一、RTT(Round-Trip Time,往返时延)
- RTT 表示发送方发送数据段到收到接收方确认 ACK 所需的时间;
- 该时间是测量 TCP 报文在网络中一个完整往返时间;
- RTT 是动态变化的,受到网络拥堵、链路时延等影响,不稳定。
二、RTO(Retransmission Timeout,重传超时时间)
-
RTO 是 TCP 重传数据的超时时间;
-
如果超时时间到达而仍未收到 ACK,发送方会重发数据段;
-
RTO 通常根据 RTT 动态计算,一般满足如下关系:
RTO ≈ smoothed_RTT + 4 * RTT_variation
-
在连续重传失败的情况下,RTO 会呈指数增长:
- 第一次超时:重传等待 1 RTT;
- 第二次超时:等待 2 RTT;
- 第三次超时:4 RTT,依此类推(1, 2, 4, 8 RTT…)。
-
TCP 实现中通常设置最大重传次数(例如 12 次),超过次数后连接将被关闭。
三、引发超时重传的常见原因
- 数据包未到达接收方,如链路拥塞或丢包;
- ACK 丢失:数据已达接收方,但确认报文丢失;
- 接收方主动丢弃数据,例如窗口大小为 0,不可接收。
四、总结
RTT 是基础测量数据,RTO 是基于 RTT 推导出的超时判定标准。TCP 使用超时重传机制确保即使在不可靠的网络环境下也能保证数据最终传达,配合快速重传与拥塞控制提升整体性能与稳定性。
😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。