TCP 如何实现流量控制?
解释 TCP 如何通过接收方报告的缓存空间来调节数据传输速度,确保不超出接收方处理能力。核心是滑动窗口技术。
TCP 的流量控制机制通过接收方向发送方报告缓存可用空间,确保发送方的数据发送速率不会超过接收方的处理能力。这是主要实现的滑动窗口技术完成的,过程如下[:
- 滑动窗口原理:
- 双方在建立连接时分配一定大小的缓存区,接收方的可用缓存空间定义为「接收窗口大小」。
- 窗口大小通知:接收方在发送 ACK(确认)报文时附带回自己的当前可用接收窗口大小(
rwnd
或通告窗口)。 - 动态调节:发送方根据 ACK 中的窗口值调整自身「发送窗口」的大小,限制其在未收到新确认前可发送的数据量上限(不超过接收方的
rwnd
)。一旦发送方接收到新数据的 ACK,已确认的数据从发送缓存中移出,窗口会向前“滑动”以便发送新的数据。
- 工作流程示例:
- 初始化:双方初始传输时窗口大小为 N(如 400 字节)。
- 发送方数据发送:
- 发送方发送数据块,该动作会导致其发送窗口右侧向前扩展,可用部分为尚未发送的数据。
- 在部分确认未被收到的时候窗口保持打开状态但已发送部分不能被释放。
- 接收方处理:
- 接收方接妥信息存放于缓冲区中随后处理完毕发出确认 ACK。
- 每更新一个报文段会伴随着处理操作并生成下一次 ACK 反馈对应的接收窗口大小:
1). 若接收方能完整接收所有传输,可用窗口值为剩余缓冲区空间
2). 若部分数据未能即时处理,缓冲填充将导致窗口减少
如果缓冲充满则更新窗口值为很小,有时甚至为零进行停顿干预
- 窗口重置机制:
- 接受处理中的变化:
- 如果接收方缓冲开始空闲并增大
rwnd
,该改变信息经由下一次 ACK 返还。 - 发送方接到这些较大窗口会提升发送节奏
- 若接收方进程阻塞暂时停止处理数据而充满缓存:
返回的rwnd
降为零以指令发送方暂停传输数据。
- 如果接收方缓冲开始空闲并增大
- 零窗口后的恢复措施:
- 为防止信息丢失导致的传输停滞或失效(如接收方更新后发出的新窗口通知可能由于丢包而没被收到),发送方设定了一个“持续计时器”,等待后如超时则发送极短探测报文:
- 通过「零窗口探查」动作发送只含一位数据的包。
- 回应窗口值变化,如大于 0 就再次发送数据段;这种处理解决可能的传输阻塞死循环状态。
- 为防止信息丢失导致的传输停滞或失效(如接收方更新后发出的新窗口通知可能由于丢包而没被收到),发送方设定了一个“持续计时器”,等待后如超时则发送极短探测报文:
- 接受处理中的变化:
- 特点总览:
- 端到端控流机制:仅依赖接收能力自动适配防止网络阻塞。
- 有效保证了即使大量传输中缓存被填满发送端不会主动地超限投递导致网络负担。
- TCP 中的流量控制并不涉及拥塞问题而是用于适配两台端点缓冲区的容限状态,而拥塞机制是另在 IP 层面完成。
参考上述内容可确保端对端数据传输的速度始终与接收方处理节奏配合避免丢弃。
在实践编写过程时处理 TCP 相关传输需求应合理使用发送包策略(包含调整持续探查设定及滑动窗状态调整)。