Classical BPF(cBPF, 伯克利包过滤器)是一种用来过滤网络数据包的技术。它像一个钩子一样挂载在网络栈的关键路径上,可以在数据包进入协议栈之前,根据预设规则来过滤或处理网络数据包。相比于一般的软件包过滤方案,Classical BPF有以下优点:效率高:因为它运行在内核空间,可以避免不必要的内核态和用户态切换,也省去多次数据复制的开销。安全:它不能随意访问系统内存或修改数据包,只能根据规则过滤,不会引起安全隐患。灵活:过滤规则可以动态更新,使包过滤功能更加灵活。Classical BPF通常应用于网络监控、防火墙、流量控制等场景。它为包过滤提供了一个高效、安全、灵活的解决方案。但功能较为受限,只能过滤包不能修改。我在百度做了三年多的网络监控了,我们会使用各种各样的方式来监控整个百度的物理网络,这些监控方式不同于普通的TCP Server/Client或者 UDP程序,一般我们会采用raw socket的方式来做包的探测和网络监控,为了高效的使用raw socket,避免把内核协议层的所有包都复制到应用层,我们会使用cBPF对收到的包进行过滤,我们只从内核层复制特定类型的包到应用层, 比如只复制UDP协议目的端口在20000 ~ 21000的数据包。怎么做到呢?就是使用cBPF。我在先前的文章使用BPF, 将Go网络程序的吞吐提升8倍举了一个使用cBPF的例子:1234
...
继续阅读
(167)