tc命令是Linux系统中的一个强大工具,用于配置和管理网络流量控制。它允许用户实现QoS(Quality of Service)策略,包括带宽限制、优先级控制、延迟保证等。以下是tc命令的详细介绍:
1. 基本概念
qdisc(队列规则):qdisc是queueing discipline的缩写,用于定义数据包在网络接口上的排队和调度策略。常见的qdisc类型包括:pfifo_fast(先进先出)、tbf(令牌桶过滤器)、htb(层次令牌桶过滤器)和sfq(随机公平队列)。
class(类别):class用于对流量进行分类和进一步限制。每个class都有一个唯一的classid,可以用来标识该规则。
filter(过滤器):filter用于根据特定条件对数据包进行分类,并将其分配到相应的class中。常见的过滤条件包括:协议类型、源/目的IP地址、源/目的端口号等。
2. 常用命令
2.1 tc qdisc命令
tc qdisc命令用于配置队列规则,即网络流量的调度策略。常用的调度策略有以下几种:
pfifo_fast:先进先出队列,适用于低延迟、高吞吐量的场景。
tbf:令牌桶过滤器,用于限制带宽和速率。
htb:层次令牌桶过滤器,用于实现QoS,可以对不同的流量进行不同的限制。
sfq:随机公平队列,用于公平分配带宽。
例如,以下命令将创建一个htb队列规则,限制eth0接口的带宽为1Mbps:
tc qdisc add dev eth0 root handle 1: htb default 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
2.2 tc class命令
tc class命令用于配置类别规则,即对不同的流量进行分类和限制。每个类别规则都有一个唯一的classid,可以用来标识该规则。常用的限制参数有以下几种:
rate:限制带宽速率。
ceil:限制带宽峰值速率。
burst:限制突发流量大小。
cburst:限制类别突发流量大小。
例如,以下命令将创建一个类别规则,将IP地址为192.168.1.2的流量限制为500Kbps:
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500kbit ceil 1mbit
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.2 flowid 1:10
2.3 tc filter命令
tc filter命令用于配置过滤规则,即根据不同的条件过滤流量并将其分配到不同的类别中。常用的过滤条件有以下几种:
protocol:协议类型。
src/dst:源/目的IP地址。
sport/dport:源/目的端口号。
match:匹配特定的数据包。
例如,以下命令将创建一个过滤规则,将源IP地址为192.168.1.2的流量分配到类别1:10中:
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.2 flowid 1:10
2.4 tc monitor命令
tc monitor命令用于实时监控网络流量和队列状态。可以使用以下命令启动tc monitor:
tc monitor
3. 使用示例
3.1 限制IP示例
假设我们想要限制IP地址为192.168.1.2的流量为500Kbps,可以按照以下步骤操作:
设置根qdisc (队列规则):
tc qdisc add dev eth0 root handle 1: htb default 1
创建子类进行带宽限制:
tc class add dev eth0 parent 1: classid 1:10 htb rate 500kbit ceil 1mbit
创建过滤器以识别特定流量:
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.2 flowid 1:10
3.2 限制端口示例
假设我们想要限制源端口为80的流量为1Mbps,可以按照以下步骤操作:
设置根qdisc (队列规则):
tc qdisc add dev eth0 root handle 1: htb default 1
创建子类进行带宽限制:
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
创建端口过滤器:
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 80 0xffff flowid 1:1
4. 总结
tc命令是Linux系统中一个功能强大的网络流量控制工具。通过合理配置qdisc、class和filter,可以实现复杂的流量整形和QoS策略。掌握tc命令的使用对于网络管理员和开发人员来说至关重要。




