【发布时间】:2010-09-20 08:17:25
【问题描述】:
我最近意识到 IP 多播(显然在公共 Internet 上不能很好地工作)和应用程序多播(根据 http://en.wikipedia.org/wiki/Multicast 显然在 IRC 和 PSYC 中使用)之间存在区别。
有没有关于实现应用程序级多播的好教程?
我认为多播的全部意义在于减少公共网段的带宽,所以我很难理解应用级多播的作用。
【问题讨论】:
我最近意识到 IP 多播(显然在公共 Internet 上不能很好地工作)和应用程序多播(根据 http://en.wikipedia.org/wiki/Multicast 显然在 IRC 和 PSYC 中使用)之间存在区别。
有没有关于实现应用程序级多播的好教程?
我认为多播的全部意义在于减少公共网段的带宽,所以我很难理解应用级多播的作用。
【问题讨论】:
IP 级多播的目的是减少许多用户希望接收相同流量的公共网段的带宽。它通常仅限于一个特定的子网,IP 路由器不会将多播传播到子网之外。这样做是出于可扩展性的原因 - 允许一台主机发起多播数据包并传播到 Internet 上的每个 IP 地址并不是一个好主意。
对于“应用程序级”多播有不同的看法。一种方法是使用参与多播的主机来构建多播树。 Dijkstra 的算法可以用来做到这一点(维基百科对此有一个合理的描述)。但是,如果主机以相当大的速度加入和离开网络,维护参与计算机的列表并保持树是最新的可能是一项相当大的工作。而且您可能无法很好地估计应用程序级别的可用跃点成本。
您应该查看的另一种方法是 Gnutella 网络的查询路由协议中使用的泛洪算法。 (Wikipedia 对此也有很好的描述。)这种方法减少了构建多播树的需要,但它的缺点是会产生更多的网络流量。事实上,网络流量增加了很多,因为流量随着节点数的平方而增长,即 O(n**2)。
【讨论】:
应用程序多播的另一个示例是在Amazon EC2 或Google App Engine 中使用JGroups,因为它们不支持IP 多播,但开发人员希望使用多播功能。
【讨论】: