0

如果我们想绕过内核网络堆栈,看起来我们必须使用 AF_XDP 套接字。

这是否意味着我们必须修改用户空间程序?

但是APK这么多,这么多APK配合修改难吗?

个人感觉应用场景非常有限。

4

1 回答 1

0

确实可以使用AF_XDP套接字绕过内核。使用 XDP 的主要卖点是可以选择性地绕过。例如,您的 XDP 程序可以选择仅绕过特定 IP+TCP 端口的流量,从而允许系统的其余部分正常运行。因此,您无需修改​​所有应用程序,只需修改您想要使用内核绕过的应用程序。

绕过网络堆栈也意味着内核不再为您做任何事情(TCP 重新传输、数据包确认、重新排序、碎片整理)。因此,任何不想绕过内核的应用程序也必须实现自己的网络堆栈才能像普通套接字一样使用它。如果那是您的用例,您可能需要研究DPDK,它可以选择在底层使用 XDP,但可以为您做更多的事情。

至于典型用例:

  • 自定义协议实现
  • 块的数据包捕获(在 DDoS 保护场景中,您可能希望通过 AF_XDP 阻止的插入转发 1000 个数据包中的 1 个以进行检查)
  • DPDKOvS都可以用
  • eBPF 之外的任何其他数据包处理(如果 eBPF 是限制性的,可以在用户空间进行数据包处理,开销很小。主要限制是您不能从用户空间 TX 到本地内核,但您可以修改数据包并制作DROP 或重新传输决定)
于 2022-03-04T11:13:12.730 回答