【转】PF_RING学习笔记

转自:Qt迭代器(Java类型和STL类型)详解

1、PF_RING简介

PF_RING是Luca研究出来的基于Linux内核级的高效数据包捕获技术。简单来说PF_RING 是一个高速数据包捕获库,通过它可以实现将通用 PC 计算机变成一个有效且便宜的网络测量工具箱,进行数据包和现网流量的分析和操作。同时支持调用用户级别的API来创建更有效的应用程序。

 

屏幕快照 2016-12-15 下午5.15.29.png

2、PF_RING的优点

现在我们知道PF_RING是拥有一套完整开发接口的高速数据包捕捉库,与我们熟知的libpcap十分相似,但其性能要优于libpcap。关于libpcap的实现机制可以参考libpcap实现机制及接口函数

问题

  • 在传统数据包捕获的过程中, CPU的多数时间都被用在把网卡接收到的数据包经过内核的数据结构队列发送到用户空间的过程中。也就是说是从网卡-->内核, 再从内核-->用户空间,这两个步骤,花去了大量CPU时间,从而导致没有其他时间用来进行数据包的进一步处理。

在传输过程中sk_buff结构的多次拷贝,以及涉及用户空间和内核空间的反复系统调用极大的限制了接收报文的效率,尤其是对小报文的接收影响更为明显。

解决方案

** PF_RING提出的核心解决方案便是减少报文在传输过程中的拷贝次数**。由下图我们可以直观的看到不同技术下对数据拷贝的优化是不同的。接下来将围绕这张图的实现路径解释PF_RING和PF_RING ZC库的实现机制。

 

libpcap、PF_RING、PF_RING ZC方案对比

网卡接收报文的前面的流程就是libpcap实现机制及接口函数中讲解的NAPI,主要的不同体现在报文在内核空间与用户空间的传递。

PF_RING noZC

1、PF_RING socket 针对轮询机制的不足,在轮询机制的基础上提出一种新的包捕获套接字模型,基于环形缓冲区的新的套接字 PF_RING
2、每创建一个PF _RING套接字便分配一个环形缓冲区,当这个套接字结束时释放这个缓冲区
3、PF_RING套接字绑定到某一网卡上时,这个网卡在套接字结束之前处于制度状态,当数据包到达网卡时,将其放入到环形缓冲区。如果缓冲区已经满,则将其丢弃。
4、用户空间可以直接访问这个环形缓冲区中的数据
5、当有新的数据包到来的时候,可以直接覆盖掉已经被用户空间读取过的那个数据包的空间

 

环形缓冲区示意图

PF_RING ZC

  • PF_RING ZC 实现了PF_RING™ DNA(Direct NIC Access 直接网卡访问)技术。是一种映射网卡内存和寄存器到用户态的方法。
  • 因此除了由网卡的网络处理单元完成DMA传输之外,没有任何额外的数据包复制,进一步节省了一次数据拷贝操作
  • 这将性能更好,因为CPU周期的仅用于操作数据包,而不是把数据包从网卡挪走。
  • 其缺点是,只有一个应用可以在某个时间打开DMA ring(请注意,现在的网卡可以具有多个RX / TX队列,从而就可以在每个队列上同时一个应用程序),换而言之,用户态的多个应用需要彼此沟通才能分发数据包。

    PE_RING ZC

 

用户空间创建PF_RING套接字时


fd = socket(PF_RING, SOCK_RAW, htons(ETH_P_ALL));

和基于PF_PACKET套接字的libpcap不同的是,PF_RING机制更为灵活:

  • 1.PF_RING采用mmap的方式将网络裸数据放在一个用户态可以直接access的地方,而不是通过socket read/write机制的内存拷贝;
  • 2.PF_RING支持下面1到3三种方式将裸数据放到mmap到用户态的环形缓冲区以及4的DNA方式:
  • 1.按照PACKET套接字的方式从netif_receive_skb函数中抓取数据包,这是一种和PACKET套接字兼容的方式,所不同的是数据包不再通过socket IO进入用户态,而是通过mmap;(transparent_mode 0)
  • 2.直接在NAPI层次将数据包置入到所谓的环形缓冲区,同时NAPI Polling到skb对列,对于这两个路径中的第一个而言,这是一种比2.1介绍的方式更加有效的方式,因为减少了数据包在内核路径的处理长度,但是要求网卡支持NAPI以及PF_RING接口(一般而言,NAPI会将数据包Polling到一个skb队列)。(transparent_mode 1)
  • 3.和2相同,只是不再执行NAPI Polling。这就意味着,数据包将不会进入内核,而是直接被mmap到了用户态,这特别适合于用户态的完全处理而不仅仅是网络审计,既然内核不需要处理网络数据了,那么CPU将被节省下来用于用户态的网络处理。这可能会将内核串行的网络处理变为用户态并行的处理。(transparent_mode 2)
  • 4.这是一种更猛的方式,唤作DNA支持的模式,直接绕过内核协议栈的所有路径,也就是说直接在网卡的芯片中将数据包传输到(DMA的方式)所谓环形缓冲区,内核将看不到任何数据包,这种方式和Intel的万兆猛卡结合将是多么令人激动的事啊;(DNA技术)

 

