Ping几乎是linux世界中最常用的网络检查工具,没有之一。在使用中最常见的就是三种情况:
- 正常返回
- 域名无法解析
- 请求超时(无法访问该地址)
这里我分享一个特殊的案例:在一个环境中某个域名访问出现问题,ping域名的记录看起来一切正常,但是ping域名的时候,从打印出第一行PING xxxx到打印后续64 bytes fromxxx中间要等待10多秒,后续的打印结果都很正常。很奇怪的现象,查找资料后才知道这里的玄机:
- ping实际上有两个线程工作,一个负责发送,一个负责收,dns解析出IP地址后,发的线程很快发完并打印第一行日志
- 收的线程由于需要做一次反向解析,完成后在打印日志。但是反向解析没有找到结果,等到了超时之后才返回,这样就出现了第一行返回打印很慢,后续都正常的现象。
解决的办法也很简单:
- 针对我们当时的场景,出现问题的dns地址是默认配置的114,把dns改成阿里云的dns就一切正常了
- 如果只是解决ping的问题的话,ping -n来禁止反向解析同样可以解决问题