从阻抗匹配看拥塞控制

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

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

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

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

现在拿掉 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,循环系统展示三种特别之处,但无论如何阻抗匹配的含义是一致的:减少流量的变化引起新的变化与原始流量叠加,这情况的后果就是能耗被白白浪费掉。

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

相关推荐

  1. 拥塞控制 计算机网络

    2023-12-09 12:54:03       39 阅读
  2. tcp拥塞控制详解

    2023-12-09 12:54:03       37 阅读
  3. 阻抗匹配--PCB布线

    2023-12-09 12:54:03       57 阅读
  4. 机器人阻抗控制“感觉”

    2023-12-09 12:54:03       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-09 12:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-09 12:54:03       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-09 12:54:03       82 阅读
  4. Python语言-面向对象

    2023-12-09 12:54:03       91 阅读

热门阅读

  1. Docker部署NFS服务

    2023-12-09 12:54:03       53 阅读
  2. 断点续传功能

    2023-12-09 12:54:03       63 阅读
  3. TypeError: Cannot set properties of undefined (setting ‘xx‘)

    2023-12-09 12:54:03       55 阅读
  4. Linux at命令详解:定时执行任务

    2023-12-09 12:54:03       50 阅读
  5. P1047 [NOIP2005 普及组] 校门外的树

    2023-12-09 12:54:03       63 阅读
  6. 探秘MSSQL存储过程:功能、用法及实战案例

    2023-12-09 12:54:03       60 阅读
  7. Effective C++(七):inline关键字, 降低文件间依存关系

    2023-12-09 12:54:03       55 阅读
  8. RLLIB:algo = Algorithm.from_checkpoint(ckpt)遇到error 3

    2023-12-09 12:54:03       49 阅读