javaEE 初阶 — 流量控制与拥塞控制

news2024/10/2 1:23:50

文章目录

  • 1. 流量控制
  • 2. 拥塞控制

TCP 工作机制

确认应答机制

超时重传机制

连接管理机制

滑动窗口

1. 流量控制


流量控制是一种干扰发送的窗口大小的机制,滑动窗口,窗口越大,传输的效率就越高(一份时间,等待的 ACK 就越多)

  • 完全不等待 ACK ,可靠性能否有保障。
  • 窗口太大,也会消耗大量的系统资源。
  • 发送的速度太快,接收方处理不过来,发了也是白发。

鉴于以上三点原因,窗口也不能无限大。

接收方的处理能力是一个很重要的约束依据。发送方的速度,不能超过接收方的处理能力。
流量控制 要做的就是 根据接收方的处理能力,协调发送方的发送效率

有一个比较简单的衡量接收方的处理能力的办法:

根据接收缓冲区的剩余大小来衡量




把这个接收缓冲区中剩余的空间容量作为衡量发送方发送速率的指标。

每次 A 给 B 发了一个数据,B 就需要计算一下这个接收缓冲区中剩余的容量,然后把这个值通过 ACK 报文返回给 A。
A 就根据这个值来决定接下来发送的速率是多少,也就是决定窗口大小是多少。

从这里就可看出,由于接收方的缓冲区剩余空间是一直在动态变化的,所以每次返回的 ACK 带的窗口大小也都是在变化的。
发送方也是在动态调整。

发送方窗口大小不是固定值,也不是配置的,而是随着传输过程的进行动态调整的。


可以把接收缓冲区想象成一个蓄水池。



根据蓄水池的剩余空间大小,来决定往里输水的速率。




16 位窗口大小只有在报文是 ACK 的时候才是有效的,发送方会根据这个返回 ACK 报文来决定下一轮发送的窗口大小了。

虽然这里的窗口大小是 16 位(64KB)的,但是不意味着它的窗口大小最大是 64 KB。
因为这里为了让窗口更大,在选项部分引入了 窗口扩展因子,比如说扩展因子是 2,意思就是让 64 KB << 2(左移两位)
那就变成了 256 KB 了。


当窗口大小为0,发送方就会暂停发送,暂停发送的等待过程中,会给 B 定期发送窗口探测报文
这个报文不携带具体的业务数据,只是为了触发 ACK 查询窗口大小。

2. 拥塞控制


流量控制 和 拥塞控制 共同决定发送方的窗口大小是多少。

流量控制考虑的是接收方的处理能力,而拥塞控制描述的是传输过程中,中间结点的处理能力。

窗口大小是发送方的的概念,只不过这个窗口大小是通过接收方 ACK 报头里的窗口大小字段,从接收方告诉发送方。




前面的 流量控制 考虑发送方的发送速率,只是考虑了接收方的处理能力,而没有考虑中间结点。
在网络通信的过程中,涉及到了很多的路由器和交换机,也就是通信工程中的中间结点。

接收方的处理能力好量化衡量,但是中间结点不好衡量,于是就有人想出了一种通过“实验”的方式,
来测试出一个合适的的值来衡量中间结点。


这个方式就好比是在悬崖边上跳舞,在危险的边缘跃跃欲试。

比如说,张三在看书,李四过来一会儿看他一眼、一会儿摸他一下、一会儿替他翻页,
刚开始还没生气,但是怒气值在到达一个数值的时候,张三就忍不住动手打了李四。
这就是通过一点一点的打扰张三,李四就可以逐渐找到一个不会使李四生气的最大怒气值。

拥塞控制的本质就是通过这样实验的方式,来逐渐找到一个合适的窗口大小,也就是一个合适的发送速率。




拥塞窗口以尝试多大的窗口大小进行发送。


传输轮次为 第0轮 的时候,窗口大小是 1,这个时候是以非常慢的速度发送数据。
(此处的 1 不是字节,而是 1 单位。一个单位代表着多少字节,不去研究)
如果此时发现数据传输顺利,就扩大窗口。

到第 1 轮的时候,窗口大小是 2 ,此时窗口大小扩大了一倍。
到第 2 轮的时候,窗口大小变成了 4。
初始阶段,由于初始窗口大小比较小,每一轮不丢包都会使窗口大小扩大一倍。(指数增长)

当增长速率达到阈值(窗口大小为16)之后,此时指数增长,就成为了线性增长,这些增长的前提都是不丢包。

接下来,当传输过程中一旦丢包了,说明此时发送的数据已经接近网络的极限了,
此时就把窗口大小一下缩成很小的值(重复刚才指数增长和线性增长的过程),重复刚才的过程后,阈值就会相应的变小。


