我最近意识到IP多播(显然在公共互联网上效果不佳)和应用程序多播(明显用于IRC和PSYC,每http://en.wikipedia.org/wiki/Multicast)之间存在差异
是否有关于实现应用程序级多播的好教程?
我认为组播的重点是减少普通网段的带宽,因此我很难理解应用层组播的作用。
答案 0 :(得分:3)
IP级别多播的目的是减少许多用户希望接收相同流量的公共网段的带宽。它通常仅限于一个特定的子网,而IP路由器不会将多播传播到子网之外。这样做是出于可伸缩性的原因 - 允许一台主机发起传播到互联网上每个IP地址的组播数据包并不是一个好主意。
有多种方法可以考虑“应用程序级别”多播。一种方法是使用参与多播的主计算机来构建多播树。 Dijkstra的算法可以用来做到这一点(维基百科对此有一个合理的描述)。但是,如果主机以很大的速率加入和离开网络,那么维护参与计算机的列表 - 并使树保持最新 - 可能是相当多的工作。而且您可能没有很好地估计应用程序级别的跳跃成本。
您应该检查的另一种方法是Gnutella网络的查询路由协议中使用的泛洪算法。 (维基百科也对此有了很好的描述。)这种方法减少了构建组播树的需要,但它具有产生更多网络流量的缺点。实际上,随着流量随着节点数的平方增长而增加,网络流量就会增加,即O(n ** 2)。
答案 1 :(得分:2)
应用程序多播的另一个示例是在JGroups或Amazon EC2中使用Google App Engine,因为它们不支持IP多播,但开发人员希望使用多播功能。