1. Fiddler:一款常用的抓包工具,可在 PC 端安装并作为代理服务器,通过设置延迟参数来模拟不同的网络情况,但它只能模拟延迟,对丢包、带宽等的支持有限;
2. Charles:同样是抓包工具,支持延迟、丢包、带宽等弱网配置,不过其弱网配置项只支持 http/https;
3. NEWT:微软早年推出的弱网测试工具,安装在 PC 端后可作为代理服务器,支持延迟、丢包、带宽等弱网配置,但有用户反映在 win10 上按照配置步骤配置后未生效;
4. Clumsy:这是一款专门针对弱网测试的工具,在 PC 端安装后作为代理服务器,支持延迟、丢包、带宽等弱网配置,且使用较为简单;
5. ATC:由 facebook 推出,需要部署在 linux 系统上。移动端设备通过浏览器访问就可以切换不同的网络环境,还可以同时支持多台设备连接,但环境部署较为复杂;
6. WANem:广域网模拟器,支持从光盘启动,可运行于虚拟机上,也可以直接刷到物理设备上。但虚拟机部署不支持上下行网络设置;
7. QNET:由腾讯推出的 APP,适用于安卓系统,支持 adb 命令驱动,用户可以编写脚本,实现自动化弱网测试。它自带真实的全球网络和弱网场景,无需 root 手机,无需连接数据线,安装后即可使用,能提供 tcp/udp 网络协议抓包功能。
简单使用推荐 Clumsy,环境部署简单,使用门槛低;要模拟完全真实环境推荐 WANem,直接刷到交换机上;安卓 APP 推荐使用 QNET。
其中 QNET 工具的使用方法如下(版本可能会有所更新,具体功能以实际使用为准):
1. 登录:QNET 支持手 Q 账号或者腾讯员工的 TAPD 账号登陆,如果使用 QQ 账号首次登陆,需要注册 WeTest 平台账号;
2. 选择测试 APP:成功登陆后,点击【点击选择测试程序】按钮,选择待测试的弱网工具,然后点击下方的【开始测试】按钮,第一次启动的时候需要对悬浮窗权限进行授权,部分机型会弹出开启 VPN 服务的确认框,点击确认;
3. 弱网模板:QNET 支持系统预设模板和用户自定义模板。预设模板包含了常见的 2G/3G/4G 网络模板,还有弱网测试中比较常用的 100%丢包模板等,预设模板不支持编辑,但可以删除。另外,QNET 支持用户根据自己的测试需求自定义弱网参数模板;
4. 悬浮窗:开始测试后,QNET 会自动拉起待测试程序,然后默认会显示弱网模板控制悬浮窗,以及弱网模板信息悬浮窗。其中左边悬浮窗是控制悬浮窗,可以下拉即时切换弱网模板,双击 Q 按钮可以切回 QNET 应用,点击暂停按钮可以停止弱网状态恢复正常网络;右侧悬浮窗显示当前的模板名,实时延迟,实时网速,以及当前模板的具体参数。
QNET 目前支持的弱网参数包括上下行延时(delay)、上下行延时抖动(jitter)、上下行带宽(bandwidth)、上下行随机丢包(random packet loss)、上下行连续丢包(continuous packet loss)、tcp/udp 协议控制(protocol)等。其操作方式为首先添加编辑弱网模板,提供不同的网络场景,并可根据测试要求对网络参数进行调整,弱网模板支持新增、删除、修改、查询操作。
新增弱网模板有两种方式:
1. 页面右上角“新增”按钮,为自定义模板;
2. “网络场景”页面,每一项模板的“添加”按钮,设置不同场景的模板。根据测试需要,组合填写对应的参数,之后保存即可。
另外,如果你想使用 Network-Emulator-Toolkit 工具进行弱网模拟测试,可以参考以下步骤:
一、安装弱网测试工具-network-emulator-toolkit
1. 下载地址:https://blog.mrpol.nl/2010/01/14/network-emulator-toolkit/
2. 下载完成之后,点击.exe 文件安装。安装完成后,界面如下:
二、network-emulator-toolkit 使用教程
基本操作步骤如下:
1. 新建 virtual channel,file->new 或者 configuration->new channel;
2. 再建一个过滤器 filter,configuration->new filter。设置说明如下:
- all network 是指所有网络;
- ipv4、ipv6(本地 ip(local ip),或者远程 ip(remote ip)及子网掩码(ip mask));
- 可以指定本地端口(local port)或远程端口(remote port)大小范围;
- 协议(protocol),针对 tcp/udp 协议;
- 可以选择网卡适配器(adapaters),对适配器进行增删改;
3. 新建连接 link,configration->new link(注:未配置的情况下,左右两条线都是灰色的);
4. 设置 upstream 和 downstream。双击 link 或者悬浮 link 上方鼠标右键,打开 upstream、downstream。可设置的参数包括:
- 【loss】丢包:
- noloss:默认,不模拟丢包;
- periodic loss:模拟周期性的丢包。按填写数量(设为 x 个),每 x 个包,就丢一个包(one packet is dropped per given number of packets);
- random loss:模拟随机丢包,按给定丢包的概率,随机丢包;
- burst loss:模拟根据给定的可能性进行丢包。当发生一个丢包事件时,接着连续丢几个包(丢包数量控制在最大(max)最小值(min)之间);
- g-e loss:模拟发生数据包丢失遵循 gilbert-elliot 模型,由两个状态组成:好的状态和坏的状态。可分别为这 2 个状态指定数据包丢失率,同时可设置网络传输在这两种状态的概率(and the network transit between the two states is at given transition probabilities);
- 【error】数据错误(网络传输过程中,包中一个或者多个字节出现 error):
- no error:不模拟数据传输错误;
- random error:根据给定的比例,模拟随机发生传输错误;
- g-e error:发生传输错误遵循 gilbert-elliot model,模型,由两个状态组成:好的状态和坏的状态。可分别为这 2 个状态指定数据包丢失率,同时可设置网络传输在这两种状态的概率(the network transit between the two states according to given transition probabilities);错误概率单元(error rate unit):
- bit error:设置出错概率为每个字节出错的概率;
- packet error:设置出错概率为每个包出错的概率;
- 【latency】出错和丢包的关系:大多数情况下,包出错导致包丢失,特殊情况下,包中的数据被编码,协议栈可恢复被损坏的包,经过修正后,包为可接受的包,即包不丢失。此外,除了包出错会导致包丢失,其它因素也会影响包丢失,如连接失败(link failure),缓冲区溢出(buffer overflow),队列管理和传输超时(transmission timeout)等。延迟来自某应用发送的数据包被另一个应用程序接收到的时间,包括:
- fixed delay:按给定值,延迟固定时间(单位:毫秒)packets are delayed for a fixed amount of time;
- uniform delay:按统一分布,延迟一定量的时间(时间控制在最大最小值之间);
- normal delay:按正态分布,延迟一定量的时间(average:平均值,devation:偏差);
- linear delay:延迟一定量的时间(在给定时间周期(period)内,延迟的时间大小从最小值线性增加到最大值,当达到最大值时,又从最小值开始);
- burst delay:根据给定概率(probability),延迟一定量的时间(latency),丢包数控制最大值和最小值之间;
- 【bw&queue】:如果不指定带宽(bandwith),则不修改传输速率。如果不设置队列,则不对接到的包做任何队列操作。队列包括:
- normal queue:所有接收到的包都被放入一个指定队列大小的先进先出(first in,first out)队列;
- randomly early detection(red)queue:所有接收到的包都被放入一个 red 队列。如果队列大小小于给定的最低阈值(minimum threshold),队列被评估为不拥挤的,什么都不做;如果队列大小大于给定最大阈值(maximum threshold),则队列被评估为拥挤的,根据丢包规则,丢弃一些包。丢包规则如下:
- drop front:必要时,丢弃位于队列头部的包;
- drop tail:必要时,丢弃位于队列尾部的包;
08-20