TCP提供流量控制服务来消除发送方使接收方缓存区溢出的可能性,因此可以说流量控制是一个速度匹配服务(匹配发送方的发送速率与接收方的读取速率)。
TCP提供一种基于滑动窗口协议的流量控制机制来实现流量控制,在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,这称为接收窗口rwnd(receive window ),即调整TCP报文段首部中的“窗口”字段值,来限制发送方向网络注入报文的速率。同时,发送方根据其对当前网络拥塞程序的估计而确定的窗口值,这称为拥塞窗口cwnd,其大小与网络的带宽和时延密切相关。
例如,在通信中,有效数据只从A发往B,而B仅向A发送确认报文,这时B可以通过设置确认报文段首部的窗口字段来将rwnd通知给A。rwnd即接收方运行连续接收的最大能力,单位是字节。发送方A总是根据最新收到的rwnd值来限制自己发送窗口的大小,从而将未确认的数据量控制在rwnd大小之内,保证A不会使B的接收缓存溢出。当然,A的发送窗口的实际大小取min{rwnd,cwnd(congestion window 拥塞窗口)}中最小值
下图说明了如何利用滑动窗口机制进行流量控制,设主机A向主机B发送数据,在连接建立时,B高速A:“我的接收窗口rwnd=400(字节)”
传输层和数据链路层的流量控制的区别时:传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻节点的流量控制。另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的则可以动态变化。