eBPF xdp和tc区别
xdp |
tc |
|
层次 |
网卡驱动层 |
数据链路层 |
位置 |
进入Linux网络协议栈之前 |
在Linux网络协议栈中,netfilter之前 |
方向 |
只有ingress |
有ingress和egress |
修改 |
支持修改报文 |
支持修改报文,有skb结构,修改更方便 |
网卡响应关系 |
网卡响应在xdp之后 |
网卡响应在tc之后 |
tcpdump 抓包位置
主机网口入向 |
xdp之后,tc之前 |
主机网口出向 |
xdp之后,tc之后 |
veth口入向 |
tc之后 |
veth口出向 |
tc之前 |
cilium加载eBPF到虚拟网卡tc上来实现流量转发,没有xdp。
虚拟网口增加假qdisc(排队规则),假qdisc上增加eBPF程序时指定class分类(ingress/egress),eBPF程序完成filter(识别报文并转发)。