弱网(不限于 Wi-Fi)环境的传输优化分析

news2024/10/7 15:16:09

参见 Wi-Fi弱网传输优化不成功有感

早在几年前还做传输优化时,我就非常不赞同在弱网环境激进传输的优化策略,我一直觉得这是在劣化传输,这观点一直影响着我,我也屡次因为这个与经理发生冲突。这观点如下表述:

  • 弱网环境用保守策略,保时延而不是赌带宽;
  • 好的网络用激进策略,夺带宽同时赌时延。

弱网传输优化一直是从顶会到会议室争论的焦点,但所出之策全都纯属屎上雕花,就好比在教你如何用五菱宏光在颠簸的乡道开出 120 码的时速一样,本身就是弱网,难以预测,若难以预测,两个办法,一就是不预测,二就是保守预测,问题就解了,剩余的钱财和精力买更好的设备,升级网络则已。

弱网不能优化,弱网只能升级,而传输协议跟着随行。以下简单分析。
设每次传输数据量为 M,丢包率 p,带宽为 C,则成功传输一次的概率为 1 - p,根据伯努利试验几何分布推导,传输 M 直到成功的次数为 1 1 − p \dfrac{1}{1-p} 1p1,所以总传输时间 T = M C ⋅ ( 1 − p ) T=\dfrac{M}{C\cdot(1-p)} T=C(1p)M,定义传输效能:

E = C T = C 2 ⋅ ( 1 − p ) M E=\dfrac{C}{T}=\dfrac{C^2\cdot(1-p)}{M} E=TC=MC2(1p)

但做传输优化的小经理们均青睐激进策略(比如每报文发多遍),我在此将此行为泛化,不区分原数据和重传,仅将激进刻画为传输 “重复数据”,旨在快速恢复丢包或冗余防丢包,无论如何,激进行为占据了部分有效带宽,设激进程度为 r,则有效带宽 C ′ = C ⋅ ( 1 − k r ) C'=C\cdot(1-kr) C=C(1kr),而一次成功传输的概率变为 1 - p*(1 - r),传输到成功的次数为 1 1 − p ⋅ ( 1 − r ) \dfrac{1}{1-p\cdot(1-r)} 1p(1r)1,传输时间变为 T = M C ⋅ ( 1 − k r ) ⋅ ( 1 − p ⋅ ( 1 − r ) ) T=\dfrac{M}{C\cdot(1-kr)\cdot(1-p\cdot(1-r))} T=C(1kr)(1p(1r))M,加入 r 后的传输效能:

E = M T = C 2 ⋅ ( 1 − k r ) 2 ⋅ ( 1 − p ⋅ ( 1 − r ) ) M E=\dfrac{M}{T}=\dfrac{C^2\cdot(1-kr)^2\cdot(1-p\cdot(1-r))}{M} E=TM=MC2(1kr)2(1p(1r))

对 E 求关于 r 的偏导可获得 r 和 p 的关系对 E 大小的影响,但从 gif 图上看更直观:
在这里插入图片描述

由是观之,在 p 比较大时,激进程度 r 会带来正向影响,即快速恢复丢失的数据的同时,并不损失多少带宽,故 E 是递增的,而当 p 比较小时,激进程度只做一些无用功,无论如何 E 都会递减。

这看起来推翻了我自己的结论而不是证明,结论变成了 “若丢包率很高,激进会带来好处”。对,这就是直觉,但这是错觉。

到底哪里出了问题?

上述建模过程默认了一个前提,只要借用了带宽,就一定能恢复丢包,但这是不对的,明月光会射进沟渠,而不是你的真心。弱网并非均匀的等比兑换,均匀等比兑换的策略看这个:教你如何抢带宽,pixie。而弱网环境并不适用。

特别是弱网环境,在弱网环境,弱的本质是抖动,即借用带宽激进重传可能会造成拥塞加剧进而造成更多丢包,因此模型应该修改,加入抖动。

