0

有人可以解释一下,因为我不明白以下概念。在 tc 中,您可以添加一个虚拟 qdisc,它可以通过某些特定规则处理一小部分流量。

例如,在这里为 eth0 创建一个显式入口 qdisc。顺便说一句,不知道这有什么意义,例如默认情况下不包含入口 qdisc。

$TC qdisc add dev eth0 ingress handle ffff:0

然后,您应用一个过滤器,该过滤器调用一个操作以将具有某些规则 (0 0) 的传入流量重定向到虚拟设备 (ifb0)。但是过滤后的流量被标记为“出口”!为什么呢?该流量不应该在 ifb0 中也显示为入口吗?

$TC filter add dev eth0 parent ffff: protocol ip prio 10 u32 \
  match u32 0 0 flowid 1:1 \
  action mirred egress redirect dev ifb0

或者入口是否意味着在 qdisk 内排队的任何流量(传入和传出流量)。因此,假设网卡收到了一些数据,并且在开始使用它之前,内核将它排入了某个 qdisc 中。该数据是入口。当这些数据出队以供系统处理时,它就变成了出口?反之亦然,应用程序将一些数据发送到某个 ip 地址,因此在将这些数据提供给网卡之前,内核会将这些数据放入适当的 qdisc 中。所以当它发生时,这些数据就变成了入口。那么在数据被适当的类处理并被出列传递给网卡之后,这些数据就变成了出口?

或者它的入口是从网卡到内核的所有流量?在这种情况下,为什么有出口

action mirred egress redirect dev ifb0

是不是因为流量是从网卡拥有的根qdisc的“入口”部分获取的,所以当“重定向”发生时,这个数据就变成了“出口”?为什么是“出口”?我不明白(

4

1 回答 1

0

确实,但请考虑一下:

TC qdisc 方向与流量的实际方向有关。根据此参考,入口表示网络端口->接口: https ://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.adv-qdisc.ingress.html

TC过滤器动作镜像/重定向方向是相对于界面的。入口意味着在数据包进入过滤器时对其进行镜像/重定向。出口意味着当数据包离开过滤器时镜像/重定向数据包。不同之处在于其他操作可能会在匹配时转换数据包。因此,进入过滤器的内容可能与流出过滤器的内容不同。该命令基本上允许用户决定是对原始数据包还是修改后的数据包进行镜像/重定向。看看这个: https ://man7.org/linux/man-pages/man8/tc-mirred.8.html

于 2021-11-15T20:25:40.057 回答