news 2026/3/16 9:26:23

【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/3/16 3:59:29

我的十年:从测试员到AI创业者的真实旅程

启程于测试的基石 回首2016年,我作为一名初入行的软件测试员,坐在狭小的工位前,面对着一堆杂乱的测试用例和反复出现的bug报告。那时的测试世界,大多依赖手动执行:我们用Excel记录用例,用JIRA追踪缺陷&…

作者头像 李华
网站建设 2026/3/16 3:59:30

SSM229的电商扶贫平台vue

目录SSM229电商扶贫平台Vue摘要开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!SSM229电商扶贫平台Vue摘要 SSM229电商扶贫平台是基于Vue.js前端框架与SSM(SpringSpringMVCMyBatis)后端框架构建的综合性…

作者头像 李华
网站建设 2026/3/15 17:17:50

救命神器!8款AI论文软件测评:本科生毕业论文全攻略

救命神器!8款AI论文软件测评:本科生毕业论文全攻略 2026年AI论文工具测评:为何需要这份精准指南? 随着人工智能技术的不断进步,越来越多的本科生开始依赖AI论文软件来提升写作效率、优化内容结构。然而,面对…

作者头像 李华
网站建设 2026/3/14 17:13:47

SSM289的美食推荐带店铺管理系统

目录SSM289美食推荐与店铺管理系统摘要开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!SSM289美食推荐与店铺管理系统摘要 SSM289是一款基于SSM(SpringSpring MVCMyBatis)框架开发的美食推荐与店铺管理系…

作者头像 李华