有效带宽依然不变 C ′ = C ⋅ ( 1 − k r ) C'=C\cdot(1-kr) C=C(1kr),而一次成功传输的概率变为 1 - p*(1 + g*r),g 为一个抖动指标度量,传输到成功的次数为 1 1 − p ⋅ ( 1 + g ( t ) ⋅ r ) \dfrac{1}{1-p\cdot(1+g(t)\cdot r)} 1p(1+g(t)r)1,传输时间变为 T = M C ⋅ ( 1 − k r ) ⋅ ( 1 − p ⋅ ( 1 + g ( t ) ⋅ r ) ) T=\dfrac{M}{C\cdot(1-kr)\cdot(1-p\cdot(1+g(t)\cdot r))} T=C(1kr)(1p(1+g(t)r))M,加入 r 后的传输效能:

E = M T = C 2 ⋅ ( 1 − k r ) 2 ⋅ ( 1 − p ⋅ ( 1 + g ( t ) ⋅ r ) ) M E=\dfrac{M}{T}=\dfrac{C^2\cdot(1-kr)^2\cdot(1-p\cdot(1+g(t)\cdot r))}{M} E=TM=MC2(1kr)2(1p(1+g(t)r))

g 可定义如下:

# low, high 表示丢包原因,越小越容易恢复, 差值越大抖动越大
l, h = -1, 2
def g():
  return random.uniform(l, h)

整个代码如下:

l, h = -7, -3
def g():
  return random.uniform(l, h)

def f(x, k, p):
  g_val = g()
  return (1 - k * x) * (1 - p * (1 + g_val * x))


k, p = 1, 0.9
x = np.linspace(0, 1, 100)
y = [f(i, k, p) for i in x]

plt.plot(x, y)
plt.title(f'f(x)=(1-k*x)(1-p*(1+g*x)), p = {p}, low = {l}, high = {h}')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

再一次用不同的 g 来看 E 的变化。

首先看一个轻微抖动对程序员小经理的轻微欺骗,这种情况下只要稍微激进些,注意不要太大,还是可以用带宽换恢复效率:
在这里插入图片描述

现在看一个强烈抖动对程序员小经理的终极欺骗,小经理检测到一个丢包便让程序员写一段激进重传的代码,然而显然这是误判,我们看一下模型的表现:
在这里插入图片描述

然而还有一种情况,虽然抖动很大,但并没有拥塞加剧,这可能是信号本身造成的:
在这里插入图片描述

这种情况下无论激进与否,长远看影响不大,但可能会加剧抖动,使系统在不稳定边缘颠簸,也不是好事。综合看上面三个图,丢包率没变,但结果却大相径庭,小经理用相同的策略应对,失败是必然的。

所谓保守和激进主要量化误判,而在弱网环境误判的代价高昂,试错成本高。在优良的环境,错误不会叠加,反可采取激进策略,一次性快速解决问题。在好网环境,丢包是一个毛刺,在当时就是 100% 丢包率,激进策略落入上述模型的 x 关于 E 的上升区间。

这其实是一个普遍方法论,穷时则紧衣缩食,富时则花天酒地,往往在困难时期,越要采取稳健谨慎的策略。

弱网,强网,环境是客观的,无法改变,适应环境就能减少无用功。仍然用万能公式 E = bw / delay 观之,弱网环境激进传输,delay 很容易膨胀,bw 却不易增加,导致无用功增加,而好的网络,bw 很容易增加,delay 却可能依然不膨胀,激进一点何乐而不为。弱网激进属于硬刚。

以下仅对 RTO 重传建模展示更一般的原理,RACK,NACK 同理(但更复杂)。

假设(这是一个简单但合理的假设)网络时延 D 服从正态分布 N ( μ D , σ D 2 ) N(\mu_D,\sigma_D^2) N(μD,σD2),误判条件则是如果数据包的实际传输时间 D 超过了 RTO,sender 会误判报文丢失并进行重传,误判的概率 q 可以表示为 q = P ( D > R T O ) = 1 − Φ ( R T O − μ D σ D ) q=P(D>RTO)=1-\Phi\left(\frac{RTO-\mu_D}{\sigma_D}\right) q=P(D>RTO)=1Φ(σDRTOμD) 其中 KaTeX parse error: Undefined control sequence: \Ph at position 1: \̲P̲h̲ 是标准正态分布的累积分布函数。

