公司互聯(lián)網(wǎng)域(說白了就是可以連外網(wǎng)的vlan區(qū)域的主機(jī))的幾臺(tái)主機(jī)在ping一個(gè)合作方提供的域名時(shí),發(fā)現(xiàn)在ping 第一個(gè)包時(shí),時(shí)間特別長,后面第2--n包開始正常。直接ping 該域名對(duì)應(yīng)的ip 沒這個(gè)問題。在使用host -a 、dig、nslookup 、route、nscd -i hosts等輪番上軟分析處理了一通后,問題依舊。
本地nscd 的 DNS cache都清理了還不行,而且本機(jī)上又沒有bind DNS服務(wù)配置。考慮到ping 里面有一個(gè) -n 參數(shù),即不對(duì)域名進(jìn)行反解析,這里將只ping一個(gè)包加-n與不加-n的結(jié)果進(jìn)行了比對(duì),具體如下:
www.361way.com:~ # time ping -n spay2.shuqiapi.com -c 1 PING sqsdou.wx.ucweb.com (211.103.25.41) 56(84) bytes of data. 64 bytes from 211.103.25.41: icmp_seq=1 ttl=50 time=10.7 ms --- sqsdou.wx.ucweb.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 10.705/10.705/10.705/0.000 ms real 0m0.015s user 0m0.000s sys 0m0.000s www.361way.com:~ # time ping spay2.shuqiapi.com -c 1 PING sqsdou.wx.ucweb.com (211.103.25.41) 56(84) bytes of data. 64 bytes from 211.103.25.41: icmp_seq=1 ttl=50 time=10.6 ms --- sqsdou.wx.ucweb.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 10.640/10.640/10.640/0.000 ms real 0m18.172s user 0m0.000s sys 0m0.000s
發(fā)現(xiàn)加-n 時(shí)real 只用了0.015s,幾乎是立即回包;而不加 -n時(shí),第一個(gè)包要使用18.172s 才有回包。
出現(xiàn)該問題的原因是什么呢?
這是因?yàn)?ping 的時(shí)候遇到 DNS 反向解析問題,默認(rèn)情況下,當(dāng) ping 一個(gè)域名的時(shí)候,ping 從域名服務(wù)商得到域名的 IP 地址,然后 ping 訪問這個(gè) IP 并試圖解析成一個(gè)名字,因?yàn)槲覀儾惶峁?DNS 服務(wù)也沒有 DNS 反向解析,所以導(dǎo)致 ping 需要等到 DNS time out 才返回,這樣看上去 ping 回應(yīng)很慢。
ping 是這樣工作的:ping 有兩個(gè)線程在執(zhí)行,一個(gè)用來發(fā)包,一個(gè)用來收包和打印結(jié)果,發(fā)包的線程不停的發(fā),沒有問題,問題出在收包的線程,這個(gè)時(shí)候收包線程是被阻塞的(因?yàn)檫@個(gè)時(shí)候 DNS 反向解析不成功,一直要等到超時(shí)),所以收包線程要等到 DNS 超時(shí)后才打印出 ping 的結(jié)果,而這個(gè)時(shí)候結(jié)果是正確的,因?yàn)榻Y(jié)果本來就是對(duì)的,只不過因?yàn)楸蛔枞七t了顯示的時(shí)間而已,所以造成 ping 域名間隔很長的假象。如果用ping -n 關(guān)閉掉 DNS 解析就不會(huì)有這種問題了。
由于本地/etc/resolv.conf 文件里配置的DNS 主機(jī)我并有查看權(quán)限,所以結(jié)合上面的理論,讓業(yè)務(wù)側(cè)去找人分析查看了DNS 的配置是不是有問題。