最近项目需要,需要在千兆网下进行收包,带宽在800Mb左右,传统socket或者rawsocket很容易丢包,因而使用libpcap抓包。经测试,libpcap的接收速度远不如传统socket或者rawsocket,但是好处就是收包比较稳定,并没有丢包现象,据查,linux版本的libpcap是在应用层做的,内部使用的就是rawsocket(不知真假),怪不得时间那么慢。为了提示收取速度,引入pf_ring进行收包加速,过程略有些坑,特此记录。
下载pf_ring源码
编译安装pf_ring内核
-
解压PF_RING-dev.zip;
-
cd PF_RING/kernel
-
make 生成 pf_ring.ko
-
sudo make install
-
insmod pf_ring.ko thansparent_mode=1 注意: thansparent_mode有三种模式, 越高的transparent_mod值,获得报文捕获的速度越快:
0: 缺省,不需要安装任何驱动, 利用标准的Linux接口接收报文, 任何驱动都能使用该模式. 1: 需要安装驱动. 2: 需要安装驱动, pfring以外程序抓不到数据包
安装 pf_ring 库
安装依赖
apt-get instal