当前位置: 首页 > ops >正文

核心机制:滑动窗口

TCP 协议

        1.确认应答        可靠传输的核心机制

        2.超时重传        可靠传输的核心机制

        3.连接管理        TCP/网络 最高的面试题

                三次握手,建立连接(必须是 三次)

                四次挥手,断开连接(可能是 三次)

核心机制四:滑动窗口

算法中的"滑动窗口" 出自 TCP

前面的三个机制,实现 TCP 的"可靠性",滑动窗口,是提高效率

可靠性是要付出代价的,传输效率的降低

每次发一个数据,都要等 ack..单位时间内能传输的数据就少了

每一份等待都是等一个 ack 的到达

把每次发送都等待 ack => 批量发送一波,在等待 ack(花一份的等待时间,等待多个 ack)

等待的一份时间中,就是在等待 4 组 ack 的到达,肯定不能完全不等(可靠性形同虚设了),就把批量发送多少数据不需要等待 称为"窗口大小"

问题是,发送方,是收到 4 个 ack,再继续往后 4 组数据?还是收到 1 个 ack,就立即往后发 1组数据(正确)

1001 - 5001 等待四组 ack

A 收到 2001 ack 就视为 1001 - 2000 已经收到了,就可以立即发送 5001 - 6000,此时等待 ack 的窗口就变成了 2001 - 6000

每次收到一个 ack,窗口都会往后平移一个格子,如果收到 ack 的速度很快,平移的过程就好像"滑动"的过程

滑动窗口的效率提高,本质是"亡羊补牢""止损",再怎么提高,也不会超过 UDP 无可靠传输机制的协议的

最理想的状态下,TCP 和 UDP 速度相当,不可能因为滑动窗口让 TCP 比 UDP 更快\

滑动窗口的机制下,出现丢包,怎么办?

情况一:数据包已经抵达,ACK 被丢了

后一个 ack 会覆盖前一个 ack

如果只是 ack 丢包, 在滑动窗口机制下,不需要做任何处理!!!

ack 的确认序号的设定规则

ack 的确认序号,表示序号之前的所有数据都已经收到了,ack => 1001, 1001 之前的数据都收到了

情况二:数据包直接丢了

B 向 A 索要 1001 这个数据

B 反复向 A 索要没有收到的 1001 这个数据, A 感知到 B 连续多次索要 1001 之后,就会认为 1001 丢包,触发重传 1001

一旦 1001 - 2000 数据 B 收到了,此时 B 观察发现,自己的接受缓冲区里,已经有 2001 - 7000 这些数据了,接下来从 7001 索要即可

快速重传(滑动窗口机制下的重传机制,相当于超时重传的变种)

滑动窗口(批量传输) 快速重传 和 确认应答 超时重传 关系

上面这两套,是共存的机制并不冲突

如果使用 TCP 传输比较大的数据的时候,自然就会触发,滑动窗口,重传机制采取快速重传

如果使用 TCP 传输较少的数据,此时就仍然是按照 确认应答 和超时重传 方式来进行

想象一下,TCP 的代码里,触发重传的条件有两个

1)连续多次收到同一个 ack

2)一定时间内没有收到 ack

触发重传

http://www.xdnf.cn/news/10528.html

相关文章:

  • 相机--相机标定
  • 芝麻酱工作创新点分享1——SpringBoot下使用mongo+Redis做向量搜索
  • PyTorch——卷积操作(2)
  • [网页五子棋][匹配对战]落子实现思路、发送落子请求、处理落子响应
  • Python 在金融中的应用- Part 1
  • JSP、HTML和Tomcat
  • Linux运维笔记:服务器感染 netools 病毒案例
  • Windows+VSCode搭建小智(xiaozhi)开发环境
  • 通信革新与网络安全探索与创新:开启未来之门
  • ShenNiusModularity项目源码学习(33:ShenNius.Admin.Mvc项目分析-18)
  • 【看到哪里写到哪里】C的指针-3(函数指针)
  • P1115 最大子段和
  • 打卡第43天
  • 【Ragflow】24.Ragflow-plus开发日志:增加分词逻辑,修复关键词检索失效问题
  • 从 AMQP 到 RabbitMQ:核心组件设计与工作原理(一)
  • [Java恶补day13] 53. 最大子数组和
  • 判断使用什么技术来爬取数据详细讲解
  • 【Redis】笔记|第5节|Redisson实现高并发分布式锁核心源码
  • 个人总结八股文之-基础篇(持续更新)
  • 汽车软件 OTA 升级技术发展现状与趋势
  • 设计模式——中介者设计模式(行为型)
  • 【Qt开发】对话框
  • 深入理解 Linux 文件系统与日志文件分析
  • NodeJS全栈WEB3面试题——P8项目实战类问题(偏全栈)
  • 安全态势感知中的告警误报思考
  • 多群组部署
  • X浏览器APP:轻巧快捷,畅享极速浏览
  • TomSolver 库 | config详解及其测试
  • ANN与SNN的那些事
  • 动态规划(10):状态压缩