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
重启系统

时间: 2024-12-15 08:58:47

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

linux 系统 UDP 丢包问题分析思路

转自:http://cizixs.com/2018/01/13/linux-udp-packet-drop-debug?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 最近工作中遇到某个服务器应用程序 UDP 丢包,在排查过程中查阅了很多资料,总结出来这篇文章,供更多人参考. 在开始之前,我们先用一张图解释 linux 系统接收网络报文的过程. 首先网络报文通过物理网线发送到网卡 网络驱动程序会把网络中的报文读出来放到

ping虚拟机丢包问题分析

宿主机ip:192.168.1.2虚拟机ip:192.168.1.3第三台机器ip:192.168.1.4 问题说明:第三台机器 ping 虚拟机 丢包严重第三台机器 ping 宿主机 正常宿主机 ping 虚拟机 正常虚拟机 ping 任何机器 正常 问题分析:根据现象排除了防火墙问题,排除了虚拟机设置的问题.根据现象需要确认第三台机器ping虚拟机时到底ping的是哪台机器,于是使用arp -a进行查看,发现arp -a中有与虚拟机mac地址相同的记录.所以判断应该是mac地址的问题. 问题

linux系统内核UDP丢包原因分析

1.UDP校验和错误 现象:可以用netstat -su 查看到有UDP错包. tcpdump捕包,在wireshark打开捕获的udp报文,开启校验和选项,有错包. 方案:查找链路故障  www.ahlinux.com 2.防火墙开启 现象:特定端口的包收不到 方案:使用service iptables stop关闭. 3.rp_filter开启 现象:tcpdump有包,协议栈收不到.某个地址发送的包一个包都收不到,而另一地只发过来的没问题. 方案:将/etc/sysctl.conf中rp_

linux fedora 14(内核2.6.35.6) PF_RING+libpcap 极速捕获千兆网数据包,不丢包

前面讲到了libpcap 捕获数据包,尤其在千兆网的条件下,大量的丢包,网上搜索好久,大概都是PF_PACKET +MMAP,NAPI,PF_RING之类的方法,我对PF_RING+libpcap进行实验,发现千兆网条件下,捕获数据包的性能很好,几乎不丢包, 实验环境搭配流程如下: 1)下载PF_RING:svn co https://svn.ntop.org/svn/ntop/trunk/PF_RING/ 2)下载完后,在PF_RING/kernel下面make编译pf_ring,生成pf_r

netback的tasklet调度问题及网卡丢包的简单分析

最近在万兆网卡上测试,出现了之前千兆网卡没有出现的一个现象,tasklet版本的netback下,vm进行发包测试,发现vif的interrupt默认绑定在cpu0上,但是vm发包运行时发现host上面cpu1, cpu2的ksoftirqd很高. 从之前的理解上来说,包从netfront出来通过eventchannel notify触发vif的irq处理函数,然后tasklet_schedule调用tx_action,通过一系列处理流程把包发给网卡.所以vif的interrupt绑在哪个cpu

Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). 在WebRTC中,前向纠错(FEC)和丢包重传(NACK)是抵抗网络错误的重要手段.FEC在发送端将数据包添加冗余纠错码,纠错码连同数据包一起发送到接收端:接收端根据纠错码对数据进行检查和纠正.RFC5109[1]定义FEC数据包的格式.NA

通过抓包,实现Python模拟登陆各网站,原理分析!

一.教程简介 1.1 基本介绍 通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方法,使用 Firefox 抓包分析插件分析网络数据包等知识. 模拟登录可以帮助用户自动化完成很多操作,在不同场合下有不同的用处,无论是自动化一些日常的繁琐操作还是用于爬虫都是一项很实用的技能.本课程通过 Firefox 和 Python 来实现,环境要求如下: Python 库:urllib, http.cook

OS X 在Cisco无线环境下丢包分析 part 2

part 1说到,单播的ARP请求最终都被网关丢弃了,从而造成了丢包.先说我最终怎么解决的吧,我最终把核心交换上针对无线VLAN的arp inspection和dhcp snooping删掉了,然后出于安全考虑,启用了WLC(Wireless Controller)上的一个feature,该feature相当于是DHCP snooping和arp inspection的结合,功能是不让客户端私自配静态IP,只允许DHCP获取,那么有这个feature做保障,我也就放心的删掉了核心交换上的arp

UDP主要丢包原因及具体问题分析

一.主要丢包原因 1.接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失.对于这种情况可以修改接收端,将包接收后存入一个缓冲区,然后迅速返回继续recv. 2.发送的包巨大丢包:虽然send方法会帮你做大包切割成小包发送的事情,但包太大也不行.例如超过50K的一个udp包,不切割直接通过send方法发送也会导致这个包丢失.这种情况需要切割成小包再逐个send. 3.发送的包较大,超过接受者缓存导