TCP流量控制
流量控制的原理
流量控制的功能就是让发送方的发送速率不要太快,以便让接收方来得及接收,因此可以说流量控制是一个速度匹配服务(匹配发送方的发送速率与接收方的读取速率)。
TCP利用滑动窗口机制来实现流量控制,滑动窗口的基本原理已在第3章中介绍过,这里要介绍的是TCP如何使用窗口机制来实现流量控制。TCP要求发送方维持一个接收窗口(rwnd),接收方根据当前接收缓存的大小,动态地调整接收窗口的大小,其大小反映了接收方的容量。接收方将其放在TCP报文段首部中的“窗口”字段,以通知发送方。发送方的发送窗口不能超过接收方给出的接收窗口值,以限制发送方向网络注入报文的速率。
图5.10说明了如何利用滑动窗口机制进行流量控制。假设数据只从A发往 B,而B仅向 A发送确认报文段,则B可通过设置确认报文段首部中的窗口字段来将rwnd 通知给 A。rwnd 即接收方允许连续接收的能力,单位是字节。发送方 A总是根据最新收到的rwnd 值来限制自己发送窗口的大小,从而将未确认的数据量控制在rwnd大小之内,保证A不会使B的接收缓存溢出。
持续计时器
TCP为每个连接设有一个持续计时器,只要发送方收到对方的零窗口通知,就启动持续计时器。若计时器超时,就发送一个零窗口探测报文段,而对方就在确认这个探测报文段时给出现在的窗口值。若窗口仍然为零,则发送方收到确认报文段后就重新设置持续计时器。零窗口探测报文段也有超时计时器,当零窗口探测报文段丢失后,同样会进行重传
TCP规定,即使接收窗口为0,也必须接受零窗口探测报文段、确认报文段以及携带有紧急数据的报文段
传输层和数据链路层的流量控制的区别是:传输层实现的是端到端,即两个进程之间的流量控制;数据链路层实现的是两个中间的相邻结点之间的流量控制。此外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的窗口大小则可以动态变化。
需要注意的是,TCP最大报文段长度MSS,并不是指整个TCP报文段的长度,而是指TCP报文段的数据载荷的长度,接受窗口可以容纳的字节数,也是指的数据载荷的长度,不包括首部。