加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

ping首包慢的问题(及icmp对应关系)

发布时间:2020-12-14 00:56:26 所属栏目:Linux 来源:网络整理
导读:一 、之前的旧经验 之前公司发生过wget过慢的情况,经过研究发现wget默认调用系统的getaddrinfo,会同时发送ipv4和ipv6的dns请求,只有当2个都收到或者ipv6超时时,才会进行下载流程。 而公司使用的dns不响应ipv6的请求,导致每次wget前都要在dns阶段卡顿5秒
一 、之前的旧经验

之前公司发生过wget过慢的情况,经过研究发现wget默认调用系统的getaddrinfo,会同时发送ipv4和ipv6的dns请求,只有当2个都收到或者ipv6超时时,才会进行下载流程。
而公司使用的dns不响应ipv6的请求,导致每次wget前都要在dns阶段卡顿5秒钟(等待超时),解决办法是修改了dns代码,遇到ipv6的请求后,直接返回空数据,有效解决了wget等一系统使用getaddrinfo函数的程序速度慢的问题。

二、第一反应

所以平时在操作中遇到ping首包慢的情况,潜意识里觉得应该是ipv6的问题,没有太过关注。但是帮同事解决问题的时候发现,首包卡顿是不定期的,而不是默认5秒钟。

三、抓包分析

感觉很奇怪,于是抓包看了一下,发现dns返回速度很快,也没有请求ipv6的域名地址,同时ping包的request和reply都很快。可是明明已经收到了reply,ping首包依然处于卡顿状态。


抓包发现icmp瞬间返回。


但是显示时间巨慢,需要等待3s。


于是对dns也进行抓包


发现在dns解析,ping响应后,又多了一步dns 用ip反查域名,耽误了很多时间。


四、解决问题

man了ping发现有个配置
-n Numeric output only. No attempt will be made to lookup symbolic names for host addresses.
使用这个参数解决了首包延迟的问题。
另外如果直接ping ip地址,也不会去反查dns。


五、后续问题

在公司内网测试的时候发现ping包经常收不到应答,但是抓包都是响应了的,于是把抓包拿到本地分析。

ping包的icmp是没有端口的,所以通过里面的字段来确定报文是谁发送的,有各个监控进程来自己选择处理响应结果。


如上请求包


如上响应包

但是在第二组抓包里面发现,响应包和请求包的标识字段不一致,没有使用同样的id,而是使用了上一次的识别字段,估计防火墙做了什么保护处理,把上一次的ping包结果给缓存的,用来响应新的ping请求。结果导致了故障。使得ping时通时不通。所以说如果对协议了解的不清楚,不要随便给人做缓存。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读