我们已经看到 T C P通过让接收方指明希望从发送方接收的数据字节数(即窗口大小)来进行流量控制。如果窗口大小为 0会发生什么情况呢?这将有效地阻止发送方传送数据,直到窗口变为非0为止。
可以在图2 0 - 3中看到这种情况。当发送方接收到报文段 9时,它打开被报文段 8关闭的窗口并立即开始发送数据。 T C P必须能够处理打开此窗口的 A C K(报文段9)丢失的情况。A C K的传输并不可靠,也就是说, T C P不对A C K报文段进行确认, T C P只确认那些包含有数据的A C K报文段。
如果一个确认丢失了,则双方就有可能因为等待对方而使连接终止:接收方等待接收数据(因为它已经向发送方通告了一个非 0的窗口),而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,发送方使用一个坚持定时器 (persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查 ( w i n d o w p r o b e )。在本章中,我们将讨论窗口探查和坚持定时器,还将讨论与坚持定时器有关的糊涂窗口综合症。
在连接的一方需要发送数据但对方已通告窗口大小为0时,就需要设置T C P的坚持定时器。发送方使用与第2 1章类似的重传间隔时间,不断地探查已关闭的窗口。这个探查过程将一直持续下去。
当运行一个例子来观察坚持定时器时,我们还观察到了 T C P的避免出现糊涂窗口综合症的现象。这就是使 T C P避免通告小的窗口大小或发送小的报文段。在我们的例子中,可以观察到发送方和接收方为避免糊涂窗口综合症所使用的策略。