工作中,我经常需要 ping 一个服务器来检查它是否正常运行。有时我会收到一条消息,提示找不到主机(名称?)或其他导致无响应的错误。
有什么技术可以诊断这些问题的原因?我应该先查看目标机器吗?还是我的机器及其防火墙?如果 ping 的机器位于不同的域中,这有关系吗?(我认为只有在遵守防火墙设置的情况下才会有关系)。
谢谢
答案1
ping 失败意味着:
- ping 请求未到达目标主机
- ping 响应未到达发送请求的主机
发生这两种情况的原因有很多,其中大多数可以分为物理问题或软件问题。
调试时我从传输路径的物理组件开始,即网卡、网线和中间设备。
身体检查
- 网线连接两台主机。如果两台主机没有通过网线直接连接,请确保发送和接收网卡连接到正确的路由器和/或交换机端口,因为这些端口可以配置为以不同的方式路由流量
软件检查
- 确保每台机器的网卡都能被操作系统识别。[1]
- 确保两台机器都有有效的 IP 地址、子网掩码、网关和名称服务器配置。[2]
- 确保发送和接收主机具有有效的 MAC 地址(是的,我以前遇到过这个问题)[3]
- 确保发送和接收主机具有正确的网关 ARP 缓存信息 [4]
- 发送主机可能会有接收主机的 ARP 缓存条目,反之亦然。如果存在此类条目,请通过验证 IP 地址是否映射到正确的 MAC 地址来确保这些条目正确无误。如果存在不一致,请从 ARP 缓存中删除这些条目
- 验证 ping 数据包(ICMP 回显请求和 ICMP 回显响应)未被本地软件防火墙上的过滤器或在发送和接收主机之间的设备上运行的过滤器阻止。
- 如果您使用主机名来识别接收主机,请尝试直接使用 IP 地址,因为这将消除源于名称解析过程的问题。
在进行故障排除时还应考虑 ping 命令返回的错误消息,我常见的错误消息包括:
Request Timed Out
这是一条非常普通的消息,表示在超时期限内未收到响应。这可能是因为主机由于工作量和时间限制而无法响应,或者因为上面讨论的连接或路由问题。
Reply from {host}: Destination network unreachable
通常{host}
是本地机器上的 NIC,或机器网关。该消息表示它无法找到{host}
与接收主机之间的路由(我可能错了)
这绝不是 ping 失败原因的详尽列表,但它确实涵盖了许多常见问题。我希望它能帮助人们在下次网络中断时
下面的脚注适用于基于 Windows NT 的系统,因为我有这方面的经验,
[1] 您可以通过检查设备管理器中“未知设备”节点下是否存在任何“网络控制器”项来验证操作系统是否具有适用于您的网卡的有效驱动程序。如果有,您需要找到适用于您的网卡的兼容驱动程序。
检查网络适配器节点下的卡,假设您的卡已列出,请双击它并检查设备状态下列出的任何已知错误
[2] 在 Vista / Win 7 中,可以通过打开“网络和共享中心”->“更改适配器设置”(左侧窗格)-> 右键单击您感兴趣的适配器并选择“属性”(需要提升),然后双击 TCP/IP 协议版本 4 或 6(具体取决于您使用的协议版本)(最有可能是 v4)来访问 TCP/IP 配置对话框
[3] 运行该ipconfig /all
命令将显示 MAC 地址以及 IP 地址、子网掩码、网关和名称服务器。MAC 地址在输出中标记为物理地址
[4]该ARP -a
命令显示主机当前的 ARP 表。
答案2
补充一下回答:
未找到主机名:这指向 DNS 问题而不是路由问题,因此您需要检查您的 DNS 服务器及其与您正在 ping 的设备的关系。
要追踪您的 ping 进展如何,请尝试使用 tracert 而不是 ping 来查看在路由失败之前到达了哪个设备(这仅在其他设备与起始设备不在同一子网中时才有用)。
答案3
如果您有时会收到 ping 消息,但有时却没有,并且无法证明/捕获它...这里有一些可帮助您识别网络问题的工具:
视窗: http://www.pingplotter.com/freeware.html 路径平移
Linux: http://en.wikipedia.org/wiki/MTR_%28software%29
这些工具可能会帮助您找出第 5 跳是出现问题的地方,然后您就可以针对该跳进行故障排除。
有时您需要在网络上查找导致响应缓慢的设备,但您似乎无法在一次 ping 操作中找到它。这些工具通过记录“分数”并向您显示图表,帮助您在一系列 ping 操作中识别它。
请注意,ping 有时也会被赋予较低的优先级,因此 ping 速度慢并不总是意味着网络不好。
除了上述出色且详尽的答案之外,还要验证 NIC 是否使用了正确的链接速度:
在 Windows 中,您可以在网络属性中查看 GUI,而在 Linux 中,您可以使用“ethtool”。如果路由器/交换机两侧的主机设置为 10MBs 和半双工,但路由器/交换机设置为 100MBs 全双工,则会出现奇怪的错误(例如)。不过,这在新设置中比在已建立的系统中更常见。
您可以使用 netstat 查看其中一些错误:
网络状态-S
或者通过不断监控它,如果你是一个超级书呆子:
对于 /L %i 在 (0,0,0) 中执行 @cls && netstat -S|find /I "错误" && @ping -n 1 -w 2000 224.0.0.0 >NUL && @cls
如果出现错误,那不是什么大问题,但是如果每秒出现的错误越来越多,则很可能是硬件/电缆/速度/双工问题。
答案4
如果 ping 不通,我采取以下措施:
- 检查名称是否解析为正确的 IP——通常问题不在于服务器,而在于同事的笔记本电脑等。
- 如果我确定 IP 正确,我会使用 tracert 来检查我能走多远。
- 如果我不确定我尝试 ping 的服务器是否对 ICMP 消息做出反应,我会使用 telnet 打开服务器上的端口并查看它告诉我什么。
- 我检查同事是否可以从他的电脑访问服务器