- 1 BPF
BPF
编辑BPF(BPF),也称为伯克利过滤器,在类 Unix 操作系统上提供数据链路层的接口,允许发送和接收数据链路层上的数据包。 如果网络接口驱动程序支持混杂模式,则可以将接口切换到此模式,以便可以接收网络上的所有数据包,包括用于其他网络适配器的数据包。
BPF 还支持过滤数据包,以便只处理感兴趣的数据包,从而节省计算能力。
Berkeley 过滤器功能作为 BPF VM 的机器语言解释器实现。 因此,计算机程序可以从数据包中读取数据,对其执行算术运算,将结果与过滤器定义进行比较,然后接受或拒绝该数据包。 在某些系统上,包括 FreeBSD 和 WinPcap,支持实时编译(将虚拟机指令转换为机器语言)以提高系统性能。 由于在 Linux 下也支持了即时编译,所以 BPF 在内核中发展成为一个通用的虚拟机。 BPF 是 LLVM 的官方后端(从 3.7 版开始)。
解释器可以运行在内核态或用户态。用于Linux或WinPcap机制下的套接字过滤器。 Pcap API 的 libpcap/WinPcap 实现提供了一个用户模式解释器。 在没有内核模式支持过滤机制的系统上,它可以用来过滤用户模式数据包。
2007 年,Robert Watson 和 Christian Peron 为 BPF 实现添加了零拷贝缓冲区扩展。 这允许设备驱动程序捕获的数据包直接写入用户模式程序的内存,无需额外的数据复制。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/369946/