TCP流量控制--滑动窗口
流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
发送发的发送窗口不能超过接收方给出的接收窗口的数值。TCP的窗口单位是字节,不是报文段。
通过下图可以说明如何利用滑动窗口机制进行流量控制。
注意:
-
当窗口数为 0 时,发送者不能正常发送数据段,除非:
-
Urgent数据。比如,用户想杀掉远端机器上的进程的时候,可以发送数据
-
发送者可以发送一个字节的数据段,以便让接收者再次发送期待接收的字节号和窗口数(避免死锁)
-
-
持续定时器--用来避免死锁
-
死锁的产生
-
接收方发送了一个窗口数为零的确认(窗口更新),告诉发送方等待。
-
稍后,接收方空出了缓冲,发送更新窗口的数据段,但是,很不幸,该分组丢失啦!
-
现在,收发双方都在等待对方发送数据段过来,但永远等不到!死锁产生。
-
-
死锁解决方案:发送方在收到win=0时,启动一个持续定时器,如果定时器超时没有收到更新窗口,则发送一个探测数据段,引发对方重新发出更新窗口。
-
-
优化传输效率
-
优化发送端
-
尽量不发送数据含量小的数据段
-
缓存应用层的数据,达到一定量再发送
-
-
优化接收端(糊涂窗口综合征)
-
让接收方等待一段时间
-
或者,等到接收缓存已有一半空闲的空间
-
-