ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

局域网连不上192.168.1.102?从ARP到Ping的完整排查实录

局域网连不上192.168.1.102?从ARP到Ping的完整排查实录 1. 一句为什么连不上背后的排查起点事情的起因特别简单。同事在群里甩了一句为什么连不上 192.168.1.102然后就是长久的沉默。我盯着这句话看了半天脑子里第一反应是这信息量也太少了。哪个网段什么设备有线还是无线ping 通不通但转念一想这种一句话故障描述恰恰是日常运维和开发中最常见的场景——用户只告诉你结果不告诉你过程剩下的全靠你自己去挖。192.168.1.102 这个地址本身没什么特别的它是典型的家用/小型办公局域网 C 段地址网关大概率是 192.168.1.1。问题在于连不上这三个字可以指向太多可能性物理链路断了、IP 冲突了、ARP 表项错了、防火墙拦了、目标主机根本没开机、或者干脆是两台设备不在同一个广播域里。每一种可能对应的排查路径完全不同如果一上来就瞎试很容易在无关的方向上浪费半小时。我决定把这次排查过程完整记录下来因为它几乎涵盖了局域网连通性问题的所有经典套路。关键词里提到的 nl2sh、ARP、局域网、Android、Ping其实正好对应了这次排查的几个核心环节用自然语言转 shell 命令来快速生成诊断指令、通过 ARP 表定位二层问题、在局域网环境下逐层排除、以及用 Android 设备作为对照测试端。下面我就按实际排查的顺序把每一步的思考逻辑和操作细节都摊开讲。提示遇到连不上这类模糊描述时先别急着敲命令。花 30 秒问清楚三件事——源设备是什么、目标设备是什么、两者之间的网络拓扑大概什么样。这三条信息能帮你砍掉一半的无效排查。2. 从 Ping 开始最基础也最容易误判的一步2.1 为什么 Ping 通不通不能直接下结论很多人排查网络问题的第一反应就是 ping这没错但 ping 的结果经常骗人。我见过太多次ping 不通但服务正常或者ping 通但连不上的情况。原因在于 ping 走的是 ICMP 协议而很多设备或防火墙会单独屏蔽 ICMP但放行 TCP/UDP。反过来有些设备响应 ping 但目标端口根本没监听。所以第一步我让同事在源设备上执行ping -c 4 192.168.1.102结果是不通100% packet loss。这时候不能直接判定目标设备离线因为还有几种可能目标设备开了防火墙屏蔽 ICMP、中间有设备做了 ACL、或者 ARP 解析就没成功。为了区分这几种情况我让他同时看一下 ARP 表arp -a | grep 192.168.1.102在 Linux 下也可以用ip neigh show 192.168.1.102。这一步很关键——如果 ARP 表里根本没有这个 IP 对应的 MAC 地址说明问题出在二层包根本没发出去如果有 MAC 但 ping 不通那问题更可能在三层或目标主机本身。2.2 ARP 表项才是局域网的通讯录这里插一句 ARP 的原理因为后面排查全靠它。ARP地址解析协议干的事就一件把 IP 地址翻译成 MAC 地址。在局域网里两台设备要通信光知道对方 IP 没用数据帧必须带上目标 MAC 才能发出去。所以源设备会先广播一个 ARP 请求谁是 192.168.1.102请把你的 MAC 告诉我。目标设备收到后单播回复自己的 MAC双方把这条映射缓存到 ARP 表里通常缓存几分钟到几十分钟。如果 ARP 请求没人应答源设备就一直在那喊包全丢表现就是 ping 不通。这种情况要么目标设备不在线要么不在同一广播域要么中间有隔离。如果 ARP 表里出现了一个 MAC但那个 MAC 是错的比如网关的 MAC 被错误地映射到了目标 IP 上那就是典型的 ARP 冲突或 ARP 欺骗包会被发到错误的设备上。我让同事把 ARP 表完整贴出来发现 192.168.1.102 这一条压根不存在。这就把范围缩小了问题出在二层解析阶段包还没到三层。2.3 用 nl2sh 快速生成诊断命令说到这我得提一下 nl2sh 这个东西。它的价值在于当你面对一堆零散的排查需求时可以用自然语言描述你想干什么它帮你转成对应的 shell 命令。比如我直接输入查看当前 ARP 表并过滤 192.168.1.102它就能给出arp -a | grep 192.168.1.102或者ip neigh show 192.168.1.102这样的命令。在排查现场这种工具能省掉大量查手册的时间。尤其是当你需要在不同系统之间切换时——Linux 用ip neighWindows 用arp -amacOS 用arp -anAndroid 上又是另一套——nl2sh 能帮你快速对齐命令格式。不过要注意它生成的结果需要你自己判断合理性不能无脑执行。我一般会先看一眼命令逻辑对不对再决定跑不跑。注意ARP 表是有缓存的有时候表项过期了但还没刷新你看到的可能是旧数据。想强制刷新可以删掉对应条目再重新 pingLinux 下用ip neigh del 192.168.1.102 dev eth0Windows 下用arp -d 192.168.1.102。3. 二层排查为什么 ARP 请求石沉大海3.1 确认是否在同一广播域ARP 请求是广播包只能在同一广播域内传播。如果源设备和目标设备被划分到了不同的 VLAN或者中间隔了路由器没做代理 ARP那 ARP 请求永远到不了目标。这是连不上最常见的原因之一尤其是在公司网络里。我让同事确认源设备的 IP 和子网掩码ip addr show假设源设备是 192.168.1.50/24那它和 192.168.1.102 确实在同一网段理论上在同一广播域。但如果掩码是 /25 或者 /26那就要重新算了——192.168.1.50/25 的网段是 192.168.1.0-127而 192.168.1.102 在 128-255 这个网段里两者根本不在同一子网ARP 请求自然到不了。这里有个容易忽略的点很多人只看 IP 前三段一样就认为在同一网段实际上掩码决定了网段边界。我见过 /26 掩码下 192.168.1.10 和 192.168.1.70 互相 ping 不通的案例就是因为它们分属不同的 /26 子网。3.2 交换机端口和物理链路检查如果确认在同一广播域下一步就是看物理层。目标设备是不是真的连在网络上网线插好了吗交换机端口亮灯吗无线的话是不是连到了同一个 SSID 但被 AP 隔离了很多企业级 AP 默认开启客户端隔离功能同一个 SSID 下的设备互相不能通信。这种情况下两台设备都能上网但互相 ping 不通ARP 也解析不了。排查方法是看 AP 的配置或者换一个不隔离的网络测试。我让同事检查目标设备的网口指示灯确认是亮的。然后用另一台设备一台 Android 手机连同一个 WiFi尝试 ping 目标地址。Android 上可以用终端类 App 执行 ping或者用adb shell从电脑连手机再执行。结果 Android 设备也 ping 不通这就排除了单一设备网卡故障的可能问题更可能在目标设备本身或网络中间设备。3.3 用抓包确认 ARP 请求是否发出到这一步最直接的验证方式就是抓包。在源设备上用 tcpdump 看 ARP 请求有没有发出去tcpdump -i eth0 arp and host 192.168.1.102如果能看到 ARP, Request who-has 192.168.1.102 tell 192.168.1.50说明请求发出去了但没人应答。如果连请求都看不到那问题在源设备的网络栈或网卡驱动层面。抓包这个操作在排查局域网问题时特别有用因为它能告诉你包到底有没有发出去和有没有人回。很多争论在抓包结果面前瞬间就能定论。我一般会同时抓源设备和目标设备如果能登上去的话对比两边的包一眼就能看出断在哪。4. 目标设备侧那些容易被忽略的自身问题4.1 目标设备是否真的在线且 IP 正确排查了半天网络结果发现目标设备根本没开机或者 IP 被改了——这种事我遇到过不止一次。所以一定要确认目标设备当前的实际 IP。如果设备有屏幕直接看网络设置如果是无头设备比如开发板、服务器通过串口或者显示器确认。关键词里提到ping 开发板 IP 时通时断这就是典型的另一种情况设备在线但网络不稳定。可能原因包括网线接触不良、电源供电不足导致网卡工作异常、或者设备负载过高导致协议栈响应超时。这种时通时断比完全不通更难排查因为每次测试结果可能都不一样。我让同事确认目标设备192.168.1.102是不是一台常开的服务器。结果发现那台机器昨天刚重启过网络配置可能没生效。登上去一看IP 确实是 192.168.1.102但网卡状态是 DOWN。手动ifup之后问题解决了一半——至少 ARP 能解析了。4.2 防火墙和 ICMP 屏蔽网卡起来之后ARP 表里能看到目标 MAC 了但 ping 还是不通。这时候就要怀疑防火墙。Linux 下检查 iptablesiptables -L -n | grep icmp很多服务器默认规则会 DROP 掉 ICMP但放行 SSH 等业务端口。这种情况下 ping 不通不代表服务不可用。我让同事直接试 SSHssh user192.168.1.102结果 SSH 能连上。这就证实了之前的判断ICMP 被屏蔽了但网络本身是通的。如果一开始就死磕 ping可能会误判为网络故障实际上只是防火墙策略问题。Windows 下类似默认防火墙会阻止入站 ICMP。可以在高级安全 Windows Defender 防火墙里看入站规则或者临时用netsh advfirewall firewall add rule nameAllow ICMP protocolicmpv4 dirin actionallow放行测试。4.3 Android 设备作为对照端的特殊价值这次排查里Android 设备扮演了一个很有意思的角色。因为 Android 的网络栈和桌面系统不完全一样用它做对照测试能排除很多系统层面的干扰。比如 Android 对 ARP 缓存的管理更激进WiFi 和蜂窝网络的切换逻辑也不同。在 Android 上排查局域网问题可以用这些方法用adb shell进入设备执行ip neigh看 ARP 表用ping命令测试连通性部分 Android 版本需要 root 或使用特定 App用ip route看路由表确认默认网关是否正确关键词里还提到Android 进度条和Android 动态图标主题这些看似和网络无关但其实反映了 Android 生态的多样性——不同厂商、不同版本的系统在网络行为上可能有差异。做局域网调试时最好用原生 Android 或者已知行为一致的设备做基准。5. 当问题变成悬案系统性排查方法论5.1 分层排查从物理层到应用层这次排查之所以能收敛是因为我坚持了分层排查的思路。OSI 七层模型虽然老但排查网络问题时真的管用层级检查内容本次排查对应操作物理层网线、指示灯、电源检查网口灯、确认设备供电数据链路层MAC、ARP、VLAN查 ARP 表、确认广播域网络层IP、掩码、路由、ICMP确认同网段、ping 测试传输层TCP/UDP 端口SSH 测试 22 端口应用层具体服务确认服务进程运行从下往上逐层排除每层确认无误后再往上走。这样能保证不会漏掉底层问题也不会在应用层瞎折腾。5.2 对照实验控制变量法排查过程中我做了几组对照用不同源设备同事的电脑、我的电脑、Android 手机ping 同一目标用同一源设备 ping 不同目标网关、其他在线设备、目标设备在不同时间点重复测试排除偶发性这种控制变量法能快速定位问题是单点故障还是普遍现象。如果所有设备都 ping 不通目标问题在目标侧如果只有一台设备不通问题在源设备或路径上。5.3 记录与复盘把悬案变成案例每次排查完我都会把过程记下来。这次的关键节点是ping 不通ARP 表无记录 → 二层问题确认同网段、同广播域 → 排除子网划分问题抓包看到 ARP 请求无应答 → 目标侧问题目标设备网卡 DOWN → 根因网卡恢复后 ping 仍不通 → ICMP 被屏蔽SSH 可连 → 网络实际已通这个链条清晰记录了每一步的推理依据。下次遇到类似问题直接按这个流程走能省大量时间。提示排查网络问题时建议开一个记事本把每条命令和结果都记下来。人的短期记忆不可靠尤其是排查超过 20 分钟时很容易忘记之前试过什么。6. 工具链与命令速查让排查效率翻倍6.1 局域网诊断常用命令清单不同系统下的命令有差异我整理了一份速查表用途LinuxWindowsmacOSAndroid (adb shell)查看 IPip addripconfigifconfigip addr查看 ARPip neigharp -aarp -anip neigh查看路由ip routeroute printnetstat -rnip routePingping -c 4ping -n 4ping -c 4ping -c 4抓包tcpdumppktmontcpdump需 root端口测试nc -zvTest-NetConnectionnc -zvnc -zv这些命令覆盖了 90% 的局域网排查场景。nl2sh 这类工具的价值就在于你不需要记住所有平台的差异用自然语言描述需求它帮你生成对应命令。6.2 用 nl2sh 生成复杂诊断脚本有时候排查需要组合多条命令比如先清 ARP 缓存再 ping再查 ARP 表。这种流程用 nl2sh 描述起来很方便清除 192.168.1.102 的 ARP 缓存然后 ping 四次最后显示 ARP 表它会生成类似这样的脚本ip neigh del 192.168.1.102 dev eth0 2/dev/null ping -c 4 192.168.1.102 ip neigh show 192.168.1.102这种组合命令在排查 ARP 相关问题时特别有用因为单次 ping 可能受缓存影响清缓存后重新测试才能看到真实状态。6.3 抓包分析Wireshark 和 tcpdump 的取舍tcpdump 适合在命令行环境下快速抓包Wireshark 适合图形化分析。我的习惯是先在源设备用 tcpdump 抓把 pcap 文件拉回本地用 Wireshark 看。这样既能保证抓包点在关键位置又能利用 Wireshark 强大的解析能力。抓 ARP 问题时过滤条件用arp就够了。抓 TCP 问题时用tcp port 22这样的过滤。关键是抓包点要选对——在源设备抓能看到包发出去没有在目标设备抓能看到包收到没有两边对比就能定位丢包位置。7. 从这次悬案里沉淀下来的经验这次排查前后花了大概四十分钟其中有一半时间花在确认目标设备到底在不在线上。事后复盘有几个点值得记下来。第一连不上这三个字必须拆解。是 ping 不通、还是端口连不上、还是应用层报错不同层面的连不上排查路径完全不同。我现在的习惯是听到连不上先问一句你具体试了什么操作报什么错。第二ARP 表是局域网的命门。局域网内任何通信都绕不开 ARP所以排查时优先看 ARP 表。表里有记录说明二层通没记录说明二层有问题。这个判断能帮你快速分流。第三ping 不通不等于网络不通。ICMP 被屏蔽太常见了尤其是服务器和云主机。判断网络是否真的通最终要看业务端口能不能连上。第四对照测试能省一半时间。用不同设备、不同目标做交叉测试能快速排除单点故障。这次用 Android 手机做对照直接排除了源设备网卡问题的可能。第五工具是辅助思路是核心。nl2sh 能帮你快速生成命令但判断命令结果、决定下一步查什么还是得靠人对网络协议的理解。工具再强也替代不了分层排查的基本功。最后分享一个我常用的技巧在排查开始前先画一张简单的拓扑图标出源设备、目标设备、中间经过的交换机/路由器/AP。哪怕只是纸上画几个方框也能帮你理清数据包的路径避免在错误的方向上浪费时间。这次的问题如果一开始就画了图可能会更快发现目标设备网卡 DOWN 这个根因。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进