当前位置: 首页 > news >正文

深入理解 TCP:重传机制、滑动窗口、流量控制与拥塞控制

TCP(Transmission Control Protocol)是一个面向连接、可靠传输的协议,支撑着绝大多数互联网通信。在实现可靠性的背后,TCP 引入了多个关键机制:重传机制滑动窗口流量控制拥塞控制。这些机制共同协作,确保了网络传输的稳定性、高效性和公平性。

本文将从这四大模块出发,逐层剖析其工作原理及内部联系。


一、TCP 重传机制

1.1 超时重传

当 TCP 发送方发出一个数据段后,如果在预定时间内没有收到 ACK(确认),就会触发超时重传。这个时间称为 重传超时时间 RTO(Retransmission Timeout)

RTO 的计算通常使用 RTT(往返时间)预测算法,结合抖动值进行加权调整。

作用:解决数据包丢失或 ACK 丢失问题。

1.2 快速重传

快速重传避免了等待 RTO 超时时间。当接收方连续收到三个相同的 ACK(称为 Duplicate ACK)时,发送方立刻重传对应的段,认为该段可能丢失。

好处:显著缩短丢包检测时间,提高吞吐量。

1.3 SACK 方法(Selective Acknowledgment)

SACK(选择性确认)机制允许接收方告诉发送方:我收到了哪些数据段,即便这些段是不连续的。

例如,收到段 #1、#2、#4、#5,丢了 #3,那么接收方会告诉发送方:我收到了 #1-#2 和 #4-#5。发送方据此只需重发 #3,而不是整个窗口。

对比快速重传:SACK 更细粒度、效率更高。

1.4 Duplicate SACK

一种对 SACK 的增强,用于进一步标明哪些段被重复收到了,有助于快速判断拥塞与丢包状态。

ack包丢失:

网络延时:


二、滑动窗口机制

2.1 滑动窗口定义

滑动窗口是 TCP 中的核心机制之一,用于控制发送方可以连续发送多少字节而无需等待 ACK。其大小取决于接收方通告窗口(rwnd)和拥塞窗口(cwnd)中较小的值。

我们都知道 TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个,这个模式就有点像我和你面对面聊天,你一句我一句。但这种方式的缺点是效率比较低的。

一发一ack:

为解决这个问题,TCP 引入了窗口这个概念。即使在往返时间较长的情况下,它也不会降低网络通信的效率

2.2 工作原理

  • 每次发送新的数据后,窗口向右滑动;

  • 收到 ACK 后,窗口继续向右滑动;

  • 丢包或拥塞时,窗口收缩。

作用:保持网络“流水线式”的高效传输。


三、流量控制

3.1 基本思想

流量控制主要是为了防止发送方“发太快”,而接收方“接不过来”。这依赖于接收方通告窗口(rwnd),它告诉发送方“我还能接收多少数据”。

3.2 缓冲区与窗口的关系

接收方在操作系统内核中分配一段 缓冲区 存储 TCP 数据。rwnd 就是这个缓冲区剩余大小的反映。

⚠️ 若发送数据快于应用层消费速度,缓冲区满,rwnd=0,发送方必须暂停发送。

可能出现的情况:

为了防止这种情况发生,TCP 规定是不允许同时减少缓存又收缩窗口的,而是采用先收缩窗口,过段时间再减少缓存,这样就可以避免了丢包情况

3.3 窗口关闭

当 rwnd=0 时,TCP 会暂时关闭窗口,不再发送数据。发送方会周期性发送“窗口探测包”(Zero Window Probe)询问接收方缓冲是否已空。

3.4 糊涂窗口综合症(Silly Window Syndrome)

当接收方的缓冲区空闲很少就通告窗口,或发送方每次只发一点点数据,这会导致网络效率极低。这种现象称为“糊涂窗口综合症”。

解决方式:
  • 接收方策略:不通告过小窗口;

  • 发送方策略(Nagle算法):累积数据后再发送。


四、拥塞控制

拥塞控制目标是防止发送方过快发送数据导致网络拥塞。TCP 通过以下机制动态调节发送速率:

4.1 慢启动(Slow Start)

初始时 cwnd 很小(1 MSS),每收到一个 ACK 就将 cwnd 加倍(指数增长)。直到达到阈值(ssthresh)或出现丢包为止。

✅ 作用:逐步探测网络能力,防止突发冲击。

4.2 拥塞避免(Congestion Avoidance)

当 cwnd > ssthresh 后,进入线性增长阶段,即每个 RTT 只增长 1 MSS,避免过快增大窗口。

4.3 拥塞发生(例如快速重传触发)

  • cwnd 减半(乘法减小);

  • ssthresh 设置为一半;

  • 重回慢启动或进入快速恢复。

4.4 快速恢复

当触发快速重传时,不进入慢启动,而是认为网络并未严重拥塞,因此采用 快速恢复算法

  • 将 cwnd 设置为 ssthresh;

  • 继续进入拥塞避免阶段。


五、四大机制的联系与整体架构

我们将四部分的核心关系梳理如下:

模块控制目标核心机制所需信息
重传机制保证可靠传输超时重传、快速重传、SACKACK、RTT
滑动窗口提升效率流水线式传输发送窗口
流量控制防止接收方被压垮接收窗口控制 rwnd缓冲区
拥塞控制保持网络稳定慢启动、拥塞避免、快速恢复丢包信号、ACK 统计

总结一句话
TCP 通过滑动窗口提高吞吐,通过流量控制保护接收端,通过拥塞控制避免网络瘫痪,而重传机制是保证可靠性基石。

参考:4.2 TCP 重传、滑动窗口、流量控制、拥塞控制 | 小林coding

相关文章:

  • arXiv2025 | TTRL: Test-Time Reinforcement Learning
  • CDGP数据治理主观题评分标准与得分策略
  • Linux平台下SSH 协议克隆Github远程仓库并配置密钥
  • ui组件二次封装(vue)
  • Android 关闭Activity切换过渡动画
  • uniapp-商城-50-后台 商家信息
  • C++ 命令模式详解
  • .Net Mqtt协议-MQTTNet(一)简介
  • Ubuntu22.04怎么退出Emergency Mode(紧急模式)
  • 【许可证】Open Source Licenses
  • 两个数组的交集(暴力、set、哈希)
  • 【C++】红黑树
  • [RoarCTF 2019]Easy Calc1
  • 怎么免费下载fbx格式模型、和blender格式文件模型,还可以在线编辑修改
  • MySQL的Order by与Group by优化详解!
  • 算法-贪婪算法
  • 【Web前端开发】HTML基础
  • 服务器机架的功能和重要性
  • 【Java学习】枚举(匿名类详解)
  • akshare爬虫限制,pywencai频繁升级个人做量化,稳定数据源和券商的选择
  • 深圳市政协原副主席王幼鹏被“双开”
  • 网络主播直播泄机密,别让这些“小事”成威胁国家安全的“突破口”
  • 中铁房地产24.7亿元竞得上海松江新城宅地,溢价率20.42%
  • 马上评丨行人转身相撞案:走路该保持“安全距离”吗
  • A股低开高走全线上涨:军工股再度领涨,两市成交12934亿元
  • 这个部位最容易变老,却被很多姑娘忽视了