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
posted @ 2022-02-09 22:36  迷糊一世  阅读(3305)  评论(0编辑  收藏  举报