




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1近日用tcpdump抓包,发现有大量的丢包出现("packets dropped by kernel"),如下:tcpdump -i eth0 dst port 1234 and udp -s 2048 -X -tt >a.pack264 packets captured3043 packets received by filter2706 packets dropped by kernel丢包原因:经过google以及分析,造成这种丢包的原因是由于libcap抓到包后,tcpdump上层没有及时的取出,导致libcap缓冲区溢出,从而 覆盖了未处理包,此
2、处即显示为dropped by kernel,注意,这里的kernel并不是说是被linux内核抛弃的,而是被tcpdump的内核,即libcap抛弃掉的,上层监听到1234端口的server可以正常的获取数据。解决方法:根据以上分析,可以通过改善tcpdump上层的处理效率来减少丢包率,下面的几步根据需要选用,每一步都能减少一定的丢包率1.最小化抓取过滤范围,即通过指定网卡,端口,包流向,包大小减少包数量2. 添加-n参数,禁止反向域名解析tcpdump -i eth0 dst port 1234 and udp -s 2048 -n -X -tt >a.pack大多数情况这
3、样就可以解决了可以通过改善tcpdump上层的处理效率来减少丢包率3. 将数据包输出到cap文件tcpdump -i eth0 dst port 1234 and udp -s 2048 -n -X -tt -w a.cap用了这一步,基本上所有的网络server都可以搞定了4. 用sysctl修改SO_REVBUF参数,增加libcap缓冲区长度这一步是绝招了,由于设计内核参数修改,尽量不要使用,要用了不行,那就没办法了 _2通过tcpdump抓包时,结束后tcpdump会给出如下统计信息:1552 packets captured1586 packets receiv
4、ed by filter34 packets dropped by kernel 其中“captured”的计数指的是应用层捕获到的数据,“received by filter”和“dropped by kernel”的计数由内核维护,应用层通过getsockopt来获取。收到一个包,“received by filter”会加1,如果sock的接收buffer被填满时,则把这个数据包丢弃,将“dropped by kernel”加1。if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= (unsigned)sk
5、->sk_rcvbuf) spin_lock(&sk->sk_receive_queue.lock); po->stats.tp_drops+; spin_unlock(&sk->sk_receive_queue.lock);通过调节/proc/sys/net/core/rmem_default和/proc/sys/net/core/rmem_max能够改变sk_rcvbuf的大小。正常“captured”加上“dropped by kernel”应该等于“received by filter”的大小,有的时候出现不等的情况应该是还有一些数据包在sk_r
6、cvbuf中,还没有被应用层收到的原因。tcpdump做pcap丢包一直用tcpdump做pcap,忽然从某一天开始做的pcap稍微大一点,就开始丢包,给出的哦信息大概是”xxxx packets dropped by kernel”,可能出问题的也就是vmware/linux kernel/libpcap/tcpdump,这里边的每一个我都经常升级,太复杂了,不知道是哪个引入的问题。于是就一直得过且过,大文件就凑合着在windows上用wireshark。今天实在是想搞清楚怎么回事,就仔细看了一下。仔细想想,首先排除vmware的问题,因为所有网络程序都正常工作,没有理由vmware或者tc
7、p/ip本身出问题。所以大概就只是libpcap和 tcpdump的问题。搜到一篇文 章,大概的意思就是是因为内核skb的buffer太小,tcpdump还没有来得及取下一个包,这个就已经被内核里边来的下边的包给覆盖掉了。 试着改了一下还是不行,那看来不是内核缓存的问题,应该就是libpcap或者tcpdump取包比较慢。起了GUI用wireshark抓了一下,NND也是正常的,那就只可能是tcpdump的问题了。仔细看了一下我的tcpdump参数,一般都是”tcpdump port 80 -w aaa.pcap -s 0,唯一不同的就是”-s 0,之所以用这个参数,是因为好久以前tcpdum
8、p如果加上”-w”,默认不记录数据,只记录包头,加上”-s 0,那就是每个包最大记录65535的数据,不过现在默认也改成了65535,所以这个参数有没有都没什么区别。剩下的就是”tcpdump port 80 -w aaa.pcap”,完全正常,彻底抓狂了。抓狂中无聊试了一下”-s 2000,哇,一下不丢包了。反正tcp MTU是1500,这个数字也没啥问题。问题解决,看来估计是tcpdump某一个memcpy或者类似的内存操作的参数是用最大65535,而不是用实际抓到包的大小,所以速度慢下来来不及去 取内核缓存的数据。Tcpdump丢包问题The kernel has a buffer fo
9、r packets to be delivered to tcpdump. If tcpdump doesn't respond quickly enough, the kernel will overwrite old packets with new ones. 使用tcpdump抓包时,内核分配缓冲区存放向tcpdump传送的数据包,如果tcpdump处理的不够快,新到达的包会覆盖缓冲区中较早的包,即出现dropped丢包的情况。解决方法:1. 增大系统缓冲区大小 bpfbufsize 2. 避免tcpdump进行dns解析,使用tcpdump -n参数。尽量减少tcpdump的
10、工作量,其他的参数如-nn等可参考。 Pf_ringPF_RING包括一个linux内核模块和该模块在用户层的库, 这个库符合libpcap标准。你需要将应用程序在链接时链接到这个库,才能发挥作用。简单说,千兆抓包使用普通linux性能上是不够的,必须使用专用的抓包库。pf_ring,通过修改系统内核提高基于Linux和libcap的抓包效率官方网站:pf_ring 使用心得i=s 本帖最后由 pdsxw123 于 2010-08-09 20:54 编辑 /i在论坛里已经有人把pf_ring的原理大概讲述了,在此不再累述。大家如果想了解或者学习的话,可以直接
11、从官方网站上下载,url/url最新版本为4.4.0,目录为:driversdriversbroadcomdriversinteldriversmyricomkernel/ Kernel related patchesuserland/
12、0; User space codeuserland/lib/ User space library used to manpulate PF_RINGuserland/libpcap-XXX-ring/ Libpcap enhanced with PF_RING supportuserland/examples/ P(ac
13、ket)count application (use it for your tests)1.编译安装之前需要卸载网卡驱动,卸载之前可以使用ethtool -i ethx 查看当前网卡类型和驱动版本。2.cd 到kernel下,make,然后sudo make install3.cd 到userland/lib/下,make,然后sudo make install4.如果需要使用libcap抓包做分析,请先卸载之前装的libcap,然后cd 到userland/libpcap-XXX-ring/./configure -> make -> sudo make install5.cd
14、 到drivers下,根据ethtool -i ethx 命令看到的网卡驱动和类型,进入指定的目录。假设你看到如下信息:driver: e1000eversion: 1.0.2-k2firmware-version: 0.4-3bus-info: 0000:00:19.0cd 到driversintele1000e-1.0.15下,make -> sudo make install6.开始安装驱动,cd 到 lib/modules/xxx/kernel/net,可以看到有个pf_ring的目录,cd 到pf_ring下使用命令 sudo insmod pf_ring.ko transpa
15、rent_mode=17.安装网卡驱动,cd到目录lib/modules/xxx/kernel/driver/net下,使用命令 sudo insmod e1000e.ko 安装完毕,现在我们可以使用命令 dmesg 查看驱动是否安装成功,如果成功的话,可以看到PF RING. 信息pf_ring 会安装一个类型为27的协议簇,可以使用sock(PF_RING,SOCK_RAW,0)打开一个socket使用libcap的朋友不需要修改程序,需要重新编译,链接的时候请加上libpfring.so.最近在使用的时候,发现pf_ring只做了intel e1000e的DNA的实现,局限性太大了。现在的网卡类型,特别是服务器上的基本上是HP、broadcom等,如果只是使用PF_RING抓包的话,经过简单测试后暂时发现与用libcap没什么区别。并且pf_ring定制的libpcap没有缓存功能pf_ring有两种工作模式,可以使用transparent_mode设置,0:表示与libpcap什么区别,pf_ring.ko注册个回调函数到网卡
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【2025年存储芯片发展趋势:AI驱动市场需求激增 价格上行周期开启】
- 预制梁板施工方案
- 智能交通系统施工方案
- 第08讲 八上古诗词【知识精研】中考语文一轮复习(广东专用)
- 吉林清淤固化施工方案
- 东莞排水带施工方案
- 2025年增城临聘笔试试题及答案
- 2025年往年音乐学考试题及答案
- 2025年排序中考试题语文及答案
- 低碳行动方案设计
- 第一篇 专题一 第2讲 牛顿运动定律与直线运动
- 规划高中生涯模板
- 中国卒中学会急性缺血性卒中再灌注治疗指南 (2024)解读-指南解读系列
- 第二单元 第二次工业革命和近代科学文化 说课稿 2024-2025学年统编版九年级历史下册
- 《电气安全培训课件》
- 2025年结核病防治知识竞赛题库及答案(共117题)
- 高标准农田施工组织设计
- TSDHCIA 016-2021 化工行业智能化水平评估规范
- 2025届高考数学二轮复习备考策略和方向
- 安徽省“江淮十校”2025届高三第三次模拟考试数学试卷含解析
- 物联网安全漏洞挖掘与修复-洞察分析
评论
0/150
提交评论