丢包率 p 会影响网络的整体状态,进而影响 D 的分布。p 很大时,网络恶化, μ D \mu_D μD σ D \sigma_D σD 都可能增加,p 与 μ D \mu_D μD σ D \sigma_D σD 之间存在某种正相关的函数关系。可假设 μ D = α p + β \mu_D=\alpha p+\beta μD=αp+β, σ D = γ p + δ \sigma_D=\gamma p+\delta σD=γp+δ 其中, α \alpha α, β \beta β, γ \gamma γ, δ \delta δ 是常数,可以通过实验或历史数据拟合获得。

代入误判率 q,可以得到: KaTeX parse error: Expected group as argument to '\right' at end of input: …p+\delta}\right,简单的函数单调性分析获知,p 越大,q 越大。

则,合理的做法是,如果 p 很大,RTO 就要设置很大,但传统 tcp 的实现并未体现,所以这又是一个值得优化的点,未完待续…

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

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

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

相关文章

【SpringSecurity】基本流程

【中文文档: Spring Security 中文文档 :: Spring Security Reference】 【英文文档&#xff1a;Spring Security】 以下内容只是记录springsecurity最简单的一种验证流程&#xff0c;所有配置基本都是默认的配置。 引入依赖 <dependency><groupId>org.springf…

GPU Puzzles讲解(一)

GPU-Puzzles项目可以让你学习到GPU编程和cuda核心并行编程的概念&#xff0c;通过一个个小问题让你理解cuda的编程和调用&#xff0c;创建共享显存空间&#xff0c;实现卷积和矩阵乘法等&#xff0c;通过每个小问题之后还会奖励一个狗狗小视频&#x1f601; 下面是项目的仓库&…

大模型面试宝典:问题全集及权威解答

导读 自ChatGPT开启大模型时代以来&#xff0c;大模型正迎来飞速发展&#xff0c;现在从事大模型开发相关工作可谓是处在时代的风口。那么大模型面试需要哪些技能和技巧呢&#xff0c;本文详细整理了全套的面试问题及答案&#xff0c;希望对大家有所帮助&#xff01; 目录 [x…

脉冲神经网络(SNN)论文阅读(六)-----ECCV-2024 脉冲驱动的SNN目标检测框架:SpikeYOLO

原文链接&#xff1a;CSDN-脉冲神经网络&#xff08;SNN&#xff09;论文阅读&#xff08;六&#xff09;-----ECCV-2024 脉冲驱动的SNN目标检测框架&#xff1a;SpikeYOLO Integer-Valued Training and Spike-Driven Inference Spiking Neural Network for High-performance …

MySQL数据库专栏(二)SQL语句基础操作

目录 数据库操作 创建数据库 查看数据库 选择数据库 删除数据库 数据表操作 数据表数据类型 数据表列约束 数据表索引 创建表 查看表 查看表结构 删除表 数据表的增删改操作 …

自由学习记录

约束的泛型通配符? Java中的泛型 xiaomi和byd都继承了car&#xff0c;但是只是这两个类是car的子类而已&#xff0c;而arraylist<xiaomi> ,arraylist<byd> 两个没有半毛钱继承关系 所以传入的参数整体&#xff0c;是car的list变形&#xff0c;里面的确都能存car…

YOLO11改进 | 卷积模块 | 添加选择性内核SKConv【附完整代码一键运行】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 在标准卷积神经网络 (CNN) 中&#xff0…

单调栈day54|42. 接雨水(高频面试题)、84. 柱状图中最大的矩形、两道题思维导图的汇总与对比

单调栈day54|42. 接雨水&#xff08;高频面试题&#xff09;、84. 柱状图中最大的矩形、两道题思维导图的汇总与对比 42. 接雨水84. 柱状图中最大的矩形两道题思维导图的汇总与对比 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱…

2025,企业管理平台的理想模型V0.1

1.前言 近期出于综合考虑&#xff0c;准备休息一段时间......... 在这段时间里&#xff0c;准备重新梳理下企业管理平台应该具备的能力.并准备使用开源项目来一次组合式组装&#xff0c;最终形成一个初步可行的运行平台。 2.企业管理平台的主要组成 企业管理平台不是独立存…

《python语言程序设计》2018版第8章20题使用Rational类编写一个程序(上)-修改一下8-4Rational类我认为的错误

