Linux 系统下的流量控制工具之tc命令案例解析
目录
1. 带宽限制(限速)
场景:限制某个接口的带宽,防止网络拥堵。
清除规则:
2. 模拟网络延迟
场景:模拟高延迟网络环境(如测试远程应用性能)。
清除延迟规则:
3. 模拟网络丢包
场景:模拟网络不稳定时的丢包情况(如测试应用容错性)。
清除丢包规则:
4. 模拟网络重复包
场景:测试应用对重复数据包的处理能力。
清除重复包规则:
5. 复合网络条件(延迟 + 丢包 + 重复)
场景:综合模拟复杂的网络环境。
清除复合规则:
6. 限制特定 IP 的带宽
场景:限制某个 IP 的带宽(如限制某用户流量)。
清除规则:
7. 配置优先级队列
场景:为不同类型的流量分配优先级(如 VoIP 高优先级)。
绑定流量到优先级:
8. 流量整形(Rate Limiting)
场景:限制突发流量,平滑网络负载。
9. 查看当前流量控制规则
场景:查看接口的流量控制配置。
10. 持久化配置(开机生效)
场景:确保重启后规则仍然有效。
11. 注意事项
以下是 tc
命令(Linux 系统下的流量控制工具)的常见使用案例汇总,涵盖带宽限制、延迟模拟、丢包率设置等典型场景:
1. 带宽限制(限速)
场景:限制某个接口的带宽,防止网络拥堵。
# 限制 eth0 接口的带宽为 100Mbps
sudo tc qdisc add dev eth0 root handle 1: htb default 10
sudo tc class add dev eth0 parent 1: classid 1:10 htb rate 100mbit ceil 100mbit
- 参数说明:
htb
:Hierarchical Token Bucket(分层令牌桶),用于带宽分配。rate
:指定最大带宽。ceil
:指定带宽上限(可选)。
清除规则:
sudo tc qdisc del dev eth0 root
2. 模拟网络延迟
场景:模拟高延迟网络环境(如测试远程应用性能)。
# 在 eth0 接口添加 100ms 延迟
sudo tc qdisc add dev eth0 root netem delay 100ms
- 参数说明:
netem
:网络模拟模块,支持延迟、丢包、重复等操作。delay
:指定延迟时间(可选抖动,如100ms 10ms
表示 100ms ±10ms)。
清除延迟规则:
sudo tc qdisc del dev eth0 root
3. 模拟网络丢包
场景:模拟网络不稳定时的丢包情况(如测试应用容错性)。
# 在 eth0 接口添加 10% 的随机丢包率
sudo tc qdisc add dev eth0 root netem loss 10%
- 参数说明:
loss
:指定丢包率(可选方向,如loss 10% 5%
表示发送丢包 10%,接收丢包 5%)。
清除丢包规则:
sudo tc qdisc del dev eth0 root
4. 模拟网络重复包
场景:测试应用对重复数据包的处理能力。
# 在 eth0 接口添加 5% 的重复包
sudo tc qdisc add dev eth0 root netem duplicate 5%
- 参数说明:
duplicate
:指定重复包比例。
清除重复包规则:
sudo tc qdisc del dev eth0 root
5. 复合网络条件(延迟 + 丢包 + 重复)
场景:综合模拟复杂的网络环境。
# 添加 200ms 延迟、10% 丢包率、5% 重复包
sudo tc qdisc add dev eth0 root netem delay 200ms loss 10% duplicate 5%
清除复合规则:
sudo tc qdisc del dev eth0 root
6. 限制特定 IP 的带宽
场景:限制某个 IP 的带宽(如限制某用户流量)。
# 限制 eth0 接口下源 IP 为 192.168.1.100 的流量为 10Mbps
sudo tc qdisc add dev eth0 root handle 1: htb default 10
sudo tc class add dev eth0 parent 1: classid 1:10 htb rate 10mbit
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.100/32 flowid 1:10
- 参数说明:
u32
:基于规则的匹配(支持 IP、端口等)。match ip src
:匹配源 IP。
清除规则:
sudo tc qdisc del dev eth0 root
7. 配置优先级队列
场景:为不同类型的流量分配优先级(如 VoIP 高优先级)。
# 配置优先级队列(PRIO)
sudo tc qdisc add dev eth0 root handle 1: prio
sudo tc class add dev eth0 parent 1: classid 1:1 prio 1
sudo tc class add dev eth0 parent 1: classid 1:2 prio 2
sudo tc class add dev eth0 parent 1: classid 1:3 prio 3
- 参数说明:
prio
:优先级队列(1 为最高优先级)。
绑定流量到优先级:
# 将端口 5060(VoIP)绑定到最高优先级
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 5060 0xffff flowid 1:1
8. 流量整形(Rate Limiting)
场景:限制突发流量,平滑网络负载。
# 配置 TBF(Token Bucket Filter)限制突发流量
sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32k latency 50ms
- 参数说明:
burst
:突发流量大小(字节)。latency
:最大允许延迟。
9. 查看当前流量控制规则
场景:查看接口的流量控制配置。
# 查看 eth0 接口的规则
tc qdisc show dev eth0
tc class show dev eth0
tc filter show dev eth0
10. 持久化配置(开机生效)
场景:确保重启后规则仍然有效。
- 方法:
- 将规则写入脚本(如
/etc/network/if-up.d/tc
)。 - 在系统启动时自动执行脚本。
# 示例脚本(需根据需求修改) #!/bin/sh tc qdisc add dev eth0 root netem delay 100ms
- 将规则写入脚本(如
11. 注意事项
- 权限要求:所有操作需要
root
权限。 - 接口名称:根据实际网络接口(如
eth0
、enp0s3
)调整。 - 复杂场景:高级配置(如多级分类、流量镜像)需结合
htb
、hfsc
等模块。 - 调试工具:使用
ip
、ss
、nload
等工具辅助监控网络状态。