news 2026/11/4 5:08:03

Linux 学习笔记(四十八):TCP 封神之路——滑动窗口、流量控制与拥塞控制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 学习笔记(四十八):TCP 封神之路——滑动窗口、流量控制与拥塞控制

📌 核心结论(TL;DR):

  1. 滑动窗口:批量发送数据,提高吞吐量。

  2. 流量控制:通过接收方返回的窗口大小字段,保护接收端不被打爆,极端情况靠“窗口探测”防死锁。

  3. 拥塞控制:通过慢启动、拥塞避免、快重传、快恢复,保护整个网络不瘫痪。

  4. 发送窗口大小 = min(接收方窗口, 拥塞窗口)。

一、 滑动窗口(Sliding Window)

如果 TCP 每发一个数据包都要停下来等 ACK,那效率太低了。滑动窗口允许发送方一次性发送多个数据包(窗口大小)。

  • 收到第一个 ACK,窗口就向后移动,并发送新的数据。

  • 内核中的发送缓冲区只有收到 ACK 后,才会释放对应的内存。

二、 流量控制(Flow Control)

TCP 报头里有一个16 位窗口大小(Window Size)。接收方会在 ACK 中把这个值发给发送方,告诉对方:“我现在的接收缓冲区还能装下多少字节”。

  • 如果窗口变成0,发送方就会暂停发送。

  • 防死锁技巧:如果发送方等到了 0 窗口,会定期发送窗口探测包,直到接收端更新窗口大小,防止接收端发的“窗口更新”包丢失导致双方永久卡死。

三、 拥塞控制(Congestion Control)

流量控制是保护接收端,拥塞控制是保护网络。发送方会维护一个拥塞窗口(cwnd)。

  1. 慢启动:刚开始发,cwnd=1。每收到一个 ACK,cwnd翻倍(指数增长)。

  2. 拥塞避免:当cwnd达到阈值(ssthresh),每次只加 1(线性增长)。

  3. 超时重传(严重拥塞):如果包丢了,ssthresh减半,cwnd重置为 1,重新慢启动。

  4. 快重传与快恢复:如果连续收到 3 个相同的 ACK(说明只是丢了一个包,网络没瘫痪),立刻重传丢包,并且把ssthresh和cwnd都减半,直接进入拥塞避免,不重置为 1。

四、 实战:用ss命令透视内部参数

ss -tin | grep 9999

输出解读:

  • cwnd:10:当前拥塞窗口大小(单位 MSS)。

  • ssthresh:19:慢启动阈值。
    通过这个命令,不仅能查看连接状态,还能看到 TCP 内部算法的动态调整过程。

总结

TCP 能成为最主流的传输协议,绝不仅仅是因为它“可靠”,更因为它在“可靠”和“效率”之间找到了完美的平衡。滑动窗口 + 拥塞控制这套组合拳,至今依然是计算机科学中最经典的设计之一。

自我实战操作

理论太干?咱们用 Linux 命令行来“透视”一下滑动窗口和拥塞控制。

cd ~/linux_study/network_test
实战 1:用ss命令透视 TCP 的内部参数

ss是netstat的升级版,查看 TCP 细节极其强大。

操作步骤:

  1. 启动你的./tcp_server。

  2. 用./tcp_client连上并随便发几个字符(保持连接不断开)。

  3. 在 Linux 终端执行:

# -t 显示tcp,-i 显示内部信息,-n 不解析域名 ss -tin | grep 9999

👉看输出里的这几个关键参数:

  • cwnd:10:拥塞窗口大小(单位是 MSS,即最大报文段长度)。

  • ssthresh:19:慢启动阈值。

  • rtt:0.05:往返延迟。
    (你可以不断发数据,盯着cwnd看它是不是在慢慢变大)

实战 2:用tcpdump抓包看“快重传”

这个有点考验手速。

  1. 终端 A 开启抓包:sudo tcpdump -i any -n tcp port 9999

  2. 客户端发大量数据。

  3. 观察抓包结果,如果你看到连续三个[.](ACK) 的确认号一模一样(比如都是Ack=1001),紧接着发送端又发了一次Ack=1001对应的数据包,这就叫快重传。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 2:41:02

2026年仍然支持 Windows7的浏览器

Windows 7在2020年就已结束官方支持,但国内仍有相当规模的设备在运行这个系统。浏览器作为连接互联网的核心入口,它的选择直接决定了这些老机器还能不能相对完整地打开今天的网页。主流通道早已关闭,但仍有几条路可以走,每一条路的…

作者头像 李华
网站建设 2026/11/4 5:07:45

“让普通人也能变成科学家”:端砚平台刷屏,这个口号我只信一半

“让普通人也能变成科学家”:端砚平台刷屏,这个口号我只信一半 这两天科技圈最出圈的一句话,是“让普通人也能变成科学家”。 说这话的,是上海人工智能实验室在 WAIC 2026 上发布的“书生端砚”科学发现平台。名字起得很有文化&am…

作者头像 李华
网站建设 2026/11/4 5:07:50

企业微信二次开发:外部群消息如何自动关联客户并触发业务流程

在企业微信二次开发里,外部群消息真正有价值的地方,不只是“能收到消息”,而是收到之后能不能自动识别客户,并继续触发后面的业务。星云API在这类场景里,通常会把“消息接收、客户关联、业务触发”拆开处理。一、先拿到…

作者头像 李华