为什么ping会给我快速的rtt值,但每个响应都要花很长时间才能回来?

关于ping,我在这里有一个基本的networking问题。

当在一个完全不同的子网上ping一个特定的主机时,我得到如下的响应:

PING myhost.example.com (1.2.3.4) 56(84) bytes of data. 64 bytes from 1.2.3.4: icmp_req=1 ttl=115 time=1.88 ms 64 bytes from 1.2.3.4: icmp_req=2 ttl=115 time=1.66 ms 64 bytes from 1.2.3.4: icmp_req=3 ttl=115 time=1.96 ms 64 bytes from 1.2.3.4: icmp_req=4 ttl=115 time=1.95 ms --- myhost.example.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 48191ms rtt min/avg/max/mdev = 1.669/1.868/1.969/0.127 ms 

这最初看起来很正常,但是你会发现总共需要48秒才能得到这4个响应。 当ping正在运行时,在打印每行之前有大约10秒的明显间隙。 然而,RTT是我所期望的。

这是一个问题,因为我试图用nagios来监视这个主机,主机检查当前正在得到一个'networking不可达'的错误。 networking是可以到达的,RTT是理智的,但我不禁要问,这个慢的总时间可能与它有什么关系。

主机是14跳,traceroute看起来像这样(我匿名的中间步骤,他们都是不同的IP!):

 traceroute to myhost (1.2.3.4), 30 hops max, 60 byte packets 1 10.ABC (10.ABC) 0.680 ms 0.729 ms 0.833 ms 2 10.ABC (10.ABC) 0.636 ms 0.678 ms 0.759 ms 3 10.ABC (10.ABC) 0.803 ms 0.867 ms 0.923 ms 4 10.ABC (10.ABC) 0.702 ms 0.738 ms 0.782 ms 5 10.ABC (10.ABC) 1.027 ms 1.251 ms 1.342 ms 6 10.ABC (10.ABC) 2.688 ms 1.436 ms 1.484 ms 7 10.ABC (10.ABC) 2.960 ms 3.475 ms 3.527 ms 8 10.ABC (10.ABC) 1.284 ms 1.310 ms 1.393 ms 9 10.ABC (10.ABC) 1.990 ms 1.865 ms 1.964 ms 10 10.ABC (10.ABC) 1.750 ms 1.841 ms 1.748 ms 11 10.ABC (10.ABC) 1.849 ms 1.614 ms 1.628 ms 12 10.ABC (10.ABC) 1.997 ms 2.150 ms 2.119 ms 13 10.ABC (10.ABC) 2.442 ms 2.454 ms 2.560 ms 14 1.2.3.4 (1.2.3.4) 1.978 ms * * 

这会导致什么?

这是一个疯狂的猜测

您正在通过DNS名称ping。
myhost.example.com的DNS loookup是否需要很长时间才能解决?
如果通过IP地址ping通会发生什么?

尝试编辑/etc/nsswitch.conf 。 MDN导致我同样的问题。

如果你有:

 hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 

尝试replace为:

 hosts: files dns 

除DNS查找问题外,还可能由ping数据包之间的间隔引起:

 -i interval Wait interval seconds between sending each packet. The default is to wait for one second between each packet normally, or not to wait in flood mode. Only super-user may set interval to values less 0.2 seconds. 

如果你ping通谷歌的服务器通过IP:

 # ping -c 3 74.125.130.101 PING 74.125.130.101 (74.125.130.101) 56(84) bytes of data. 64 bytes from 74.125.130.101: icmp_seq=1 ttl=50 time=2.51 ms 64 bytes from 74.125.130.101: icmp_seq=2 ttl=50 time=2.52 ms 64 bytes from 74.125.130.101: icmp_seq=3 ttl=50 time=2.72 ms --- 74.125.130.101 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 2.511/2.589/2.729/0.114 ms 

总时间仍然比rtts的总和大得多。

但是,如果您在泛洪模式下使用ping命令:

 # ping -c 3 -f 74.125.130.101 PING 74.125.130.101 (74.125.130.101) 56(84) bytes of data. --- 74.125.130.101 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 8ms rtt min/avg/max/mdev = 2.474/2.744/3.140/0.286 ms, ipg/ewma 4.230/2.657 ms 

或设置间隔为0:

 # ping -c 3 -i 0 74.125.130.101 PING 74.125.130.101 (74.125.130.101) 56(84) bytes of data. 64 bytes from 74.125.130.101: icmp_seq=1 ttl=50 time=2.83 ms 64 bytes from 74.125.130.101: icmp_seq=2 ttl=50 time=2.87 ms 64 bytes from 74.125.130.101: icmp_seq=3 ttl=50 time=2.96 ms --- 74.125.130.101 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 9ms rtt min/avg/max/mdev = 2.834/2.891/2.966/0.083 ms, ipg/ewma 4.510/2.855 ms 

总时间几乎是rtts的总和。