从阻抗匹配看拥塞控制

先来理解阻抗匹配,但我不按传统方式解释,因为传统方案你要先理解如何定义阻抗,然后再学习什么是输入阻抗和输出阻抗,最后再看如何让它们匹配,而让它们匹配的目标仅仅是信号不反射,以最大能效被负载接收。

既然这样,何不直接从信号反射以及如何让它不反射入手。

于是我换一种方式解释阻抗匹配。

假设一个非常良好的电路,它可以最佳(最逼近理想状态,极端接近无损)的方式传输脉冲信号:
在这里插入图片描述

现在拿掉 10 欧负载换成 100 欧负载,它对电压推动的电流阻碍显然更大(朴素的阻抗),会造成电容充电超过 5 V,接下来信号通过这段电路后,额外的 (m - 5)V 会触发电容往回放电,而额外放点产生额外信号:
在这里插入图片描述

反射的本质在于处处存在的电容(电路里的电容以及分布电容),因此我省略了处处存在的电感(电路里的电感以及分布电感)。解法也很直接,在前面串联一个 90 欧电阻,或者在后面并联一个满足 1/x + 1/100 = 1/10 的电阻即可。

现在再来深入理解一下背后的成因就简单了。电容有什么特殊的?

信号可看做变化的电压,变化的电压可对电容充电,而电容异步放电则产生新的变化的电压,和信号叠加就污染了信号。变化导致的新变化被释放与原变化叠加,而电容恰好可存储电荷产生变化的电压。解决方案就是让负载把变化的电压全部吸收而不被异步保存在电容里。

当电阻变化时必须小心翼翼处理电容和电阻的关系。处理好关系的电路就是阻抗匹配电路,意思是发出的信号恰好是负载完全吸收的,没有反射,否则就要白白消耗掉能量,这部分能量恰好来自信号反射,反射的能量永远只有负效应。这是一个自然律,属于守恒律的一种体现,不可违背。

直流阻抗匹配可称做电阻匹配,即两个电阻相等时,功率最高。虽然无法从变化的电压理解直接阻抗,但在微观层面,两个电阻不相等时,考虑分布电容和分布电感自感,它依然是电容充放电导致的信号反射导致。

有趣且稍微讽刺的是,在宏观的网络传输领域,对于广域网,专家们采用了直流电阻匹配模型,却完全没有注意它的微观结构,而对于 DCN,专家们采用了交流信号模型却忽略 “阻抗匹配”。

在广域网,buffer 被单独考虑,就像一个直流回路的固定的电阻,雅各布森管道中,bdp = buffer,但实际上,它的作用应该是交流回路的电容,这个认知颠倒,是网络拥塞和丢包重传等复杂问题的根源。

一个大 buffer 后一个小 bw 端口,就像一个大电容后并联一个小电阻,电容非常容易被过度充电后 “放电反射噪声”,而人们对其视而不见的原因仅仅是因为数据包不会向前反射。

由于大电容放电受到到达信号和负载吸收的共同影响,放电时刻不确定,和 buffer 清空时刻不确定一样,而 sender 重传取决于 rtt,而 rtt 部分取决于 buffer,重传流量确实是 buffer 的反射,而重传流量与原始流量叠加在一起,对 buffer 进行无差别影响 “充放电”,形成一个闭环回路。而整个回路的传输能效取决于阻抗是否匹配,显然按照上面的论述,广域网的阻抗是不匹配的,因此传输效能很低。

遗憾的是,人们一开始就没有向着阻抗匹配的方向(delay-based cc 有这个意思)去优化而选择了 aimd,而 aimd 准确说并不是做拥塞控制的。

变化的变化产生新的变化叠加到原始变化,这是非常复杂的阻抗匹配问题,在 DCN,人们竟然敢以为 PFC 是方案而不是问题本身。简单讲,PFC 就是个故意的反射实例,任何数据只有被 receiver 接收后才算数,否则被阻滞在网络中并不比丢掉它好,这两种情况对于 receiver 而言都是没收到。

人们一直试图端到端区分拥塞丢包和随机丢包或者试图找一种算法直接检测拥塞,如果拥塞,就意味着存在某种失配,调整 cwnd/pacing 是唯一应对。检测到拥塞,就调整 “阻抗”,这是一种很自然的方式,减少电容电荷,避免反射。

