如果 ping 报告的时间合理(~10ms),但实际上花费了相当长的挂钟时间(~15秒)?(此外,传递-U
“完整的用户到用户延迟”选项没有任何效果。)
这种情况发生在从我的工作计算机 ping 某个外部主机时 - 我正在四处寻找,因为我对同一主机的 HTTP 请求也超时了。使用 traceroute 时也发生了类似的事情,仅在最后几跳到达目的地的子网。
(此外,值得一提的是,外部主机是 cdn.sstatic.net,我知道它通常是有效的!)
答案1
如果您使用该-n
标志来禁止查找“主机地址的符号名称”,会发生什么情况?您所描述的行为通常表明由于反向 DNS 查找速度慢而导致延迟。
对于您给出的示例 (cdn.sstatic.net),我发现没有与正向条目相对应的有效反向条目(我看到的是 69.174.57.102)。如果您使用尝试反向查找的工具,这种情况可能会导致奇怪的行为。
答案2
是的,这可能是 DNS。
2 种方法来确定。 strace -r ping ... 显示以下内容:
0.000014 fcntl(4, F_SETFL, O_RDWR|O_NONBLOCK) = 0
0.000015 poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
0.000020 sendto(4, "\305\351\1\0\0\1\0\0\0\0\0\0\10intel-01\20scinterane"..., 47, MSG_NOSIGNAL, NULL, 0) = 47
0.000022 poll([{fd=4, events=POLLIN}], 1, 5000) = 0 (Timeout)
4.999871 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 5
DNS 查找延迟 4.999 秒。
或者您可以直接 ping 主机名并 ping IP 地址。无论何时 ping 主机名总是比 ping IP 地址慢得多。这是由于 DNS 查找延迟造成的。