拥塞窗口不是固定数值,而是一直变化的,随着时间的推移,逐渐达到一个动态平衡的过程。
这样既解决了中间结点无法衡量的问题,同时也能随着网络的动态变化而变化。

拥塞窗口 和 流量控制的窗口共同决定了发送方实际的发送窗口。(拥塞窗口和流量控制窗口的较小值)


拥塞窗口的变化过程就好比谈恋爱的感觉。

两个人刚开始的时候,“热恋期” 感情会迅速升温。(指数增长),热恋期过了,不在指数增长而是线性增长。
吵架了之后闹分手,但是第二天之后又和好了,之后又会是一个感情迅速升温的过程。(一般来说,这个热恋期回比之前的短)
随着时间的推移,两个人的感情就在这样的曲线中动态变化,最终到达动态平衡过程。

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

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

相关文章

Gromacs中的g_mmpbsa计算带电底物与蛋白的结合能不准确

g_mmpbsa计算带电底物与蛋白的结合能总是不准确 TOC 在做的两个项目中&#xff0c;利用g_mmpbsa计算带电底物与蛋白的结合能结果非常不可靠&#xff0c;底物带两个硫酸根离子&#xff0c;g_mmpbsa在计算带电的底物与酶的结合能时总是不准确&#xff0c;因此后续若底物带电&…

三层交换机DHCP中继

关于中继&#xff0c;我们需要有一个对比。正常情况下我们是不是需要配置单臂路由然后开启DHCP地址池&#xff0c;然就设置网段网关以及DNS。这样的话考验 的其实是命令功底。但是为了方便&#xff0c;我们 可以添加服务器&#xff0c;将这个服务给到服务器去配置&#xff0c;这…

为什么sleeping的会话会造成阻塞(2)

背景客户反馈系统突然从11:10开始运行非常缓慢&#xff0c;在SQL专家云中看到大量的产生阻塞的活动会话&#xff0c;KILL掉阻塞的源头马上又出现新的源头&#xff0c;实在没有办法只能重启应用程序断开所有数据库连接才解决&#xff0c;请我们协助分析根本的原因。现象登录SQL专…

Web前端CSS清除浮动的5种方法

在移动端清除浮动布局&#xff0c;常用的5种方法&#xff1a; 使用清除浮动的类&#xff1b;使用overflow属性&#xff1b;使用 flex 布局&#xff1b;使用grid 布局&#xff1b;使用 table 布局。 根据实际情况选择适合的方法&#xff0c;需要注意兼容性和语义性问题。在移动…

Yolo v5 pytorch模型转onnx用c++进行推理

本文介绍如何使用u版的yolov5 模型转成 onnx模型&#xff0c;使用python代码推理onnx模型&#xff0c;然后再使用c代码推理onnx模型,本文使用yolov5 s版本&#xff0c;在m,l,x都试过可行环境配置 :1 u版的yolov5 4.0 版本&#xff0c;其他版本没有试过 https://github.com/ultr…

console调试,chrome调试工具之Console

背景 console作为web调试的一项重要技能大多数开发人员都是console.log()一把梭到底&#xff0c;其实console对象上还有很多可用于调试的方法 控制台打印类别&#xff0c;conso调试面板 第一个是全部消息&#xff0c;第二个是自己在控制台里使用console指令打印的&#xff0…

【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢

HashMap中为什么引入红黑树&#xff0c;而不是AVL树呢1. 概述 开始学习这个知识点之前我们需要知道&#xff0c;在JDK1.8 以及之前&#xff0c;针对HashMap有什么不同。 JDK 1.7的时候&#xff0c;HashMap的底层实现是数组 链表JDK1.8的时候&#xff0c;HashMap的底层实现是数…

Web3中文|Web3再起恐慌:全球第三大稳定币BUSD发行商面临诉讼

俗话说&#xff0c;老大的位置不好当。作为全球最大加密资产交易所BA的CEO&#xff0c;赵长鹏的生活可谓一刻都不能平静。 刚刚结束与SBF的口舌之争&#xff0c;从FTX倒台的熊市中挺过来&#xff0c;赵长鹏又遇到了新的麻烦。 Nansen数据显示&#xff0c;用户在过去24小时内从…

LabVIEW开发的上位机界面在其它电脑分辨率下-界面窗口偏移显示问题解决

目录 问题&#xff1a; 分析&#xff1a; 解决方式 1&#xff09;编辑前面板边界适配对应的分辨率 2&#xff09;编辑前面板窗口-窗口边界 3&#xff09;编辑前面板窗口-保持窗口比例 4&#xff09;设置VI属性--窗口运行时位置居中显示 参考 问题&#xff1a; 在基于La…

