介绍AF_XDP,要从BPF说起。在Linux内核中,BPF(BSD Packet Filter)是一种高效灵活的类似虚拟机的工具,能够以安全的方式在不同的钩点执行用户注入到内核的字节码。它提供了一种过滤包的方法,并且避免了从内核空间到用户空间的无效的数据包复制行为。2013年的时候,Alexei Starovoitov对BPF进行了改造,在功能和性能方面...
选择UDP也能让QUIC协议不依赖网络中间设备Middle-Boxes做调整。 TCP协议的开发、调试、观测的困难问题也会迎刃而解,无需通过复杂的BPF(Berkeley Packet Filter)来采集和调试协议栈程序,只需在用户态部署简单的数据收集程序。 应用程序的崩溃问题也不至于影响系统内核,而且可以留足崩溃现场做后续分析。 用户态有更多的...
选择UDP也能让QUIC协议不依赖网络中间设备Middle-Boxes做调整。 TCP协议的开发、调试、观测的困难问题也会迎刃而解,无需通过复杂的BPF(Berkeley Packet Filter)来采集和调试协议栈程序,只需在用户态部署简单的数据收集程序。 应用程序的崩溃问题也不至于影响系统内核,而且可以留足崩溃现场做后续分析。 用户态有更多的...
handle_ipv4函数对ipv4报文进行处理,继续解封装,过滤出传输层协议为UDP且目的端口为expect_udp_dport的数据帧,expect_udp_dport即为quic-server绑定的udp端口。最后通过bpf_redirect_map将数据帧重定向到队列绑定的xsk中。quic-server通过epoll管理xsk的读事件,通过消费Rx ring获取到所收到的包,实现了从xsk读取数据的...
TCP协议的开发、调试、观测的困难问题也会迎刃而解,无需通过复杂的BPF(Berkeley Packet Filter)来采集和调试协议栈程序,只需在用户态部署简单的数据收集程序。 应用程序的崩溃问题也不至于影响系统内核,而且可以留足崩溃现场做后续分析。 用户态有更多的程序库帮我们实现更复杂、更全面的策略,比如自适应CC(Congestion...
由于libpcap是从网卡拷贝数据,所以就会把设置为0的包拷贝出来,然后传送给BPF,这也就导致了我们看到了ip_len=0的情况。这个BUG已经在后续的版本中进行了修复。 四、网卡的offload机制 2012年以后,大量民用网卡开始采用offload技术,此技术就是将包的分片,重组,校验等从CPU计算,转移到网卡硬件上进行计算,从而减轻了CPU...
BPF_PROG_TYPE_SK_REUSEPORT 这个 HOOK,可以策略性的控制一个包到达后发往到哪一个 accept 队列。这使得使用 EBPF 可以实现因为用户源地址变化引起的 QUIC 连接迁移。具体方法是在 EBPF 的 REUSEPORT 钩子处,解析 QUIC 包以及连接 ID,根据 QUIC 连接 ID 将包转发到对应的 worker 去。
EBPF 在内核 4.19 引入 BPF_PROG_TYPE_SK_REUSEPORT 这个 HOOK,可以策略性的控制一个包到达后发往到哪一个 accept 队列。这使得使用 EBPF 可以实现因为用户源地址变化引起的 QUIC 连接迁移。具体方法是在 EBPF 的 REUSEPORT 钩子处,解析 QUIC 包以及连接 ID,根据 QUIC 连接 ID 将包转发到对应的 worker 去。
To overcome this limitation, this paper proposes a software offloading model--NanoBPF, which is a protocol offloading model based on the RISC-style many-core DPU (Data Processing Unit). By modifying the Bootloader's startup code, it guides the eBPF (extended Berkeley Packet Filter...
内核的修改:EBPF 在内核 4.19 引入 BPF_PROG_TYPE_SK_REUSEPORT 这个 HOOK,可以策略性的控制一个包到达后发往到哪一个 socket。这使得使用 EBPF 可以实现因为用户源地址变化引起的 QUIC 连接迁移。具体方法是在 EBPF 的 REUSEPORT 钩子处,解析 QUIC 包以及连接 ID,根据 QUIC 连接 ID 将包转发到对应的 worker...