TCP的滑动窗口与接收窗口、发送窗口、拥塞窗口之间的关系与动态调整机制详解
字数 2275 2025-12-10 01:58:10
TCP的滑动窗口与接收窗口、发送窗口、拥塞窗口之间的关系与动态调整机制详解
1. 描述
TCP通过滑动窗口机制实现可靠传输、流量控制和拥塞控制。其核心依赖四个关键窗口:发送窗口(Send Window, SWND)、接收窗口(Receive Window, RWND)、拥塞窗口(Congestion Window, CWND) 和滑动窗口(有效发送窗口)。这四个窗口的交互决定了TCP发送数据的速率和效率。它们的关系是:有效发送窗口 = min(拥塞窗口, 接收窗口)。该机制必须动态适应网络状况和接收方处理能力,确保高效可靠的数据传输。
2. 四个核心窗口的定义与作用
2.1 发送窗口(SWND)
- 定义:发送方维护的一个抽象概念,表示允许连续发送但未经确认的字节序号范围。
- 结构:由三个指针界定:
SND.UNA:已发送未确认的第一个字节序号。SND.NXT:下一个要发送的字节序号。SND.WND:从SND.UNA开始,允许发送的最大窗口大小(由接收方通告)。
- 意义:
SWND = [SND.UNA, SND.UNA + SND.WND)。只有序号在此范围内的数据可以发送或重传。
2.2 接收窗口(RWND)
- 定义:接收方通过TCP首部
Window字段通告给发送方的一个值,表示接收缓冲区剩余可用空间大小。 - 作用:流量控制的关键。发送方不得发送超过
RWND的数据,防止接收方缓冲区溢出。 - 动态性:
RWND随应用层读取数据而增大,随数据到达而减小。每次ACK都会携带最新的RWND。
2.3 拥塞窗口(CWND)
- 定义:发送方根据网络拥塞状况估计的窗口值,用于限制注入网络的未确认数据量。
- 算法控制:通过慢启动、拥塞避免、快速重传/恢复等算法动态调整。
- 单位:通常以报文段(MSS)为单位。
2.4 有效发送窗口(Actual Window)
- 核心公式:
有效发送窗口 = min(CWND, RWND) - 意义:发送方实际允许发送的数据量受两者共同制约。流量控制(RWND)与拥塞控制(CWND)协同作用。
3. 窗口的动态调整与协同工作过程
3.1 连接建立阶段
- 初始CWND:通常为1-10个MSS(如Linux默认为10)。
- 初始RWND:接收方在SYN+ACK中通告其初始接收窗口大小(如65535字节)。
- 发送窗口初始化:
SND.UNA= 初始序列号,SND.NXT=SND.UNA+1,SND.WND= 初始RWND。
3.2 数据传输阶段的调整流程
步骤1:发送数据
- 发送方检查:
SND.NXT - SND.UNA<min(CWND, RWND)? - 若条件满足,发送新数据;否则等待。
步骤2:收到ACK
- 更新
SND.UNA:SND.UNA= ACK序号(确认了该序号之前的所有数据)。 - 更新
SND.WND:SND.WND= 新ACK中通告的RWND。 - 滑动窗口:窗口前沿右移,可能允许发送新数据。
步骤3:接收方更新RWND
- 数据到达:数据存入接收缓冲区,
RWND减小(RWND = 接收缓冲区总大小 - 待处理数据量)。 - 应用读取:应用读取数据后,
RWND增大。 - 通告时机:通常每两个报文段或延迟确认超时(~200ms)发送带最新RWND的ACK。
步骤4:拥塞窗口调整
- 慢启动:每收到一个非重复ACK,CWND增加1个MSS(指数增长)。
- 拥塞避免:CWND达到慢启动阈值(ssthresh)后,每RTT增加1个MSS(线性增长)。
- 拥塞发生:
- 超时重传:ssthresh = CWND/2,CWND = 1 MSS,进入慢启动。
- 快速重传:ssthresh = CWND/2,CWND = ssthresh + 3 MSS,进入快速恢复。
3.5 窗口的动态互动示例
假设:RWND = 32 KB,CWND = 16 KB(初始)。
- 有效窗口 = min(16, 32) = 16 KB → 发送方发送16 KB数据。
- 接收方应用读取慢,缓冲区剩8 KB空闲 → RWND = 8 KB。
- 新ACK到来:SND.WND = 8 KB。
- 此时若CWND仍为16 KB,有效窗口 = min(16, 8) = 8 KB → 发送速率被流量控制限制。
- 若网络拥塞导致丢包,发送方超时重传,CWND重置为1 MSS(如1 KB)。
- 有效窗口 = min(1, 8) = 1 KB → 发送速率受拥塞控制限制。
3.6 特殊场景
- 零窗口(Zero Window):RWND = 0时,发送方启动持续计时器,发送窗口探测报文。
- 窗口缩放选项:若RWND > 65535字节,使用Window Scale Option放大窗口(左移位数)。
- SACK影响:选择性确认允许发送方精确重传丢失段,避免整个窗口重传,提升效率。
4. 关键点总结
- 核心约束:有效发送窗口 = min(CWND, RWND),同时受网络拥塞和接收方能力限制。
- 流量控制:由RWND实现,通过ACK动态通告。
- 拥塞控制:由CWND实现,通过算法(AIMD)动态调整。
- 滑动机制:收到ACK后,窗口前沿右移,可能允许新数据发送。
- 动态平衡:TCP通过此机制自适应网络和接收方,最大化吞吐同时避免拥塞或溢出。
通过以上协同机制,TCP实现了可靠、高效、自适应的数据传输。