news 2026/11/2 1:27:34

深入浅出 TCP 滑动窗口:原理、流量控制与代码实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入浅出 TCP 滑动窗口:原理、流量控制与代码实战

在网络通信中,TCP(传输控制协议)以其“可靠性”著称。而支撑这种可靠性的核心机制之一,就是滑动窗口(Sliding Window)。本文将结合课堂笔记,深入探讨滑动窗口的原理,并通过 Python 代码模拟高并发发送与慢速接收的场景,直观展示流量控制的过程。


一、 核心概念:什么是滑动窗口?

1. 窗口大小 (Window Size)

在 TCP 报文头部中,有一个 16 位(2 字节)的字段叫做“窗口大小”。

  • 数值含义:它代表接收端当前能够接收的最大字节数。
  • 流量控制:它是接收端向发送端通告的“剩余能力”。如果接收端处理不过来,窗口就会变小,甚至变为 0,从而通知发送端:“停一停,我没地方存了。”

2. 内核缓冲区与文件描述符

TCP 是面向连接的,每个连接在 Linux 内核中都有两个独立的缓冲区:

  • 发送端写缓冲区 (Write Buffer):应用层调用send/write时,数据先进入这里。
  • 接收端读缓冲区 (Read Buffer):数据从网络到达后,先存在这里,等待应用层调用recv/read取走。

数据流转路径:发送端应用层 -> 发送端写缓冲区 -> 网络传输 -> 接收端读缓冲区 -> 接收端应用层。


二、 滑动窗口的工作机制

滑动窗口的动态调整过程如下:

  1. 初始状态:接收端通告一个初始窗口大小(如 64KB)。
  2. 数据消耗:发送端发送 10KB 数据,接收端收到后,若应用层还没来得及读取,剩余窗口减小为 54KB。
  3. 动态反馈:接收端在 ACK 包中回传“当前窗口=54K”。
  4. 阻塞触发:如果发送端发送太快,接收端缓冲区被填满(窗口=0),发送端会被内核阻塞,停止发送。
  5. 空间释放:接收端应用层处理了 20KB 数据,窗口重新增大,发送端感知后继续发送。

三、 代码实战:模拟 TCP 流量控制

为了直观观察滑动窗口的作用,我们编写一个 Python 程序。

  • 服务端(接收端):特意设置很小的接收缓冲区,并使用time.sleep模拟极慢的处理速度。
  • 客户端(发送端):疯狂发送数据,观察缓冲区填满后的现象。

1. 服务端代码 (server.py)

importsocketimporttime# 配置SERVER_IP='127.0.0.1'SERVER_PORT=8888# 为了演示效果,将系统接收缓冲区设置为极小值 (如 4KB)# 注意:系统通常有最小值限制,实际可能比设置略大RCV_BUF_SIZE=4096defstart_server():server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 设置套接字选项:SO_RCVBUF 影响滑动窗口大小server.setsock
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/1 21:45:06

Z-Image-Turbo降本实战:16GB显存卡高效运行,成本省60%案例

Z-Image-Turbo降本实战:16GB显存卡高效运行,成本省60%案例 Z-Image-Turbo是阿里巴巴通义实验室开源的高效AI图像生成模型,作为Z-Image的蒸馏版本,它在保持高质量输出的同时大幅降低了计算资源需求。该模型仅需8步即可完成图像生成…

作者头像 李华
网站建设 2026/10/30 16:30:43

AI语义理解新趋势:Qwen3 Embedding模型开源部署实战解析

AI语义理解新趋势:Qwen3 Embedding模型开源部署实战解析 1. Qwen3-Embedding-0.6B 模型特性与应用场景 1.1 多语言、长文本与高精度嵌入能力 Qwen3 Embedding 模型系列是 Qwen 家族中专为文本嵌入(Text Embedding)和排序任务打造的最新成员…

作者头像 李华
网站建设 2026/10/28 16:41:15

Visual C++运行环境全修复:告别软件启动障碍的终极方案

Visual C运行环境全修复:告别软件启动障碍的终极方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 当您双击某个程序图标却毫无反应,或…

作者头像 李华
网站建设 2026/10/30 2:53:23

终极SQL美化方案:3分钟掌握专业级代码格式化技巧

终极SQL美化方案:3分钟掌握专业级代码格式化技巧 【免费下载链接】sql-beautify VS Code extension that beautifies SQL(HQL). 项目地址: https://gitcode.com/gh_mirrors/sq/sql-beautify SQL Beautify是一款专为Visual Studio Code设计的智能代码格式化工…

作者头像 李华
网站建设 2026/10/28 16:35:25

番茄小说下载器终极指南:5分钟快速掌握批量下载技巧

番茄小说下载器终极指南:5分钟快速掌握批量下载技巧 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 想要将喜欢的番茄小说保存到本地,随时随地离线阅读吗&#xff1…

作者头像 李华
网站建设 2026/10/30 18:16:38

5分钟部署gpt-oss-20b,WEBUI镜像让本地大模型一键启动

5分钟部署gpt-oss-20b,WEBUI镜像让本地大模型一键启动 1. 快速上手:从零到推理只需5分钟 你是否也想在自己的设备上运行OpenAI最新开源的gpt-oss-20b?不用再等待API配额、也不用担心数据隐私。现在,借助预置的gpt-oss-20b-WEBUI…

作者头像 李华