Page 44 - Web性能权威指南
P. 44
那么,流量控制窗口(rwnd)和拥塞控制窗口(cwnd)的值多大合适呢?实际上,计
算过程很简单。首先,假设 cwnd 和 rwnd 的最小值为 16 KB,往返时间为 100 ms:
16 KB = (16 × 1024 × 8) = 131 072 bit
131 072 bit = 1 310 720 bit/s
0.1 s
1 310 720
1 310 720 bit/s = = 1.31 Mbit/s
1 000 000
不管发送端和接收端的实际带宽多大,这个 TCP 连接的数据传输速率不会超过 1.31
Mbit/s !想提高吞吐量,要么增大最小窗口值,要么减少往返时间。
类似地,知道往返时间和两端的实际带宽也可以计算最优窗口大小。这一次我们
假设往返时间不变(还是 100 ms),发送端的可用带宽为 10 Mbit/s,接收端则为
100 Mbit/s+。还假设两端之间没有网络拥塞,我们的目标就是充分利用客户端的 10
Mbit/s 带宽:
10 Mbit/s = 10 × 1 000 000 = 10 000 000 bit/s
10 000 000
10 000 000 bit/s = = 1221 KB/s
8 × 1024
1221 KB / s × 0.1 s = 122.1 KB
窗口至少需要 122.1 KB 才能充分利用 10 Mbit/s 带宽!还记得吗,如果没有“窗口
缩放(RFC 1323)”,TCP 接收窗口最大只有 64 KB。是不是该好好查查自己的客户
端和服务器设置啦?
好在窗口大小的协商与调节由网络栈自动控制,应该会自动调整。但尽管如此,窗
口大小有时候仍然是 TCP 性能的限制因素。如果你怎么也想不通在高速连接的客户
端与服务器之间,实际传输速度只有可用带宽的几分之一,那窗口大小很可能就是
罪魁祸首。要么因为某一饱和端通告的接收窗口很小,要么因为网络拥堵和丢包导
致拥塞窗口重置,更可能因为流量增长过快导致对连接吞吐量施加了限制。
高速局域网中的带宽延迟积
BDP 是往返时间和目标传输速度的函数。因此,往返时间不仅在高传输延迟中是
一个常见的瓶颈,就算在 LAN 中也可能是一个瓶颈!
要想在 1 ms 的往返时间内达到 1 GBit/s 的传输速度,拥塞窗口同样至少要有 122
KB。计算过程与前面类似,只不过要给目标速度多加几个零,再从往返时间中拿
掉同样多个零而已。
26 | 第 2 章