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

核心机制:拥塞控制

限制滑动窗口的发送速率

流量控制,已经接受方的处理能力,进行限制

木桶效应  最短的一板

发生方的速率,不光要考虑接收方的速率,还要考虑传输路径,整个过程中所有的中间节点的情况

拥塞控制的核心思路是,"试试看",先按照比较小的速度发送数据,看一下是否丢包

如果丢包,说明中间链路已经有节点顶不住了,减小窗口大小,减小速度

如果不丢包,说明中间链路中的节点处于较好的状态,增大窗口的大小,增加速度

(面多加水,水多加面)

发送方的发送窗口的大小,同时取决于 流量控制 和 拥塞控制(谁小谁说的算)

发送方自己维护一个变量作为拥塞控制窗口

流量控制:接收方通过 ack 告诉对方流量控制窗口

选择两者中的较小值作为发送窗口的大小

拥塞窗口的大小变化过程,也是比较巧妙的设定,不是字节而是"份",一份多少个字节也是不确定的

1)初始状态下,窗口的大小是非常小的,刚开始,网络的畅通情况是未知的

2)慢启动之后如果不丢包,就会按照指数方式进行增长,短时间,快速的把窗口的大小给顶上去(刚开始的时候太小了)

3)指数增长到一定程度的时候(到达阈值),指数增长变成线性增长(主要怕指数增长的一次导致翻得倍数太大,超出上限太多)

4)线性增长到一定程度,终究会触发丢包(网络的承载能力到达上限了)

5.1)出现丢包,窗口的大小会一落千丈,回到最初的慢启动窗口额大小,接下来重复 指数增长/线性增长的过程

5.2)出现丢包,重新计算阈值(丢包窗口大小的 / 2),重阈值开始作为新的拥塞控制的窗口大小,继续线性增长(相比于旧版本,省略了指数增长的过程),使 tcp 的传输效率更加稳定,避免大起大落

http://www.dtcms.com/a/231995.html

相关文章:

  • 使用 LangChain 和 RAG 实现《斗破苍穹》文本问答系
  • Ros(控制机器人运动)
  • c++提升
  • 系统巡检常见工作
  • Python多线程编程:从GIL锁到实战优化
  • UE 5 和simulink联合仿真,如果先在UE5这一端结束Play,过一段时间以后**Unreal Engine 5** 中会出现显存不足错误
  • 深入解析Java17核心新特性(增强NullPointerException、强封装 JDK 内部 API、伪随机数生成器增强)
  • Makefile基础入门:从编译小白到自动化构建达人
  • 沉金PCB电路板制造有哪些操作要点需要注意?
  • 线程的生命周期与数量设置
  • 【TCP/IP和OSI模型以及区别——理论汇总】
  • 【工具使用】STM32CubeMX-FreeRTOS操作系统-任务、延时、定时器篇
  • DINO-R1
  • C语言-指针基础概念
  • leetcode题解236:二叉树的最近公共祖先
  • Elasticsearch中什么是分析器(Analyzer)?它由哪些组件组成?
  • JS利用原型链实现继承
  • 【leetcode】9. 回文数
  • (每日一道算法题)求根节点到叶节点数字之和
  • Java-IO流之字符输出流详解
  • qiankun模式下 主应用严格模式,子应用el-popover 点击无效不显示
  • GAN训练困境与模型分类:损失值异常与生成判别模型差异解析
  • 第八部分:第六节 - 状态管理 (基础):协调多个界面的状态
  • 基于 ShardingSphere + Seata 的最终一致性事务完整示例实现
  • 局部变量-线程安全
  • 深度学习项目之RT-DETR训练自己数据集
  • 【docker】容器技术如何改变软件开发与部署格局
  • CMake在VS中使用远程调试
  • PocketFlow 快速入门指南
  • 【仿生】硬件缺失,与组装调试,皮肤问题