• libpcap丢包原理分析及Fedora 9 内核2.6.25.14下安装PF-RING的详细过程


        看到网上有人讲解fedora 9下安装PF-RING的过程,都是几年前的了,比较老了,我安装PF-RING就是为了使用libpcap库,libpcap的原理是通过socket 将数据包从网卡 捕获数据包,然后在提交给应用程序,和winpcap很大的区别是,libpcap采用的是2个缓冲区,内核类似的一个乒乓操作,详细见我的庖丁解牛 --winpcap源码彻底解密一系列的文章。winpcap采用的是环状缓冲区,在winpcap下当网卡有数据到来时,npf.sys就会将数据拷贝 到内核缓冲区中,而内核驱动实际上是一个Ndis协议驱动,当内核缓冲区的数据包大小达到一个阈值mintocopysize时,它就会将数据包拷贝到应 用缓冲区中,kernelbuffer和userbuffer,及mintocopysize都提供了函数进行设置的。那么为什么在windows平台进 行包捕获的时候,千兆网的条件下,都很少有包丢失呢,为什么在linux环境下进行包捕获,丢包率很大,这就要仔细分析源码了,winpcap的 npf.sys是一个Ndis协议驱动,它和TCP/IP协议是同一层的,即采用winpcap捕获数据包,数据包就不需要经过tcp/ip层了,而 libpcap是linux下的捕获包,他是在应用层之上的,及在tcp/ip协议上,本来通过socket可以捕获包的,libpcap不过是对 socket进行了一次封装,在socket上面有提供了一层接口,方面用户的调用。libpcap捕获包的流程如下:

     

        

    Linux 的 libpcap 详细流程为:网卡硬中断 -> 软中断 -> 内核协议栈 -> 系统调用 ->socket 接口 ->libpcap 接口 -> 用户应用程序,在这个流程中,可以看出数据的 copy 比较多。所以 libpcap 抓包丢包严重也不用感到奇怪了,为了减少丢包率,采用 libpcap-pfring 方法。

    下面讲解 fedora 9 下如何安装 PF-RING ,安装过程如下:

    1)cd /home 然后再这里建立一个目录 mkdir rfring-libpcap

    2)cd rfring-libpcap

    3)svn co https://svn.ntop.org/svn/ntop/trunk/PF_RING/  下载 PF-RING

    4)PF-RING 下载完后, cd /PF-RING/legacy 下, vi mkpatch.sh 修改内核版本号 ={SUBLEVEL : -25.14}

    5)./mkpatch.sh 下载内核到 workspace 中,生成目录 linux-2.6.25-14-686-smp-PF_RING 和补丁文件 linux-2.6.25-14-686-smp-PF_RING.patch.gz 。

    6) 按下面操作

    mv linux-2.6.25-14-686-smp-PF_RING/ linux-2.6.25-14-686-smp-PF_RING.bak/
    zcat linux-2.6.25-14-686-smp-PF_RING.patch.gz | patch -p0   

    7 ) cd linux-2.6.25 编译内核

     #vi Makefile 在这个地方加上一个自定义的后缀:  EXTRAVERSION = -PF_RING ,这会显示在界面启动的时候看到

    8 ) make oldconfig 主要目的是选择 RF_RING

    9) make menuconfig 检查 Networking->Networking options —>PF_RING sockets ( EXPERIMENTAL )

    10) 然后就开始编译内核了,按我以前写的一篇博客操作 make

    11 ) make modules

    12 ) make modules_install

    13)   make install

    14) cd /root/grub

    15) vim menu.lst  删除 menuhidden

    16) cd ../..   

    cp kernel/include/linux/ring.h /usr/include/linux/

    17) 编译源码和 libpcap

    cd userland

    make

     

    cd lib/

    make install

     

    cd ../libpcap-1.1.1-ring/

    make install

     

    18) reboot 重启系统

  • 相关阅读:
    [LeetCode] Convert Sorted Array to Binary Search Tree
    [LeetCode] Diameter of Binary Tree
    [LeetCode] Student Attendance Record I
    [LeetCode] Reverse String II
    [LeetCode] Missing Number
    [LeetCode] Intersection of Two Arrays II
    [LeetCode] Base 7
    Ubuntu中firefox设置成中文
    Linux中的查找命令find
    Ubuntu14.04安装配置Chrome浏览器
  • 原文地址:https://www.cnblogs.com/jacklikedogs/p/4714261.html
Copyright © 2020-2023  润新知