速读原著-TCP/IP(慢启动)

第20章 TCP的成块数据流

20.6 慢启动

迄今为止,在本章所有的例子中,发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的。但是如果在发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。

一些中间路由器必须缓存分组,并有可能耗尽存储器的空间。 [Jacobson 1988]证明了这种连接方式是如何严重降低了T C P连接的吞吐量的。

现在,T C P需要支持一种被称为“慢启动 (slow start)”的算法。该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。

慢启动为发送方的T C P增加了另一个窗口:拥塞窗口 (congestion window),记为c w n d。当与另一个网络的主机建立 T C P连接时,拥塞窗口被初始化为 1个报文段(即另一端通告的报文段大小)。每收到一个 A C K,拥塞窗口就增加一个报文段( c w n d以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

发送方开始时发送一个报文段,然后等待 A C K。当收到该A C K时,拥塞窗口从1增加为2,即可以发送两个报文段。当收到这两个报文段的 A C K时,拥塞窗口就增加为 4。这是一种指数增加的关系。

在某些点上可能达到了互联网的容量,于是中间路由器开始丢弃分组。这就通知发送方它的拥塞窗口开得过大。当我们在下一章讨论 T C P的超时和重传机制时,将会看到它们是怎样对拥塞窗口起作用的。现在,我们来观察一个实际中的慢启动。

一个例子
图2 0 - 8表示的是将从主机s u n发送到主机v a n g o g h . c s . b e r k e l e y . e d u的数据。这些数据将通过一个慢的S L I P链路,该链路是T C P连接上的瓶颈(我们已经在时间系列上去掉了连接建立的过程)。
速读原著-TCP/IP(慢启动)
我们观察到发送方发送一个长度为 5 1 2字节的报文段,然后等待A C K。该A C K在716 ms后收到。这个时间是一个往返时间的指示。于是拥塞窗口增加了 2个报文段,且又发送了两个报文段。当收到报文段5的A C K后,拥塞窗口增加为3。此时尽管可发送多达3个报文段,可是在下一个A C K收到之前,只发送了2个报文段。

在2 1 . 6节中我们将再次讨论慢启动,并介绍怎样采用另一种被称为“拥塞避免”的技术来作为通常的实现