tcpdump 抓包丢包现象


   今天客户要求对他们的通过tcpdump抓取的镜像数据进行分析,未发现有异常的行为,但是客户通过日志监控设备发现有异常的登录,根据时间去查找该时间段内的报文信息,发现该时间段内报文丢失,即tcpdump抓包有丢包现象。分析原因,启用的命令是正常的tcpdump命令,tcpdump -i etho0  -w  save.pcap;命令没有错误,问什么会有丢包的现象内,上网查了好多资料,都没有说清楚为什么,最后还是用google查询后,发现有一个帖子解释了这个现象:

造成这种丢包的原因是由于libcap抓到包后,tcpdump上层没有及时的取出,导致libcap缓冲区溢出,从而覆盖了未处理包。也就是说tcpdump使用libcap将在linux内核协议栈中的数据包文件提取出来,放到libcap的缓存区内,tcpdump处理ibcap缓存区内数据,而但tcpdump处理速度跟不上时,libcap缓冲区内容就会被覆盖,从而产生丢包现象。
 
 解决方法:
 根据以上分析,可以通过改善tcpdump上层的处理效率来减少丢包率,下面的几步根据需要选用,每一步都能减少一定的丢包率
 1. 最小化抓取过滤范围,即通过指定网卡,端口,包流向,包大小减少包数量
 2. 添加-n参数,禁止反向域名解析
 3. 添加-B参数,加大OS capture buffer size
 4. 指定-s参数, 最好小于1000
 5. 将数据包输出到cap文件
 6. 用sysctl修改SO_REVBUF参数,增加libcap缓冲区长度:/proc/sys/net/core/rmem_default和/proc/sys/net/core/rmem_max


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM