目录1 前言2 TCP超时重传机制概述3 TCP超时重传核心要素3.1 往返时间RTT—计算基础3.2 重传超时时间RTO—触发时机3.3 Karn 算法—采样规则3.4 指数退避—节奏控制3.5 重传次数—终止条件4 三个参数的协同工作5 总结1 前言TCP传输控制协议作为面向连接、可靠的传输层协议其核心目标是确保数据在不可靠的IP网络中准确、完整地送达。而超时重传机制正是TCP实现“可靠传输”的关键技术之一——当数据发送后若未收到对方的确认信息TCP会通过超时触发重传弥补网络延迟、丢包等问题带来的传输漏洞。2 TCP超时重传机制概述TCP 超时重传机制的基本原理是发送方在发送数据后启动一个定时器若在定时器超时前收到接收方的确认应答ACK则正常继续发送若超时仍未收到 ACK则认为数据包丢失触发重传。这一机制的核心目的是通过重传丢失的数据包确保接收方能够完整、准确地接收到发送方发出的所有数据是 TCP 协议可靠传输的核心保障。3TCP超时重传核心要素超时重传机制主要由三个核心要素构成RTO重传超时时间决定发送方要等多久才触发重传指数退避控制持续未收到确认时每次重传的等待时间如何逐步延长重传次数限制最多重传几次后才会放弃连接3.1往返时间RTT—计算基础RTTRound-Trip Time是指数据从发送方发出到收到对应确认ACK的时间间隔即包的往返时间。由于网络状况不断变化RTT 也会随之波动。为了平滑 RTT 的瞬时波动TCP 采用加权平均的方式计算 SRTT平滑 RTT新的 SRTT (1 - α) × 旧的 SRTT α × 新的 RTT 采样值其中 α 的推荐值为 1/80.125该取值由 RFC 6298 规定。通过这种方式计算出的 RTT 更加平滑能够更好地反映网络的平均状况。3.2重传超时时间RTO—触发时机RTORetransmission Timeout是发送方在发送数据后等待确认的最长时间。若超过此时间仍未收到 ACK则触发重传。RTO 不是固定值而是根据 RTT 动态计算。根据 RFC 6298 的建议RTO 的计算公式为RTO SRTT 4 × RTTd。其中SRTT 为平滑后的加权平均往返时间RTTd 为 RTT 偏差的加权平均计算公式为新的 RTTd RTTd β × (|RTT_sample - SRTT| - RTTd)。β 的推荐值为 1/40.25。引入 RTTd 的目的是让 RTO 能够适应网络的抖动——网络越不稳定RTTd 越大RTO 也相应增大从而避免因正常波动而误判丢包。3.3Karn 算法—采样规则在实际的网络传输中当一个重传包收到 ACK 时会出现一个棘手的问题这个 ACK 究竟是对第一次发送的数据包的确认还是对重传包的确认呢由于无法准确判断如果直接用这个不可靠的 RTT 样本去更新 RTO就会导致 RTO 计算错误进而影响整个超时重传机制的性能。为了解决这一难题Karn 提出了一个算法。该算法的核心思想是当发生重传时不采用此次重传的往返 RTT 时间来更新 RTO。也就是说在重传期间暂时忽略这个可能不准确的 RTT 样本。然而如果仅仅这样做在网络拥塞环境中设备仍可能会因为按照原来的 RTO 时间不停地进行重传从而加重网络负担。因此需要对其改进典型的方法是将旧的 RTO 时间乘以 2 作为新的 RTO 时间。这样可以在一定程度上避免因频繁重传而导致的网络拥塞加剧。3.4指数退避—节奏控制如果第一次重传后发送方仍未收到 ACK这可能意味着网络出现了拥塞或者丢包情况较为严重。此时如果发送方仍然以相同的频率进行重传就像在拥堵的道路上不断鸣笛催促不仅无法解决问题反而会进一步加剧网络的拥塞程度导致更多的数据包丢失和传输延迟。为了避免这种情况的发生TCP 采用了指数退避机制。该机制规定新的 RTO 为旧的 RTO 的 2 倍。通过这种方式发送方会逐渐延长重传的间隔时间。3.5重传次数—终止条件为了避免发送方陷入无限次重传的困境TCP 设定了重传次数这一参数限制了发送方最多可以进行重传的次数。当重传次数达到设定的上限后发送方会认为该连接已经无法正常工作从而放弃连接。重传次数的设定需要综合考虑多种因素如网络的可靠性、应用的实时性要求等。在网络可靠性较低的环境中可以适当增加重传次数以提高数据传输的成功率而对于实时性要求较高的应用过高的重传次数可能会导致延迟过大影响用户体验因此需要合理控制重传次数。4 三个参数的协同工作用一个完整的丢包场景来串联三个要素的作用1. 数据包发出启动 RTO 定时器假设初始 RTO 200ms2.200ms 后未收到 ACK → 触发第一次重传指数退避生效RTO 400ms3.400ms 后仍未收到 → 第二次重传RTO 800ms4. 持续退避直到达到 RTO 上限如 120 秒5.每重传一次重传计数器 16.当重传次数达到上限时TCP 判定连接死亡断开连接5 总结TCP 超时重传机制通过三个核心要素的协同在可靠性与效率之间取得了平衡RTO 根据网络动态计算避免因正常波动而误判丢包指数退避 在拥塞时主动降低重传频率防止网络状况进一步恶化重传次数 设置合理上限避免在网络故障时无限等待三者的配合使得 TCP 能够在复杂的网络环境中既保证数据的可靠传输又兼顾网络的整体稳定性。