|
本帖最后由 zeng362424 于 2019-4-17 21:29 编辑
一、问题描述
最新的软件版本里面,执行tcpdump指定接口抓包的时候,会卡顿,这个时候,是包抓到了,但是解析不出来丢掉了,导致没有抓到需要的报文。
如果将tcpdump抓到的包写入文件当中,就不会出现这种问题。
二、问题查找
通过版本之间的对比,以及svn源码回溯,最后发现是修改linux下/etc/resolv.conf的文件引起的。
具体修改是以前版本这个文件/etc/resolv.conf一直默认都是空的,后面我修改了这个文件/etc/resolv.conf,给它添加了默认值
- nameserver 114.114.114.114
- nameserver 8.8.8.8
复制代码
tcpdump就出现抓包卡顿的问题了。
三、解决办法
1、一开始网上查到的解决办法都是(Linux ubuntu PF_RING+libpcap 极速捕获千兆网数据包,不丢包),这种方式操作比较复杂
2、将原来这个文件/etc/resolv.conf的修改还原回去,默认为空。这样只能解决用户没有配置dns的情况下才生效,
因为如果用户配置了dns,这个文件/etc/resolv.conf就不为空了,上面问题就又出现了。
3、后面网上查找tcpdump丢包问题的时候找到了问题的根源所在。
原来是当这个文件/etc/resolv.conf不为空的时候,tcpdump抓到了包,会去反向域名解析,
将报文里面的IP地址解析成域名,这个是很消耗时间的,也很容易出现解析失败,如果解析失败,这个报文就会被丢掉。
如果将tcpdump的抓包结果写入文件当中,这个反向域名解析的操作就不会进行,也就不会出现丢包问题了。
4、tcpdump抓包的时候带上-n这个参数,反向域名解析的操作就不会进行,丢包问题就得到解决了。
ps:openwrt系统路由器也有相关的问题。
|
|