首页
学习
活动
专区
圈层
工具
发布
44 篇文章
1
[PyUserInput]模拟鼠标和键盘模拟
2
银行排队模拟(离散事件模拟)
3
Linux网络模拟
4
Linux TC(Traffic Control)作为损伤仪的基础配置和使用
5
深入学习Docker网络(看这篇就完全够了)
6
【鸿蒙 HarmonyOS】鸿蒙手机模拟器 ( 鸿蒙远程模拟器 | 鸿蒙远程模拟器运行手机应用 )
7
探索嵌入式应用框架(EAF)
8
多 OS 混合部署框架
9
嵌入式系统架构浅谈:编程设计模式 (一)---访问硬件的设计模式
10
事件驱动和消息驱动
11
原来 8 张图,就能学废 Reactor 和 Proactor
12
Linux df -h 命令hang住没有反应
13
kafka消费组信息采集异常(hang住)排查
14
ext4 io hung模拟脚本
15
解决 umount 命令卸载磁盘时busy/卡死的问题
16
程序卡死在void HardFault_Handler的解决办法
17
执行sed命令卡死CPU消耗100%一例分析
18
记一次因Redis使用不当导致应用卡死过程
19
字节对齐不慎引发的挂死问题
20
解引用NULL为什么会导致程序挂死?
21
记64位地址截断引发的挂死问题
22
websocket 在线工具_websocket添加请求头
23
【嵌入式Linux应用开发】SquareLine Studio与LVGL模拟器
24
详解Handler机制中消息队列的出队逻辑
25
Android UpdateEngine模块流程(含序列图)
26
物联网时代的嵌入式开发平台
27
400+条实用C/C++框架、库、工具整理 ,你能想到的都在这里了
28
ESP32芯片IO解读
29
M5Stack在ubuntu上进行开发编译
30
【抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象
31
H264,你不知道的小技巧
32
linux 创建虚拟块设备,制作文件系统并挂载,用于测试lustre
33
基于linux开发uvc摄像头_uvc协议扩展
34
清晰讲解LSB、MSB和大小端模式及网络字节序
35
在树莓派中使用 MicroPython 接入 MQTT
36
MicroPython 玩转硬件系列1:环境搭建
37
嵌入式系统架构浅谈:编程设计模式 (二)---嵌入并发和资源管理的设计模式
38
嵌入式软件架构设计之分层设计
39
IC之路(一)Proteus-Arduino仿真环境搭建
40
图像处理基础(六)-libjpeg常用算法
41
OpenCV双目标定
42
L-K光流推导及OpenCV代码实现
43
NDI Webcam Input工具,那些你不知道的知识!
44
使用QEMU chroot进行固件本地调试
清单首页其它文章详情

Linux TC(Traffic Control)作为损伤仪的基础配置和使用

使用场景

当我们有要在某两台设备之间的链路上人为增加一定的时延,丢包,损伤的需求时,最简易的方法是在两台设备之间加入一台 Linux 服务器,分别与两个设备直连,服务器上作为一个纯二层 bridge 透传报文;同时使用Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制来实现对于链路流量增加时延,丢包及损伤。

这里我们仅介绍TC作为损伤仪的最基本使用方法,关于TC(Traffic Control)的具体原理和规则可以参考https://cloud.tencent.com/developer/article/1409664

使用方法:

如上拓扑图所示环境,设备端 Router-1 和 Router-2 的配置不需要改动,仅需在服务器侧做一些配置即可在 Router-1 和 Router-2 之间链路添加损伤,具体配置如下:

创建 bridge:

代码语言:txt
复制
brctl addbr br1

将服务器连接设备的两个网卡加入到刚才创建的 bridge

代码语言:txt
复制
brctl addif br1 ens3

brctl addif br1 ens3d1

将bridge状态置成 up并确认

代码语言:txt
复制
ip link set br1 up
brctl show
代码语言:txt
复制
root@dmage-server-a1:/etc# brctl show

bridge name        bridge id                STP enabled        interfaces

br1                8000.78aa82125bac        no                  ens3
                                                                ens3d1

使用 TC 按需添加损伤,以添加时延为例:

增加 200ms时延

代码语言:txt
复制
tc qdisc add dev ens3 root netem delay 200ms
代码语言:txt
复制
<Router-1>ping -c 1000 172.16.11.50

Ping 172.16.11.50 (172.16.11.50): 56 data bytes, press CTRL+C to break

56 bytes from 172.16.11.50: icmp\_seq=6 ttl=255 time=0.622 ms

56 bytes from 172.16.11.50: icmp\_seq=7 ttl=255 time=0.593 ms

56 bytes from 172.16.11.50: icmp\_seq=8 ttl=255 time=200.664 ms

56 bytes from 172.16.11.50: icmp\_seq=9 ttl=255 time=202.150 ms

增加 10%的丢包

代码语言:txt
复制
tc qdisc add dev ens3 root netem loss 10%

添加 5%的损坏

代码语言:txt
复制
tc qdisc change dev ens3 root netem corrupt 5%

如果要去除损伤,执行以下命令:

代码语言:txt
复制
tc qdisc del dev ens3 root

相关检查命令:

代码语言:txt
复制
tc qdisc show dev ens3

root@dmage-server-a1:~# tc qdisc show dev ens3

qdisc netem 8003: root refcnt 257 limit 1000 delay 200.0ms
代码语言:txt
复制
tc -s qdisc
下一篇
举报
领券