广州智能建站软件,怎么建设一个宣传网站,网页设计培训一般多少钱,必应网站建设先从网络时延抖动的根源说起。
信息能否过去取决于信道容量#xff0c;而信道利用率则取决于编码。这是香农定律决定的。
考虑到主机处理非常快#xff0c;忽略处理时延#xff0c;端到端时延就是信息传播时延#xff0c;但现实中通信信道利用率非常不均匀#xff0c;统…先从网络时延抖动的根源说起。
信息能否过去取决于信道容量而信道利用率则取决于编码。这是香农定律决定的。
考虑到主机处理非常快忽略处理时延端到端时延就是信息传播时延但现实中通信信道利用率非常不均匀统计复用的意思是某些时刻信息量太大以至信道过载某些时刻信息量过小导致信道轻载甚至空载因此引入少量 buffer 平滑这种统计波动同时提高信息到达率和信道利用率。
关于统计复用网络的全部就以上这么多抖动则来源于对以上描述具体操作时的弄巧成拙。
信息在链路某处若超过信道容量一定过不去问题的核心是在实际有空闲容量资源发送它前你最多容忍多久而这恰恰不由你决定它不仅由 buffer 大小决定还由通信协议决定。
buffer 过大导致的排队时延是不得已的你的应用对 0buffer_size/bw 的时延抖动无能为力。只能寄希望于设备厂商压缩 buffer 大小。
协议时延分端到端协议抖动和底层协议抖动而端到端协议抖动可以避开。比如应用层自己都认为可以丢弃的数据tcp 却擅作主张非要死命重传而引入至少 rtt 量级的时延抖动这时就可以选择 udp 进行有损传输。
底层协议抖动比较难避开。比如 wifi 提供一种尽力而为的传输服务如果传输一帧时出现冲突wifi 会自行重试多次而引入 0n*10ms 级的时延抖动即使应用层并不需要这种努力也不行。
网络中或大或小的 buffer网络边缘的无线 wifi再加上使用了 tcp都是抖动的根源端到端时延不可能稳定解决问题的方法很简单在应用层加 buffer这才是问题的实质buffer 带来的问题通过再加一个 buffer 就能解决重读上面的 3 个段落可将 buffer 分两类常规意义上的交换机可排队 buffer 算空间类而 tcpwifi 类的重传重试行为算时间类两类 buffer 共同引入了时延抖动。
buffer 引入的时延抖动显然是一种统计波动而统计波动只要一个 buffer 就能平滑这不圆回来了一个圈。
最近帮朋友做一个无 buffer 协议顺带着就聊聊 buffer 的本质。无 buffer 协议是一个非常简单的传输协议“信息能否过去取决于信道容量而信道利用率则取决于编码。” 没 buffer 什么事意思是如果过不去就随他能过多少是多少通过编码来完全或部分恢复丢失的信息这便是一个无抖动的 有损传输协议这也是信息传输的本质需求它从来不要求 100% 高保真本质上有损的传输为什么用时间来抵偿呢。
为啥长链路吞吐干不过短链路困扰程序员多年的长肥管道问题都能用香农公式说明白信道容量和带宽 B 和信噪比 S/N 正相关随着链路长度增加BS 不变N 在增加S/N 减小。印证我之前文章里另一种解释随链路长度增加好事发生的概率是各好事的概率相乘坏事则是各概率相加就殊途同归了。
计算机网络不讲这个但本质上还是这个。计算机网络讲的是在目标处 100% 保真重现源信息又不能违背香农自然律就必须用协议靠时间去弥补信道固有损失吞吐 保真数据量/时间无论在数据中加冗余还是抵偿了时间表现都是降低了吞吐。
用空间换时间提高信噪比用冗余编码确保信息保真带宽不满足时等一会儿再发信息丢失了重新发一遍这些其实都是在对抗不了香农定律后试图弥补损耗的不同方法但计算机网络围绕基于 buffer 的 “包交换”也就是统计复用的分组交换技术展开因此后两种方法值得关注其中buffer 是核心。 有趣的是包交换之前的打电话恰恰相反因此你听到的电话那头的声音明显失真但绝不卡顿。
明显失真但绝不卡顿看上去不错但计算机网络却是明显卡顿但绝不失真。
来看 buffer 的本质。
把 buffer 看作一种信用货币而带宽则是我们买东西的实际货币就好理解了。现代社会实际货币也算信用货币就像 bdp bw * proprt buffer 一样。通俗讲信用货币就是每一元的币值不必对应某种等价物 比如黄金而可以 “凭信用” 发行货币只要拿到货币的人可以偿还等值就行。
信用货币产生于交易规模的扩大。只有 10 人参与交易黄金可以分属 10 人参与交易的人达到 10 亿人仍然用黄金就不现实了一个满怀信心的企业家开发一款注定能卖钱的新产品需借款 10 万块时可能没有任何地方有价值 10 万的黄金借给他如果他要借 100 亿这个数可能超过当前全世界所有黄金总价值这是不可能的这是黄金等价物的 bug信用货币修正了这个 bug无论多少钱把时间算进来只要他在未来能偿付这笔钱就可以无中生有。
解决了大规模交易问题坏处也显而易见即信用膨胀(你可能已经想到 bufferbloat 了)。银行疯狂放贷以为这些钱可以在未来被勾销但如果借钱的人纷纷还不上怎么办一次大额借款不可怕海量不受控的中小额借款才可怕这就是次贷危机。
大规模通信需要 buffer 平滑大额需求就像借贷在未来以带宽勾销。buffer 太小无法覆盖需求太大又属于信用超发勾销前时间太久而 bdp 过大buffer 度量信用额度一处部署 buffer处处需要部署 buffer 以吸纳它处的信用超发最终实际可用带宽(流通货币)没有任何变化但 bdp 却增大这就带来通胀风险一个 sender 想要保住它现有吞吐越来越大的 buffer 中它要发送越来越多的报文只为保住配额表现为物价飞涨。
上述场景适合描述 10 年来的房产市场从银行借一笔钱还给开发商月薪大涨却拿一大部分还银行最终实际能消费的钱却没有任何改变。当交换机意识到这个问题时aqm 会丢包来触发 buffer 通缩各个 sender 降低 cwnd 回归现实对于现实世界失业断供也会让人们做价值回归随之而来的可能就是通缩。
显而易见的经济规律配备合理的玩法网络流量在 buffer 调节下自然也是繁荣与萧条的此起彼伏波动时延抖动是固有的根植于 buffer。然而 rdma/roce 促进的 pfc(priority flow control) 却把 buffer 玩成了花。
当次贷危机已发生解题的有效方法就是促进破产这理论不见得恒对但破产确实能消除债务。网络拥塞后丢包不仅仅是通知 sender也确实缓释了当前 buffer消除了部分作为债务的 queue减缓了拥塞的进一步危害。可 pfc 反压是什么鬼
拥塞只影响当前交换机流量甚至在 codel 起作用时只影响单流拥塞不出交换机就地解决。而 pfc 则将拥塞状态蔓延一个 buffer 堆积造成一个 buffer 树一起堆积多少无关流量受害甚至 deadlock然后是一系列解决特定问题比如 pfc-deadlock 的顶会奇技淫巧小范围烂账迅速蔓延成次贷危机以及随之而来的新政。
pfc 本质上要提供一个无丢包网络但根据信道的香农定律绝对不丢包不可能而弥补丢包必然引入不可预期的时延抖动无论 buffertcp 还是 wifi都以时延抖动为代价提供了不丢包和尽量不丢包的保证而 pfc 做同一类事的方式最不雅且鲁莽它不惜影响网络全局状态只为不丢包。
历史早就过去但历史的方案还在这就有大问题。rdma 需要一个无损网络只因 gbn 代价太大而在硬件中实现 sack 代价更大pfc 恰好以小代价提供了无损网络的底层。如果非要保留 pfc不如在每交换机 buffer 旁边部署一个副 buffer大小大概一个 bdp在通知到 sender 抑制速率前继续缓存但千万别把状态反压给上游拥塞不蔓延是原则。
人们太执着于提供一个可靠传输协议提供一个无损传输网络对丢包天然抵触以为传输就应该完全可靠人们用完美保真的态度看待传输这是典型的计算机分层方法论只关注接口语义而不管细节但这种方法论同时也给人们带来了很大负担。
共享带宽链路上跑 capacity-searching 协议必然会冲突排队甚至丢包解决这些必然发生的问题就是协议的目标也正是解决这些问题的进展把事情搞得越来越复杂。计算机的视角下通信的本质被分层协议模型完全掩盖。
换一种思路以通信视角看传输并配合按需重传。以明确的 nak 请求重传取代擅自 arq。配合精致的冗余编码buffer 也可同步减少以降低时延抖动不用再怕丢包有些数据是可丢的不可丢的如果不能从冗余中恢复还可以请求重传而这一切都在应用程序自己的控制范围内也就从根本上消除了它不想要的时延抖动。
幸运的是随着流媒体发展需求越发允许失真但不接受卡顿回归了信息传输的本质。传输优化越发倾向于精巧编码 fec 而不是 buffer-oriented cc(先拥塞后控制)接受你最低限度接受的剩下的放弃掉不要。
信道容量由香农定律限定而编码说来如何尽量用短数据编码长数据(这里面包含了压缩)并提供冗余规矩一样提供冗余不苛求信道传输量尽可能小。
假设要编码 s 1234567890987654321直线 y ax s 上一定存在一个点 P 使 {a, P} 比 s 更短传输 {a, P} 即可receiver 取斜率为 a过点 P 直线的截距即可解码原始数据 s如果找到多个这样的点同时传输 {a1, P1}{a2, P2}…{an, Pn} 可提供冗余receiver 只要收到任意一个即可还原 s。
同理可提供 m 次曲线编码大数据提供能唯一确定该曲线且可用更短数字编码的 n 个点同时传输多个 n 次拼接的短数据即可提供冗余可视 receiver 的保真要求调节冗余度由此曲线不必精确亦可拟合。很多年前写的 密钥分存 比较有趣供参考。
问题是怎么找到这些编码更短的点比如事先不知 y (x - 1)(x - 2) 当 x 100000 时y 9999899998现在若要编码 9999899998只需找到并传输 {1, 2, 5} 即可receiver 即可根据二次曲线解码 y。这是技巧和算力的事但和重传重试buffer 相比性价比大概提升守恒律不费电不行提高信号功率也得费电。
上周末写的 因式分解的几何意义 里也有编码的启发一大一小正方形固定挨在一起就可以决定很多比两个正方形边长更长的数字主要就是短数据决定了什么长数据是不变的。
正式的标准化编码原理我这里不提请自行学习。
总之让传输回归自然律。 接着昨天的 tcp pure ack “反馈风暴”以通信的视角重新看网络传输这件事。 浙江温州皮鞋湿下雨进水不会胖。