窗口和流量控制

一、窗口

TCP/IP是全双工传输(能发送数据也能接收数据),所以通信两方都有两个滑动窗口。
一个用于接收数据的,接收窗口
一个用于发送数据的,拥塞窗口(发送窗口)
能接收窗口大小的通知,称之为窗口通告。

窗口的大小是不固定的,是可以根据某种算法动态调整的。
接收方发送ACK报文的时候,会把自己的接收窗口大小告诉给发送方,发送方根据接收方窗口大小设置自己的发送窗口大小。
但是因为接收方在发送完ACK后,就开始处理缓冲区的数据了,所以一般情况下接收窗口>=发送窗口。

二、流量控制

通信的时候,发送方发送包的速率跟接收方接收包的速率是不等的。
当发送方速率>接收方速率的时候,接收方只能把来不及处理的数据和接收的失序的数据放在一个缓冲区离。
当缓冲区满了后,后面收到的包只能是扔掉。
所以需要控制发送速率和接受速率在一个动态平衡的状态下,这个就叫流量控制。

三、如何控制

接收方每次在收到包后会发生ACK报文,同时告诉自己的缓冲区大小还有多少,这里的缓冲区大小就是接收窗口的大小,用win表示。
当发送窗口收到接收窗口大小为0 的时候,就会暂停发包,避免包的丢失。

四、暂停发包后如何重新发包

1、当win>0的时候,接收方发通知报文(窗口通告)给发送方。发送方接收通知报文后恢复发包。
但是存在通知报文丢失的风险。
2.发送方设定一个定时器,每隔一段时间发测试报文询问接收方的win大小,win还是为0就刷新启动定时器,不为0就恢复发包。

Guess you like

Origin blog.csdn.net/weixin_43859562/article/details/121702518