TCP的流量控制
1、利用滑动窗口实现流量控制
流量控制(flow control)就是让发送方的发送速率不要太快,要让发送方来得及接收。
- 利用滑动窗口实现流量控制:
利用滑动窗口可以很方便地在TCP连接上实现对发送方的流量控制。(CRE:接收方会限制发送方的窗口值)
- 死锁和持续计时器:
A的窗口值为被B设置为零,然后B向A发送的非零窗口通知在传送过程中丢失了,就会造成死锁。此时A一直等待B的非零窗口通知,B一直等待A发送的数据。
解决方法是TCP为每一个连接设有一个持续计时器(persistence timer)。一旦有一方收到零窗口通知,就启动计时器,计时器到期发送一个探测报文段,对方确认这个探测报文段时给出现在的窗口值。
2、TCP传输效率
可以用不同的机制来控制TCP报文段的发送时机。
第一种机制是当缓存中存放的数据量达到MSS字节时,就组装成一个报文段发送出去。
第二种机制是由发送方的应用进程指明要求发送报文段,即TCP支持的推送(push)操作。
第三种机制是发送方的一个计时器到期,这时就把当前已有的缓存数据装入报文段发送出去。
- 在TCP的实现中广泛使用Nagle算法:
当数据逐字节被送到TCP发送缓存,则发送方就把第一个数据字节先发送出去,把随后到达的数据进行缓存。
当收到对前一个报文段的确认之后才把发送缓存中的数据组装成报文段发送出去,同时继续对随后到达的数据进行缓存。
- 糊涂窗口综合征(silly window syndrome):
TCP接收方的缓存已满,而交互式应用一次只读取1个字节。这样会导致窗口值一直限制在1,只能一字节一字节地发送数据,网络效率很低。
要解决这个问题,可以让接收方等待一段时间,直到接收缓存已有一定空间,才向发送方通知当前窗口大小。
(END)