我的应用程序使用了UDP的组播功能。
简而言之,我正在使用java,并且希望使用单个多播地址和端口来传输所有数据。尽管多播监听器在逻辑上将被分成子组,这些子组可以在运行时改变,并且可能不希望处理来自其组之外的数据。
为了实现这一点,我编写了代码,以便所有正在运行的应用程序实例都将加入相同的多播组和端口,但将仔细观察数据包的发送者,以确定它是否属于它们的子组。
警告我的应用程序的最小数据包大小是30000-60000字节!
将使用MulticastSocket.receive(DatagramPacket)读取每个数据包,并确定其所需的数据包是否会导致过多的开销(甚至缓冲区溢出)。
是否会因为每个数据包都发送到每个人而产生大量流量,从而导致网络拥塞?
发布于 2013-08-24 15:27:17
由于多播(例如PIM)将构建一个多播树,该树将最佳地放置接收者和发送者,因此并不是每个包都被发送到每个人。因此,网络将在需要时复制数据包。组播数据包在最后一跳被广播(技术上更准确地说,在Layer2处泛洪)。IGMP在最后一跳协助组播,并确保如果在最后一跳中没有接收器加入,则不会进行这种泛洪。
“并且可能不希望处理来自其组外的数据。”接收调用将返回下一个接收到的数据报,因此几乎不能避免处理不是用于子组分类的分组。您的应用程序不能使用不同的多个组吗?
发布于 2013-08-24 15:07:42
每个数据包都可以发送给每个人,但每个数据包只会在网络上出现一次。
但是,除非该应用程序完全运行在一个完全由您控制的LAN中,包括所有路由器,否则它已经非常不可行了。通常接受的最大UDP数据报大小是534,一旦您通过您不能控制的路由器。
https://stackoverflow.com/questions/18415966
复制相似问题