Linux小知识---pf_ring开发使用

54 篇文章 37 订阅
22 篇文章 80 订阅

使用背景

pf_ring主要用来加速流量获取流程,通过创建循环buf和mmap零拷贝技术的使用,缩短数据到达应用层的时间,提高系统处理数据的效率,降低丢包的概率。
具体知识点可以参考
《PF_RING简介》
主要就是下面的图
在这里插入图片描述
目前还没用到DNA技术,听说要付费……
在这里插入图片描述

环境安装

以下内容来自于PF_RING官方网站《PF_RING官方网站》
有部分为本地实测内容,修改了一些,可能这个网站和最新的代码不太一样,有些地方需要先configure才能make。
不过好在依赖的东西不多,还是能顺利安装的。

下载代码

git clone https://github.com/ntop/PF_RING.git

网速不太流畅,多试试吧。

代码结构如下
在这里插入图片描述

安装内核模块

cd PF_RING/kernel
make
make install

加载模块

cd PF_RING/kernel
sudo insmod ./pf_ring.ko [min_num_slots=N] [enable_tx_capture=1|0] [ enable_ip_defrag=1|0]
参数含义
min_num_slots内核模块排队的最小数据包数(默认值–4096)
enable_tx_capture1–捕获发出的包,0–不捕获发出的包
enable_ip_defrag设置为1以启用IP碎片整理,仅对RX流量进行碎片整理

修改驱动

如果您想在Intel适配器上实现万兆及以上的线速率数据包捕获,那么需要使用零拷贝驱动。首先查看网卡的驱动

ethtool -i eth1 | grep driver
driver: xxx

目前驱动支持

  • 1 Gbit
    e1000e (RX and TX)
    Supported cards: Intel 8254x/8256x/82571/82572/82573/82574/82583
    igb (RX and TX)
    Supported cards: Intel 82575/82576/82580/I210/I350
  • 10 Gbit
    ixgbe/ixgbevf (RX and TX)
    Supported cards: Intel 82599/X520/X540/X55x
  • 10/40 Gbit
    i40e (RX and TX)
    Supported cards: Intel X710/XL710
  • 10/25/50/100 Gbit
    ice (RX and TX)
    Supported cards: E810

例如驱动是ixgbe

cd PF_RING/drivers/intel
./configure
make
cd ixgbe/ixgbe-*-zc/src
./load_driver.sh

用户空间lib和pcap

libpfring和libpcap均以源代码格式分发。它们可以按如下方式编译和安装:

cd PF_RING/userland/lib
./configure && make
sudo make install
cd ../libpcap
./configure && make
sudo make install

然后相关pcap的软件,tcpdump之类的,应该就可以使用了。
在这里插入图片描述

应用例子

我用的是ubuntu,需要安装两个第三方软件

apt install bison
apt-get install flex

然后编译example

cd PF_RING/userland/
./configure
make
  • pfcount (位于PF_RING/userland/examples) 是一个用来统计raw包并显示统计信息的例子
./pfcount -i zc:eth1
=========================
Absolute Stats: [64415543 pkts rcvd][0 pkts dropped]
Total Pkts=64415543/Dropped=0.0 %
64'415'543 pkts - 5'410'905'612 bytes [4'293'748.94 pkt/sec - 2'885.39 Mbit/sec]
=========================
Actual Stats: 14214472 pkts [1'000.03 ms][14'214'017.15 pps/9.55 Gbps]
=========================

通过-v的参数,还可以解析报文和2,3,4层的数据:

./pfcount -i eth1 -v 1
Dumping statistics on /proc/net/pf_ring/stats/15773-eno1.279
11:31:41.968485349 [TX][if_index=6][hash=2169540001][00:26:90:D3:CC:F1 -> 0C:C7:7A:CC:C1:4D] [IPv4][192.168.1.20:22 -> 192.168.1.21:34762] [l3_proto=TCP][hash=2169540001][tos=16][tcp_seq_num=415123802] [caplen=254][len=254][eth_offset=0][l3_offset=14][l4_offset=34][payload_offset=66]
11:31:41.968557503 [TX][if_index=6][hash=2169540001][00:26:90:D3:CC:F1 -> 0C:C7:7A:CC:C1:4D] [IPv4][192.168.1.20:22 -> 192.168.1.21:34762] [l3_proto=TCP][hash=2169540001][tos=16][tcp_seq_num=415123990] [caplen=166][len=166][eth_offset=0][l3_offset=14][l4_offset=34][payload_offset=66]
11:31:41.968598956 [TX][if_index=6][hash=2169540001][00:26:90:D3:CC:F1 -> 0C:C7:7A:CC:C1:4D] [IPv4][192.168.1.20:22 -> 192.168.1.21:34762] [l3_proto=TCP][hash=2169540001][tos=16][tcp_seq_num=415124090] [caplen=390][len=390][eth_offset=0][l3_offset=14][l4_offset=34][payload_offset=66]

zcount (位于PF_RING/userland/examples_zc) 类似于pfcount,但是以PF_RING ZC API完成:

./zcount -i zc:eth1 -c 10
=========================
Absolute Stats: 89415341 pkts (0 drops) - 7510888644 bytes
Actual Stats: 14'218'113.27 pps (0.00 drops) - 9.55 Gbps
=========================

结束语

这个知识点还是从一个企业的岗位需求里看到的,我之前在一篇博客里就写过,如果不知道学什么,就去看看招聘信息,里面就有大量的知识点,而且这些都是有价值的,能支撑工作的知识点。
就像周董出了新歌,以前的歌,感觉从来没有像这首歌一样,需要这么丰富的知识点,开始听,感觉和之前一样听不太清楚,感觉还是以前的感觉,但是看了歌词,还是听不懂,这就是知识点不够啊,看来周董这几年,真是没落下功课。
在这里插入图片描述
今天是个特殊的日子,希望我们不要忘记过去,忘记就意味着背叛。警钟长鸣,吾辈自强!
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值