E33B49AA-8CBA-4146-9AB7-A38EB076B11B.png

以上便是我们在文档中见到的transparent_mode。对于transparent_mode为0的情况,内核会通过net_if_recv_skb回调packet_rcv函数实现数据接收,所以当向系统内核插入PF_RING模块时在内核注册了packet_rcv钩子函数,使用通用的网卡驱动便可以实现向PF_RING传递报文。而对于transparent_mode为1和2的模式,则是需要使用PF_RING特殊定制的网卡驱动,并在网卡驱动中直接调用注册的包处理函数,将报文传递给PF_RING。

 

屏幕快照 2016-12-16 下午4.02.38.png

transparent_mode是对skb_ring_handler之前的包处理路径进行优化,
quick_mode是对skb_ring_handler之后的包处理过程进行优化

 

 

quick_mode

 

屏幕快照 2016-12-15 下午3.06.52.png

PF_RING的背后
很多人都只是认为PF_RING只是一个高性能的抓包机制,提供本机的数据包镜像分析,实现网络审计,这只是按照传统的思路来解释的。更进一步,PF_RING机制颠覆了网络中间节点解释数据包的方式。按照传统的观念,中间网络节点只能按照协议栈的层次一层一层地解析数据包,所谓路由器是三层设备,交换机是二层设备,防火墙分为二层防火墙和三层防火墙...使用PF_RING的设备,它可以将数据包直接从网卡的芯片DMA到你机器上的内存,仅此而已,然后你通过一个应用程序而不是内核协议栈来处理数据包,至于说你的应用程序怎么处置数据包,我来列举几个:
1.深度解析数据包,按照各种你可以想到的粒度来解析会话,然后记录审计信息;

2.提供高性能的入侵检测功能;

3.转发数据包,按照路由器的方式。但是不再仅仅通过查询路由表的方式进行IP路由,而是可以通过各种各样的方式,转发表完全由你自己定义,比如实现一个通用的SDN流表;

4.根据上面第2点的含义,你可以决定哪些包被丢弃,这就是一个高性能的防火墙。

相比协议栈的串行解决方案,使用PF_RING是一个更加高效的方案,不但高效,而且灵活。如果你拥有多核心的处理器,你甚至可以可以在用户态并行处理数据包的各个层信息

PF_RING API



作者:shaarawy18
链接:https://www.jianshu.com/p/6d3f3cdc2411
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinCE系统的编译过程详解

