重传事件
引起 TCP 对报文进行重传的事件
- 超时
- 冗余 ACK
超时
TCP 为每个报文段设置一个计时器,当设置的重传时间到期,而发送方还未收到确认就重传报文段。
如何计算重传时间(RTO)
重传时间(RTO)由一个加权平均往返时间(RRTs)和 往返时间(RTT)的偏差的加权平均值(RTTD)决定
RTO=RTTS+4∗RTTD
RTTS={RTT(1−a)∗(旧RTTS)+a∗(新RTT样本)第一次测量非第一次测量
PS: a 位于(0~1),如果 a 趋向于 1,则表明 RTT 值更新快,反之更新慢。
推荐值:0.125
RTTD={1/2∗RTT(1−b)∗(旧RTTS)+b∗∣RTTS−新RTT样本∣第一次测量非第一次测量
PS: b 是小于 1 的系数,推荐值:0.25.
冗余 ACK
冗余 ACK 是指,之前已经发送过确认了,现在又发送。
举例:

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