TCP流量控制,简单来说就是让数据传输端传输的速率不要太快,让数据接收端来得及接收,利用滑动窗口机制可以很方便的在TCP连接上实现对数据传输端的流量控制。TCP的窗口单位是字节,不是报文段,数据传输端的发送窗口不能超过接收端给出的接收窗口的数值,流量控制的机制是控制丢包率,主要目的:让数据传输端了解数据接收端当前的接收能力,可灵活调整传输速率。
滑动窗口:
TCP采用大小可变的滑动窗口进行流量控制,窗口大小的单位是字节。
数据传输窗口在连接建立时由双方商定。但在通信的过程中,数据接收端可根据自己的资源情况,随时动态地调整对方的传输窗口大小。滑动窗口实例图如下图所示:
滑动窗口引进原由:
我们可以把窗口理解为缓冲区(但是有些窗口和缓冲区又不太一样)。
如果没有这些“窗口”,那么TCP每发送一段数据后都必须等到数据接收端确认后才能发送下一段数据,这样做的话TCP传输的效率实在是太低了。
解决的办法就是在发送端等待确认的时候继续发送数据,假设发送到第X个数据段是收到数据接收端的确认信息,如果X在可接受的范围内那么这样做也是可接受的。这就是窗口(缓冲区)引入的缘由。
滑动窗口:
A、数据接收端窗口 X
接收端缓冲区大小。接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。
B、拥塞窗口 Y
发送端缓冲区大小
C、数据传输窗口 Z
发送窗口的上限值 = Min [X, Y]
① 当 X < Y 时,是接收端的接收能力限制数据传输窗口的最大值。
② 当 Y < X 时,则是网络的拥塞限制数据传输窗口的最大值。