Page 43 - Web性能权威指南
P. 43

最初,TCP 使用 AIMD(Multiplicative Decrease and Additive Increase,倍减加增)
                   算法,即发生丢包时,先将拥塞窗口减半,然后每次往返再缓慢地给窗口增加一
                   个固定的值。不过,很多时候 AIMD 算法太过保守,因此又有了新的算法。
                   PRR(Proportional Rate Reduction,比例降速)就是 RFC 6937 规定的一个新算法,
                   其目标就是改进丢包后的恢复速度。改进效果如何呢?根据谷歌的测量,实现新
                   算法后,因丢包造成的平均连接延迟减少了 3%~10%。
                   PRR 现在是 Linux 3.2+ 内核默认的拥塞预防算法。这又是你升级服务器的一个
                   理由!


                 2.3 带宽延迟积

                 TCP 内置的拥塞控制和预防机制对性能还有另一个重要影响:发送端和接收端理想
                 的窗口大小,一定会因往返时间及目标传输速率而变化。

                 为什么?我们知道,发送端和接收端之间在途未确认的最大数据量,取决于拥塞窗
                 口(cwnd)和接收窗口(rwnd)的最小值。接收窗口会随每次 ACK 一起发送,而
                 拥塞窗口则由发送端根据拥塞控制和预防算法动态调整。

                 无论发送端发送的数据还是接收端接收的数据超过了未确认的最大数据量,都必须停
                 下来等待另一方 ACK 确认某些分组才能继续。要等待多长时间呢?取决于往返时间!

                 •   BDP(Bandwidth-delay product,带宽延迟积)
                   数据链路的容量与其端到端延迟的乘积。这个结果就是任意时刻处于在途未确认
                   状态的最大数据量。

                 发送端或接收端无论谁被迫频繁地停止等待之前分组的 ACK,都会造成数据缺口
                (图 2-7),从而必然限制连接的最大吞吐量。为解决这个问题,应该让窗口足够大,
                 以保证任何一端都能在 ACK 返回前持续发送数据。只有传输不中断,才能保证最
                 大吞吐量。而最优窗口大小取决于往返时间!无论实际或通告的带宽是多大,窗口
                 过小都会限制连接的吞吐量。



                                      TCP܎
                                                                                  থ๭܋
                       ݀ໃ܋
                                                 ຕ਍ඍ੨                TCPඓණ

                 图 2-7:拥塞窗口小导致数据缺口


                                                                             TCP的构成   |   25
   38   39   40   41   42   43   44   45   46   47   48