TCP 流量控制详解
TCP 的流量控制机制是为了防止发送方发送数据的速率过快,导致接收方因缓冲区不足而无法及时处理,最终造成数据丢失。其核心是通过滑动窗口机制动态调整发送方的发送速率,实现点对点的数据传输平衡。
滑动窗口的基本概念
- 窗口:指接收方当前能够接收的数据量(以字节为单位),由接收方告知发送方。
- 滑动:随着数据的接收和确认,窗口的范围会动态变化(向前 “滑动”)。
发送方的发送窗口大小受限于接收方的接收窗口大小,确保发送的数据量不超过接收方的处理能力。
接收窗口与发送窗口的交互
- 接收方的接收窗口(rwnd)
接收方在 TCP 报文中的窗口字段(Window Size)告知发送方自己的接收缓冲区剩余容量。例如:- 接收方初始缓冲区大小为 1000 字节,已用 300 字节,则
rwnd = 700,表示最多还能接收 700 字节。
- 接收方初始缓冲区大小为 1000 字节,已用 300 字节,则
- 发送方的发送窗口
发送方的发送窗口大小 ≤ 接收方的接收窗口大小(rwnd)。发送方只能发送窗口内的数据,未被确认的数据需暂存,等待接收方确认后才能从窗口中移除。 - 窗口滑动的触发
- 接收方处理完数据后,缓冲区空闲空间增加,会通过 ACK 报文更新 rwnd。
- 发送方收到新的 rwnd 后,调整发送窗口大小并 “滑动” 窗口(将已确认的数据移出窗口,未发送的新数据纳入窗口)。
零窗口与窗口探测
- 零窗口(rwnd=0):当接收方缓冲区满时,会告知发送方
rwnd=0,此时发送方需暂停发送数据。 - 窗口探测:发送方在收到零窗口后,会定期发送窗口探测报文(携带 1 字节数据),接收方若缓冲区有空闲,会在回复中更新 rwnd,发送方据此恢复发送。
与拥塞控制的区别
- 流量控制:仅关注接收方的处理能力(点对点),通过接收窗口(rwnd)调节。
- 拥塞控制:关注网络链路的负载(全局),通过慢启动、拥塞避免等算法调节发送速率。
两者结合确保 TCP 在复杂网络环境中既能高效传输,又能避免数据丢失。
v1.3.10