TCP滑动窗口

2021/8/26 6:06:24

本文主要是介绍TCP滑动窗口,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

what:

  滑动窗口:是传输层为了进行流量控制而采取的一种措施。由接受方来告诉发送方自己窗口的大小,从而来控制发送方的速率。

  滑动窗口分为:发送窗口和接受窗口。

  滑动:发送方根据接受窗口来决定自己的发生窗口。发送窗口的位置会随着接受确认报文,而不断向后滑动;并且发生窗口的大小,也会随着接受窗口的大小而不断变化。

  接受窗口:由接收方来填,该值是接收方自己接受缓存还能容纳数据的大小。决定了发送方的发送窗口大小。

 

  具体见下图:

  

 

  当收到36的ack,并且发出46~51后的滑动窗口情况:

  

 

 

案例:

  滑动死锁及解决方案:

  现象:接收方现在接收窗口是0,发送了0窗口的报文。是后面接收窗口有不是0了,于是发了size=10的报文。但是size=10的报文丢了,就会出现发送端一直等接收端的非0窗口通知,而接收端一直等数据的到来。

  方案:TCP为每对连接建一个持续计时器。只要TCP一方收到0窗口的通知,就启动持续计时器。若持续计时器设置的时间到了,就发送一个探测报文(仅携带1字节的数据),接收方收到探测报文后,在确认该报文时,将自己的窗口值发回去。

 

  糊涂窗口症:

  现象:接收的缓存慢以后,接受进程1次只读1个数据。然后向发送方发送1个窗口的确认报文,后面发送方再发送1个数据。这样继续,每次都只发送1个数据效率会非常差。

  方案:延迟ACK或者数据发送。对接收方,延迟ACK的发送,在这段时间内接收窗口可能放大。对发送方,可以不理会小窗口通知(不马上发小包,延迟一会),从而小包可能变大。

  

 



这篇关于TCP滑动窗口的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程