TCP/IP / 如何进行流量控制( flow control )?

本文详细解析了TCP协议中的流量控制原理,包括滑窗结构的作用、接收方与发送方如何通过滑窗机制实现数据流的调节,以及在零窗口情况下的处理策略。

目录

零、答案

一、滑窗结构

二、流量控制

三、零窗口


零、答案

接收端告诉发送端,自己现在能够接收的包的数量,发送端根据该数据来调整自己频率,从而完成了 TCP 的流量控制。

一、滑窗结构

发送方滑窗可以分为下面两个部分。offered window 为整个滑窗的大小。

 

接收方滑窗可分为三个部分:

 

可以看到,接收方的滑窗相对于发送方的滑窗多了一个 " Received ACKed Not Sent to Proc " 的部分。接收方接收到的文本流必须等待进程来读取。如果进程正忙于做别的事情,那么这些文本流即使已经正确接收,还是需要暂时占用接收缓存。

当出现上述占用时,滑窗的可用部分(也就是图中 advertised window )就会缩水。这意味着接收方的处理能力下降。如果这个时候发送方依然按照之前的速率发送数据给接收方,接收方将无力接收这些数据。

二、流量控制

如果发送端发送太快,导致接收端来不及接收,就容易造成丢失数据。流量控制是指接收方将 advertised window 的大小通知给发送方,从而指导发送方修改 offered window 的大小。接收方将该信息放在TCP头部的 window size 区域:

发送方在收到window size的通知时,会调整自己滑窗的大小,让 offered windowadvertised window 相符。这样,发送窗口变小,文本流发送速率降低,从而减少了接收方的负担。

三、零窗口

        advertised window 大小有可能变为0,这意味着接收方的接收能力降为 0 。发送方收到大小为 0 的 advertised window 通知时,停止发送。

当接收方经过处理,再次产生可用的 advertised window 时,接收方会通过纯粹的 ACK 回复来通知发送方,让发送方恢复发送。然而,ACK回复的传送并不是可靠的。如果该ACK回复丢失,那么TCP传输将陷入死锁(deadlock)状态。

为此,发送方会在零窗口后,不断探测接收方的窗口。窗口探测( window probe )时,发送方会向接收方发送包含1 byte文本流的 TCP 片段,并等待 ACK 回复( 该ACK回复包含有 window size )。由于有1 byte的数据存在,所以该传输是可靠的,而不用担心 ACK 回复丢失的问题。如果探测结果显示窗口依然为 0,发送方会等待更长的时间,然后再次进行窗口探测,直到TCP传输恢复。

 

(SAW:Game Over!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值