×

模拟流量神器-tc

hqy hqy 发表于2025-11-30 01:18:47 浏览3 评论0

抢沙发发表评论

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 eth0

3.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 2mbit

3.4 删除配置

# 删除所有队列规则
tc qdisc del dev eth0 root

# 删除特定过滤器

tc filter del dev eth0 parent 1: protocol ip prio 1

4. 高级用法

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:10

4.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:20

4.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 root

5.2 限制下载速度

# 限制下载速度不超过 500kbit
tc qdisc add dev eth0 root tbf rate 500kbit burst 10kb latency 50ms

5.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:20

6. 常用参数说明

参数
说明
rate
带宽限制(如 1mbit, 512kbit)
burst
突发流量大小
latency
最大延迟时间
delay
网络延迟
loss
丢包率
duplicate
包重复率
corrupt
包损坏率
reorder
包乱序率

7. 注意事项

  1. 1. 需要 root 权限:所有 tc 命令都需要管理员权限
  2. 2. 临时生效:重启后规则会丢失,需要持久化配置
  3. 3. 谨慎操作:错误的配置可能导致网络中断
  4. 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 100ms

tc 是网络管理和测试中非常重要的工具,特别适用于网络性能测试、QoS 配置和网络故障模拟等场景。


打赏

本文链接:https://www.kinber.cn/post/5994.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客