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