【Linux 网络】拒绝传输卡顿!滑动窗口如何让数据 “跑赢” 等待?

一、滑动窗口

滑动窗口大小:指的是无需等待确认应答而可以继续发送数据的最大值;注意:这里的无需等待确认应答,不是不要确认应答,而是暂时不要;

站在发送方(主机A 视角):

图中序号为①的那里就是发送方的发送缓冲区,而滑动窗口就是发送缓冲区里面白色部分,所以滑动窗口属于发送缓冲区的一部分;

站在逻辑上,发送缓冲区就是一个以为数组:

这个一维数组存储就是发送的数据,而 滑动窗口就是用两个指针指向的下标构成的区域内的窗口;

结论:

1.滑动窗口的存在把发送缓冲区划分成三个部分:

a.滑动窗口内的数据直接发,暂时不需要应答

b.滑动窗口的左边部分的数据,已经发送,已经确认

c.滑动窗口的右边部分的数据,待发送;

2.滑动窗口滑动的方向是:从左向右;因为左边部分的数据已经发送过了,属于无效的数据,这意味这部分的数据可以被覆盖;

3.滑动窗口滑动的本质:两个指针的移动(下标变大)

问题:滑动窗口的大小由谁来定?

答:由对方的接收缓冲区的剩余空间的大小决定;

结论:流量控制是由滑动窗口实现的;——这个结论还有待补充;

怎么确定滑动窗口的大小?

答:start = 确认序号,end = start + 对方接收缓冲区的剩余空间的大小;

问题:滑动窗口能向左滑动吗?

答:不能;因为要发送的数据在右边;

问题:滑动窗口范围会变化吗?

答:滑动窗口范围会随着对方的接收缓冲区的剩余空间的大小动态变化;当对方的用户层不拿数据时,对方的接收缓冲区的剩余空间的大小变小,此时我们的滑动窗口大小就变小;如果对方的拿完我们发送的数据,此时对方的剩余空间不变,此时我们的滑动窗口也不变,如果此时对方用户层不拿数据,导致我方的滑动窗口变小,一会儿对方就把数据那完了,此时对方的接收缓冲区的剩余空间大小变大,就会导致我们的滑动窗口变大;

问题:如果主机 A 给对方发送 4 条报文,此时主机B就要应答 4 次,如果前三次的应答丢包了,第四次应答成功,此时主机 A 根据确认序号就知道这四条报文都发送成功了,如果前三次没丢报,就第四次丢包了,此时 主机 A 只能确认前三次的报文对方收到了,关于第四次报文没有收到应答此时根据超时重传,重新发送一条原来的第四条报文给主机B;

如果主机A发送一批报文,只有 1001 - 2000 丢包了,此时对方的应答这一批的报文的序号超过3个是1001,则主机A 100% 确定1001 - 2000 的报文丢了,此时主机A 立马就是发送 1001 - 2000 的报文,这就是快重传机制(当收到3个以上同样的应答时,就使用快重传),但是主机A不确定 1001 - 200 后面是否有报文丢失,但是没有关系,因为给 1001 - 2000 的时候是会有应答的;这个应答就会告诉主机 A 是否有报文丢失;

快重传 VS 超时重传:

快重传和超时重传是不冲突的,他们是互补关系;当主机 A 只发送一条报文时,这条报文丢失了就会触发超时重传,当主机A 发送超过3条报文时,只要有三条应答报文以上是序号是同样的就会触发超时重传,所以:超时重传用来兜底的,而快重传用来提供速率;

滑动窗口内的数据发送出去后,第一个报文丢失了,其余报文没有丢,此时为了支持重传,发出去的数据不能立即删除,以便后续确认和重传,说人话就是滑动窗口的 start 的指向不能变;

结论:重传机制和滑动窗口有关;

4 个报文只有第 2 个 或者 第 3 个报文丢了,此时应答回来的确认序号也就是第1个应答报文和第 4 个报文的序号他们的序号是一样的,而且这个序号的是第一个应答报文的序号,也就是第二个报文的起始序号,所以滑动窗口的 start 只会移动到第二个报文那里;支持重传;

4 个报文和就第 4 个丢了,此时第 3 个的应答序号一定指向第四个报文,也就是 start 指向第四个报文;

结论:滑动窗口中的报文问题,起始就是最左侧丢包问题,这个和确认序号机制有关系,为了保证滑动窗口滑动的连续性,滑动窗口滑动不能跳过没有确认的报文;

滑动窗口,滑动出去了怎么办?

答:滑动窗口会重置 start 和 end 指向缓冲区的开始;

问题:滑动窗口里面的数据,直接打包成一个报文,不就号了?

答:这个和链路层有关;

小结:

1)滑动窗口是什么?

答:滑动窗口是输出缓冲区的一部分,可以暂时不用应答,可以直接发送的数据区域;

2)为什么要用滑动窗口?

答:滑动窗口是流量控制、重传机制的底层实现,滑动窗口是因,流量控制和重传机制是果;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1190652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬核干货:Checkpoint对齐诅咒与Timer风暴——Flink周期性反压的终极排查

第一章:那只准时敲门的“幽灵”——Checkpoint与其背后的IO风暴我们拿到的是一个极其诡异的现场:每30分钟一次,持续5分钟的反压。这不像是因为数据倾斜导致的“长尾”,也不像代码逻辑死循环导致的“猝死”。它太规律了&#xff0c…

基于微信小程序的付费自习室系统源码文档部署文档代码讲解等

