精简版:
我们遇到了一个特定服务器接收大量数据包的问题.经过多次故障查找后,我们发现问题是由交换机将每个端口的数据包发送出去(即充当集线器),3个路由器正在反映数据包.当路由器反射数据包时,交换机将再次将数据包发送到每个其他端口,并且它们将再次被其他路由器反射回来.这将持续到TTL递减到0.我不明白为什么路由器正在发回数据包.路由器不应该丢弃数据包,因为dest mac地址与其mac地址不匹配吗?
我们遇到了一个特定服务器接收大量数据包的问题.经过多次故障查找后,我们发现问题是由交换机将每个端口的数据包发送出去(即充当集线器),3个路由器正在反映数据包.当路由器反射数据包时,交换机将再次将数据包发送到每个其他端口,并且它们将再次被其他路由器反射回来.这将持续到TTL递减到0.我不明白为什么路由器正在发回数据包.路由器不应该丢弃数据包,因为dest mac地址与其mac地址不匹配吗?
长版:
假设有3个路由器(A,B和C)连接到交换机和我的VM.一个udp数据包将从路由器A到达我的VM.在这个阶段,TTL是60.交换机没有我的VM的mac地址,因此它会将数据包从每个其他端口溢出.路由器B和C接收数据包并看到IP地址在同一端口上,因此递减TTL并将数据包发送回同一端口.我们现在有2个TTL为59的数据包.交换机再次将2个数据包溢出并从其他2个路由器反射出来,因此我们最终获得了4个TTL为58的数据包.然后我们得到8个,57个,16个,56个等等,直到数据包开始被丢弃.我的VM一直在接收所有这些数据包的副本.因为VM只接收它,所以永远不会设法进入交换机的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
看看它是如何从MAC地址以95结尾,然后从其他2个路由器反弹,那么这两个数据包再次从另一个2反弹以产生4个数据包?