news 2026/9/22 21:43:44

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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)为什么要用滑动窗口?

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

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

4.自注意机制__self-attention

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

作者头像 李华
网站建设 2026/9/21 0:11:26

Node.js WebAssembly零拷贝图像处理

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

作者头像 李华
网站建设 2026/9/21 8:07:42

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

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

作者头像 李华
网站建设 2026/9/20 17:42:02

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

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

作者头像 李华
网站建设 2026/9/20 22:32:14

开发者社区的力量:一位测试工程师的破茧之路

迷雾中的测试新人 2018年夏,当我手持手工测试用例文档站在网易大楼前时,从未想到三年后会在谷歌开发者大会分享《AI赋能的混沌工程实践》。作为日均执行200重复测试的"点点工程师",我陷入职业困局:自动化脚本无从下手&…

作者头像 李华
网站建设 2026/9/22 0:28:23

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

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

作者头像 李华