背景:
说一下问题吧.自己代码写了一台DNS服务器,部署在国外.在国内测试域名解析时,发现windows下ping指令比ubuntu下解析的快.使用windows 下浏览器(谷歌)访问网站也比Ubuntu下浏览器(火狐)快很多.是什么原因呢?
首先简单解释一下ping的流程,'ping + IP '的话会直接向IP地址发送icmp包,'ping+ 域名'的话,会先向DNS解析域名,将域名解析成具体IP后向指定IP发送icmp包.
解决过程:
1.先自己写了个DNS客户端分别在windows和ubuntu下向DNS服务器查询指定域名A记录,发现耗时差不多都很快,dig指令查询也很快,说明问题不是在域名解析速度这块儿.
2.在Ubuntu和windows上分别安装wireshark抓dns网络包,对比发现windows下默认直接向DNS服务器查询域名的A记录,ubuntu下会向DNS服务器查询域名的A记录和AAAA记录(A记录对应域名ipv4地址,AAAA记录对应ipv6地址).而我自己的DNS服务器上只增加了该域名的A记录.所以在查询A和AAAA记录时,因为DNS没有增加AAAA记录没有响应,会有等待的过程,问题就出在这块耗时.
3.在我向DNS服务器增加相应AAAA记录后ubuntu下ping就很快.
总结:
ubuntu 下ping指令是同时发送dns查询包查A记录和AAAA记录,当两个记录类型都存在时解析很快,如果出现任何一个丢包或者查询无返回的话,会有等待超时.windows 下ping指令默认直接查域名A记录,Ubuntu ping指令如果单纯想ping 域名ipv4地址的话建议使用 'ping -4 +域名'.指定ping ipv4. 另外火狐浏览器访问网址时会默认查询A和AAAA记录,没有AAAA记录响应的情况下域名解析过程会比较缓慢,谷歌浏览器会默认直接查询域名的A记录,所以比较快.以上是我遇到的情况,仅供参考,希望对大家有所帮助.