5.7.1 利用滑动窗口实现流量控制
- 流量控制:让发送方的发送速率不要太快,使接收 方来得及接收。
- 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
1 .利用可变窗口进行流量控制举例
可能发生死锁:
2. 持续计时器
持续计时器:只要TCP连接的一方收到对方的零窗口通知,就启动该持续计时器。
- 若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据)对方在确认这个探测报文段时给出当前窗口值。
- 若窗口仍然是零,收到这个报文段的一方就重新设置持续计时器。
- 若窗口不是零,则死锁的僵局就可以打破了。
5.7.2 TCP的传输效率
控制TCP发送报文段的时机:三种机制
- TCP维持一个变量,它等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去。
- 由发送方的应用进程指明要求发送报文段,即TCP支持的推送操作。
- 发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过MSS)发送出去。
如何控制TCP发送报文段的时机仍然是一个较为复杂的问题。
1. 糊涂窗口综合征
糊涂窗口综合征:每次仅发送一个字节或很少几个字节的数据时,有效数据变得很低的现象
发送方糊涂窗口综合征:
-
发送方TCP每次接收到一字节的数据后就发送。
-
发送一个字节需要形成41字节长的IP数据报。效率很低。
-
解决方法:使用Nagle算法。
当传输数据存在大量交互数据时,nagle算法可以有效减少网络中的报文段个数。
接收方糊涂窗口综合征:
解决方法:让接收方等待一段时间,使得或者接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。只要出现这两种情况之一,接收方就发出确认报文,共向发送方通知当前的窗口大小。
上述两种方法可配合使用,使得在发送方不发送很小的报文段的同时,接收方也不要在缓存刚刚有了一点小的空间就急忙把这个很小的窗口大小信息通知给发送方。
参考资料:《计算机网络(第8版)》—— 谢希仁。