共计 3968 个字符,预计需要花费 10 分钟才能阅读完成。
引言
从互联网诞生开始,网络吞吐量的限度、数据分组的失落、数据传输的提早和提早抖动等人为或意外的情况就紧紧的随同着互联网的倒退。而当今的互联网更是一个拥挤、忙碌和简单的宏大零碎,不同的网络服务和利用以竞争的形式共享雷同的网络基础设施收发流量。对于那些传统利用场景,比方 Web 浏览、文件传输或音视频点播等服务,因为这些场景下用户对于提早的容忍均在秒级甚至更大,而对网络抖动甚至无感知,所以应用传统的基于 cubic 或 reno 的 TCP 协定就可能较好的实现工作,这些拥塞控制算法偏向于塞满网络直到丢包产生而后极速退却,这就导致网络的拥挤水平总是处在激烈的变动之中。
而以实时音视频传输需要为代表的实时网络场景更关注的是在可承受的音视频品质下更低的提早,这就要求拥塞控制算法不能总将网络塞满而是要调整编码策略、发送在较低延时下可取得更佳主观体验所需码率的实时音视频数据,对于这点传统的 TCP 无奈满足需要,尽管有基于 BBR 的 TCP 拥塞控制算法,但如果须要定制场景并与媒体层联动的时候就面临批改协定栈代码的问题,这对于新性能的公布和版本的疾速迭代并不敌对,因而目前在实时网络行业深耕的各家厂商根本都会应用到 UDP 协定 + 自研弱网反抗算法的搭配。实时网络产品依附精确的带宽预计、高效的丢包反抗、正当的前向纠错等能力进步端到端通信品质、升高端到端通信提早。而领有牢靠且高效的评估产品对于晋升弱网反抗能力就变的至关重要。
理论网络的复杂性
理论网络的复杂性远超如下所列的范畴:
- 多数据流量带宽竞争
- 不同的收发设施类型(性能),不同的网卡硬件和驱动程序
- 不同的路由门路
- 不同的门路由不同节点序列形成
- 不同节点的硬件性能和软件算法差别
- 天文隔离的物理间隔
- 如果数据通过无线或挪动网络,那射频信号的影响就开始显著
- 信号强度、信噪比、物理遮挡
- 无线协定类型,底层协定的 FEC 或重传机制
- 多设施的竞争、同频烦扰和暗藏节点
网络伤害工具的性能和局限
理论可能的网络链路,数据流经验了各种网络节点和不同类型的设施和协定,不同设施的转发能力、转发提早都不尽相同:
为了构建和建模理论网络,咱们从理论网络中形象出了一组参数,用以形容理论网络的伤害水平。被形象为黑盒的网络链路:
用网络伤害仪提供稳固可控的弱网环境:
对网损工具的冀望
从对理论网络的探测和形象来看,咱们冀望网损工具有以下性能:
- 带宽限度能力
- 队列深度
- 突发流量
- 丢包能力
- 丰盛的丢包模型
- 固定提早能力
- 沉积突发能力
- 沉积速率和突发速率的管制
- 高频高精度的仿真参数批改响应能力
从应用的便利性来看,冀望网损工具有以下个性:
- 良好的扩展性
- 良好的可编程能力
- 良好的交互体验
网损工具解决的问题
对于设置指定的网络伤害的参数,网损仪可能实现不同网络参数的精确模仿,可能在网络链路中增加定时定量的牢靠网络伤害,可能进步网络状态的可控性和可复现能力。
网损工具的局限性
对于设置什么样的网络伤害,应用什么样的参数,网损仪自身并不会给出答案。因为网络自身的复杂性,实在网络仅对观测者提供无限的可见性,而目前整个行业对网络伤害的探测办法和后果并不齐备,所以目前市面上不同的网损工具反对的伤害性能和提供的伤害模型不尽相同,也不尽精确。
几款应用过的网络伤害工具
硬件产品
- S**
这是一款商业网络伤害仪器,反对模块化构建网络拓扑,能够别离设置每个模块的伤害参数,软件内置常见的通信设施仿真组件。
该设施的特点是仿真参数精度高,拓扑构建灵便。同时也要求使用者对须要仿真的网络拓扑和其中的网络节点有比拟清晰的认知,相当于去仿真一个靠近白盒的网络链路。
自动化方面反对 Restful API 接口调用。
- H**
这也是一款商业网络伤害仪,它将网络形象为两个方向的链路别离增加指定伤害,能够通过 filter 将指定流量导入不通的链路中进行伤害,相比之下这种实现形式更加靠近互联网的思维形式。
在试用这款设施的时候该款产品仍处在开发和高速迭代中,增加了不少对互联网行业更敌对的个性,比方:更多丢包模型的反对,更多品种的 jitter 散布反对,Python 调用接口的开发等。
应用下来这款产品在 UI 交互和零碎稳定性方面还有较大的晋升空间。
软件产品
- QNET – 我的项目地址
这是腾讯 WeTest 开发的一款网络伤害工具,目前反对 iOS 和 Android 平台。该工具通过 VPN 的办法代理本机流量实现网络伤害的注入,更适宜 Web 或一般类型 APP 开发的弱网测试需要,对于实时音视频这种流量较大的场景通过 VPN 代理的形式会导致显著的零碎性能问题,使得仿真准确性降落。
该产品的特点是内置了不少弱网场景的模型,比方:电梯、高铁、地铁场站场景等,也会更新基于腾讯服务器探测到的实时提早和 Jitter 作为仿真数据起源。
自动化方面 Andoid 平台反对 adb 形式的接口调用,iOS 平台目前还没有应用过。
- Clumsy – 我的项目地址
这是一款小团队的开源软件,目前仅反对 Windows 平台应用。
这款软件的性能绝对比较简单,甚至没有找到 Jitter 的设置办法。自动化调用方面也没有对应的接口反对。
但对于低成本的 Windows 单机弱网调试也算是填补了一个空白。
- Apple Network Link Conditioner – 我的项目地址
这款软件是作为 Apple 开发者工具存在的,别离反对 MacOS 和 iOS 设施。
性能方面也比较简单,除了带宽限度、丢包和提早外也没有看到 Jitter 相干的设置,不过该工具反对一些简略的网络类型的预置,但实现比较简单。
该功能模块在不同版本的 Apple 零碎中保护的较好,可用性和稳定性都比拟有保障,UI 也比拟简洁明了。
自动化方面能够通过 applescript 脚本管制,但控制精度较低,不适宜高频调用。
- Linux Traffic Control – 相干文档
赫赫有名的 TC 模块作为 Linux 内核的一部分存在,没有官网的 UI 界面适配。但江湖上流传着各种各样的 Wrapper 和第三方 UI。
因为 Linux 内核开源的个性使得 TC 领有无尽的可能性,但毛病就是学习曲线比拟平缓,并且在不同内核版本中的性能实现有不小的差别,比方:pfifo 尽管文档中都申明反对,但大多数版本并不反对;甚至有些版本的 jitter 散布不合乎预期。
当 TC 联合 iptables 之后,能实现绝大多数网损仪领有的动态伤害性能;而对于动静的伤害受限于 Linux 命令执行的实效性调用的精度并不高。如果要进步执行精度就须要去间接调动 C 接口或间接进行编程实现。
须要解决的问题
理论工作中网络伤害环境的需要次要来自有两个方面:
- 探测和确认产品的弱网反抗能力边界
- 进步产品在理论网络中的弱网反抗能力
对于第一点需要,行业中个别的作法是将某一网络指标或几个网络指标的组合参数拉满,直到产品卡死或无奈失常应用为止。例如可能的测试方法包含:带宽限度从 1000Kbps 逐渐升高到 100Kbps 或 50Kbps;丢包率从 5% 回升到 70% 或 80%;提早(或提早抖动)从 10ms 回升到 2000ms。这种测试方法的确是有意义的,不过从对多种网络伤害设施的应用教训来看,不同设施的带宽限度性能默认配置的队列深度和容许的 Burst 数据量是不尽相同的,提早抖动的默认散布和是否容许乱序的具体实现也有区别,所以即便是雷同的带宽限度或雷同的提早抖动,用不同的网损工具很能可能会测试出不同的后果;而对于丢包率和固定提早的指标来说各个工具的默认实现基本上是统一的,别离对应随机丢包和单位为毫秒的固定提早。
对于第二点需要,问题的难点是如何形容和建模实在网络,能够看到一部分近期涌现的网络伤害软件比方 QNET 曾经留神到这方面的性能了,开始集成一些对实在网络的探测数据和模型,但受限于产品自身的状态和平台限度在进行大规模部署和应用时还是有不少阻碍。
针对以上提到的两个问题,声网别离发展了 网络伤害特色 的钻研和 理论网络探测和建模 的继续推动,从目前网络探测的数据来看,理论网络的伤害有以下特色是传统弱网测试用例无奈笼罩到的:
- 网络带宽的时变频率远高于直观,并且须要配合队列深度和突发流量的反对。
- 长时间继续的高随机丢包并不常见,大多数丢包与网络的拥挤情况具备很强的相关性且并不随机。
- 不存在继续的较低带宽限度,除非运营商或共享网络的人为设置。
- 根本不存在乱序或反复包的场景,除非在小区或 AP 切换的时候。
在比照了各种网络伤害工具的优劣势之后,声网最终抉择了 Linux Traffic Control 的自研计划,目前来看这种计划的开放性和可能性是最高的,TC 命令 + iptables + 自研开发的组合齐全可能笼罩从弱网反抗边界测试到理论网络仿真的各种利用场景,为声网产品在更实在的网络下验证弱网反抗算法提供无力的保障。
结语
对于互联网公司,特地是有仿真 Lastmile 网络需要的公司来说,目前市场上的硬件网损仪适配的还不是太敌对,传统的硬件网损仪从适配运营商和通信设施厂商的需要倒退起来,更偏重于保障测试的吞吐量和仿真的精度,对于网络类型和网络场景的多样性不足摸索,以后市场上也呈现了一些软件的网损解决方案,有些仿真软件的开发过程中会利用网络探测后果内置一些网络场景和网络类型的模版,更贴合互联网公司的应用场景。对于弱网反抗要求不高的产品来说,抉择这些软件仿真弱网是高效且低成本的计划,而对弱网反抗有较高要求的实时网络产品,在有能力做网络探测和订制网络伤害场景的前提下,应用开源的 Linux Traffic Control 是一种更加自主和具备更多可能性的抉择。
附表:网络伤害工具性能比照
< 点击图片查看大图 >
Dev for Dev 专栏介绍
Dev for Dev(Developer for Developer)是声网 Agora 与 RTC 开发者社区独特发动的开发者互动翻新实际流动。透过工程师视角的技术分享、交换碰撞、我的项目共建等多种形式,汇聚开发者的力量,开掘和传递最具价值的技术内容和我的项目,全面开释技术的创造力。