![有没有可能将单播数据包从一台机器发送到两台机器?](https://linux22.com/image/633368/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8F%AF%E8%83%BD%E5%B0%86%E5%8D%95%E6%92%AD%E6%95%B0%E6%8D%AE%E5%8C%85%E4%BB%8E%E4%B8%80%E5%8F%B0%E6%9C%BA%E5%99%A8%E5%8F%91%E9%80%81%E5%88%B0%E4%B8%A4%E5%8F%B0%E6%9C%BA%E5%99%A8%EF%BC%9F.png)
有没有可能将单播数据包从一台机器发送到两台机器?这是如何发生的。
有人偶尔遇到过这种情况吗?
答案1
根据您的网络拓扑和交换机型号,这种情况可能很常见。如果某个交换机的 CAM 表中没有目标地址,它将从所有端口发送数据包。无论是广播、多播还是单播,都没有关系。据思科称这可能是由于路径不对称、拓扑变化或 CAM 表溢出造成的。我也见过质量较差的交换机出现这种情况。
答案2
您是否在寻找故意将单播数据包路由到多台计算机的网络?或者您是否在考虑由于配置错误而意外发生这种情况的情况?
偶然发生这种情况的可能性不大。我想不出一个非常可能发生这种情况的场景。将单播地址 NAT 为多播地址是一个可能导致这种情况发生的错误。
故意将数据包发送到单播地址并路由到多个主机是完全可能的。我能想到一个有意义的用例。
众所周知,在任播地址上托管基于 TCP 的服务存在问题,因为在连接打开时路由可能会发生变化。这可能会导致连接中断。一个额外的层可以解决这个问题,它可以在服务器之间传输来自客户端的数据包,以防它们一开始就到达了错误的服务器。
但是这种方法确实带来了一个新问题,因为该层需要跟踪数据包的路由位置。但是重新路由并不是静态的,当它发生变化时,可能有两个可能的候选目的地作为来自客户端的数据包的正确目的地。此时,从客户端的角度来看,发送到单播地址的数据包必须转发到两个不同的主机,其中只有一个会回复。
答案3
理论上,两台具有相同 MAC 地址且连接到同一广播域的机器可能会接收相同的帧。两台机器也需要配置相同的 IP,因为内核会丢弃不是发往该机器的数据包。您可能还需要在网络中安装一个集线器,因为交换机通常不允许 VLAN 上有两个具有相同 MAC 的端口。此外,使用此设置,您很快就会遇到 TCP 会话问题(因为帧将被发送到错误的主机)。
我认为这种情况不太可能发生,而且会给两家主机带来很多连接问题。
答案4
是的,使用任播是可能的,因为两台机器都有相同的 IP 地址,然而,这将是一个奇怪的任播配置,因为两条路由具有相同的跳数、优先级和其他标准,这些标准通常会有利于其中一条路由。
您可能也可以使用配置奇怪的负载平衡器或 NAT 设备来完成此操作,正如 mtak 所述,您可能会在许多不同级别上遇到连接问题。