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

解决方案就是慢启动,即在分组被确认后增大窗口大小,慢慢地启动!最初,cwnd
                 的值只有 1 个 TCP 段。1999 年 4 月,RFC  2581 将其增加到了 4 个 TCP 段。2013
                 年 4 月,RFC 6928 再次将其提高到 10 个 TCP 段。

                 新 TCP 连接传输的最大数据量取 rwnd 和 cwnd 中的最小值,而服务器实际上可以
                 向客户端发送 4 个 TCP 段,然后就必须停下来等待确认。此后,每收到一个 ACK,
                 慢启动算法就会告诉服务器可以将它的 cwnd 窗口增加 1 个 TCP 段。每次收到 ACK
                 后,都可以多发送两个新的分组。TCP 连接的这个阶段通常被称为“指数增长”阶
                 段(图 2-3),因为客户端和服务器都在向两者之间网络路径的有效带宽迅速靠拢。



                                                   ݴፇ۪฿DŽ۪ԈDž
                       ᆛ෗ش੨ٷၭѢ
                                       ᆛ෗੦዆
                                                                ׯԠ३ณ



                                     ኸຕሺ׊
                       TCP ܎ѣ
                                                                     ᆛ෗ᇨݞ


                                                      ྫݓْຕ

                 图 2-3:拥塞控制和拥塞预防

                 为什么知道有个慢启动对我们构建浏览器应用这么重要呢?因为包括 HTTP 在内的
                 很多应用层协议都运行在 TCP 之上,无论带宽多大,每个 TCP 连接都必须经过慢
                 启动阶段。换句话说,我们不可能一上来就完全利用连接的最大带宽!

                 相反,我们要从一个相对较小的拥塞窗口开始,每次往返都令其翻倍(指数式增
                 长)。而达到某个目标吞吐量所需的时间,就是客户端与服务器之间的往返时间和初
                 始拥塞窗口大小的函数(公式 2-1)。

                 公式 2-1:cwnd 大小达到 N 所需的时间

                                                        2(    N     )
                                      ้क़ = ྫݓ้क़ × log     ؛๔ cwnd


                 下面我们就来看一个例子,假设:

                 •   客户端和服务器的接收窗口为 65 535 字节(64 KB);


                                                                             TCP的构成   |   19
   32   33   34   35   36   37   38   39   40   41   42