【Linux网络】理解tc命令

tc:traffic control,即交通控制。

1.基本工作流程

使用tc命令,需要理解三个Linux内核网络中的概念:

  • qdisc:是Queue Discipline的缩写,中文是队列规则,就是数据包怎么入队,每个网口都有一个总队列。
  • class:子出口,每个出口有自己的具体限制规则。这是逻辑上的出口,只是为了便于说明,也可以叫其他名字。
  • filter:规定了总队列中的哪类数据,进入到哪个子队列。

qdisc 是挂在网卡上的"总调度员",class 是它手下的"分车道"(各有各的限速),而 filter 就是站在入口的"交警",根据数据包的IP/端口,把它们指挥进对应的高速公路"出口"。

所以tc命令的作用是识别网络数据流 + 限制网络数据流,可以精确到每一个数据包。

2.tc的五大应用功能

一般用tc命令实现以下五大功能:

  • 流量整形
  • 流量调度
  • 流量策略
  • 流量丢弃
  • 网络模拟

对数据包精准控制正是实现这些功能的核心机理。

2.tc命令底层实现

tc是用户态程序,它需要和内核通信才能实现对网络协议栈的控制。通信方式不是一般的系统调用,而是网络模块特有的Netlink通信方式。

tc 命令 (用户态) → 构建 Netlink 消息 → 通过 socket() 等系统调用发送 → 内核 Netlink 子系统接收 → 内核 TC 子系统执行操作。

这里的关键在于,具体的"队列规则"逻辑完全是在Linux内核中实现的。tc 工具本身不执行任何流量整形或排队,它只是一个"配置下发器",其真正的威力来自于内核中复杂而高效的 TC 子系统。