1. 持续定时器
在我们学习滑动窗口协议的时,遇到过窗口大小为 0 的情况。接收方通告一个 0 窗口给接收方,可以用来阻止发送方继续发送数据。
如果在某个时候,接收方缓冲区有空间了,于是发送了一个非 0 窗口的通告给接收方,不幸的是这个通告丢失了,而发送方却还在死等接收方的非 0 窗口通告,接下来就成了死锁。
为了防止这种情况,发送方只要接收到了 0 窗口通告,就开启一个持续定时器(persist timer),周期性的向接收方发送 1 字节的 0 窗口探测报文。
2. 一个 0 窗口探测报文段的例子
这个数据包是我在 windows 上抓取的,见图 1.
图1 0窗口探测报文
从图 1 中我们可以看到,注意观察红色框框那一行,红色框框是收到 0 窗口通告后,过了多久发送 0 窗口探测报文。
第一次经过约 0.3 秒,第二次 0.6 秒,第三次 1.2 秒,很明显这也是使用了指数退避算法。
3. 总结
- 知道持续定时器的作用