tc 命令是 Linux 系统中 Traffic Control(流量控制)的工具,用于配置内核中的网络流量控制功能。它是 iproute2 软件包的一部分,功能非常强大。
1. 基本概念
tc 主要用于:
• 流量整形(Shaping) • 调度(Scheduling) • 策略(Policing) • 丢包(Dropping)
2. 基本语法结构
tc [选项] 对象 命令 [参数]
常用对象:
• qdisc- 排队规则• class- 流量类别• filter- 过滤器
3. 主要功能和使用场景
3.1 查看当前配置
# 查看所有网络接口的流量控制
tc qdisc show
# 查看指定接口(如 eth0)的配置
tc qdisc show dev eth0
# 查看类别
tc class show dev eth0
# 查看过滤器
tc filter show dev eth03.2 添加排队规则(qdisc)
设置网络延迟
# 为 eth0 添加 100ms 延迟
tc qdisc add dev eth0 root netem delay 100ms
# 延迟范围:100ms ± 10ms
tc qdisc add dev eth0 root netem delay 100ms 10ms
# 延迟带相关性(后续包延迟相关性 25%)
tc qdisc add dev eth0 root netem delay 100ms 10ms 25%设置数据包丢失
# 设置 5% 的丢包率
tc qdisc add dev eth0 root netem loss 5%
# 丢包率范围:5% ± 1%
tc qdisc add dev eth0 root netem loss 5% 1%设置数据包重复
# 设置 3% 的包重复率
tc qdisc add dev eth0 root netem duplicate 3%设置数据包损坏
# 设置 0.1% 的包损坏率
tc qdisc add dev eth0 root netem corrupt 0.1%设置数据包乱序
# 设置 5% 的包乱序,相关性 25%
tc qdisc add dev eth0 root netem delay 50ms reorder 5% 25%3.3 限制带宽
使用 TBF(Token Bucket Filter)
# 限制带宽为 1mbit,突发流量 10kb,最大延迟 50ms
tc qdisc add dev eth0 root tbf rate 1mbit burst 10kb latency 50ms使用 HTB(Hierarchical Token Bucket)
# 创建根队列
tc qdisc add dev eth0 root handle 1: htb default 12
# 创建根类,限制总带宽为 10mbit
tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit
# 创建子类,限制特定流量为 2mbit
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 2mbit3.4 删除配置
# 删除所有队列规则
tc qdisc del dev eth0 root
# 删除特定过滤器
tc filter del dev eth0 parent 1: protocol ip prio 14. 高级用法
4.1 基于端口的流量控制
# 限制 SSH 流量(端口 22)为 1mbit
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:10 htb rate 1mbit
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:104.2 基于 IP 地址的流量控制
# 限制特定 IP(192.168.1.100)的带宽
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:20 htb rate 512kbit
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dst 192.168.1.100 flowid 1:204.3 组合多种网络条件
# 模拟恶劣网络环境:延迟 + 丢包 + 乱序
tc qdisc add dev eth0 root netem \
delay 200ms 20ms \
loss 3% \
duplicate 1% \
corrupt 0.5% \
reorder 10% 25%5. 实际应用案例
5.1 测试网站性能
# 添加网络延迟和丢包
tc qdisc add dev eth0 root netem delay 150ms loss 2%
# 测试网站加载
curl -I https://example.com
# 清理规则
tc qdisc del dev eth0 root5.2 限制下载速度
# 限制下载速度不超过 500kbit
tc qdisc add dev eth0 root tbf rate 500kbit burst 10kb latency 50ms5.3 创建复杂的流量控制策略
#!/bin/bash
# 复杂的流量控制脚本
DEV=eth0
# 清理现有规则
tc qdisc del dev $DEV root 2>/dev/null
# 创建 HTB 根队列
tc qdisc add dev $DEV root handle 1: htb default 30
# 创建根类(总带宽 10mbit)
tc class add dev $DEV parent 1: classid 1:1 htb rate 10mbit
# 创建子类:高优先级流量(2mbit)
tc class add dev $DEV parent 1:1 classid 1:10 htb rate 2mbit prio 0
# 创建子类:普通流量(6mbit)
tc class add dev $DEV parent 1:1 classid 1:20 htb rate 6mbit prio 1
# 创建子类:低优先级流量(2mbit)
tc class add dev $DEV parent 1:1 classid 1:30 htb rate 2mbit prio 2
# 设置过滤器:SSH 流量为高优先级
tc filter add dev $DEV protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:10
# 设置过滤器:HTTP 流量为普通优先级
tc filter add dev $DEV protocol ip parent 1: prio 2 u32 match ip dport 80 0xffff flowid 1:206. 常用参数说明
rateburstlatencydelaylossduplicatecorruptreorder
7. 注意事项
1. 需要 root 权限:所有 tc命令都需要管理员权限2. 临时生效:重启后规则会丢失,需要持久化配置 3. 谨慎操作:错误的配置可能导致网络中断 4. 测试环境:建议在测试环境中先验证
8. 持久化配置
在 Ubuntu/Debian 中创建持久化配置:
# 安装持久化工具
sudo apt install ifupdown
# 编辑网络接口配置
sudo nano /etc/network/interfaces
# 添加类似内容:
# auto eth0
# iface eth0 inet static
# address 192.168.1.100
# netmask 255.255.255.0
# gateway 192.168.1.1
# post-up tc qdisc add dev eth0 root netem delay 100mstc 是网络管理和测试中非常重要的工具,特别适用于网络性能测试、QoS 配置和网络故障模拟等场景。
本文链接:https://kinber.cn/post/5994.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
