我的嵌入式系统使用一个Micrel KSZ8995M开关,连接到两个“内部”设备(内部我的意思是物理上位于同一块板上)和一个 LAN。
设备 1 是一个运行 Busybox Linux 的 ARMv5 处理器,其 LAN IP 由 DHCP 或静态配置eth0
,以及一个本地链接/APIPA169.254.137.10
地址eth0:0
。
设备 2 是运行 ARTOS 的较小芯片,谁知道还有什么,只有一个本地链接/APIPA169.254.137.11
地址。
+----------------------------+
| +----------+ +----------+ |
| | Device 1 | | Device 2 | |
| +-----+----+ +-----+----+ |
| | | | <-- a "unit"
| +-----+-------------+----+ |
| | Micrel KSZ899M switch | |
| +-----------+------------+ |
+-------------|--------------+
|
+--+--+
| LAN |
+ - +
目的是让设备 1 和设备 2 能够通过 TCP/IP 相互通信,而 LAN(或任何递归连接的网络)上的任何其他设备都无法看到设备 2 或看到两者之间传输的数据设备。
此外,网络上可能存在整个单元的多个实例,并且单元之间的链路本地地址不得冲突。
据我了解,RFC 3927 中定义的链路本地寻址仅用于“内部”通信,并且在具有链路本地寻址的接口之间分派的数据包不应由交换机或路由器转发。
不幸的是,随着系统作为一个整体连接到 LAN,我看到来自更广泛网络的多个设备对设备 2 的 ARP 响应,这意味着链接本地 IP 是可见的并且在整个网络中发生冲突。也就是说,Micrel 似乎转发了这些,我看不到任何可以让它停止的配置。
我是否误解了 APIPA 寻址的工作方式?
或者,如果我是正确的,但 Micrel 只是没有正确支持它们,我可以强迫它遵守吗?
参考: