TCP拥塞响应函数指吞吐与丢包率之间的一个关系,传统Reno-TCP执行以下两个操作:1)将丢包视为网络发生了拥塞,将拥塞窗口降低一半;2)在拥塞避免阶段,每个RTT周期,拥塞窗口增加1。以上两者决定了在丢包率和平均吞吐之间形成了一个简单的关系,这里的丢包率和吞吐都是指的一个稳定的状态值,不考虑丢包率急剧变化的情况。
由于现实中传统TCP实现的一些具体情况,导致其对拥塞的反应比理论上要缓慢,例如较长的超时时间、SlowStart恢复算法、发送窗口限制以及延时ACK等,都将导致实际的窗口增长相比理论上要慢,所以,这里给出的是拥塞窗口的一个上限值。
以下假设在这样一个TCP(稳定的丢包率)模型中,拥塞窗口增长到一定值W时,发生拥塞,假定丢失了一个报文,并且,在增长到W值之前没有发生过丢包。按照以上的介绍,传统TCP发生丢包之后,TCP发送端将拥塞窗口减少一半(W/2),之后,每个RTT周期拥塞窗口加1(W/2 + 1),一直到再次增加到之前丢包时的窗口值W。TCP发送端至少需要发送如下的报文量:
W 2 + ( W 2 + 1 ) + . . . + W ≈ 3 8 W 2 (1) \tag{1} \frac{W}{2} + \left( \frac{W}{2} + 1 \right) + ... + W ≈ \frac{3}{8}W^{\smash{2}} 2W+(2W+1)+...+W≈83W2(1)
并且,要想恢复到窗口值W,在发送以上数量的报文时,不能发生丢包,即丢包率不能高于以上值的倒数(丢包率p上限):
p ≤ 8 3 W 2 (2) \tag{2} p \le \frac{8}{3W^{2}} p≤3W28(2)
由 (2)可得:
W ≤ 8 3 p (3) \tag{3} W \le \sqrt{\frac{8}{3p}} W≤3p8(3)
以上公式 (3)给出了在一个稳定的丢包率为p的网络中,传统TCP所能达到的最大拥塞窗口W。那么,此段时间内的平均窗口大小为:
W ≤ 4 3 p (4) \tag{4} W \le \sqrt{\frac{4}{3p}} W≤3p4(4)
取近似值,得到如下的传统TCP响应函数:
W ≤ 1.2 p (5) \tag{5} W \le \frac{1.2}{\sqrt{p}} W≤p1.2(5)
公式5给出了平均拥塞窗口值w(单位是MSS大小的报文数量),与丢包率p的关系。如下表所示,列举了一些典型值。
丢包率p | 拥塞窗口W | RTTs Between Losses |
---|---|---|
10^-2 | 12 | 8 |
10^-3 | 38 | 25 |
10^-4 | 120 | 80 |
10^-5 | 379 | 252 |
10^-6 | 1200 | 800 |
10^-7 | 3795 | 2530 |
10^-8 | 12000 | 8000 |