You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tc中ingress与egress定义及mirred重定向参数疑问

问题解答

为什么需要手动创建ingress qdisc?

ingress qdisc 不会默认自动加载。它是一个特殊的无队列qdisc,仅用于挂载入站方向的流量过滤器,本身没有排队、整形能力。因为大部分场景不需要对入站流量做额外控制,内核默认不会为网卡初始化这个qdisc,只有当你需要处理入站流量时才需要手动创建,你用到的tc qdisc add dev eth0 ingress handle ffff:0就是这个初始化操作,其中ffff:0是ingress qdisc的固定主编号约定。

为什么mirred动作要指定egress参数?

首先明确ingress/egress的核心定义:所有方向判定都是相对于当前操作的网络设备而言的,和qdisc的入队出队逻辑没有直接关联:

  • 对任意网络设备,流量从外部流入设备、走向内核协议栈的方向为ingress
  • 流量从内核协议栈发出、要通过设备向外发送的方向为egress
    你提到的action mirred egress redirect dev ifb0里的egress,指的是将从eth0 ingress方向抓取到的流量,注入到ifb0的egress方向处理流程,并不是说原本的入站流量属性发生了变化。
    这么设计的核心原因是:tc原生的排队、整形、调度能力(比如HTB、FQ、cake等常用qdisc)最初都是为egress方向设计的,ingress qdisc本身没有队列,无法实现这类需要缓存排队的功能。而IFB虚拟设备的作用就是把入站流量拐到自身的egress方向,复用现有egress方向的所有流量控制能力,实现入站流量的整形、限速。如果这里指定注入到ifb0的ingress方向,还是会走到ifb0无队列的ingress qdisc,达不到排队处理的目的。

完整逻辑梳理

你用到的这两条命令是Linux tc实现入站流量整形的标准方案:

  • 为物理网卡eth0创建ingress qdisc,挂载过滤器捕获所有入站流量
  • 通过mirred动作把所有入站流量转发到ifb0的egress方向
  • 在ifb0的egress上挂载需要的qdisc规则,对入站流量做整形、限速等处理
  • 处理完成的流量会从ifb0送回内核协议栈继续处理,等效于直接对eth0的入站流量做了控制

内容的提问来源于stack exchange,提问作者krop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:06:10