NetHang - 一款更适合互联网产品的弱网测试解决方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
stephenyin
V2EX    分享创造

NetHang - 一款更适合互联网产品的弱网测试解决方案

  •  
  •   stephenyin 114 天前 1207 次点击
    这是一个创建于 114 天前的主题,其中的信息可能已经有所发展或是发生改变。

    NetHang 是一个基于 Linux 平台的 Web-Based 网络质量仿真软件工具。类似工具的其他常见名称还有:弱网测试工具网络损伤工具(网损仪)或 网络流量控制工具 等。NetHang 主要针对的测试产品是对网络实时性要求较高的网络产品,主要包括 RTC 产品(网络音视频通信,网络会议,网络直播连麦等),AI Agent 软件(通过网络与大模型实时交互的软件),当然,也可以用来测试产品的拥塞控制算法性能和链接稳定性等。

    网损工具的横向对比

    类似的网损产品主要有:

    软件方案:

    硬件方案: Spirent ,HoloWan ,packetstorm 等厂商,这些硬件网络工具通常更多聚焦于吞吐量和稳定性测试,更适用的是行业是通信设备商,运营商或云服务企业,本次暂不做讨论。

    开发 NetHang 的主要原因是观察到现有软件或硬件弱网工具在满足互联网产品 Lastmile 网络性能测试方面都或多或少的存在一些不足,主要表现在以下几点:

    1. 跨平台统一性:这个问题主要影响在同一个产品运行在不同平台上时能否使用同一套弱网测试标准在衡量和评判,以及评判的准确性。对于那些只能支持部分平台的软件如 QNET 和 Clumsy 等就很难拉齐这个测试方法,无法在对平台的弱网测试中提供可靠和可重入的测试方法。另外这种运行在测试设备上的弱网测试软件本身受测试舍本的性能限制,甚至会影响测试设备的性能,就更难获得可靠的测试结果。NetHang 是运行在 Linux 系统上作为软路由上的一个服务运行,理论上可以对所以通过该路由器接入网络的 IP 网络设备提供完全相同的网络损伤服务。overview
    2. 内置网络模型:在广泛使用的弱网工具中测试人员面对的往往是一堆网络质量的参数,Packet Loss (各种模型 Markov , Gilbert-Elliot 等),Delay ,Jitter (各种分布 Normal ,Uniform ,Pareto 等),Bandwidth Limit (组合 Queue-depth ,Burst ,TokenBucket 设置),Accumulate-Burst (堆积突发时长控制),以及要不要 Reordering (乱序) Corrupt ( bit 翻转)和 Duplicate (重复包),测试人员要用这些参数组合出合理的弱网测试条件并不是见容易的事,甚至基本不可能,见过太多测试人员用带乱序的 1000+ ms jitter 测试互联网产品了, 这不只是无用功,甚至如果产品在这个方向上做了足够多的优化之后一定会引入其他方面的问题,无论是抗弱网能力还是计算性能这都是得不偿失的。而针对这个问题 NetHang 根据大量网络探测结果内置了一批在一定程度和合理的网络损伤模型可供选择使用,并且会不断的更新和添加更丰富和准确的网络模型,这在提高测试效率的同时更重要的是规避了投入大量精力测试很多现网中根本不会出现或极少出现的网络条件。models
    3. 自定义动态网络模型:众所周知 Lastmile 网络因为其多样的接入方式,接入设备,负载,信号强度,竞争流量等原因呈现出多变的特征,NetHang 可以通过 YAML 语法自定义组合不同的网络条件组合出实时变化的网络仿真条件。

    以上述软件工具作为参照,下边是一个概要对比结果

    Nethang Linux TC/Netem Network Link Conditioner Clumsy QNET
    跨平台统一性
    内置网络模型
    自定义动态网络模型

    获取和部署

    第 1 条附言    114 天前
    其实相对于用什么技术测试弱网这种 “怎么测” 的问题,NetHang 工具更关注的是 “测什么” 的问题,某种程度上它是为了实现测试正确的网络模型而 “被迫” 开发的工具。

    因为正如前文所说,弱网的参数太多,对于大多数测试工程师来说理解起来并不直观。

    以 jitter 为例,设置 50ms 的 jitter 能描述清楚么当前网络延迟抖动的状况么?答案一定是不能,允许乱序么? jitter 发生的概率是多少?延迟的分布是怎样的?与上一次延迟变化的相关性如何?大多数情况下要模拟现网中常见的网络状况并用不到这么多参数,但大多数时候我们都是在拍脑袋“乱测”。
    zwy100e72
        1
    zwy100e72  
       114 天前
    看起来功能很丰富。不知楼主是否了解过 https://github.com/tylertreat/Comcast 个人认为应该也是同领域的工具
    stephenyin
        2
    stephenyin  
    OP
       114 天前
    @zwy100e72 #1 谢谢你的信息,这款 Comcast 我之前确实没注意过,我大概看了下 README 从实现机制基本差不多,iptables + tc + netem 。如果非要说自己的优势的话 NetHang 里边网络模型是动态的,相对也更加经得起推敲,以 Comcast 里最后提到的 starlink 的网络模型为例,这个我也探测过,静态的 Latency 20ms + packet loss 2.5% 是不足以描述清楚的,starlink 每 20 - 30 秒切换卫星有概率堆积突发和延迟跳变。。我会持续更新一些新网络模型进去。
    zwy100e72
        3
    zwy100e72  
       114 天前   1
    没有别的意思,我只是看着 comcast 的名字,给你出点馊主意:既然美国人可以起名 comcast ,那咱结合国情,是不是可以起一个外号:鹏博士 / 长城宽带 模拟器什么的,哈哈
    kkchan1999
        4
    kkchan1999  
       114 天前
    某国产厂商前员工觉得很赞
    stephenyin
        5
    stephenyin  
    OP
       114 天前
    @kkchan1999 #4 HoloWan?
    kkchan1999
        6
    kkchan1999  
       114 天前
    @stephenyin #5 Bingo, 你做这个开源出来他们很难受的
    stephenyin
        7
    stephenyin  
    OP
       114 天前
    @kkchan1999 #6 那倒也不至于,大厂选型还是会看知名厂商背书的,除非做成开源弱网测试标准。
    cuihua
        8
    cuihua  
       114 天前
    顶一下,正好需要用这个,我们在用 quic 做数据传输,需要造损伤,现在用的是 tc
    stephenyin
        9
    stephenyin  
    OP
       114 天前
    @cuihua #8 完美契合的使用场景。有需求或建议可以告诉我,v2 或 github 都可以。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1019 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:38 PVG 02:38 LAX 11:38 JFK 14:38
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86