超时重传时间的选择
TCP
的发送方在规定的时间内没有收到确认就要重传已发送的报文段。
对于超时重传时间,TCP
采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT。TCP
保留了RTT
的一个加权平均往返时间
R
T
T
s
RTT_s
RTTs(又称为平滑的往返时间)。
每当第一次测量到RTT
的样本时,
R
T
T
s
RTT_s
RTTs值就取为所测量到的RTT
样本值。但以后每测量到一个新的RTT
样本,就按下式重新计算一次
R
T
T
s
RTT_s
RTTs:
新
的
R
T
T
s
=
(
1
−
α
)
×
(
旧
的
R
T
T
s
)
+
α
×
(
新
的
R
T
T
样
本
)
新的RTT_s = (1 - \alpha) \times(旧的RTT_s) + \alpha \times(新的RTT样本)
新的RTTs=(1−α)×(旧的RTTs)+α×(新的RTT样本)
上式中,
0
≤
α
<
1
0 \le \alpha < 1
0≤α<1。若
α
\alpha
α很接近于零,表示新的
R
T
T
s
RTT_s
RTTs和旧的
R
T
T
s
RTT_s
RTTs相比变化不大,而对新的RTT样本影响不大。若
α
\alpha
α很接近于1,表示新的
R
T
T
s
RTT_s
RTTs和旧的
R
T
T
s
RTT_s
RTTs相比变化较大,而对新的RTT样本影响大。
超时计时器设置的 超时重传时间
R
T
O
RTO
RTO 略大于上面得出的加权平均往返时间
R
T
T
s
RTT_s
RTTs。
R
T
O
=
R
T
T
s
+
4
×
R
T
T
D
RTO = RTT_s + 4 \times RTT_D
RTO=RTTs+4×RTTD
R
T
T
D
RTT_D
RTTD是
R
T
T
RTT
RTT的偏差的加权平均值,它与
R
T
T
s
RTT_s
RTTs和新的
R
T
T
RTT
RTT样本之差有关。
当第一次测量时,
R
T
T
D
RTT_D
RTTD值取为测量到的
R
T
T
RTT
RTT样本值的一半,在以后的测量中,则使用下式计算加权平均的
R
T
T
D
RTT_D
RTTD:
新
的
R
T
T
D
=
(
1
−
β
)
×
(
旧
的
R
T
T
D
)
+
β
×
∣
R
T
T
S
−
新
的
R
T
T
样
本
∣
新的RTT_D = (1 - \beta) \times(旧的RTT_D) + \beta \times|RTT_S - 新的RTT样本|
新的RTTD=(1−β)×(旧的RTTD)+β×∣RTTS−新的RTT样本∣
这里
β
\beta
β是个小于1的系数。