弱网模拟工具

2023-12-03 05:01
文章标签 工具 模拟 弱网

本文主要是介绍弱网模拟工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

一个人晚上在家通过 Wi-Fi 上网,在线电影播放基本流畅,可一旦在晚间用网高峰期打视频电话就画面糊,这时不仅可能带宽受限了,还可能有较高的丢包率。与有线网络通信相比,无线网络通信受环境影响会更大,比如高层建筑、用户的移动、环境噪音、封闭的环境等,网络服务质量相对不稳定,导致用户经常在弱网环境下通信。例如,在车库的视频通话通常都不如在室外的质量。除了受环境影响外,网络覆盖、过载控制、邻区漏配等,也会造成呼叫失败、服务质量下降。这些真实的用户场景。

我们在开发产品过程中,为了保证弱网环境下用户的体验,需要做大量的、定量地 进行测试评估与优化。

因此,如何方便地模拟用户实际的弱网场景是一个非常重要的话题。

二、分类

三、工具与使用方法

工具名适用平台简介

Traffic Control(TC)

linuxLinux 内核内置了一个 Traffic Control 框架,能够实现流量限速、流量整形、策略应用,可以注入延时故障、丢包故障、包重复故障、乱序故障,以及模拟网络闪断等情况。

Augmented Traffic Control(ATC)

ATC 其实是 Facebook 在 2015 年开源的一套网络测试工具。ATC 是基于 TC 的封装。

Network Link Conditioner(NLC)

ios macNLC 是苹果官方提供的网络模拟工具。部署最简单

3.1、Linux Traffic Control(TC)

Linux 内核内置了一个 Traffic Control 框架,能够实现流量限速、流量整形、策略应用,可以注入延时故障、丢包故障、包重复故障、乱序故障,以及模拟网络闪断等情况。TC 对硬件、系统还有一些要求:

硬件要求

  • PC - 建议配置不低于 CPU i3,4G 内存,64G 硬盘
  • 双网卡 - 除原有板载网卡外, 额外需要一块 pci-e 网卡(例如 intel 82574L)
  • 路由器 - 支持桥接模式
  • 网线 - 若干

系统要求

  • 需要 Fedora、OpenSuse、Gentoo、Debian、Mandriva 或 Ubuntu,如果Linux内核版本大于 2.6,则已内置 TC。
  • 系统模块
  • Ubuntu/Debian 系统下需要 iproute2
  • Fedora/RHEL 系统下需要 iproute-tc
  • iptables
  • Linux kernel module : sch_netem

同时,软件方面还需要安装 dhcp server。具体安装方法,请参考 Ubuntu 官方文档[3]。

开始部署

  • NIC-0 通过网线连接外网, 假设对应 Net device eth0
  • NIC-1 通过网线连接路由器 WAN 口, 假设对应 Net device eth1
  • 路由器: 打开桥接模式, 关闭 DHCP 服务

PC 端输入命令行:

vi /etc/default/isc-dhcp-server

添加:

INTERFACESv4="eth1"

重启服务:

sudo /etc/init.d/isc-dhcp-server restart

重启后运行以下命令:

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
modprobe ifb
ip link set ifb0 up

至此,你已经完成了部署。

TC 的使用方法

做弱网测试基本是按照以下四个步骤:

  1. 设备连接 Wi-Fi 热点成功获取 IP 地址,假设为:192.168.3.101。
  2. 打开 Linux terminal,输入 TC 命令为发送端 IP 为 192.168.3.101 的设备添加网损。
  3. 此时手机即在弱网环境下运行。
  4. 测试完成后,输入 TC 命令取消弱网。

例如,你要是想限制 IP 地址为 192.168.3.101 的设备上行丢包 5%,那么需要运行如下命令:

sudo tc qdisc add dev ifb0 root handle 1: prio bands 3
sudo tc qdisc add dev eth1 ingress
sudo tc filter add dev eth1 parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0
sudo tc qdisc add dev ifb0 parent 1:3 handle 30: netem loss 5 limit 1000
sudo tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip src 192.168.3.101 flowid 1:3

