0. 背景
项目需要模拟弱网环境下,测试音视频的编解码功能。
在linux系统下可以使用tc工具模拟弱网环境,包括出/入流量的丢包等。
1. tc工具介绍
2. 网卡出数据
netem(Network Emulator)可以用来对网卡发出的数据包进行增加延迟、丢包、重复、乱序等处理,来模拟复杂网络环境。netem的设置依赖tc命令,tc是Linux内核提供的流量控制工具。
具体的弱网配置,参考本文第4部分
3. 网卡入数据
为了处理网卡接收的数据包,需要使用linux内核听过的ifb(Intermeidate Functional Block)模块。
个人理解:启动ifb0虚拟网卡,将原输入到eth0的入流量导入到ifb0虚拟网卡中。之后,通过ifb0网卡的中转,返回给应用的数据是ifb0网卡出流量,之后对ifb0网卡便可以复用netem模块设置网络规则。
- 加载fib模块,启动ifb0网卡
sudo modprobe ifb
sudo ip link set dev ifb0 up
- 将网卡入流量导入到ifb网卡
sudo tc qdisc add dev eth0 handle ffff: ingress
sudo tc filter add dev eth0 parent ffff: u32 match u32 0 0 action mirred egress redirect dev ifb0
- 使用tc配置ifb0网卡入数据规则,举例