5.8.8 TCP流量控制
计算机网络的流量控制实际上是调节发送方的速率使得接收方能够及时处理的一个过程。
在TCP中采用的是大小可变的滑动窗口的方式进行流量控制,窗口大小的单位是字节。
如图
根据接收方的接收能力,通过接收窗口rwnd可以实现一个端到端的流量控制,接收端将接收窗口rwnd值放在TCP报文段首部中的窗口字段传送给发送方
如图
我们知道发送窗口在连接建立时建立起来(5.8.3 TCP连接管理(一)TCP连接建立)通信双方都将自己能够支持的最大报文段长度设定好并通过TCP报文段中的选项字段通知对方,接着就按照这个数据大小进行数据传送。
在通信的过程中,接收方可以根据自己的资源情况随时动态的调整自己的接收窗口并告诉发送方使得发送方的发送窗口和自己的接收窗口保持一致,这种由接收端控制发送端的做法在计算机网络中的流量控制经常使用到。
我们通过实际的TCP流量控制的例子来理解控制过程
如图
我们知道TCP采用的是大小可变的滑动窗口的方式进行流量控制根据图中的通信情况,假定主机A向主机B发送数据,双方商定的初始的窗口值是500,假定每一个报文段只能占100个字节长度,序号从初始的序号1开始,所以图中第一个箭头的序号Seq=1,那么问题是接收方对发送方进行了几次流量控制?
图中第一次接收方将窗口从初始的500个字节减成了400个字节
第二次再将窗口值从400个字节减为100个字节,当接收方收到序号Seq=101的重传报文段之后进行累积确认,当然发送端实际能够发送的报文段大小还得和拥塞窗口进行比较,取二者之间较小的值,拥塞窗口的作用我们后面说。
第三次将窗口值直接减成0,这种情况下就不允许发送方再发送数据了,这种状态持续到主机B重新发出一个新的更新窗口报文为止。当然在这种情况下发送方依然可以发送URG=1(5.8.2 TCP报文段首部格式)也就是紧急标志位置1的紧急数据,此时的窗口值WIN=0,就会启动TCP的持续定时器(5.8.7 TCP可靠传输(三)定时器),如果在定时器发生超时,发送方必须给接收方发出一个探寻的消息以询问接收方是否响应,如果接收方响应,就给发送方一个窗口更新的报文段,如果窗口的值大于零,发送方就又可以进行数据发送了。