为什么在轮询上述交换机的 OID 时看不到连接 PC 的 MAC 地址?
当您轮询时1.3.6.1.2.1.4.22.1.2
,您正在轮询ipNetToMediaPhysAddress,它是交换机的 ARP 表。纯二层交换机没有大的 ARP 表,因为它们只是交换而不是路由。切换并不会要求一个ARP表。
也有人可以阐明从 dot1qTpFdbPort 和 ipNetToMediaPhysAddress 学到的 MAC 地址之间的细微差别吗?
如果您在连接到 Brocade / DLink Layer2 交换机的路由器上轮询ipNetToMediaPhysAddress,您将在该路由器的 ARP 表中看到来自 Layer2 交换机的相同dot1qTpFdbPort mac 地址(假设您最近通过路由器对相关子网进行了 ping 扫描)问题)。另请注意,如果在子网上使用 VRRP / HSRP / GLBP ,由于潜在的非对称路由,您应该轮询ipNetToMediaPhysAddress两个FHRP对等体。
ARP / Mac 轮询技术
我必须做很多这样的轮询,我将在dot1qTpFdbPort 中找到的 mac 地址/端口映射到来自ipNetToMediaPhysAddress 的IP 地址。在使用snmp轮询路由器/下游交换机之前,我总是通过子网ping扫描(使用类似nmap
...的工具nmap -sP 192.0.2.0/24
)。
[编辑评论中的问题]
那么在 L2 交换机上轮询 dot1qTpFdbPort 可以保证生成的 MAC 地址/端口是直接连接到 L2 交换机的那些吗?
不太正确...轮询dot1qTpFdbPort保证这些是交换机学习到的 mac 地址,或者是在交换机上静态配置的。你的陈述有几个值得注意的例外:
- 如果将第 2 层交换机链接在一起(包括大多数FHRP拓扑),您将看到从下游交换机获知的 mac 地址。根据定义,从下游交换机学习到的 mac 不是直接连接的。如果您有 Cisco 交换机,cdpCacheTable对于理清交换机之间的关系非常有用。
- dot1qTpFdbPort 中的一些 mac 地址可能由交换机本身拥有,而不是直接连接到它。
- 如果您的拓扑中有 LACP 聚合,供应商可能会执行一些操作,例如将 mac 地址与该 LACP 聚合中的物理端口相关联,而不是通过 LACP 聚合学习 mac。在标准中的某个地方,我看到了关于这个的讨论,但我不记得是在什么地方。
- 某些交换机具有特定于供应商的功能(通常是安全功能),它们从dot1qTpFdbPort完全消除了 mac 地址的可见性。青年会
所有你不能100%保证通过返回的MAC上述手段dot1qTpFdbPort被直接连接到交换机。如果您在代码中处理这些类型的问题,那么您就不应该有问题。
PS:我没试过ICMP扫描(ping扫描)。是否真的需要做ping扫描才能获得网络的完整拓扑?
Ping 扫描缓解了这两个问题:
- 交换机 mac-table 老化计时器各不相同,但它们可能非常低(即 5 分钟)。在网络中看到不匹配的路由器 ARP 和交换机 mac 表计时器并不少见。有时 ARP 和交换机 mac 表不同步。如果您在轮询之前进行 ping 扫描,则您最有可能将交换机 mac 表与路由器 ARP 表相匹配。
- 一些端点可能只接收单向流量(即多播流)。如果有人被动地观看或收听单向流,他们的 PC 可能不会经常刷新交换机 mac 地址表。