此前我提到过,端到端由于信息精度存在上限,无法区分丢包类型,更别提拥塞检测,但随后我也提过,转发节点的信息非常精确,它可通过 ECN 间接告诉 sender,然而还有更有效的方法,直接调整 buffer 或带宽,连带着调整 wred,这就是阻抗匹配的思路,要么sender 串个电阻,要么 receiver 并个电阻。

统计复用网络上的阻抗匹配本身只有统计意义,要拿 buffer 统计期望说话,任何瞬时度量对整体结果都无效,这是与电路的阻抗匹配完全不同的地方。但与此相关,这就是我一直质疑 bbr 的点,bbr 的推荐参数配置到底有多大的普遍性呢,它试图以单流精确度量网络的方法论是不是也是错误的呢?

最后看一个与电路类似的系统,人体循环系统,全靠时钟滴答驱动,精确阻抗匹配。

从心脏泵出的血具有波动性,即心跳和脉搏,依靠这种波动动力将血液推到全身。进化几乎完全避免了血液反射造成的能量损耗,方案很简单,主干和分支截面积收敛比等于 1。随着血管分支越来越多,血管越来越细,而越细的血管阻力越大,血流越慢,这正好可以让血细胞安排各类氧气,二氧化碳,营养物质在如此低速下上下车:
在这里插入图片描述

网络收敛比为 1,完全避免了拥塞(血栓容错的弹性不考虑),值得注意的是,循环系统不以拓扑显示差异,而以血管形态(长度和密度)显示差异,比如不同器官的血管形态也不同,但无论如何,干线和分支的收敛比都是 1,最终某处分得的血量就是 C * l1/L1 * l2/L2 …

可见,三种形态的网络,电路,互联网/DCN,循环系统展示三种特别之处,但无论如何阻抗匹配的含义是一致的:减少流量的变化引起新的变化与原始流量叠加,这情况的后果就是能耗被白白浪费掉。

浙江温州皮鞋湿,下雨进水不会胖。

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

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

相关文章

Amazon CodeWhisperer 开箱初体验

文章作者:Coder9527 科技的进步日新月异,正当人工智能发展如火如荼的时候,各大厂商在“解放”码农的道路上不断创造出各种 Coding 利器,今天在下就带大家开箱体验一个 Coding 利器: Amazon CodeWhisperer。 亚马逊云科…

99基于matlab的小波分解和小波能量熵函数

基于matlab的小波分解和小波能量熵函数,通过GUI界面导入西储大学轴承故障数据,以可视化的图对结果进行展现。数据可更换自己的,程序已调通,可直接运行。 99小波分解和小波能量熵函数 (xiaohongshu.com)https://www.xiaohongshu.co…

【LeetCode每日一题合集】2023.11.27-2023.12.3 (⭐)

文章目录 907. 子数组的最小值之和(单调栈贡献法)1670. 设计前中后队列⭐(设计数据结构)解法1——双向链表解法2——两个双端队列 2336. 无限集中的最小数字解法1——维护最小变量mn 和 哈希表维护已经去掉的数字解法2——维护原本…

二分查找|前缀和|滑动窗口|2302:统计得分小于 K 的子数组数目

作者推荐 贪心算法LeetCode2071:你可以安排的最多任务数目 本文涉及的基础知识点 二分查找算法合集 题目 一个数组的 分数 定义为数组之和 乘以 数组的长度。 比方说,[1, 2, 3, 4, 5] 的分数为 (1 2 3 4 5) * 5 75 。 给你一个正整数数组 nums 和一个整数…

response应用及重定向和request转发

请求和转发: response说明一、response文件下载二、response验证码实现1.前置知识:2.具体实现:3.知识总结 三、response重定向四、request转发五、重定向和转发的区别 response说明 response是指HttpServletResponse,该响应有很多的应用&…

Kafka在微服务架构中的应用:实现高效通信与数据流动

微服务架构的兴起带来了分布式系统的复杂性,而Kafka作为一款强大的分布式消息系统,为微服务之间的通信和数据流动提供了理想的解决方案。本文将深入探讨Kafka在微服务架构中的应用,并通过丰富的示例代码,帮助大家更全面地理解和应…

PaddleClas学习3——使用PPLCNet模型对车辆朝向进行识别(c++)