在WinCE系统中,当我们完成了相关的开发和系统定制工作以后,会编译WinCE系统,最后生成NK.bin和NK.nb0。下面介绍一下WinCE系统的编译过程,大致分为4个阶段:编译阶段(Compile phase),系统产生阶段(Sysgen pha…

使用HtmlParser解析HTML

如果要对HTML进行解析,提取HTML的数据或者修改HTML数据,HtmlParser是一个不错的选择.使用HtmlParser可以解析本地和网络上的HTML数据:Parser parser newParser( newWinista.Text.HtmlParser.Http.HttpProtocol(newUri("uriString")));Parser parser newParser( newWi…

WinCE中得Catalog Items前的标记图标的意义总结

先看下来自微软对Platform Builder里的图标解释,在以后的CE里,也类似。 The Catalog window and the OSDesignView tab contain a number of icons used to represent object types. The icons make it possible for you to differentiate between Catal…

JavaScript 图片上传预览效果

图片上传预览是一种在图片上传之前对图片进行本地预览的技术。 使用户选择图片后能立即查看图片,而不需上传服务器,提高用户体验。 但随着浏览器安全性的提高,要实现图片上传预览也越来越困难。 不过群众的智慧是无限的,网上已经有…

【转】GigE Vision简介

转自:GigE Vision简介_计算机视觉小菜鸟的专栏-CSDN博客_gige vision GigE Vision是由AIA制定的通信协议,用来实现在机器视觉领域利用千兆以太网接口进行图像的高速传输。该标准是基于UDP协议,与普通网络数据包不同之处在于应用层协议&#…

在Sql Server 2005使用公用表表达式CTE简化复杂的查询语句

公用表表达式CTE是Sql Server 2005引入的一种新的表表达式。CTE在许多方面都类似于派生表。逻辑上CTE是一个临时结果集,它仅仅存在于它发生的语句中。您可以在SELECT、INSERT、DELETE、UPDATE或CTEATE VIEW语句中建立一个CTE。 CTE的优点 与派生表不同,C…

【转】搞机:window10安装Linux子系统(WSL)及迁移到非系统盘

转自:搞机:window10安装Linux子系统(WSL)及迁移到非系统盘_泛泛之素-CSDN博客_wsl移动到非系统盘 痛点: 在电脑上想要使用linux又想使用windows系统只能安装双系统,因为虚拟机的性能差且使用麻烦&#xf…

插座上的Linux充电器.不..Marvell Plug Computer

一直以来,台式机都有变小的趋势,于是变成了一体机,主机也有变小的趋势,那样可以占用更小的空间,却提供一样的功 能,Marvell Plug Computer 3.0 同样是那种壁插式主机,身形小巧,能够直…

【转】tftp命令详解

转自:tftp命令详解 - 张大猛 - 博客园 介绍一个 FTP客户端-IIS7服务器管理工具 作为FTP客户端,它支持批量管理ftp站点。定时上传和定时下载,定时备份,且操作简洁。同时iis7服务器管理工具还是vnc客户端。并且支持批量管理管理…

【转】聊聊Linux操作系统中的显示管理器及如何更换

转自:聊聊Linux操作系统中的显示管理器及如何更换 - linux-123 - 博客园 聊聊Linux操作系统中的显示管理器及如何更换 | 《Linux就该这么学》 什么是 Linux 中的显示管理器? 简单来说,显示管理器display manager(DM&#xff09…

【转】[WSL2]WSL2迁移虚拟磁盘文件ext4.vhdx

转自&#xff1a;[WSL2]WSL2迁移虚拟磁盘文件ext4.vhdx_Ryan ZHENG的专栏-CSDN博客 WSL2本质上是一个虚拟机&#xff0c;因此必然存在磁盘镜像文件。 默认情况下&#xff0c;这个镜像文件会放在C盘&#xff08;参考官网举例&#xff1a;%LOCALAPPDATA%\Packages<PackageFa…

【转】Ubuntu中SVN客户端安装+使用

转自&#xff1a;Ubuntu中SVN客户端安装使用_三少GG-CSDN博客 1、 安装 svn客户端&#xff1a; apt-get install subversion&#xff0c;然后根据提示一步一步&#xff0c;就完成了 svn的安装。当然&#xff0c;也可以源码安装 svn&#xff0c;下载 subversion 一个最新版本的源…

【转】CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法

转自&#xff1a;​​​​​​CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法_Absolute Zero-CSDN博客_反投影法 绪 在做CT图像处理的时候遇到很多问题&#xff0c;对于滤波反变换有许多细节存在疑问&#xff0c;经过多天查找资料和利用MATLAB程序一步步实…

【转】交织容积重建技术:基本原理与临床价值

转自&#xff1a;交织容积重建技术&#xff1a;基本原理与临床价值_湃客_澎湃新闻-The Paper 原创 赵喜同学 XI区 单击上方蓝色字体 XI 区 或长按识别下方二维码关注我 大家好&#xff0c;欢迎大家访问XI区&#xff01; 所有医学成像系统的目标是从测量数据中提取最大数量的诊…

Tahoma,Arial和宋体英文字体

几年前一直用简体中文版的Widnows XP&#xff0c;从来没有觉得字体怎么怎么样。偶然看见英文版Windows XP就发现菜单或者文件夹的字体很好看&#xff0c;没怎么研究就把我的中文版XP换成了英文版并沿用至今。后来很久才知道可以在Control Panel -> Display -> Appearance…

【转】CT解析重建**

转自&#xff1a;CT解析重建 - 知乎 1、傅里叶变换&#xff08;Fourier Transform&#xff09; 白光可以分解成彩色光&#xff0c;彩色光也可合成白光&#xff1b;同样的通过傅里叶变换可将时域下的信号转变成傅里叶域的信号&#xff0c;通过傅里叶逆变换可转换回来。此外&am…

WINCE REG文件相关资料

REG文件 注册表文件&#xff0c;这个和Windows操作系统中使用的注册表文件基本一样&#xff0c;在BSP中主要是Platform.reg&#xff0c;该注册表文件描述了和硬件平台相关的配置&#xff0c;大部分是用来描述驱动的相关信息。 注册标的格式如下&#xff1a; de>[KEY1]de&g…

【转】由投影重建图像:滤波反投影、FDK、TFDK三维重建算法理论基础

转自&#xff1a;由投影重建图像&#xff1a;滤波反投影、FDK、TFDK三维重建算法理论基础_m0_37357063的博客-CSDN博客_fdk算法 1. 基础理论从&#xff1a; [1] RafaelC.Gonzalez, RichardE.Woods, Gonzalez,等. 阮秋琦等译.数字图像处理(第三版)[M]. 电子工业出版社, 2011.P2…

How to Use Hive-based Registry IN WINCE.NET

摘要&#xff1a;WINCE本身是一个完全在内存中运行的系统。每次启动都需要把NK.BIN拷贝到内存中相对应的地址。这样的系统就不需要了系统维护&#xff0c;但是如何“永久”的保存设置就成了问题。本文将介绍如何在Wince中实现设置的永久保存。 关键字&#xff1a;WINCE、嵌入式…

【转】libpcap实现机制及接口函数

转自&#xff1a;libpcap实现机制及接口函数 - 简书 1.Libpcap 的工作原理 Libpcap的工作原理可以描述为&#xff0c;当一个数据包到达网卡时&#xff0c;通过网络分接口&#xff08;即旁路机制&#xff09;将数据包发给BPF过滤器&#xff0c;匹配通过的数据包可以被libpcap利…