Linux网络编程面试--滑动窗口的实现机制

来源:互联网 发布:阿里云代金券转让 编辑:程序博客网 时间:2024/06/07 14:04


Linux网络编程面试--滑动窗口的实现机制


TCP发送方的窗口可以划分成四个部分:

1、已经发送并且确认的TCP段;

2、已经发送但是没有确认的TCP段;

3、未发送但是接收方准备接收的TCP段;

4、未发送并且接收方也为准备接受的TCP段。


TCP接受方的窗口可以划分成四个部分:

1、已经接收并且已经确认的TCP段;

2、已经接收但是没有确认的TCP段;

3、还未接收但是发送方已经发送的TCP段;

4、还未接收但是发送也不允许发送的TCP段。

 




滑动窗口实现面流的可靠性:

最基本的传输可靠性来源于“确认重传”机制。

TCP的滑动窗口的可靠性也是建立在“确认重传”基础上的。

发送窗口只有收到对端对于本段发送窗口内字节的ACK确认,才会移动发送窗口的左边界。

接收窗口只有在前面所有的段都确认的情况下才会移动左边界。当在前面还有字节未接收但收到后面字节的情况下,窗口不会移动,并不对后续字节确认。以此确保对端会对这些数据重传。


 
滑动窗的流控特性:

TCP的滑动窗口是动态的,我们可以想象成小学常见的一个数学题,一个水池,体积V,每小时进水量V1,出水量V2。当水池满了就不允许再注入了,如果有个液压系统控制水池大小,那么就可以控制水的注入速率和量。这样的水池就类似TCP的窗口。应用根据自身的处理能力变化,通过本端TCP接收窗口大小控制来对对对端的发送窗口流量限制。

应用程序在需要(如内存不足)时,通过API通知TCP协议栈缩小TCP的接收窗口。然后TCP协议栈在下个段发送时包含新的窗口大小通知给对端,对端按通知的窗口来改变发送窗口,以此达到减缓发送速率的目的。


0 0
原创粉丝点击