我的应用程序使用UDP的多播功能。
简而言之,我使用java并希望使用单个多播地址和端口传输所有数据。虽然多播侦听器将在逻辑上划分为可在运行时更改的子组,但可能不希望处理来自其组外部的数据。
为了实现这一点,我已经制作了代码,以便所有正在运行的应用程序实例都将加入相同的多播组和端口,但会仔细观察数据包的发送者,以确定它是否属于他们的子组。
我的应用程序的警告最小数据包大小为30000-60000字节!!!!!
将使用MulticastSocket.receive(DatagramPacket)读取每个数据包并确定其所需的数据包是否会导致过多的开销(甚至是缓冲区溢出)。
是否会产生大量流量导致网络拥塞,因为每个数据包都会发送给所有人?
答案 0 :(得分:1)
每个数据包都不会发送给每个人,因为多播(例如PIM)会构建一个多播树,可以最佳地放置接收者和发送者。因此,网络将在需要时复制数据包。在最后一跳广播多播数据包(技术上更准确,在第2层泛洪)。 IGMP在最后一跳协助多播,并确保如果最后一跳没有接收者加入,则不会进行此类泛洪。
“并且可能不希望处理来自其组外的数据。”接收调用将返回下一个接收的数据报,因此几乎没有人可以做到避免处理不适合子组分类的数据包。您的应用程序不能使用不同的多个组吗?
答案 1 :(得分:0)
每个数据包都可以发送给每个人,但每个数据包只会出现在网络上一次。
但是,除非此应用程序完全在完全由您控制的LAN中运行,包括所有路由器,否则它已经非常不可行。一旦通过无法控制的路由器,通常接受的最大UDP数据报大小为534。