我们遇到了一个非常奇怪的问题,某些端口拒绝学习其主机的 mac 地址。例如,主机 A 连接到交换机 S1 的端口 0/0/30。
每个发往主机 A 的数据包都会导致向 S1 的所有连接主机进行单播,因为表中缺少 A 的 MAC 地址。
奇怪的是,主机 A 有一个带有单独 Mac 的 IPMI 接口,交换机可以动态学习该接口而没有任何问题(非常奇怪)。
我研究了所有可能的原因:
- 交换机中没有配置 mac 表限制(不是全局的、不是在 VLAN 级别、不是在接口级别)
- 表中的 mac 地址数量远低于最大值(少于 1%)
- 接口的vlan配置正确
- 在 VLAN 级别和接口级别启用 mac 学习
- 接口正确接收/发送数据包
- 网络中没有环路,也没有 mac 抖动
- 生成树协议已禁用,因此接口未被阻塞
- 接口上的流量未标记,但设置为正确的默认 VLAN
- 没有配置端口安全
- 粘性 Mac 功能已禁用
最令人沮丧的是,例如,接口 0/0/12 的相同配置可以正确学习其主机的 mac。有些交换机接口可以正确学习,有些则不能,并且所有接口都共享相同的配置。
我已经在问题接口上捕获了一些数据包,它们看起来都是正确的,即源 mac 地址是正确的,并且收到了正确的 vlan 标记。
奇怪的是,静态添加 mac 并不能解决问题——所有发送到此 mac 的数据包都会导致向所有连接的主机进行单播。
我甚至检查了 mac 哈希函数以及是否存在冲突,但仍然没有运气。
连接的主机本身可以毫无问题地互相看到,即 arping 返回正确的 mac 地址,并且所有主机在本地网络内均可访问。Arpcache 似乎很好。
我正在考虑重置交换机,但这会导致停机。
最后,网络上所有其他交换机(与 S1 相同的配置)都存在类似问题,这使我倾向于认为这是一个配置/设置问题。
以前有人处理过类似的事情吗?有人能推荐进一步的诊断或行动方案来解决问题吗?
交换机型号:华为s5700-48TP-SI-AC
答案1
出色地,
如果有人偶然发现这个奇怪的问题,就我们的情况而言,我怀疑是以下情况:
交换机有一个哈希函数,它对 mac 进行哈希处理并将其添加到 mac 表中。我们的硬件是批量购买的,mac 地址彼此非常接近。我怀疑该函数会产生冲突,即 2 个 mac 收到相同的哈希,但结果只有一个被学习。
此交换机的企业型号有一个 snmp 对象,其中包含有关冲突的数据,但不幸的是,我们的交换机没有。目前还不清楚哈希算法究竟使用了哪种算法,所以我无法证明这一理论。
无论如何,将主机的 MAC 地址更改为完全随机的 MAC 地址可以解决问题。