为什么要有流量控制?
双端通信的时候,发送方发送数据速度和接收方处理数据速度不一定相等;
如果发送过快,接收方处理不过来,接收方只能把数据存在缓冲区,缓冲区满了后再收到数据就只能丢弃;
所以需要控制发送方发送数据的速率,让接收方与发送方处于一种动态的平衡中才好。
对于发送方发送速率的控制,称为流量控制。
滑动窗口大小是如何确定的?
发送数据的一方收到对方发送的ACK报文,其报文头中的窗口大小表示对方的缓冲区大小还能存放多少字节的数据,发送方拿这个窗口大小与本身的拥塞窗口大小在一起取最小值,作为自己滑动窗口的大小。
达到:
- 避免对方缓冲区存不下发送过多的数据而丢弃,进而浪费网络带宽和流量
- 避免产生网络拥塞
滑动窗口中的内容
滑动窗口内包含两类报文
- 已发送但未收到确认
- 允许发送但尚未发送
滑动窗口什么时候开始滑动?
窗口左侧的报文收到了ACK报文确认,窗口就往右滑动
如果发送端滑动窗口大小为0,不发送数据了会怎样?
实际上,为了避免此问题的产生,发送端主机会时不时的发送一个叫做窗口探测的数据段,此数据段仅包含一个字节来获取最新的窗口大小信息。