使用 tc 命令模拟Linux 网络延迟和丢包

背景

在系统中有需要访问公网资源的情况时,需要考虑网络异常的情况,如延迟高,丢包率高的情况,代码中需要做好异常处理。那么,如何在测试的时候模拟网络情况异常情况呢?下面以centos 7.9为例子

步骤

安装 iproute 工具:确保你的 CentOS 上安装了 iproute,通常它会默认安装。你可以通过以下命令安装:

1
sudo yum install -y iproute

查找网络接口:使用以下命令列出网络接口,并确定你要控制的接口(如 eth0enp0s3 等):

1
ip link show

配置网络延迟和丢包:使用 tc 命令配置网络模拟。例如,添加 99% 的丢包率:

1
sudo tc qdisc add dev eth0 root netem loss 99%

请确保将 eth0 替换为你的实际网络接口名称。

  1. 执行下载测试:进行下载操作,观察在网络中断条件下的表现。

恢复正常网络:测试完成后,清除网络配置:

1
sudo tc qdisc del dev eth0 root

通过这些步骤,你可以在宿主机上有效地控制网络条件,模拟下载过程中的网络中断。如果有任何问题,确保检查接口名称和执行权限。

结尾

如果服务是以docker容器的方式运行,通常在容器中直接下载tc工具,模拟网络异常是不生效的,因为容器中的网络接口是虚拟出来的,你只能把配置虚拟网络接口,但是最终还是会通过docker0转发给宿主机,等于说还是用的宿主机的网络,不控制宿主机的网络是不能实现效果的!


使用 tc 命令模拟Linux 网络延迟和丢包
https://luffy997.github.io/2024/10/30/使用-tc-命令模拟Linux-网络延迟和丢包/
作者
Luffy997
发布于
2024年10月30日
许可协议