我的嵌入式系统使用了一个麦克雷尔KSZ8995M开关,连接到两个“内部”设备(内部我指的是物理上坐在同一块板上)和一个局域网。
设备1是一个运行Busybox的ARMv5处理器,其局域网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相互通信,而不需要局域网上的任何其他设备(或任何递归连接的网络)能够看到设备2或看到两个设备之间的数据。
此外,网络上可能存在多个整个单元的实例,并且链路本地地址不能在单元之间发生冲突。
据我理解,RFC 3927中定义的链路本地寻址仅用于“内部”通信,并且在与链路本地寻址接口之间发送的数据包不应由交换机或路由器转发。
不幸的是,随着整个系统连接到局域网,我看到更广泛的网络上的多个设备对设备2的ARP响应,这意味着连接本地IP是可见的,并且在整个网络中发生冲突。也就是说,麦克雷尔似乎在转发这些信息,我看不到任何让它停止的配置。
,我是否误解了APIPA寻址的工作方式?
或者,如果我是正确的,但麦克雷尔只是没有正确地支持他们,我能强迫它遵守吗?
参考文献:
发布于 2012-12-01 11:53:59
据我理解,RFC 3927中定义的链路本地寻址仅用于“内部”通信,并且在与链路本地寻址接口之间发送的数据包不应由交换机或路由器转发。
嗯,第二层交换机甚至不知道IP地址。你的理解是错误的。如RFC 3927所定义的,路由器不能转发链路本地地址.(第三层网络设备)
但是,ARP请求由交换机转发。(第二层网络设备)
见数据表中的第一句,其中指出:
KS8995M是一个高度集成的层-2管理交换机。
有关第二层(MAC /以太网)和第三层(TCP/IP)通信之间差异的更多细节,请参阅网络交换机和OSI模型。
正如您已经指出的,KSZ8895M确实以这种方式定义了“本地”:
“本地”包。基于DA (目标地址)查找。如果查找表中的目标端口与数据包所在的端口匹配,则包被定义为"local“。
这意味着当将数据包的目的地分配到发送数据包的端口时,交换机不会转发数据包(在第二层、以太网、MAC!)。“目标地址”是这个问题中的MAC地址,而不是IP地址。
结论:(修订)
默认情况下,只要内部交换机物理连接到局域网,所有连接到交换机的设备对外部都是可见的。
为了避免这种情况,您必须将网段或实质上分开。
但幸运的是,KS8995M确实支持VLAN --使用VLAN,您可以将“内部”网络与外部网络分开:
这样,带有“设备1”的端口可以同时与外部LAN段和私有内部LAN段通信。“设备2”实际上是与外部分离的,因此局域网无法与“设备2”通信。
关于VLAN配置,请参阅CLI用户指南中的第6页。
发布于 2012-12-01 11:47:16
KSZ8895M数据表(它在整个过程中引用KS8895M,因此我将假设功能等价)在第24页上写道:
KS8895M不会转发以下数据包:
这确实表明,我认为麦克雷尔不遵守RFC 3927,但定义“本地”仅以上述定义的方式。
那么,不,不幸的是,你不能让这件事起作用。
https://stackoverflow.com/questions/13658993
复制相似问题