使用tc扩展进行网络模拟
作者:静行vchh
链接:https://www.jianshu.com/p/f97f8deeac1b
工具简介:这次的linux的网络模拟,使用Linux Traffic Control (tc)的扩展 Network Emulation (netem)来完成。一般来说,Linux 2.6 (或以上) 版本内核,已经内置了这个工具,供大家使用。
需要注意的是:
此方法只能控制发包动作,不能控制收包动作。命令直接对物理接口生效,如果控制了物理的eth0,那么逻辑网卡(比如eth0:1)也会受到影响;反之,如果您在逻辑网卡上做控制,该控制可能是无效的。(注:虚拟机中的多个网卡可以在虚拟机中视为多个物理网卡)
工具使用
首先获取机子的网卡信息,如eth0或者em0之类的。然后通过执行命令来监控和改变网卡状态,达到的模拟的效果。命令可能需要root权限或sudo来执行。
- 模拟网络延迟
tc qdisc add dev eth0 root netem delay 100ms 10ms 10%
100ms为固定延迟
10ms为随机值(可以省略)
100ms为随机概率(可以省略)
语句语义为:将eth0加入到监控中,并将每个包都延迟100ms,有10%的几率有±10ms的浮动。
(注:再次修改需要修改命令为tc qdisc change dev eth0 root netem delay 100ms 10ms 10%
)
- 模拟网络丢包
tc qdisc change dev eth0 root netem loss 20% 50%
20%为丢包比率
50%为相关概率(可以省略)
语句语义为:将eth0的丢包率改为20%,后一个包有丢弃有50%的几率和前一个包相关。
- 模拟包重复:
tc qdisc add dev eth0 root netem duplicate 1%
语句语义为:将 eth0 网卡的传输设置为随机产生 1% 的重复数据包 。
- 模拟数据包损坏:
tc qdisc add dev eth0 root netem corrupt 0.2%
语句语义为:将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包 。 (内核版本需在 2.6.16 以上)
- 模拟数据包乱序:
tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
语句语义为:将 eth0 网卡的传输设置为:有 25% 的数据包(50%相关)会被立即发送,其他的延迟10 秒。
- 取消网络模拟
相当于取消监控该网卡,使用命令:
sudo tc qdisc del dev eth0 root netem
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器