首先抄一下Rational类,可以安静的抄一遍 一、抄写中的问号 各种报错的截图1各种报错的截图2各种报错的截图3各种报错的截图4添加一个str我将n和d修改为self 书中214-215页间程序清单8-4的代码如下: class Rational:def __init__(self, numerator1, denominator0):divisor gcd(…

产品经理内容分享(二):AI产品经理的入门路线图

引言 想象这样一个场景&#xff1a;早晨的阳光穿透窗帘&#xff0c;投射在新一代智能机器人上&#xff0c;它正静静等待着你的第一个命令开始全新的一天。这样的场景听起来像是科幻小说里的情节&#xff0c;但实际上&#xff0c;这正是AI产品经理们工作的成果。如果你对这样的…

使用axios封装AJAX

一 、Http 请求报文 包括了三部分: 求情行、请求头,请求体。 1、请求行: 是HTTP请求的第一行,包含了请求方法、请求目标和HTTP协议版本。常用的请求方法有GET、POST、PUT、DELETE等,用于指定客户端希望服务器执行的操作。请求目标是指请求的资源路径,可以是一个具体的…

国外电商系统开发-运维系统资产属性-命令执行功能

当前开发中&#xff0c;还不支持点击拓扑图标打开资产的功能&#xff0c;后期有时间补全对应的开发。 该功能如同Xshell、SecureCRT、Putty一样&#xff0c;可以批量的发送系统命令&#xff0c;让Linux服务器执行。 默认情况下&#xff0c;系统已经选择全部主机&#xff0c;如果…

番外篇 | CRAS-YOLO:基于卫星图像的多类别船舶检测和分类

前言:Hello大家好,我是小哥谈。目前,基于卫星图像的多类别船舶检测和分类由于在军事和民用领域的重要应用而备受关注。针对传统检测效果不佳的情形,我们进一步提出了一种新的多类船检测,称为CRAS-YOLO,它由卷积块注意力模块(CBAM)、感受野块(RFB)和基于YOLOv5s的自适…

2024计算机毕业设计最简单的完成流程

一、计算机专业毕业设计选题-选题推荐 1.基于深度学习的生活垃圾智能分类系统&#xff08;微信小程序YOLOv5训练数据集开题报告中期检查论文&#xff09; &#xff08;1&#xff09;程序界面 &#xff08;2&#xff09;论文大纲 &#xff08;3&#xff09;论文详情链接 基于…

【高等代数笔记】线性空间(十九-二十四上半部分)

课程视频剪辑得太抽象了&#xff0c;一节课不能完整学完&#xff0c;拆的零零散散得。 3. 线性空间 3.19 满秩矩阵 【推论4】设 rank ( A ) r \text{rank}(\boldsymbol{A})r rank(A)r&#xff0c;则 A \boldsymbol{A} A的不为0的 r r r阶子式所在的列&#xff08;行&#x…

75 华三vlan端口隔离

华三vlan端口隔离 为了实现端口间的二层隔离&#xff0c;可以将不同的端口加入不同的VLAN&#xff0c;但VLAN资源有限。采用端口隔离特性&#xff0c;用户只需要将端口加入到隔离组中&#xff0c;就可以实现隔离组内端口之间二层隔离&#xff0c;而不关心这些端口所属VLAN&…

【每日一题 | 24.10.7】Fizz Buzz 经典问题

1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 个人主页&#xff1a;C_GUIQU 归属专栏&#xff1a;每日一题 1. 题目 Fizz Buzz 经典问题 2. 解题思路 【法1】逻辑硬解&#xff1a;按照题目逻辑分四种情况&#xff0c;用if else 判断即可。 【法2】switc…

大数据新视界 --大数据大厂之 Ibis:独特架构赋能大数据分析高级抽象层

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【电力系统】基于MATLAB的储能辅助电力系统调峰的容量需求研究

摘要 本研究基于MATLAB仿真平台&#xff0c;探讨了储能系统在电力系统中辅助调峰的容量需求问题。通过对风电、微型燃气机等分布式能源的实际出力曲线与理论输出进行比较分析&#xff0c;我们探讨了在不同负荷条件下储能系统的调峰能力。实验结果表明&#xff0c;储能系统的合…