ping不通ip地址的原因无法访问目标主机

你坐在工位上,不通标主敲下 ping 192.168.1.100,地址的原回车。因无屏幕上蹦出四个字——“无法访问目标主机”。法访不是问目超时,不是不通标主丢包,是地址的原直接告诉你:根本够不着。这两者差别很大。因无超时意味着数据包发出去了,法访对方没回;无法访问,问目通常意味着你的不通标主机器压根没把包送出去,或者刚出门就被挡了回来。地址的原

我遇到过太多次这种情况。因无上周同事小张就碰上了,法访他新配的问目测试机 ping 同网段的另一台机器,死活不通。我让他先 ipconfig 看一眼,结果他自己机器的 IP 是 169.254 开头的。这就是问题所在——Windows 在 DHCP 获取失败时会自动分配一个 169.254.x.x 的地址,这个网段叫 APIPA,专门用来自嗨的。你拿着一个自嗨地址去 ping 别人,网关都不认识你,自然回你一句“无法访问目标主机”。

所以第一步永远先看自己的网络配置。IP、子网掩码、默认网关,这三个但凡有一个不对,ping 就别想通。尤其是子网掩码,很多人觉得它不重要。举个例子,你 IP 是 192.168.1.10,掩码写成 255.255.0.0,对方是 192.168.2.10。你以为你们不在一个子网,系统也这么认为,于是把包丢给网关。可网关可能根本没配这条路由,包就被弹回来了。反过来,掩码配错导致系统误以为对方在同一个局域网,直接发 ARP 请求,对方也收不到。两种情况都报“无法访问目标主机”。

网关的问题更隐蔽。我见过一台服务器,IP 和掩码都对,就是 ping 不通外网。查了半天,默认网关写成了 192.168.1.254,实际网关是 192.168.1.1。就差最后一位。这种错误肉眼扫一遍配置很难发现,得用 route print 或者 ip route 去核对。网关不对,所有跨网段的包都扔进了黑洞,系统当然告诉你目标主机不可达。

还有一种情况:目标主机确实存在,但你的 ARP 缓存里没有它的 MAC 地址,而 ARP 请求又没得到响应。比如对方开了防火墙,禁了 ICMP 和 ARP。你 ping 它,你的机器先发 ARP 问“谁是 192.168.1.100”,对方不理。你的系统等了一会儿,直接放弃,报“无法访问目标主机”。这时候你换个同网段能通的机器去 ping,可能就通了。问题不在你,在对方的防火墙策略。

路由表的问题也值得单独拎出来说。有时候你机器上装了两块网卡,或者连了 VPN,路由表里出现了多条冲突条目。系统选了一条错误的路径,包发出去就迷路了。我自己的笔记本就出过这事,连上公司 VPN 后,ping 内网某台机器一直报不可达。一查路由,VPN 推送了一条 0.0.0.0/0 的默认路由,把所有流量都劫走了,包括本该走本地网卡的内网地址。删掉那条路由,立刻通了。

物理层的问题反而容易被忽略。网线没插好、交换机端口坏了、VLAN 配错了,这些都会导致“无法访问目标主机”。但奇怪的是,很多人一上来就查 IP 配置,忘了先看看网口灯亮不亮。我自己的习惯是,ping 不通先 ping 127.0.0.1,通了自己协议栈没问题;再 ping 自己的 IP,通了网卡驱动没问题;然后 ping 网关,不通就是链路或网关的事;最后才 ping 目标。一层一层剥,比瞎猜快得多。

最后说一个反直觉的:对方关机了,你 ping 它,有时候报的是“无法访问目标主机”而不是“请求超时”。这取决于你的系统怎么处理 ARP 失败。在同一个子网里,对方关机,你的 ARP 请求没人应答,系统很快返回“无法访问目标主机”。跨网段的话,包到了网关,网关找不到下一跳,可能回你一个 ICMP 不可达,也可能直接丢掉让你超时。所以别看到“无法访问”就以为是路由问题,也可能是对方根本没开机。

下次再看到这四个字,别急着重装系统。先看自己 IP,再看掩码和网关,然后查路由表和 ARP,最后确认对方是不是活着。顺序对了,大部分问题五分钟内就能定位。