extended Berkeley Packet Filter -- 可扩展数据包过滤器
eBPF(extended Berkeley Packet Filter),意为“可扩展数据包过滤器”,是一种网络数据包的过滤技术。在eBPF出现前,BPF (也称为cBPF , classic BPF ) 得到了广泛的应用,BPF 最初的名字 BSD Packet Filter ,源于BSD操作系统上的一种包过滤机制,后经发展,被作者的工作单位名所替代,变成了 Berkeley Packet Filter。BPF支持数据包筛选,允许用户态程序提供要接收的数据包条件。最常用的tcpdump就是基于BPF 实现 的过滤出tcp包或udp包等功能。由于BPF实现了在内核直接过滤处理的能力,因此避免了不符合条件的数据包被“多余地”复制到用户态,从而大大提高了性能。
eBPF,作为扩展版本的BPF,支持JIT机制,动态地将用户态自定义指令解释为机器代码,并在内核中执行,从而大大提高了灵活性。在eBPF之前,内核模块是注入内核的最主要机制。由于缺乏对内核模块的安全控制,内核的基本功能很容易被一个有缺陷的内核模块破坏。而eBPF则借助即时编译器(JIT),并在kernel预先控制好开放的植入范围及校验程序,保证只有被验证安全的eBPF指令才会被内核执行。
eBPF 是一项起源于 Linux 内核的革命性技术,可以在特权上下文中(如操作系统 内核)运行沙盒程序。它可以安全有效地扩展内核的功能,并且不需要更改内核源代 码或加载内核模块。
内核因具有监督和控制整个系统的特权,一直是实现可观察性、安全性和网络功 能的理想场所。同时,由于对稳定性和安全性的高要求,内核发展相对缓慢,与内核 之外实现的功能相比,创新速度较慢。
eBPF 从根本上改变了上述情况,它允许在内核中运行沙箱程序,即通过运行 eBPF 程序向正在运行中的操作系统添加额外的功能,并通过验证引擎和即时编译器 保证安全性和执行效率,由此衍生出了一系列的产品和项目,涉及下一代网络、可观 察性和安全技术。
如今,eBPF 在多种应用场景中起到重要作用:在现代数据中心和云原生环境中 提供高性能网络和负载均衡,以低开销提取细粒度的安全可观察性数据,帮助应用程 序开发人员跟踪应用程序的运行状态,高效进行性能故障定位,保证应用程序和容器 运行时安全等。