这个问题涉及在我的本地网络上通过名称或 IP 访问/ping 彼此的机器,以及通过名称执行此操作相关的延迟。所有机器都是 Windows 7 Ultimate 64 位。
以下是三种场景的输出:
- 通过名称 ping machine2。关键问题是接近6秒延迟在结果开始返回之前,请在命令行上按下回车键。
C:\Users\machine1>ping machine2
Pinging machine2 [fe80::95f5:38e3:fc8a:4a70%11] with 32 bytes of data:
Reply from fe80::95f5:38e3:fc8a:4a70%11: time=1ms
Reply from fe80::95f5:38e3:fc8a:4a70%11: time=1ms
Reply from fe80::95f5:38e3:fc8a:4a70%11: time=1ms
Reply from fe80::95f5:38e3:fc8a:4a70%11: time=1ms
Ping statistics for fe80::95f5:38e3:fc8a:4a70%11:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
- 通过 ip ping machine2。没有延迟从按下回车键到收到结果
C:\Users\machine1>ping 192.168.1.101
Pinging 192.168.1.101 with 32 bytes of data:
Reply from 192.168.1.101: bytes=32 time=1ms TTL=128
Reply from 192.168.1.101: bytes=32 time=1ms TTL=128
Reply from 192.168.1.101: bytes=32 time=1ms TTL=128
Reply from 192.168.1.101: bytes=32 time=1ms TTL=128
Ping statistics for 192.168.1.101:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
- 强制 ping 使用 IPv4 并通过机器名称进行 ping。仍然会出现相同的延迟。
C:\Users\machine1>ping machine2 -4
Pinging machine2 [192.168.1.101] with 32 bytes of data:
Reply from 192.168.1.101: bytes=32 time=58ms TTL=128
Reply from 192.168.1.101: bytes=32 time=86ms TTL=128
Reply from 192.168.1.101: bytes=32 time=1ms TTL=128
Reply from 192.168.1.101: bytes=32 time=19ms TTL=128
Ping statistics for 192.168.1.101:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 86ms, Average = 41ms
这个问题主要出现在使用程序时,我只想快速输入网络上要连接的机器名称,例如远程桌面,每次都要等待 6 秒钟,或者先查找其 IP,当 IP 发生变化时,这不太好。我对静态 IP 也不感兴趣。
此时,我认为这与机器名称解析的关系比任何其他事情都大,但不知道下一步该怎么做。任何帮助都将不胜感激。
答案1
超时将发生在 DNS 解析中。这可能是因为您指定了多个 DNS 服务器,但其中一个服务器没有响应。
在命令提示符窗口中输入:
C:\> ipconfig /all | find "DNS Servers"
并记下DNS服务器的IP地址。
然后使用该nslookup
工具来探测它们:
C:\> nslookup
Default Server: Blah
Address: 192.168.1.1
>
然后依次选择每个 DNS 服务器:
> server 192.168.1.1
Default Server: [192.168.1.1]
Address: 192.168.1.1
并使用它进行查找:
> machine2
Server: [192.168.1.1]
Address: 192.168.1.1
Name: machine2.mydomain.com
Address: 192.168.1.101
对列表中的每个 IP 地址重复上述server
命令。其中一个应该会失败,并显示以下内容:machine2
Request to [192.168.1.1] timed-out
然后只需要找出 a) 为什么 DNS 服务器不工作,以及 b) 您是否应该使用它。
答案2
Windows 使用几种不同的方法来解析机器名称:
- DNS
- NBNS,NetBIOS 名称服务(所有 Windows 版本均使用)
- LLMNR(Windows 7 中引入;仅限 IPv6)
- mDNS(如果安装了 Bonjour;iTunes 和 Safari 可能附带)
可能是您的 DNS 服务器没有响应查询,或者其他计算机已禁用或设置了防火墙,或禁用了 NBNS 和/或 LLMNR。(我不知道确切的顺序,但似乎总是先尝试 DNS。)
安装Wireshark并观察与名称解析相关的所有数据包。将显示过滤器设置为dns or nbns or udp.port=5355
。
答案3
我最近在 Linux 系统上确实遇到了这个问题。
原因是,一旦返回数据包开始到来,某些版本ping
默认会尝试对响应所来自的 IP 地址进行反向 DNS 查找:
shadur@caleburn: ~/ > ping google.com
PING google.com (74.125.136.113) 56(84) bytes of data.
64 bytes from ea-in-f113.1e100.net (74.125.136.113): icmp_seq=1 ttl=49 time=12.7 ms
64 bytes from ea-in-f113.1e100.net (74.125.136.113): icmp_seq=2 ttl=49 time=7.75 ms
64 bytes from ea-in-f113.1e100.net (74.125.136.113): icmp_seq=3 ttl=49 time=7.85 ms
如果您的设置没有为 192.168.1.1 配置反向 DNS 1.168.192.in-addr.arpa
(或者至少在您的文件中没有 192.168.1.1 的条目)hosts
,它将在尝试访问 DNS 服务器以完成查找时超时,并且它不能开始打印响应数据包,直到查找得到解决(通过正确的 DNS 响应,在这种情况下它会打印返回的名称,或者通过超时,在这种情况下它只打印 IP 地址)。
将名称/IP 地址组合添加到您的hosts
文件中应该可以解决该问题。
(编辑:在 Windows 中,您要查找的文件C:\Windows\System32\drivers\etc\hosts
默认位于。)