我的应用程序使用UDP的多播功能。

简而言之,我正在使用Java,并希望使用单个多播地址和端口传输所有数据。尽管多播侦听器将在逻辑上划分为多个子组,这些子组可以在运行时更改,并且可能不希望处理来自其组外部的数据。

为此,我编写了代码,以便所有正在运行的应用程序实例将加入相同的多播组和端口,但将仔细观察数据包的发送方,以确定其是否属于其子组。

我的应用程序的警告最小数据包大小为30000-60000字节!!!!

将使用MulticastSocket.receive(DatagramPacket)读取每个数据包,并确定其所需的数据包是否导致过多的开销(甚至缓冲区溢出)。

因为每个数据包都发送给每个人,它会产生大量流量导致网络拥塞吗?

最佳答案

由于组播(例如,PIM)将建立组播树,该组播树将最佳地放置接收者和发送者,所以并不是每个分组都发送给所有人。因此,将在需要时复制数据包的网络。在最后一跳广播多播数据包(技术上更准确,在第2层泛洪)。 IGMP在最后一跳协助多播,并确保如果在最后一跳中没有接收者加入,则不会进行此类泛洪。

“并且可能不希望处理来自其小组以外的数据。”接收调用将返回下一个接收到的数据报,因此几乎没有人可以避免处理不适合子组分类的数据包。您的应用程序不能使用不同的多个组吗?

10-01 05:01
查看更多