11. TCP 滑动窗口、拥塞控制是什么,有什么区别

总结

  1. 滑动窗口:早期网络,通信双方不考虑网络拥挤情况,导致掉包。滑动窗口大小意味着有多少缓冲区接受数据。
  2. 拥塞控制:防止过多数据注入网络中,拥塞控制是一个全局过程,控制网络流量。
  3. 区别:滑动窗口解决掉包问题,拥塞控制解决网络拥塞问题。

TCP 滑动窗口与拥塞控制详解

在 TCP 协议中,为了实现可靠传输高效通信,引入了两个核心机制:滑动窗口(Sliding Window)拥塞控制(Congestion Control)。它们分别从不同的角度优化数据传输过程。


一、滑动窗口(Sliding Window)

✅ 基本概念

滑动窗口是 TCP 实现**流量控制(Flow Control)**的机制,用于控制发送方发送的数据量,确保接收方不会因为数据过多而溢出缓冲区。

✅ 核心作用

  • 控制发送速率,避免接收方缓冲区溢出。
  • 提高传输效率,允许连续发送多个数据包而不必等待每个确认。

✅ 窗口大小含义

  • 表示接收方当前还能接收多少字节的数据(由接收方通过 window 字段告知发送方)。
  • 发送方根据窗口大小决定可以发送的数据量。
[已发送且确认] [已发送未确认] [可发送但未发送] [不可发送]
<----窗口滑动方向---->

✅ 工作流程

  1. 接收方在每次响应中携带自己的接收窗口大小(rwnd)。
  2. 发送方根据接收方窗口大小调整发送的数据量。
  3. 随着接收方不断接收并释放缓冲区,窗口“滑动”,发送方可继续发送新的数据。

二、拥塞控制(Congestion Control)

✅ 基本概念

拥塞控制是 TCP 用来防止网络过载的一种机制,是一种全局性机制,旨在避免因发送方注入过多数据导致网络拥塞甚至崩溃。

✅ 核心作用

  • 防止过多数据注入网络中,造成丢包、延迟增大。
  • 动态调整发送速率,适应当前网络状况。

✅ 主要算法(TCP Reno 中的经典实现)

  1. 慢启动(Slow Start)

    • 初始时以指数方式增加发送窗口。
    • 直到达到慢启动阈值或发生丢包。
  2. 拥塞避免(Congestion Avoidance)

    • 窗口线性增长,更加保守。
    • 避免再次引发网络拥塞。
  3. 快重传(Fast Retransmit)

    • 收到三个重复的 ACK 后立即重传丢失的报文段。
  4. 快恢复(Fast Recovery)

    • 在快重传后进入该阶段,调整拥塞窗口和慢启动阈值。

三、滑动窗口 vs 拥塞控制:主要区别

对比维度 滑动窗口(Flow Control) 拥塞控制(Congestion Control)
目标 防止接收方缓冲区溢出 防止网络拥塞
范围 点对点通信(发送方 vs 接收方) 全局网络环境
影响因素 接收方缓冲区大小 网络状态(如 RTT、丢包率)
控制机制 接收方通过 window 字段反馈窗口大小 发送方动态调整拥塞窗口(cwnd)
触发条件 接收方处理能力不足 网络出现丢包或延迟增大

四、协同工作机制

TCP 的发送窗口最终取的是两个控制机制中的最小值

发送窗口大小 = min(rwnd, cwnd)
  • rwnd:接收方窗口(由滑动窗口控制)
  • cwnd:拥塞窗口(由拥塞控制算法决定)

这意味着即使接收方还有空间接收数据,但如果网络已经拥塞,发送方也会减缓发送速度。


五、一句话总结

滑动窗口解决的是接收端缓冲区问题,而拥塞控制解决的是网络整体负载问题;两者共同协作,确保 TCP 既能高效传输又能稳定运行在网络环境中。


六、扩展知识:现代改进方案

  • BBR(Bottleneck Bandwidth and RTT):Google 提出的新型拥塞控制算法,基于带宽和延迟建模,不再依赖丢包作为拥塞信号。
  • CUBIC TCP:Linux 内核默认使用的拥塞控制算法,性能优于 Reno,在高速网络中表现更好。

你可能感兴趣的:(前端面试-服务协议,tcp/ip,网络,php)