You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows执行ping目标IP时错误关联其他IP作为网关的原因排查

Windows执行ping目标IP时错误关联其他IP作为网关的原因排查

我这边的网络拓扑如下:
网络拓扑图

当我在笔记本上执行arp -d清除ARP缓存,接着执行ping 10.0.0.30去ping嵌入式设备1时,正常逻辑应该是:笔记本会发出ARP广播包“谁是10.0.0.30?请告知10.0.0.55”(源MAC是08:BE:AC:21:86:36),收到回应后把对应条目存入ARP缓存(可以用arp -a查看),然后再发起实际的ping请求。

但实际情况是,笔记本发出的ARP请求变成了“谁是10.0.0.35?请告知10.0.0.55”——这个IP是嵌入式设备2的地址。设备2正常回应后,Windows就把“10.0.0.35 00-24-bd-05-06-23”存入ARP缓存,然后看似在ping 10.0.0.30,实则用的是10.0.0.35的MAC地址:
WireShark抓包截图

结果就是ping请求根本到不了目标设备,ping自然失败了。

这种情况怎么会发生?是什么原因导致Windows用错IP地址?

补充信息

  • 所有设备的IP都是通过DHCP分配的。
  • 给笔记本和/或嵌入式设备1设置静态IP,问题依旧存在。
  • 我的hosts文件是空的(只有默认注释)。
  • 网络里其他Windows电脑ping这两个嵌入式设备都正常。
  • 从嵌入式设备1ping笔记本也不行:笔记本能收到设备1的IP和MAC发来的请求,但回应时却发给设备2的MAC。
  • 换用笔记本上另一个网卡(IP同网段但不同,MAC也不同),问题还是一样。
  • 我换了一台交换机连接笔记本、设备1和其他网络设备后,ping成功了;换回原来的交换机又失败;试第三台交换机完全不行;再换回第二台交换机,ping正常了大概一分钟,之后毫无征兆地又坏了,现在又不能用了。
  • 把设备1直接连笔记本,给笔记本设静态IP 10.0.0.55,执行arp -d后ping 10.0.0.30:一开始还是多次发出“谁是10.0.0.35?”的请求(没人回应很正常),但过一会儿终于发出“谁是10.0.0.30?”的请求,设备1回应后,“10.0.0.30 00-24-bd-03-a5-25”被加入ARP缓存,ping成功了。
  • 给设备1设静态IP 10.0.0.140,ping这个地址立刻正常;但ping 10.0.0.30还是老问题,依旧解析成10.0.0.35。

看起来问题出在笔记本上。重启可能能解决,但也可能几周后又随机复发。我现在想找到根本原因,避免以后再遇到这种不确定的问题。之前应该没出现过类似情况,就算有,也是做了些看似无关的操作后自动好了。

Edit:
昨天我把笔记本休眠再唤醒,问题还是一样;之后又休眠,带回家连家里的网络,再休眠睡觉,今天到公司连公司网络唤醒后,问题居然神奇地消失了。可惜现在没法继续排查,但如果以后问题再出现,欢迎给我一些排查建议。

Edit 2:
朋友建议我看route print的输出:

[...]
IPv4-Routentabelle
===========================================================================
Aktive Routen:
     Netzwerkziel    Netzwerkmaske          Gateway    Schnittstelle Metrik
         10.0.0.0    255.255.255.0   Auf Verbindung         10.0.0.55    281
        10.0.0.30  255.255.255.255        10.0.0.35        10.0.0.55     26
        10.0.0.55  255.255.255.255   Auf Verbindung         10.0.0.55    281
       10.0.0.255  255.255.255.255   Auf Verbindung         10.0.0.55    281
        127.0.0.0        255.0.0.0   Auf Verbindung         127.0.0.1    331
        127.0.0.1  255.255.255.255   Auf Verbindung         127.0.0.1    331
  127.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    331
     192.168.56.0    255.255.255.0   Auf Verbindung      192.168.56.1    281
     192.168.56.1  255.255.255.255   Auf Verbindung      192.168.56.1    281
   192.168.56.255  255.255.255.255   Auf Verbindung      192.168.56.1    281
        224.0.0.0        240.0.0.0   Auf Verbindung         127.0.0.1    331
        224.0.0.0        240.0.0.0   Auf Verbindung      192.168.56.1    281
        224.0.0.0        240.0.0.0   Auf Verbindung         10.0.0.55    281
  255.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    331
  255.255.255.255  255.255.255.255   Auf Verbindung      192.168.56.1    281
  255.255.255.255  255.255.255.255   Auf Verbindung         10.0.0.55    281
===========================================================================
Ständige Routen:
  Netzwerkadresse          Netzmaske  Gatewayadresse  Metrik
        10.0.0.30  255.255.255.255        10.0.0.35       1
===========================================================================
[...]

原来10.0.0.35(嵌入式设备2)被设置成了访问10.0.0.30(嵌入式设备1)的网关。

之前Edit 1里说问题消失,其实是因为当时设备2关机了或者DHCP分配了其他IP:第一次ping 10.0.0.30超时(因为连不上10.0.0.35),之后Windows换了种方式直接访问10.0.0.30,我之前没注意到这点。现在我给设备2重新设回10.0.0.35,ping 10.0.0.30又失败了,和预期一致。

注意这条异常路由不是绑定特定网卡的:笔记本自带的以太网口和USB以太网适配器上都能看到它。

现在问题变成:10.0.0.35是怎么变成访问10.0.0.30的网关的?

备注:内容来源于stack exchange,提问作者Niko O

火山引擎 最新活动