![交换机淹没本应单播的数据包](https://linux22.com/image/557257/%E4%BA%A4%E6%8D%A2%E6%9C%BA%E6%B7%B9%E6%B2%A1%E6%9C%AC%E5%BA%94%E5%8D%95%E6%92%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85.png)
我在一家大公司担任网络管理员。最近我们注意到我们的网络基础设施存在问题。基本上,我们的网络后端位于 Catalyst 上,作为主 L3 后端交换机,以及几台 Cisco Nexus 交换机,作为边缘 L2 交换机,连接到该 Catalyst。
问题出现在我们尝试嗅探其中一台主机上的流量时 - 然后我们(总是)查看其他主机之间的单播流量。
我会尝试更详细地说明:假设我在主机 10.0.0.1 上,使用 mac苹果,我运行命令 -
tcpdump -i eth0 ether host not MAC and host not 10.0.0.1 and not broadcast and not multicast
我会总是查看其他主机之间的流量。
我读了一篇思科文章单播泛洪但是,这种“现象”不仅发生在我们网络中的 VLAN 之间传递时,也发生在同一个 VLAN 上。在同一 VLAN 中的交换机之间传递时是否可能发生这种情况(我们的 VLAN 跨越许多交换机)?所有交换机都通过中继连接到 Catalyst...
有任何想法吗?
谢谢。
编辑:
看来我们找到了问题的根源。
基本上,每次交换机收到一个带有无法识别的 MAC 地址的帧时,它都会将其泛洪到所有端口。这是正常的,事情也应该如此。但是,在我们当前的设置中,交换机中的 MAC 条目应该“存活” 30 分钟。如果 30 分钟内未看到 MAC,它将从交换机中删除,直到再次看到。如果将数据包发送到该 MAC,而它不在表中,则所有端口都将被泛洪以找到目标 MAC 端口(我们希望从其中一个端口获得答案)。
我们找到了一个目标 MAC,并在交换机 MAC 表中查找它。网络被泛洪时,该表不包含 MAC。我们尝试对与该 MAC 相关的地址进行 ARP 处理,然后泛洪停止了(因为 MAC 重新出现在 MAC 表中)。
但是,几秒钟后,MAC 再次从 MAC 表中消失,泛洪再次开始。
看来泛洪问题源于我们交换机上的 MAC 表的问题。似乎它们“忘记” MAC 地址的速度比应有的快(MAC 应该保留 30 分钟),并用该 MAC 淹没所有数据包。
答案1
快速前传
ARP 表 - L3 设备(路由器、主机等)维护给定 IP 地址和相应 MAC 地址之间的映射。
CAM 表 - 在特定的交换机平台中可能以其他名称为人所知,但其结果是给定的 L2 交换设备维护给定硬件地址和一个或多个物理交换机端口之间的映射。
上述情况称为单播泛洪。这种情况是路由器仍然具有活动 ARP 条目,即使交换机的 CAM 表已刷新相应条目。因此,当路由器收到给定主机的数据包时,它会直接转发到交换机,而无需先发送 ARP 请求(IP:MAC 映射仍被缓存)。但是,交换机不再知道此 MAC 地址映射到哪个端口(此条目已过期)。如果交换机没有给定单播 MAC 的 CAM 条目,那么它会将该 MAC 的数据包泛洪到所有端口,直到看到响应(即对 ARP 请求的响应)。
由于不为人知的原因,ARP 和 CAM 计时器在 Cisco 交换机上通常有很大不同。值略有不同,但这种不匹配在大多数现代 Nexus 设备中仍然存在。最佳做法是将 ARP 和 CAM 计时器设置为相似的值 - 理想情况下,CAM 表设置为比 ARP 长 5 秒左右。路由器重新 ARP 比交换机必须泛洪要好。将两个值都设置为 ~600 秒(10 分钟)通常还不错,但如果路由器上出现过多的 ARP 流量,某些环境可能需要更长的时间。
答案2
是的,ARP 广播(打开 wireshark 你会看到“谁有 blah blah blah。告诉 blah。”)。
客户应该回复“是我!”所以,我会调查未能回应的客户。