tc中的入口/出口混淆



有人能解释一下吗,因为我不理解下面的概念。在tc中,你可以添加一个伪qdisc,它可以通过一些特定的规则处理一小部分流量。

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

$TC qdisc add dev eth0 ingress handle ffff:0

然后应用一个过滤器,该过滤器调用一个操作来重定向传入流量使用一些规则(0 0(到伪设备(ifb0(。但是过滤后的流量被标记为"0";出口"!为什么会这样?S这个流量在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

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

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

action mirred egress redirect dev ifb0

是因为交通从";"入口";根qdisc的一部分由网卡拥有,因此当";采取重定向";则该数据变为"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

最新更新