跳转至

流表

tc 是 Linux 中的流量控制(Traffic Control)工具,通常用于网络流量管理和带宽控制。它允许你配置、调整和监控 Linux 系统的网络接口的流量控制、队列管理、包调度等特性。tc 命令的常见用途包括流量限速、流量整形、带宽分配、流量优先级等。

tc 命令的基本结构

tc [OPTIONS] OBJECT { COMMAND | help }
  • OBJECT:表示要配置的对象类型,常见的对象有 qdisc(队列规则)、class(流分类)、filter(过滤规则)等。
  • COMMAND:具体的命令操作,例如 add(添加)、delete(删除)、show(查看)、change(修改)等。

常用的 tc 子命令

  1. qdisc:队列规则,用于控制数据包的排队和发送。

  2. 添加队列规则

    tc qdisc add dev eth0 root handle 1: htb default 30

    这条命令为 eth0 接口添加一个根队列(root),并使用 htb(Hierarchical Token Bucket)算法进行带宽控制。

  3. 查看当前队列规则

    tc qdisc show dev eth0
  4. class:流分类,用于对流量进行分级和带宽分配。

  5. 添加流分类

    tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit

    这条命令在 eth0 接口上创建一个子类,带宽为 1 Mbps。

  6. 查看类信息

    tc class show dev eth0
  7. filter:过滤规则,用于匹配和操作特定的流量。

  8. 添加过滤规则:

    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

    类。

  9. monitor:监控流量。

  10. 监控流量情况:

    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 可以帮助管理员优化网络带宽的分配,提高网络资源的利用率和性能。