(转载)通俗易懂讲解TCP流量控制机制(一看就懂的那种)

背景:

双方在通信的时候,发送方和接受方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来,这个时候会把处理不过来的数据缓存到缓存区里,如果缓存区满了,发送方还在发数据,那么就要丢弃这些数据,大量的丢包会浪费网络资源。

流量控制是为了让发送方发送速率不要过快,保证接收方来得及接受,防止分组丢失。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送数据。

如何控制:

接收方每次收到数据包,可以在发送确认报文的时候,同时告诉发送方自己的缓存区还剩多少是空闲的,我们也把缓存区的剩余大小称之为接受窗口的大小,用变量wein来表示接受窗口的大小。

发送方收到之后,变回调整自己的发送速率,也就是调整自己发送窗口的大小,当发送方收到接受窗口的大小为0时,发送方就会停止发送数据,防止出现大量丢包情况。

 发送方何时再继续发送数据

  当发送方停止发送数据后,该怎样才知道自己可以继续发送数据?

  当接受方处理好数据,接受窗口win>0,接受方发个通知报文去通知发送方,告诉他可以继续发送数据了。当发送方收到窗口大于0的报文时,就可以继续发送数据。

  但是会出现,可能接受方发出的通知报文在网络传输中丢了,那么发送方一直接受不到继续传输的指令,那么双方就陷入僵局了。

  为了解决这个通知报文被丢失,我们当发送方收到接受窗口win=0时,发送方会停止发送报文,并同时开启一个定时器,每隔一段时间就发一个测试报文去询问接收方,打听是否可以继续发送数据了,如果可以就告诉他此时接受窗口的大小;如果接受窗口大小还是0,则发送方再次刷新启动定时器。

TCP规定,即使设置零窗口,也必须接受以下几种报文:

1.零窗口探测报文

2.确认报文

3.携带紧急数据的报文段

附加问题:

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值