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 章
   39   40   41   42   43   44   45   46   47   48   49