我有三个 Raspberry Pi 通过集线器连接到一个子网。我给它们都分配了静态 IP,并使用一个主 Pi 来 ping 其他两个 Pi。
一旦主 Pi 开始 ping 另一个 Pi,每次 ping 都会完全正常。但是当我最初启动 ping 时,可能需要大约 5 秒钟才能收到它的第一个响应。这导致数据包丢失率超过 30%,并且当我运行脚本时,它们经常由于尝试连接超时而无法传输消息。
下面是 ping 一个 pi 然后 ping 另一个 pi 时数据包丢失的照片:
我对网络还很陌生,所以请告诉我我可以提供哪些信息来更好地诊断问题。
我尝试更换 Raspberry Pi、以太网电缆和集线器,但目前还没有成功。我想知道 Pis 上是否存在一些我不知道的限制,或者这可能是我的集线器供应商的硬件问题。
编辑:我运行IP neighbor show
的结果如下
pi@raspberrypi:~ $ ip neighbor show
192.168.2.1 dev wlan0 lladdr 40:c7:29:4e:4d:f8 STALE
192.168.3.32 dev enxb827eb9c0ecf lladdr 00:e0:4c:53:44:58 STALE
192.168.2.131 dev wlan0 lladdr 02:0f:b5:87:93:39 REACHABLE
192.168.3.37 dev enxb827eb9c0ecf lladdr 00:e0:4c:53:44:58 STALE
它显示两个不同网络的原因是我通过网络上的 wifi 连接到互联网192.168.2
。并且我通过以太网连接到另外 2 个 pi 192.168.3
。两个 Pis IP 分别可以在那里看到.3.37
和.3.32
。
编辑 2:我玩的时候注意到,IP neighbor show
如果我 ping 一个 pi 然后运行,IP neighbor show
它会显示REACHABLE
在该 pi 旁边。但是,如果我 ping 另一个 Pi,那么我 ping 的第一个 Pi 将显示STALE
,而新的 Pi 将是REACHABLE
每次我 ping 另一个 Pi 时都会发生这种情况。
答案1
问题源于您的两个 Raspberry Pi 具有相同的 MAC 地址。我们可以从输出中看到这一点,ip neighbor show
其中3.32
和3.37
都有 MAC 地址00:e0:4c:53:44:58
。您不仅会遇到 ping 时遇到的问题,而且主 Pi 与其他两个 Pi 之间的任何通信同时也会有问题。
情况不应该如此,因为 MAC 地址应该是全球唯一的,但遗憾的是,我们遇到了这种情况。要解决这个问题,您需要找到一种方法来手动更改 MAC 地址。这个帖子来自 Pi 论坛似乎建议了一种方法来做到这一点:
本质上,创建一个文件“/etc/systemd/network/00-default.link”,其内容为:
[Match] MACAddress=current MAC address [Link] MACAddress=new MAC address
然后 sudo ifdown 和 ifup 该接口,它应该有新的 MAC 地址,并且更改将在重启后持续存在。
MAC 地址数字是 12 个十六进制字符(0-9,af)。它们通常每两个字符用冒号或破折号分隔,但这些实际上不是地址的一部分。例如:
01:23:45:ab:cd:ef
是的,只需使用一些随机字符。我们只需要一些独特的东西。
答案2
当您启动初始 ping 时,发出以下命令:
ip neighbor show
这将显示 ARP 缓存并提示 ARP 解析是否已发生。
只需编辑您的问题并将输出放在那里并添加目标 RasPI 的 IP。