UDP 中 MAC 地址的正确性重要吗?

UDP 中 MAC 地址的正确性重要吗?

事情是这样的,我在生产环境中使用tcpdump并创建了一个仅 UDP文件。pcap

然后使用该工具tcprewrite,我将UDP数据包的dst IP和MAC地址更新为vm2,src IP更新为vm1,但src MAC地址更新为00:00:00:00:00:00。我重新计算校验和。

然后我从 vm1tcpreplay制作了文件,然后检查了vm2,我看到 vm2 实际上收到了 UDP 数据包,但 src MAC 已更新为网络网关的。pcaptcpdump

PS我用的云云,vm1 和 vm2 位于相同的子网。

|-----|            |-----|
| vm1 | ---|gw|----| vm2 |
|-----|            |-----|

然后我tcpdump在 vm1 上运行,我看到 UDP 数据包作为 MAC 地址发送00:00:00:00:00:00,因此路由器(网关)接受它(尽管它是“错误的”)并更新 MAC 并转发到 vm2。

所以对我来说,只要IP地址和数据包校验和良好,MAC地址并不重要,否则路由器为什么不丢弃它呢?

答案1

我是否正确理解 vm1-gw 连接具有与 vm2-gw 不同的 IP 网络?

如果是这样,则网关就像 L3 路由器一样工作。 MAC 地址是仅绑定到第二层的值,并且当数据包通过路由器时始终会丢失。更改您所描述的 MAC 地址是正常行为。路由器在两个接口上都有不同的广播域。 MAC 地址仅在广播域内保持不变,其中 L2 层值(即 MAC 地址(ARP 除外))足以进行通信。 ARP 协议将帮助广播域中的节点使用其 IP 地址找出彼此的 MAC 地址,然后节点之间的连接仅通过 MAC 进行。

如果你想使用网关作为防火墙来过滤不同IP网络之间的连接,你需要使用IP地址,而不是MAC。

如果您另有目的,请澄清问题。

相关内容