图的基本概念

1、图的概念 G(V&#xff0c;E) 图G由节点集合VV(G)和边集合EE(G)组成&#xff0c;其中V为非空有限集合。 集合V中的节点&#xff08;node&#xff09;用红色标出&#xff0c;通过集合E中黑色的边&#xff08;edge&#xff09;连接。 G的边&#xff1a;E中的每个顶点对&#x…

SAP 如何在调式中查找标准程序的权限对象

当我们尝试分析授权问题&#xff08;SU53、SU24……&#xff09;时&#xff0c;有许多不同的交易很有用。 但是&#xff0c;在某些情况下&#xff0c;在调试中检查授权对象很有用。 这很有用&#xff0c;例如&#xff0c;如果我们想确切地知道在事务执行的哪个点调用了给定的授…

关键路径法和最小生成树

1、关键路径法概述关键路径的服务对象是“AOE网”&#xff08;Activity on edge netword&#xff09;。不同的是AOV网只考虑顶点事件&#xff0c;而AOE网除了顶点事件&#xff08;如v[0]&#xff09;外&#xff0c;重点还有就是有向边还表示了活动(如e[0][1] a0)。其中顶点事件…

重生之我是赏金猎人-SRC漏洞挖掘(二)-逆向app破解数据包sign值实现任意数据重放添加

0x00前言 本期登场的目标虽不是SRC&#xff0c;但是整个漏洞的利用手法很有学习意义。目前在很多大厂的http数据包中都会添加sign值对数据包是否被篡改进行校验&#xff0c;而sign算法的破解往往是我们漏洞测试的关键所在~ 本人在一些漏洞挖掘实战中经常发现在破解sign值后&a…

【电商】订单拆单的流程中,系统需要做哪些工作?

什么是拆单&#xff1f; 在网上购买商品下单成功后&#xff0c;过一段时间再次浏览时&#xff0c;有时会发现你的订单会变成两个或多个&#xff0c;这就是系统做了拆单而导致的。 拆单&#xff0c;就是将一个大的订单依据某些规则的集合&#xff0c;将其分解成两个或多个子订…

内核模块(编译方法)

目录 一、向内核添加新功能 1.1 静态加载法&#xff1a; 1.2 动态加载法&#xff1a; a、新功能源码与Linux内核源码在同一目录结构下时 b、新功能源码与Linux内核源码不在同一目录结构下时 c、主机ubuntu下使用ko文件 d、开发板Linux下使用ko文件 二、内核模块基础代码…

链表题目总结 -- 回文链表

目录一. 从中心开始找最大的回文字符串1. 思路简述2. 代码3. 总结二. 判断是否为回文字符串1. 思路简述2. 代码3.总结三. 判断是否是回文链表1. 思路简述2. 代码3. 总结4. 优化解法一. 从中心开始找最大的回文字符串 题目链接&#xff1a;没有。给定一个字符串s&#xff0c;从…

平面电路和非平面电路

主要区别 参考&#xff1a;https://www.eda365.com/article-192836-1.html 平面电路&#xff1a;在平面上的每个元件的两端都可以不用交叉而连接到电路&#xff1b; 非平面电路&#xff1a;在平面上存在元件两端无法不交叉线路连接到电路。 例子&#xff08;上面参考连接中&a…

继企业级信息系统开发学习1.1 —— Spring配置文件管理Bean

骑士救美计划采用构造方法注入属性值1、创建救美任务类2、创建救美骑士类2、创建救美骑士类3、创建旧救美骑士测试类3、配置救美骑士Bean5、创建新救美骑士测试类采用构造方法注入属性值 1、创建救美任务类 在net.huawei.spring.day01包里创建RescueDamselQuest类 Rescue Da…

【重点】Selenium + Nightwatch 自动化测试环境搭建

开始搭建 1. 创建项目 我们来找个地方新建一个目录&#xff0c;起名为 "my-test-toolkit"&#xff0c;然后在目录内使用终端运行 npm init -y 生成项目配置文件package.json。 2. 安装工具 然后我们将安装 Selenium 与 Nightwatch。 安装 selenium-standalone&…

在哔站黑马程序员学习Spring—Spring Framework—(五)spring的第二特征AOP面向切面编程

一、AOP概念、作用AOP和OOP一样都是一种编程思想&#xff0c;用来指导我们做程序的。OOP面向对象编程指导我们做类、对象、继承、封装、多态等。AOP面向切面编程作用&#xff1a;在不惊动原始设计&#xff08;不改变源代码&#xff09;的基础上为其进行功能增强。核心&#xff…