TCP 的重传机制

重传事件

引起 TCP 对报文进行重传的事件

  1. 超时
  2. 冗余 ACK

超时

TCP 为每个报文段设置一个计时器,当设置的重传时间到期,而发送方还未收到确认就重传报文段。

如何计算重传时间(RTO)

重传时间(RTO)由一个加权平均往返时间(RRTs)和 往返时间(RTT)的偏差的加权平均值(RTTD)决定
RTO=RTTS+4RTTDRTO = RTT_S + 4*RTT_D

RTTS={RTT(1a)(RTTS)+a(RTT) RTT_S = \begin{cases} RTT & 第一次测量 \\ (1-a) *(旧 RTT_S)+a*(新RTT样本)& 非第一次测量 \end{cases}

PS: a 位于(0~1),如果 a 趋向于 1,则表明 RTT 值更新快,反之更新慢。
推荐值:0.125

RTTD={1/2RTT(1b)(RTTS)+bRTTSRTT RTT_D = \begin{cases} 1/2*RTT & 第一次测量 \\ (1-b) *(旧 RTT_S)+b*|RTT_S-新RTT样本|& 非第一次测量 \end{cases}

PS: b 是小于 1 的系数,推荐值:0.25.

冗余 ACK

冗余 ACK 是指,之前已经发送过确认了,现在又发送。

举例:
TCP 的重传机制
我们看到 2 号报文丢失了,这是 3,4,5 被称为失序报文。根据 TCP 规定,如果期望的序号(这里是 2)小于失序序号,那么就发送一个冗余 ACK,这里发送三个(3,4,5)。发送方接到冗余 ACK 确认 2 号报文丢失,于是重传 2 号报文。