【发布时间】:2012-11-19 11:41:12
【问题描述】:
我的嵌入式系统使用一个 Micrel KSZ8995M 交换机,连接到两个“内部”设备(内部是指物理上位于同一块板上)和一个 LAN。
设备 1 是运行 Busybox Linux 的 ARMv5 处理器,其 LAN IP 由 DHCP 配置或在eth0 上静态配置,eth0:0 上的链接本地/APIPA 169.254.137.10 地址。
设备 2 是运行 ARTOS 的较小芯片,谁知道还有什么,只有一个链接本地/APIPA 169.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 只是不能正确支持它们,我可以强制它遵守吗?
参考资料:
【问题讨论】:
-
@Kaii:是的!我们必须使用寄存器而不是 CLI 命令,并设法将一组寄存器写入操作放在一起,这些操作对标记的 VLAN 有意义,但无法相当完成。有人意识到此交换机上基于端口的 VLAN 确实允许每个端口位于多个 VLAN 中,所以我们现在就这样做了。稍后我会挖掘配置。
标签: networking tcp-ip link-local