Ping 域名时 DNS 反向解析问题
2010年03月26日 | 标签: dns | 作者:vpsee
中文吃饭的时候看到 Godaddy 事件居然上了 CNN,在美国国会听证会上,GoDaddy 的法律顾问说公司将停止在中国提供新的 .cn 域名注册(据说老的域名还可以继续使用)。不过关系不大,好像中国用户在 Godaddy 注册的 .cn 域名不到3万个。
昨天我们一个用户说他 ping godaddy 域名的时候间隔很长,我理解错了,以为是延迟很长,其实是每次 ping 后间隔时间很长,但是 ping 返回来的 time 值是正常的。这是因为 ping 的时候遇到 DNS 反向解析问题,默认情况下,当 ping 一个域名的时候,ping 从域名服务商得到域名的 IP 地址,然后 ping 访问这个 IP 并试图解析成一个名字,因为我们不提供 DNS 服务也没有 DNS 反向解析,所以导致 ping 需要等到 DNS time out 才返回,这样看上去 ping 回应很慢。
ping 是这样工作的:ping 有两个线程在执行,一个用来发包,一个用来收包和打印结果,发包的线程不停的发,没有问题,问题出在收包的线程,这个时候收包线程是被阻塞的(因为这个时候 DNS 反向解析不成功,一直要等到超时),所以收包线程要等到 DNS 超时后才打印出 ping 的结果,而这个时候结果是正确的,因为结果本来就是对的,只不过因为被阻塞而推迟了显示的时间而已,所以造成 ping 域名间隔很长的假象。如果用 ping -n 关闭掉 DNS 解析就不会有这种问题了,比如:
$ ping -n google.com