1

我的嵌入式系统使用一个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 只是没有正确支持它们,我可以强迫它遵守吗?


参考:

4

2 回答 2

1

据我了解,RFC 3927 中定义的链路本地寻址仅用于“内部”通信,并且在具有链路本地寻址的接口之间分派的数据包不应由交换机或路由器转发。

嗯,第 2 层交换机甚至不知道IP 地址。你的理解是错误的。链路本地地址不得由路由器转发,如 RFC 3927 中所定义。(第 3 层网络设备)

不过,ARP 请求是由交换机转发的。(二层网络设备)

请参阅数据表中的第一句话,其中指出:

KS8995M 是一款高度集成的二层管理型交换机

有关第 2 层(MAC/以太网)和第 3 层 (TCP/IP) 通信之间差异的更多详细信息,请参阅网络交换机OSI 模型。

正如您已经指出的那样,KSZ8895M 确实以这种方式定义“本地”:

“本地”数据包。基于 DA(目标地址)查找。如果查找表中的目标端口与数据包的来源端口匹配,则数据包被定义为“本地”。

这意味着当此数据包的目的地分配给发送数据包的端口时,交换机不会转发数据包(在第 2 层、以太网、MAC 上!)。“目标地址”在这个问题上是 MAC 地址,而不是 IP 地址。

结论:( 修订)

默认情况下,只要内部交换机物理连接到您的 LAN,连接到交换机的所有设备对外部都是可见的。

为避免这种情况,您必须以物理方式或虚拟方式分隔网络段

但你很幸运,KS8995M 确实支持VLAN - 使用 VLAN,你可以将“内部”网络与外部分开:

  • 将带有“设备 1”的端口添加到“VLAN 1”(私有 VLAN)
  • 仅将带有“设备 2”的端口添加到“VLAN 1”(私有 VLAN)
  • 将带有“设备 1”的端口添加到“VLAN 2”(VLAN 外)
  • 确保具有“外部 LAN”的端口只有“VLAN 2”(外部 VLAN)
  • 确保从所有端口中删除“VLAN 0”(默认 VLAN)。

这样,带有“设备 1”的端口可以与外部 LAN 网段和专用内部 LAN 网段进行通信。“设备 2”与外部虚拟分离,因此 LAN 无法与“设备 2”通信。

有关 VLAN 配置,请参阅 CLI 用户指南中的第 6 页。

于 2012-12-01T11:53:59.923 回答
0

KSZ8895M 数据表(始终指代 KS8895M,因此我将假设功能等效)在第 24 页上说:

KS8895M 不会转发以下数据包:

  • 错误数据包。这些包括成帧错误、FCS 错误、对齐错误和非法大小的数据包错误。
  • 802.3x 暂停帧。KS8895M 将拦截这些数据包并执行适当的操作。
  • “本地”数据包。基于 DA(目标地址)查找。如果查找表中的目标端口与数据包的来源端口匹配,则数据包被定义为“本地”。

这确实表明我认为 Micrel 不遵守 RFC 3927,但仅以上面定义的方式定义“本地”。

那么,不,不幸的是,您将无法使其正常工作。

于 2012-12-01T11:47:16.270 回答