TCP协议的滑动窗口是如何实现流量控制的?

2025/8/27 11:35:00

TCP作为一种面向连接的传输控制协议,在数据传输时,通过三次握手确保双方收发能力正常,数据正常传输。

若发送方在每次发送数据分段后都必须等待确认,那么其吞吐量将会显著降低。因此,在实际的面向连接操作中,通常允许发送方连续发送多个代码片段,从而引入了滑动窗口的概念,并进行了三次握手以确保连接的顺畅。

 1_副本.png

1、什么是滑动窗口?
滑动窗口是TCP协议中的一个重要机制,用于控制、管理发送方和接收方之间的数据传输。是TCP实现流量控制和拥塞控制的基础。滑动窗口机制允许发送方和接收方之间实现流量控制和可靠性传输。发送方可以持续发送数据而不需要等待每个数据段的确认,从而提高传输效率。接收方可以根据自身处理能力和缓冲区空间调整窗口大小,从而控制发送方窗口大小。

2、滑动窗口的工作原理
(1)协商初始化窗口大小。在建立TCP连接时,双方协商并初始化流量控制的参数。其中包括窗口大小(通常是以字节为单位的接收缓冲区大小)和初始的拥塞窗口cwnd大小(swnd=min(cwnd, rwnd))。
(2)发送窗口滑动:发送方发送一个数据段并收到ACK确认应答后,将发送窗口向前滑动,使其离开已确认的数据。这样,发送方可以继续发送新的数据,只要它在滑动窗口范围内。
(3)接收方更新确认号:接收方根据接收到的报文段的序列号确定已成功接收的数据字节范围,并将确认号设置为下一个期望接收的字节的序列号(通常为接受到的报文段下一位)。
(4)接收方更新、通告接收窗口大小:接收方根据已成功接收的数据字节数和初始窗口大小计算可用的接收窗口大小。并接收方将新的接收窗口大小通过 TCP 报文段中的窗口大小字段通告给发送方。这个值告诉发送方接收方的当前可用缓冲区空间。
(5)动态调整窗口大小:接收方通过ACK确认号通知发送方已成功接收的数据。发送方可以根据接收方通告的窗口大小进行数据发送控制——如果接收方的窗口变大,发送方可以发送更多的数据;如果接收方的窗口变小,发送方需要适应减少的窗口大小。
(6)流量控制:通过滑动窗口机制,接收方可以动态调整窗口大小以限制发送方的数据发送速率。接收方通过通告窗口大小,告知发送方自己的可用缓冲区空间。发送方根据接收方的窗口大小调整发送速率,确保不会超出接收方的处理能力。

3、TCP协议如何使用滑动窗口机制来控制流量?
TCP协议使用滑动窗口机制来控制流量,以确保发送方和接收方之间的数据传输速度相匹配,避免数据丢失和拥塞。其中,主要的控制流量的机制包括以下几点:
(1)慢启动
在TCP连接刚建立时,发送方会以较小的发送窗口开始传输数据,然后逐渐增加发送窗口的大小,以便测试网络的拥塞情况。这个阶段称为慢启动,目的是避免网络突然出现拥塞。
(2)拥塞避免
在慢启动阶段之后,发送方会进入拥塞避免阶段。发送方会根据网络的拥塞程度来动态调整发送窗口的大小,以保持网络流量的稳定性,避免网络拥塞。
(3)拥塞控制
如果网络出现拥塞,接收方会发送拥塞通知给发送方,告知网络状况。发送方会根据接收到的拥塞通知来减小发送窗口的大小,以降低网络拥塞的程度。这个过程称为拥塞控制,用于维护网络的稳定性和可靠性。