课题介绍本课题聚焦付费自习室行业数字化需求,设计并实现一款基于微信小程序的付费自习室系统,解决传统自习室预约繁琐、计费不透明、座位管理低效等痛点。系统以微信小程序为前端交互入口,采用Node.js搭建后端服务,搭配MySQL数据…

基于微信小程序的高校毕业生公考助手系统源码文档部署文档代码讲解等

课题介绍本课题针对高校毕业生公考备考信息零散、规划混乱、刷题低效等痛点,设计并实现一款基于微信小程序的高校毕业生公考助手系统,为毕业生提供一站式公考备考服务。系统以微信小程序为前端载体,采用Node.js搭建后端服务,结合M…

边缘计算节点延迟专项测试实践指南

1. 测试概述与重要性 边缘计算节点的延迟直接影响实时应用性能(如工业自动化、车联网),延迟过高可能导致业务中断或数据不一致。专项测试需评估端到端响应时间、抖动及丢包率等指标,确保节点在5G等低延迟场景下满足SLA要求&#…

大数据领域Kafka的性能调优实战

大数据领域Kafka的性能调优实战:从青铜到王者的进阶指南 关键词:Kafka性能调优、生产者优化、Broker配置、消费者调优、吞吐量与延迟 摘要:在大数据时代,Kafka作为分布式消息队列和流处理平台的"扛把子",其性…

Flutter 2025 测试策略全景:从单元测试到混沌工程,构建坚不可摧的高质量应用 - 指南

Flutter 2025 测试策略全景:从单元测试到混沌工程,构建坚不可摧的高质量应用 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; …

LLM Weekly(2026.1.5-2026.1.11)

网络资讯 ChatGPT 健康功能全新上线 OpenAI 推出了 ChatGPT Health,这是一个专属加密空间,可将用户的医疗记录和健康类应用程序与 ChatGPT 相连接,从而提供个性化的非诊断性健康指导。该服务采用数据隔离机制,健康相关对话内容不会用于模型训练,同时支持多重身份验证(MF…

计算机网络经典问题透视:漏桶管制器的工作原理是怎么样的?

在当今这个流量爆炸的时代,无论是云计算、大数据还是边缘计算,都离不开一个核心议题——流量控制。网络拥塞、服务质量(QoS)下降、系统雪崩,这些问题的根源往往都与失控的流量有关。今天,我们将一起回到计算…

‘huggingface-cli‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

出现“huggingface-cli不是内部命令”的问题,通常由权限、环境变量、命令弃用或虚拟环境未激活导致,可按以下步骤排查解决: 1. 检查管理员权限安装问题若Python环境位于C盘,普通权限运行安装命令可能导致huggingface_hub安装不完整…

小红删数字【牛客tracker 每日一题】

小红删数字 时间限制:1秒 空间限制:256M 网页链接 牛客tracker 牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有…

为什么我辞去高薪开发工作?2026年反思

职业转折点:代码之外的觉醒 当我在2026年初递交辞呈时,部门主管看着远超行业均值的薪资单反复确认:"你确定要放弃年薪85万的开发岗,去做测试?" 这个看似悖论的选择背后,藏着对软件行业生态的深度…

情感分享:当代码成为我的第二语言——一位测试工程师的心路历程

在软件测试的世界里,我们常常被定义为“质量守门人”、“Bug猎人”,但鲜少有人关注我们与代码之间建立的那份深刻而复杂的情感连接。本文从一个资深软件测试工程师的视角出发,探讨代码如何超越工具属性,逐渐成为我们思维、表达甚至…

Node.js WebAssembly零拷贝图像处理

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Node.js WebAssembly零拷贝图像处理:性能优化的革命性实践目录Node.js WebAssembly零拷贝图像处理:性能优…

别再裸连 OpenAI 了!我用这一招,帮公司节省百万成本,还搞定了 Gemini 3.0 和 Sora 2

摘要: 2026 年,AI 模型大爆发。 Gemini 3.0 Pro 突破上下文极限。 Sora 2 让视频生成进入电影级时代。 但对于开发者来说, 这简直是“API 地狱”。 本文将揭秘如何用 向量引擎(Vector Engine)。 这一行代码&#xff0c…

当AI刺破泡沫:算力瓶颈、能源战争与资本主义的“物理转向”

如果说过去二十年的科技主旋律是“软件吞噬世界”,那么在 Jordi Visser 看来,这一章节正在剧烈翻篇。我们正处于一个甚至连“资本主义”本身都在面临终结与重构的奇点时刻。 当大众还在惊叹于 ChatGPT 的生成能力时,华尔街的敏锐资金已经嗅到了风向的改变:AI 的竞争不再仅…

4.自注意机制__self-attention

自注意机制也是一个常见的network架构目前来说,输入都是一个向量,但是如果我们的输入变成了一排向量并且数目可以改变呢?这就是自注意机制解决的问题,现在model每次输入的sequence长度都不一样,如下图假设network现在要…

如何用ChatGPT提升开发效率?实战技巧大公开

ChatGPT在软件测试中的效率革命 随着AI技术的快速发展,ChatGPT正成为测试工程师的智能协作者。本文聚焦六大核心场景,结合可落地的操作指南,帮助测试人员将AI能力深度融入工作流。 一、智能测试用例生成:覆盖度提升300%的秘诀 1…

Python的后端框架 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Springboot集成支付宝

1、支付宝开放平台操作 我们需要做内网穿透,推荐使用 ngrok | API Gateway, Kubernetes Ingress, Webhook Gateway 详细接口参考API - 开放平台 进入 控制台首页 - 开放平台,开通沙箱环境 支付宝公钥,和你的秘钥点击查看就能看到 2、Spring…