PF_RING首页、文档和下载 - 高速数据包处理框架 - OSCHINA - 中文开源技术交流社区
PF_RING设计
从前面的介绍可以看出,轮询和mmap都可以提升数据包抓取性能,所以在PF_RING中,沿用了这两种技术。另外,PF_RING还引入了环形buffer。
PF_RING架构
图2给出了PF_RING的整体架构设计,在介绍完轮询、mmap和缓行buffer后,PF_RING的工作过程看图2就一目了然了。具体流程如下:
- 应用调用mmap进行内存映射;
- 数据包到达网卡后,处理器以轮询的方式将数据包写到环形buffer;
- 应用调用read从环形buffer里面读数据包;
suricata抓包方式之一 AF_PACKET - Rabbit_Dale - 博客园
前言
linux提供了原始套接字RAW_SOCKET,可以抓取数据链路层的报文。这样可以对报文进行深入分析。今天介绍一下AF_PACKET的用法,分为两种方式。第一种方法是通过套接字,打开指定的网卡,然后使用recvmsg读取,实际过程需要需要将报文从内核区拷贝到用户区。第二种方法是使用packet_mmap,使用共享内存方式,在内核空间中分配一块内核缓冲区,然后用户空间程序调用mmap映射到用户空间。将接收到的skb拷贝到那块内核缓冲区中,这样用户空间的程序就可以直接读到捕获的数据包了。PACKET_MMAP减少了系统调用,不用recvmsg就可以读取到捕获的报文,相比原始套接字+recvfrom的方式,减少了一次拷贝和一次系统调用。libpcap就是采用第二种方式。suricata默认方式也是使用packet mmap抓包。
2、测试例子
为了方便测试,可以使用linux提供的sock_filter过滤ip地址。使用tcpdump可以反汇编出来过滤的条件。以www.qq.com为例进行说明:
ping www.qq.com得到ip地址:101.226.103.106
PF_RING 技术解析:高性能数据包处理框架
1955

被折叠的 条评论
为什么被折叠?



