大量数据包重复

大量数据包重复

简短版本:我们遇到了一个问题,某个服务器接收了大量重复的数据包。经过多次故障查找,我们发现问题是由交换机将我的数据包从每个端口发送出去(即充当集线器)而 3 个路由器将数据包反射回来引起的。当路由器将数据包反射回来时,交换机会再次将数据包从其他每个端口发送出去,然后它们会再次被其他路由器反射回来。这种情况会持续到 TTL 递减到 0。我不明白为什么路由器会将数据包发送回去。路由器不应该丢弃数据包吗,因为目标 mac 地址与其 mac 地址不匹配?

长版本:假设有 3 个路由器(A、B 和 C)连接到交换机和我的虚拟机。UDP 数据包将从路由器 A 到达我的虚拟机。此时 TTL 为 60。交换机没有我的虚拟机的 mac 地址,因此它会将数据包从其他每个端口泛洪出去。路由器 B 和 C 收到数据包并看到 IP 地址位于同一端口,因此减少 TTL 并将数据包从同一端口发送回。我们现在有 2 个数据包,TTL 为 59。交换机再次将 2 个数据包泛洪出去,并将其从其他 2 个路由器反射回来,因此我们最终得到 4 个数据包,TTL 为 58。然后我们在 57 得到 8 个,在 56 得到 16 个,等等,直到数据包开始被丢弃。与此同时,我的虚拟机正在接收所有这些数据包的副本。由于虚拟机只接收,因此它永远无法进入交换机的 MAC 表。ARP 在这里有所帮助,但它的超时大于交换机在 mac 表上的超时。降低该值解决了问题,但问题仍然是路由器为什么会反射数据包。据我所知,这不是标准行为。

编辑:来自 wireshark 捕获的详细信息(仅显示 mac 的最后 2 位数字):

MAC    TTL
95     60

99     59
EC     59

95     58
EC     58
95     58
99     58

then 8 packets at 57 etc

看看它看起来像是从以 95 结尾的 MAC 地址进入,然后从其他 2 个路由器反弹,然后这两个数据包再次从其他 2 个路由器反弹以形成 4 个数据包?

答案1

您所描述的情况是交换机的 CAM 表已满时发生的情况,此时交换机无法再学习 MAC 地址,并且会将数据包从每个端口转发出去。对于非托管交换机,可能很难确定这是否是问题所在,但对于托管交换机,您应该能够显示 CAM 表。

网络图也对解答这个问题有帮助。

编辑:

从添加的图表中,您可以看到有两个问题。第一个问题仍然存在,如果交换机不知道要去哪里,它将从每个端口转发数据包。检查日志以查看为什么您的 MAC 地址从表中删除。

第二个问题是路由器接收数据包并将其发送回交换机,交换机又将其发送到每个端口(除了它自己的端口)。是否有一个特定的端口设置了默认路由 0.0.0.0?

相关内容