我正在使用 ping 实用程序来排除家庭网络上看似速度较慢的 Internet 连接故障,但我发现结果不寻常且难以解释。
我有一台 Linksys 无线路由器,并尝试了以下同时进行的测试:从我的计算机 ping 路由器,从路由器 ping google.com,并通过路由器从我的计算机 ping google.com。从计算机 ping 路由器和从路由器 ping Google 均按预期工作,数据包丢失最少,往返时间短(最小/平均/最大 = 1.601/3.465/9.926 和 20/20/70)。
但是,通过路由器从我的电脑 ping Google 时,报告了一些对我来说非常奇怪的事情。它报告 RTT 很低,数据包丢失很少,但每次 ping 请求的间隔(默认为 1 秒)更像是 10 秒。这看起来像是每次 ping 打印一些输出之间的延迟约为 10 秒。但结果 RTT 很低,例如:
来自 74.125.226.115 的 64 字节:icmp_seq=31 ttl=52 时间=29.2 毫秒
当我将此测试与其他测试并行运行时,其他测试将在该测试发送 10 个请求的同时发送大约 100 个请求。这似乎与报告的低 RTT 相矛盾,所以我不确定如何理解这一点。
我将非常感激任何人提供的见解。
答案1
看来 ping 在发送每个 ICMP 请求之前都会进行名称解析。
也许它是这样实现的,以便长时间运行的 ping 将继续 ping 正确的主机,即使主机<->IP 映射在运行时发生变化。
如果名称解析存在延迟(例如,因为 RR 具有非常低的 TTL,并且您的缓存 DNS 服务器不强制执行最小 TTL),那么您可能会看到每个 ICMP 请求之间都有较长的延迟,但单个响应的 TTL 较低。
长话短说,正如其他地方所建议的那样,尝试 ping -n。
答案2
运行 ping 时带上-n
选项,这样它就不会进行反向名称解析。这可能是您的路由器的 dns 软件,ping 正在等待 dns 查找的结果,而不是 icmp 回复。
如果-n
有帮助,您有两个选择:
- 修理你的路由器
- 在你的电脑上切换到一些公共 DNS 提供商(例如谷歌公共 DNS)
答案3
在安装 dd-wrt 作为 gw 路由器后,我也遇到了 ping 结果“缓慢”的问题。我还注意到 Linux 机器的 ping 结果“缓慢”,但 Windows 机器没有问题。我尝试使用 -n 运行,这改善了 ping!
问题是,根本原因是什么,如何解决它以便查找像以前一样更快?
答案4
尝试使用选项运行 ping -n
,这样它就不会尝试进行名称查找。如果它继续尝试查找您正在 ping 的机器的 DNS 主机名(或发送回 ICMP 无法访问消息的某个路由器),那么这可能会严重阻碍 ping,使其无法每隔几秒发出多个数据包。