流表
tc
是 Linux 中的流量控制(Traffic Control)工具,通常用于网络流量管理和带宽控制。它允许你配置、调整和监控 Linux 系统的网络接口的流量控制、队列管理、包调度等特性。tc
命令的常见用途包括流量限速、流量整形、带宽分配、流量优先级等。
tc
命令的基本结构
tc [OPTIONS] OBJECT { COMMAND | help }
-
OBJECT
:表示要配置的对象类型,常见的对象有qdisc
(队列规则)、class
(流分类)、filter
(过滤规则)等。 -
COMMAND
:具体的命令操作,例如add
(添加)、delete
(删除)、show
(查看)、change
(修改)等。
常用的 tc
子命令
-
qdisc:队列规则,用于控制数据包的排队和发送。
-
添加队列规则:
tc qdisc add dev eth0 root handle 1: htb default 30
这条命令为
eth0
接口添加一个根队列(root
),并使用htb
(Hierarchical Token Bucket)算法进行带宽控制。 -
查看当前队列规则:
tc qdisc show dev eth0
-
class:流分类,用于对流量进行分级和带宽分配。
-
添加流分类:
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
这条命令在
eth0
接口上创建一个子类,带宽为 1 Mbps。 -
查看类信息:
tc class show dev eth0
-
filter:过滤规则,用于匹配和操作特定的流量。
-
添加过滤规则:
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 192.168.1.1 flowid 1:1
这条命令将源 IP 地址为 192.168.1.1的流量匹配到 1:1
类。
-
monitor:监控流量。
-
监控流量情况:
tc -s qdisc ls dev eth0
这个命令会显示接口的流量统计信息。
常用的流量控制算法
- htb(Hierarchical Token Bucket):分层令牌桶算法,常用于带宽管理,适用于多个流量类的带宽分配。
- tbf(Token Bucket Filter):令牌桶过滤器算法,适用于限速。
- pfifo(Priority FIFO):优先级 FIFO 队列,简单的队列调度算法。
示例:限制带宽
假设你想限制接口 eth0
的带宽为 1Mbps:
tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
示例:为特定 IP 限制带宽
为源 IP 为 192.168.1.100
的流量限制带宽为 512kbps:
tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 512kbit
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 192.168.1.100 flowid 1:1
删除配置
删除某个队列规则:
tc qdisc del dev eth0 root
tc
是一个功能强大的网络流量控制工具,适用于流量整形、限速、优先级管理等多种场景。使用 tc
可以帮助管理员优化网络带宽的分配,提高网络资源的利用率和性能。