0%

TCP流量控制

TCP 流量控制详解

TCP 的流量控制机制是为了防止发送方发送数据的速率过快,导致接收方因缓冲区不足而无法及时处理,最终造成数据丢失。其核心是通过滑动窗口机制动态调整发送方的发送速率,实现点对点的数据传输平衡。

滑动窗口的基本概念

  • 窗口:指接收方当前能够接收的数据量(以字节为单位),由接收方告知发送方。
  • 滑动:随着数据的接收和确认,窗口的范围会动态变化(向前 “滑动”)。

发送方的发送窗口大小受限于接收方的接收窗口大小,确保发送的数据量不超过接收方的处理能力。

接收窗口与发送窗口的交互

  1. 接收方的接收窗口(rwnd)
    接收方在 TCP 报文中的窗口字段(Window Size)告知发送方自己的接收缓冲区剩余容量。例如:
    • 接收方初始缓冲区大小为 1000 字节,已用 300 字节,则rwnd = 700,表示最多还能接收 700 字节。
  2. 发送方的发送窗口
    发送方的发送窗口大小 ≤ 接收方的接收窗口大小(rwnd)。发送方只能发送窗口内的数据,未被确认的数据需暂存,等待接收方确认后才能从窗口中移除。
  3. 窗口滑动的触发
    • 接收方处理完数据后,缓冲区空闲空间增加,会通过 ACK 报文更新 rwnd。
    • 发送方收到新的 rwnd 后,调整发送窗口大小并 “滑动” 窗口(将已确认的数据移出窗口,未发送的新数据纳入窗口)。

零窗口与窗口探测

  • 零窗口(rwnd=0):当接收方缓冲区满时,会告知发送方rwnd=0,此时发送方需暂停发送数据。
  • 窗口探测:发送方在收到零窗口后,会定期发送窗口探测报文(携带 1 字节数据),接收方若缓冲区有空闲,会在回复中更新 rwnd,发送方据此恢复发送。

与拥塞控制的区别

  • 流量控制:仅关注接收方的处理能力(点对点),通过接收窗口(rwnd)调节。
  • 拥塞控制:关注网络链路的负载(全局),通过慢启动、拥塞避免等算法调节发送速率。

两者结合确保 TCP 在复杂网络环境中既能高效传输,又能避免数据丢失。

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10