使用PPLCNet模型对车辆朝向进行识别 1 准备环境2 准备模型2.1 模型导出2.2 修改配置文件3 编译3.1 使用CMake生成项目文件3.2 编译3.3 执行3.4 添加后处理程序3.4.1 postprocess.h3.4.2 postprocess.cpp3.4.3 在cls.h中添加函数声明3.4.4 在cls.cpp中添加函数定义3.4.5 在main.…

时间序列预测 — VMD-LSTM实现单变量多步光伏预测(Tensorflow):单变量转为多变量

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 1.3 缺失值分析 2 VMD经验模态分解 3 构造训练数据 4 LSTM模型训练 5 预测 1 数据处理 1.1 导入库文件 import time import datetime import pandas as pd import numpy as np import matplotlib.pyplot as plt f…

优化算法 学习记录

文章目录 相关资料 优化算法梯度下降学习率牛顿法 随机梯度下降小批量随机梯度下降动量法动量法解决上述问题 AdaGrad 算法RMSProp算法Adam学习率调度器余弦学习率调度预热 相关资料 李沐 动手学深度学习 优化算法 优化算法使我们能够继续更新模型参数,并使损失函…

Elasticsearch:使用 Elasticsearch 向量搜索及 RAG 来实现 Chatbot

Elasticsearch 的向量搜索为我们的语义搜索提供了可能。而在人工智能的动态格局中,检索增强生成(Retrieval Augmented Generation - RAG)已经成为游戏规则的改变者,彻底改变了我们生成文本和与文本交互的方式。 RAG 使用大型语言模…

MongoDB的删除文档、查询文档语句

本文主要介绍MongoDB的删除文档、查询文档命令语句。 目录 MongoDB删除文档MongoDB查询文档 MongoDB删除文档 MongoDB是一种基于文档的NoSQL数据库,它使用BSON格式存储文档。删除文档是MongoDB数据库中的常见操作之一。 下面是MongoDB删除文档的详细介绍和示例&am…

导入自定义模块出现红色波浪线,但是能正常执行

问题描述: 导入自己定义的模块时,出现红色波浪线,可以继续执行 解决: 在存放当前执行文件的文件夹右键,然后将其设置为sources root即可 结果:

基于深度学习yolov5实现安全帽人体识别工地安全识别系统-反光衣识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 实现安全帽人体识别工地安全识别系统需要使用深度学习技术,特别是YOLOv5算法。下面是对基于YOLOv5实现安…

带你真正理解web地图切片规则

很多时候我们即使做完了项目还是对切片规则一知半解,只知道照着例子写代码,不理解WMTSCapabilities文件中参数的具体含义,也无法理解切片规则是如何产生的,不知道经纬度切图和平面切图的差别是啥,等等种种疑问&#xf…

Leetcode 39 组合总和

题意理解: 一个 无重复元素 的整数数组 candidates 和一个目标整数 target 从candidates 取数字,使其和 target ,有多少种组合(candidates 中的 同一个 数字可以 无限制重复被选取) 这道题和之前一道组合的区别&am…

【51单片机系列】74HC595实现对LED点阵的控制

本文是关于LED点阵的使用,使用74HC595模块实现对LED点阵的控制。 文章目录 一、8x8LED点阵的原理1.1 LED点阵显示原理1.2 LED点阵内部结构图1.3 开发板上的LED点阵原理图1.4 74HC595芯片 二、使用74HC595模块实现流水灯效果三、 使用74HC595模块控制LED点阵对角线亮…

python基于DeeplabV3Plus开发构建手机屏幕表面缺陷图像分割识别系统

Deeplab是图像分割领域非常强大的模型,在前面的博文中我们也进行过很多相应项目的开发实践,感兴趣的话可以自行移步阅读即可: 《基于DeepLabv3Plus开发构建人脸人像分割系统》 《基于DeepLabV3实践路面、桥梁、基建裂缝裂痕分割》 《基于D…

【链表Linked List】力扣-203 移除链表元素

目录 题目描述 解题过程 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5…

快速学会绘制Pyqt5中的所有图(下)

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图(Item View) 快速弄懂Pyqt5的4种项目部件(Item Widget) 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

鸿蒙原生应用开发——分布式数据对象

01、什么是分布式数据对象 在可信组网环境下,多个相互组网认证的设备将各自创建的对象加入同一个 sessionId,使得加入的多个数据对象之间可以同步数据,也就是说,当某一数据对象属性发生变更时,其他数据对象会检测到这…