如果想要限制 IP 地址为 192.168.3.101 的设备下行丢包 20%,需要运行如下命令:

sudo tc qdisc add dev eth1 root handle 1: prio bands 3
sudo tc qdisc add dev eth1 parent 1:3 handle 30: netem loss 20 limit 1000
sudo tc filter add dev eth1 protocol ip parent 1:0 prio 3 u32 match ip dst 192.168.3.101 flowid 1:3

可以说 TC 框架可以实现很多场景,但前提是需要开发者们学会使用 TC 命令行。如果你想了解更多的 TC 命令,可以学习一下官方文档[4]。

3.2、Augmented Traffic Control(ATC)

ATC 其实是 Facebook 在 2015 年开源的一套网络测试工具。ATC 是基于 TC 的封装。

在部署好 ATC 弱网控制机后,在手机上通过 Web 界面就可以随时切换不同的网络环境。多个手机可以连接到同一个 Wi-Fi ,复用同一台弱网控制机,且多设备之间模拟的网络环境互不影响。也就是说,部署好这个测试工具后,团队里的任何人都可以通过 Web 自行测试,且互不干扰。

ATC 的部署方法相对复杂,但只要根据官方文档[5],就可以顺利完成搭建。按照官方文档完成搭建之后,大家还需要通过以下几行命令配置 HOST 地址,然后就可以启动运行了。

打开 Setting:

vi atcui/atcui/settings

添加 HOST 地址 :

ALLOWED_HOSTS = ['*']

启动命令:

atcd --atcd-wan eth0 --atcd-lan eth1

使用方法

  1. 设备接入对应 Wi-Fi
  2. 打开 http://192.168.3.1:8000 (假设 eth1 IP地址为:192.168.3.1)
  3. 输入对应弱网参数后,点击按钮 [Update Shaping] 生效,该弱网仅对本机生效

测试完成后,点击按钮 [Turn Off] 清除弱网设置。

3.3、Network Link Conditioner(NLC)

可能有些 iOS 开发者已经认出来了。NLC 是苹果官方提供的网络模拟工具,支持安装在 macOS 和 iOS 上。

macOS 端安装

  • 打开 Xcode,选择 Xcode -> Open Developer Tool -> More Develop Tools。

  • 用苹果账号登录网站,搜索 Additional Tools for Xcode,下载 Xcode 对应版本的 Additional Tools。

  • 打开下载的文件,在 Hardware 文件夹中双击 Network Link Conditioner 安装。 安装完成后,工具会在系统设置中的最后一排出现。

iOS 端安装

通过打开“开发者选项”就可以使用 Network Link Conditioner 功能。

  • 数据线连接手机到 Mac 上,Xcode -> Windows -> Devices -> 选中当前手机设备,右键弹出

  • 菜单 -> 选择Show Provisioning Profiles... 会弹出一个证书列表窗口

如果手机已经安装了必要的开发者证书,直接点击窗口中的 done 按钮即可。否则需要点击左下角的 + 号,把从网上下载下来的证书导入进去, 点击 done 按钮关闭窗口。

此时手机设置中就多了一个开发者选项,进入开发者选项可以看到 Network Link Conditioner 选项。

使用方法

NLC 的使用方法就简单多了,不需要用命令行。如果 NLC 中的配置不满足需求的话,可以手动添加更多的配置。在 Mac 端和 iOS 上,按照以下操作即可。

Mac 端

iOS 端

需要注意的是 interface 设置,当 iOS 通过共享 Wi-Fi 热点的方式作为接入设备的弱网控制机时,需要将 interface 设置为 Cellular。

ref:

WebRTC 通话质量调优必备:三个弱网模拟测试工具 - 知乎

这篇关于弱网模拟工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/448161

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

详解Python中通用工具类与异常处理

《详解Python中通用工具类与异常处理》在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationEx... 目录1. 通用异常类:ValidationException2. 通用工具类:Utils3. 示例文

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象