弱网模拟工具

一、背景

一个人晚上在家通过 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 通话质量调优必备:三个弱网模拟测试工具 - 知乎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity 关于Ray、RaycastHit、Raycast及其使用

Unity中,我们要进行物理模拟和碰撞检测时,有三个重要的概念Ray、RaycastHit、Raycast。 其中,Ray可以理解为射线,它是一条从起点沿着特定方向延伸的无限长线段。 它的语法是: Ray(Vector3 origin, Vector3 directio…

js/jQuery常见操作 之 jQuery操作复选框的常见问题

js/jQuery常见操作 之 jQuery操作复选框的常见问题 1. js/jQuery的其他一些常见基础操作2. 全选/全不选问题2.1 效果2.2 实现代码2.2.1 简单js实现2.2.2 jQuery实现2.2.2.1 注意语法(区别jQuery版本)2.2.2.2 完整代码实现 3. jQuery实现点击 行tr 实现ch…

SCADA软件工具有多少免费的?

随着工业自动化的飞速发展,SCADA系统已经成为工业领域智能化转型绕不开的重要工具,不少个人和公司也都加入到了学习研究SCADA系统的队伍中。数维图小编耗费大量时间整理了国内外免费(非完全免费)的SCADA软件工具,有部分…

uniapp 之 短信验证码登录

一、需求 输入手机号码&#xff0c;可以获取验证码。 二、实现效果 点击前&#xff1a; 点击后&#xff1a; 三、代码实现 <template><view class"login"><view class"infobox"><view class"item"><input type…

搜索推荐技术-爱奇艺搜索引擎技术

一、爱奇艺的搜索引擎框架示意图 即通过召回系统&#xff0c;即基于文本匹配的matching system&#xff0c;得到大量视频资源的候选集&#xff0c;经过粗排和精排&#xff0c;最后返回给用户。重点在于召回模块和排序模块。 二、召回模块 召回模块比较重要的是基础相关性&am…

vue3 + mark.js 实现文字标注功能

效果图 安装依赖 npm install mark.js --save-dev npm i nanoid代码块 <template><!-- 文档标注 --><header><el-buttontype"primary":disabled"selectedTextList.length 0 ? true : false"ghostclick"handleAllDelete"…

MySQL数据库,函数与分组

单行函数&#xff1a; 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以嵌套 参数也可以是一列或一个值 数值函数 基本函数&#xff1a; 注&#xff1a;ROUND(x,y)函数的y是负数时&#xff0c;即往高位进行四舍五入&#xff0c;如-3就是按百位…

机器学习 类别特征编码:Category Encoders 库的使用

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

优雅提效:Guava的字符串处理工具

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;今天咱们要聊一聊Google Guava这个超棒的Java库&#xff0c;尤其是它的字符串处理工具。对于Java程序员来说&#xff0c;字符串处理是日常工作的一部分&#xff0c;而Guava在这方面提供了非常强大的支持。使用Gu…

12.7_黑马数据结构与算法Java

030 单向链表 get 不会提前拿到所有的索引值&#xff0c;这样维护起来非常不方便。因此&#xff0c;我们是在遍历的时候得到他的索引值 %d&#xff1a;数字的占位符就是用百分号d表示 %n&#xff1a;换行符 thinking:String.format()? String.format()的详细用法_七月J的博客-…

大数据在互联网营销中的应用:案例与策略

互联网时代的营销领域正经历着一场由大数据驱动的变革。在2023年&#xff0c;大数据的应用已成为推动市场策略和决策的关键因素。本文将探讨大数据如何影响互联网营销&#xff0c;并通过实际案例分析展示其在提升营销效果方面的作用。 首先&#xff0c;通过分析海量数据&#x…

如何配置Modbus转Profinet网关与6台232 Modbus伺服通信

Modbus转Profinet网关连接6台232 Modbus伺服同时控制的解决方案不仅简化了设备连接&#xff0c;还减少了人力投入和维护成本。通过Modbus转Profinet网关&#xff0c;操作人员只需对Profinet网关进行设置和监控&#xff0c;即可实现对6台232 Modbus伺服的集中控制。 Modbus转Pro…

中山大学李华山、王彪课题组开发 SEN 机器学习模型,高精度预测材料性能

内容一览&#xff1a;了解全局晶体对称性并分析等变信息&#xff0c;对于预测材料性能至关重要&#xff0c;但现有的、基于卷积网络的算法尚且无法完全实现这些需求。针对于此&#xff0c;中山大学的李华山、王彪课题组&#xff0c;开发了一款名为 SEN 的机器学习模型&#xff…

史上最强 Charles 抓包

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Python中如何判断List中是否包含某个元素

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python中&#xff0c;判断一个列表&#xff08;List&#xff09;是否包含某个特定元素是常见的任务之一。在本文中&#xff0c;将深入探讨多种判断List成员包含性的方法&#xff0c;并提供丰富的示例代码&…

嵌入式工程师校招经验与学习路线总结

前言&#xff1a;不知不觉2023年秋招已经结束&#xff0c;作者本人侥幸于秋招中斩获数十份大差不差的OFFER&#xff0c;包含&#xff1a;Top级的AIGC&#xff0c;工控龙头&#xff0c;国产MCU原厂&#xff0c;医疗器械&#xff0c;新能源车企等。总而言之&#xff0c;秋招总体情…

量子纠缠通讯:未来信息技术的革新者

量子纠缠通讯:未来信息技术的革新者 引言 在科技日新月异的今天,我们正逐步走进一个全新的科技时代——量子时代。量子纠缠通讯作为量子技术的重要分支,以其独特的优势和巨大的潜力,成为了当今世界研究的热点。本文将带您深入探讨量子纠缠通讯的奥秘,了解其原理、优势、…

架构师-3.用户体系

系统提供了 2 种类型的用户,分别满足对应的管理后台、用户 App 场景。 1.AdminUser 管理员用户,前端访问 s-ui-admin-vue3管理后台,后端访问 /admin-api/** RESTful API 接口。 2.MemberUser 会员用户,前端访问 s-ui-user用户 App,后端访问 /app-api/** RESTful API 接口。…

Java中lambda表达式的使用

&#x1f495;"我不要麻木的死去"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;Java中lambda表达式的使用 一.背景 lambda表达式是Java SE 8中一个重要的新特性&#xff0c;允许你使用一个表达式来代替功能接口。lambda表达式可以看作一个没有返…

基于SpringBoot+Vue实现的小区物业管理系统

文章目录 系统介绍技术选型成果展示账号地址及其他说明 系统介绍 基于SpringBootVue实现的小区物业管理系统是为物业管理打造的一款在线管理平台&#xff0c;它可以实时完成信息处理&#xff0c;对小区信息、住户等进行在线管理&#xff0c;使其系统化和规范化。 系统功能说明…