1 高效捕包技术的重要性
高性能系统需要在很短的时间内,成功的收集和处理大量的数据,目标系统的实时数据需要被收集,管里和控制。
2 传统的数据包捕获机制
Inter指出,影响数据包捕获性能主要原因是系统开销,内存访问和tcp/ip协议栈三个方面,另外系统开销也是非常大的影响因素。另外出现大量的丢包现像的主要原因还有频繁的网络中断,系统调用和多次内存的拷贝。
(1)BPF数据包捕获机制
A:数据链路层的一种原始接口,提供原始链路层封包的过滤和转发。
B:它的实现分为两部分。
一部分是数据包的过滤,
根据过滤规则决定数据包的接受和丢弃。通过内核的NetFilter模块实现,通过用户空间的itables控制。
另一部分是数据包的转发
在链路层捕获数据包,然后发给数据包过滤部分
缺陷:
虽然过滤一部分数据包在一定的程度上降低了系统的开销,提高了效率。但它的捕获和过滤都是在linux内核中完成。这样一来只要linux内核一更新,它也需要更新,降低了它的可移植性和通用性。
(2) libpcap数据包捕获机制
先看看哪些应用是通过这个库写出来的吧,snort,tcpdump。wireshark用的winpcap。可见还是非常的强大的,它同样支持BPF信息过滤机制
libpcap工作机制:
A:本地网卡设置为混杂模式(这种模式能够接受所有流经本机所在网络得数据包)
B:数据包经过BPF过滤
C:交给linux内核层数据包缓冲区,用户层应用程序通过系统调用将数据包从内核缓冲区取出并放入用户空间内存区
缺陷:
数据包经过了linux得内核网络协议栈,从网卡到用户空间的传递过程,存在多次的拷贝和中断相应,消耗大量得cpu时间片,降低系统整体的数据分析能力。
(3)pf_ring数据包捕获机制
在linux内核层添加了一种新的带缓存得协议族,结合网卡得内存访问模式DMA以及中断模式NAPI技术,减少cpu得中断次数。位于用户层得应用程序通过mmap技术直接访问linux内核层得网络数据包,减少数据拷贝。它是一种独立模块的形式,能够进行模块的卸载和加载。
缺陷:
数据从网卡内存缓存区到内核sk_buf数据存储,进行一次拷贝,并没有实现真正意义得零拷贝。f另外它得预处理和数据包的捕获仍然在内核层完成。
3 DPDK
(1)dpdk的四个技术点
A:hugetlbpage:通过大内存提高内存使用效率
B:UIO:驱动的很少一部分在内核中完成,在用户空间完成大部分功能。
C:cpu affinity:将控制面线程以及各个数据面线程绑定在不同的cpu核
D:zero copy:
(2) 数据包捕获基本流程
rte_eal_init对dpdk参数的处理,初始化EAL环境
inti_mbuf_pools:初始化mbuf和pool队列
init_port:初始化端口配置
ret_burst_rx_burst:从端口接收数据包,如果是多端口可以for循环抓包
通过自定义的函数对每个数据包的初步处理并进行队列的分发
内容出自论文基于dpdk的高效数据不获技术分析与应用 计算机工程与科学 第38卷第11期