logo资料库

PF_RING用户指南.V5.4.4.pdf

第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
资料共46页,剩余部分请下载后查看
PF_RING 用户指南 Linux 高速包捕获 版本 5.4.4 2012 年 7 月 ©2004-12 ntop.org
目 录 PF_RING 用户指南 ......................................................................................................................... 1 4.1. 4.2. 5.1. 1.1. 3.1. 3.2. 3.3. 1. 介绍........................................................................................................................................... 4 PF_RING 用户指南的更新列表 .................................................................................... 4 2. 欢迎进入 PF_RING ................................................................................................................... 5 2.1. 数据包过滤 ................................................................................................................... 6 2.2. 数据包流程 ................................................................................................................... 6 2.3. 数据包汇聚 ................................................................................................................... 6 3. PF_RING 驱动家族 ................................................................................................................... 7 PF_RING 支持的驱动.................................................................................................... 7 TNAPI ............................................................................................................................. 7 DNA ............................................................................................................................... 8 4. DNA 的 Libzero 库 ..................................................................................................................... 8 DNA Cluster ................................................................................................................... 8 DNA Bouncer ................................................................................................................. 9 5. PF_RING 安装 ........................................................................................................................... 9 Linux 内核模块安装 ................................................................................................... 10 6. 运行 PF_RING ......................................................................................................................... 10 6.1. 检查 PF_RING 的设备配置 ......................................................................................... 11 Libpfring 和 Libpcap 安装 ........................................................................................... 11 6.2. 6.3. 应用程序实例 ............................................................................................................. 12 PF_RING 其他模块...................................................................................................... 12 6.4. 7. PF_RING 应用程序开发者...................................................................................................... 13 PF_RING API ................................................................................................................ 13 7.1. 7.2. 返回码 ......................................................................................................................... 14 PF_RING 设备名称约定 .............................................................................................. 14 7.3. PF_RING:SOCKET 初始化 ......................................................................................... 14 7.4. PF_RING:设备关闭................................................................................................... 15 7.5. PF_RING:读取输入数据包 ....................................................................................... 15 7.6. PF_RING:ring Clusters............................................................................................... 17 7.7. PF_RING:数据包镜像 ............................................................................................... 17 7.8. PF_RING:包采样....................................................................................................... 18 7.9. 7.10. PF_RING:包过滤....................................................................................................... 18 7.10.1. PF_RING:通配符过滤 ................................................................................... 18 7.10.2. PF_RING:哈希过滤 ....................................................................................... 19 7.10.3. PF_RING:BPF 过滤........................................................................................ 20 7.11. PF_RING:NIC 上包过滤 ............................................................................................ 21 7.12. PF_RING:过滤策略................................................................................................... 22 7.13. PF_RING:报文发送 ............................................................................................... 22 7.14. PF_RING:其它函数 ............................................................................................... 23 7.15. C++ PF_RING 接口 ...................................................................................................... 28 8. DNA 的 libzero 库 ................................................................................................................... 28
8.1. 8.2. 8.2.1. 8.3.1. 8.3.2. 8.3.3. 8.3.4. 8.3.5. DNA Cluster ................................................................................................................. 28 8.1.1. 主 API .............................................................................................................. 28 8.1.2. Slave API .......................................................................................................... 31 DNA Bouncer ............................................................................................................... 33 DNA Bouncer API ............................................................................................. 33 8.3. 常用的实例的代码片段 ............................................................................................. 34 DNA Cluster:接收数据包和输出 .................................................................... 34 DNA Cluster:接收一个数据包并且以零拷贝发送 ..................................... 34 DNA Cluster:使用自定义函数替代缺省负载均衡函数 ................................ 35 DNA Cluster:使用扇出函数替代确实的负载均衡函数 ................................ 35 DNA Cluster:不通过 Slave 直接发送一个输入数据包 .................................. 35 9. 编写 PF_RING 插件 ................................................................................................................ 36 9.1. 实现 PF_RING 插件..................................................................................................... 36 PF_RING 插件:处理输入数据包 .............................................................................. 37 9.2. PF_RING 插件:过滤输入数据包 .............................................................................. 38 9.3. PF_RING 插件:读取数据包统计 .............................................................................. 38 9.4. 9.5. 使用 PF_RING 插件..................................................................................................... 39 PF_RING 数据结构.......................................................................................................... 39 虚拟机上的 PF_RING DNA ............................................................................................. 41 11.1. BOIS 配置 .................................................................................................................... 41 11.2. VMware ESX 配置 ....................................................................................................... 42 11.3. KVM 配置 .................................................................................................................... 45 10. 11.
1. 介绍 PF_RING 是一个高速数据包捕获库,它把通用 PC 计算机变成一个有效且便宜的网络测 量工具箱,适用于数据包和现网流量的分析和操作。并且,PF_RING 完整的开发一个市场, 它可以用来创建更有效的应用程序,例如:使用一些代码可以实现流量均衡或者数据包过滤。 本手册分为两个部分: 1) PF_RING 安装和配置; 2) PF_RING SDK(软件开发工具箱)。 1.1. PF_RING 用户指南的更新列表  5.4.0 版本发布(2012 年 5 月) 更新用户指南到 PF_RING 5.4.0 版本 在 DNA 基础上增加灵活的零拷贝数据包处理库(libzero)  5.3.1 版本发布(2012 年 3 月) 更新用户指南到 PF_RING 5.3.1 版本  5.2.1 版本发布(2012 年 1 月) 更新用户指南到 PF_RING 5.2.1 版本 增加管理硬件时钟和时间戳的新 API 函数 增加内核插件调用  5.1 版本发布(2011 年 9 月) 更新用户指南到 PF_RING 5.1.0 版本  4.7.1 版本发布(2011 年 7 月) 更新用户指南到 PF_RING 4.7.1 版本 描述 PF_RING 模块库和一些模块(DAG,DNA)  4.6.1 版本发布(2011 年 3 月) 更新用户指南到 PF_RING 4.6.1 版本  4.6 版本发布(2011 年 2 月) 更新用户指南到 PF_RING 4.6.0 版本  1.1 版本发布(2008 年 1 月) 描述 PF_RING 插件架构  1.0 版本发布(2008 年 1 月) 开始编写 PF_RING 用户指南
2. 欢迎进入 PF_RING 在上图中描述了 PF_RING 的架构,说明如下。 主要的结构单元有: 1) 加速的内核模块,提供低级数据包拷贝到 PF_RING 的环中; 2) 用户空间 PF_RING SDK 提供传输 PF_RING 支持的数据到用户空间的应用程序的功能; 3) 专用的 PF_RING 支持的驱动(可选)允许更进一步的加速数据包捕获,在不通过内 核数据结构的情况下,更有效地把数据包从驱动拷贝到 PF_RING 中。请注意 PF_RING 可以使用任何的 NIC 驱动,但是必须使用这些专用的驱动以便获得最大化的性能, 它们可以在 PF_RING 发行包的 kernel 目录中找到。注意,在使用 transparent_mode 参数来加载 PF_RING 内核模块时,可以选择传递数据包到 PF_RING 的驱动方式。 PF_RING 实现一种新的 socket 类型(称为 PF_RING),这样用户空间的应用程序可以与 PF_RING 内核模块进行通讯,应用程序获得 PF_RING 的句柄,然后调用本手册后面描述的 API。一个句柄可以绑定到: 1) 物理网络接口; 2) 一个 RX 队列,只是用于多队列网卡适配器; 3) 任何的虚拟接口,这意味着可以在使用的系统接口上接收/发送数据包。 正如上面描述的,你可以从一个创建时分配的内存 ring 中读取数据包。产生的数据包 从内核模块中拷贝到环(ring)中,并且用户空间的应用程序可以读取它。不必执行每个数 据包的内存分配和释放。一旦数据包从 ring 中读取出来,ring 中用来存储数据包的空间将会 分配给后续的数据包使用。因此,应用程序需要保存一个数据包的备份,必须保留这些刚才
读取的数据包,因为 PF_RING 自身不会保留它们。 2.1. 数据包过滤 PF_RING 支持遗留(以前)的 BPF 过滤器(例如:基于 pcap 应用程序(如:tcpdump) 支持的),同时也支持两种其他的过滤器类型(称为通配符和精准过滤器,这依赖于指定一 些或者全部的过滤元素),这提供给开发者更多的选择。过滤器在内核中的 PF_RING 模块中 进行评估。一些最新的适配器,例如:基于 Intel 82599 的时适配器,或 Silicom 重定向 NIC, PF_RING 使用专用的 API 调用也支持基于硬件过滤器(例如:pfring_add_hw_rule)。PF_RING 过滤器(除硬件过滤器以外)把一个用户指定的操作告诉 PF_RING 内核模块,在给定的数据 包匹配上时过滤器时执行什么操作,操作包括通过或者不通过过滤器送到用户空间应用程序 中、停止评估过滤器链、镜像数据包等。在 PF_RING 中,数据包镜像可以传输(不修改)匹 配上过滤器的数据包到一个网络接口上(不包括数据包接收的接口)。整个镜像功能在 PF_RING 内核模块的内部实现,上报给用户空间应用程序的唯一动作是没有符合任何数据包 处理的过滤器描述。 2.2. 数据包流程 在把数据包缓冲到 PF_RING ring 队列之前,PF_RING 中数据包流程相当长,如下图所示。 2.3. 数据包汇聚
PF_RING 也可以通过实现两个机制(称为负载均衡和汇聚)来增加数据包捕获应用程序 的性能。这些机制允许应用程序(将并行处理一组数据包)来处理整个数据包流的一部分, 此时发送所有的剩余数据包到另外一些 Cluster 上。这意味着不同打开 PF_RING 套接字的应 用程序可以把它们绑定到执行的 Cluter 编号(利用 pfring_set_cluster)上从而集中力量来分 析数据包的一部分。 通过这种方式,数据包被分配到不同的使用 Cluster 规则(例如:所有属于同一个元组 的数据包)指定的 Cluster 套接字上。这意味着,如果你选择 per-flow 均衡,所有属于同一个流的数据包(例如 5 元组指定的)将会进入同一个应用程序, 然而带有循环提示器的应用程序将接收到相同数据的数据包,但是这不能保证属于相同队列 的数据包由单个应用程序接收。因此,一方面 per-flow 均衡允许你表示应用程序的逻辑,在 这种情况下应用程序将接收所有数据包的一个子集,但是这些流量应该是前后一致的。另一 方面,如果你有一个带有许多流量的指定流,那么处理这些流的应用程序将会被数据包益出, 因此流量将不会大量的均衡。 3. PF_RING 驱动家族 正如前面所描述的,PF_RING 可以工作在标准 NIC 驱动或者专用驱动上面。PF_RING 内 核模块是相同的,但是基于使用的驱动程序,在功能和性能上会有所不同。 3.1. PF_RING 支持的驱动 这些驱动(在 PF_RING/driver/PF_RING-aware 中可用)设计用于提高数据包捕获,它把 数据包直接放入到 PF_RING 中,不经过标准 Linux 数据包分发机制。使用这些驱动程序,你 能使用带有 1 或 2 值的 trasparent_mode。(更多信息请参见文档的下面部分)。 除了 PF_RING 支持的驱动程序(对一些可选的适配器)以外,使用其他驱动程序类型来 进一步改善数据包捕获是可能的。 3.2. TNAPI
驱动程序第一个系列称为 TNAPI(线程 NAPI),它们允许数据包使用 TNAPI 驱动直接激 活的内核线程从而更加有效的存放到 PF_RING 中。TNAPI 驱动设计用于改进数据包捕获,但 是它们不能用于发送数据包,因为 TX 方向上是禁用的。 3.3. DNA 对于那些希望在 CPU 利用率为 0%(拷贝包到主机)情况下需要最大数据包捕获速度的 用户(例如:NAPI 轮询机制不能使用)来说,使用不同类型的驱动(称为 DNA)也是可能 的,它允许数据直接从网络接口上读取,它以零拷贝的方式同步的从 Linux 内核传递到 PF_RING 模块中。 在 DNA 中同时支持 RX 和 TX 操作。当内核旁路的时候,一些 PF_RING 的功能会失效, 它们包括: 1) 内核包过滤(BPF 和 PF_RING 过滤器); 2) PF_RING 内核插件无效; 4. DNA 的 Libzero 库 许多应用程序需要复杂的包处理特征,从 PF_RING 5.4.0 开始,称为 libzero 的库被介绍, 它位于低级 DNA 接口之上,实现了零拷贝数据包处理。libzero 提供两个主要组件:DNA Cluster 和 DNA Bouncer。 4.1. DNA Cluster DNA Cluster 实现包的汇聚,因此所有属于相同 Cluster 的应用程序可以共享输入数据 包,使用一个简单的负载均衡函数,以零拷贝的方式传输所有的数据包。RSS 的定制实 现允许把数据报文分流道网络适配器的多个队列中。Cluster 允许用于定义过滤、分发
分享到:
收藏