TCP 流分析82 条

TCP 慢启动观察

连接起始 cwnd 较小,按 ACK 指数扩大发送量:抓包表现为初期发送量快速爬升,首窗约 10 段(RFC 6928 取值)。

TCP 慢启动观察

连接刚建立时发送方并不知道链路能承受多少数据,于是从一个不大的拥塞窗口起步,每收到确认就成倍扩大发送量,这就是慢启动。抓包上表现为初期发送量快速爬升。按 RFC 6928 的建议,初始窗口约为十个最大报文段,因此小文件请求往往还没爬升完就结束了。

基本信息

适用平台TCP 协议行为,所有主流实现
初始窗口约 10 个最大报文段(RFC 6928 的建议值)
观察方式时序图上看连接最初一段的发送量爬升
相关机制拥塞避免、快速重传与快速恢复

典型使用场景

  • 解释小请求为何慢:爬坡阶段本身要占掉可观的时间
  • 评估长肥管道:高延迟链路上爬升时间更长
  • 对比连接复用:复用连接可以跳过热身阶段
  • 观察拥塞事件:丢包后窗口回落,会再次进入类似阶段
  • 排查吞吐不及预期:确认测试时长是否覆盖了爬升过程

观察方式

观察方式
# 时序图:连接起始处发送量快速抬升
# 小文件请求通常受限在慢启动阶段
# 长肥管道上爬升时间不可忽视
# 相关机制:拥塞避免与快速重传

阶段对照

阶段窗口变化触发条件
慢启动每轮确认后成倍增长连接建立或超时重传后
拥塞避免每轮线性增长超过慢启动阈值之后
快速重传丢包后立即重发收到多个重复确认
快速恢复窗口减半后继续与快速重传配合
使用连接复用(持久连接、连接池)能有效摊薄慢启动的成本。反复建连的短请求场景里,每次都要重新爬坡,累积开销相当明显。
在时序图上看到连接初期「先慢后快」是慢启动的正常特征,不要误判为网络抖动或丢包。
初始窗口的取值是实现相关的建议值,不同操作系统与内核版本可能不同。跨版本对比前先确认参数,避免把实现差异当成链路差异。

易错点

  • 小响应体加高延迟场景下慢启动影响明显,使用连接复用比反复建连更有效
  • 抓包速率图上"先慢后快"是正常特征,不要误判为网络抖动
  • 用短时传输测吞吐,测到的可能只是爬坡阶段,与长连接结论差别很大
  • 把初始窗口当成固定常量,跨系统对比时结论会失真

数据来源与参考

  • RFC 6928(IW10)
  • RFC 5681(慢启动)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