Jay*_*lan 16 ethernet protocols multicast file-transfer reliable-multicast
当发送者需要通过以太网以可靠的方式将相对大量的数据(比如几兆字节每秒)多播到同一子网上的适量接收器(比如少于十几个)时,最有效的协议是什么?通过可靠,我的意思是,如果数据包丢失,协议确保重新发送,以便任何接收器都不会丢失数据." 高效"这个术语要定义起来要困难得多,但是假设我们希望通过两端适度的CPU使用来最大化吞吐量并最小化网络带宽.这仍然不是一个明确的定义,但它是我能想到的最好的.面向流或面向消息的协议都是可以接受的.
我很欣赏现实世界的例子,我很乐意接受主观的答案,即你最喜欢的多播协议是什么,如果你能解释它的优点和缺点.
小智 22
真实世界的例子:TIBCO Rendezvous.
数据通过多播以序列号发送出去.检测到丢失的序列号的客户端在多播组上发出一个消息"嘿,我错过了数据包12345".服务器重新编组该数据.服务器具有可配置的数据量,以便在客户端请求时进行缓冲.
问题:
想象一下,有一个客户端可以丢弃一半的数据包,还有100个健康的客户端.该客户端为每个其他数据包发送重传请求.服务器开始在其中一个正常客户端上引起足够的负载,使其开始丢弃数据包并请求重新传输.来自它的额外负载导致另一个健康的客户端开始请求重新传输.等等.拥堵崩溃的结果.
Tibco提供了一种解决方法,即切断发送过多重传请求的订户.这使得单个订户更难以导致拥塞崩溃.
限制拥塞崩溃风险的另一种解决方法是限制服务器愿意重新传输的数据量.
Tibco还应在客户端和服务器中提供关于是否多播或单播重传请求以及重传本身的启发式方法.他们没有.(对于服务器,如果只有一个客户端在特定时间窗口内请求重传,则可以单播重传;对于客户端,如果服务器告知您 - 在重传的数据包中 - 您是唯一一个请求,则可以单播重传请求转发并请将来的请求单播出来)
从根本上说,您必须决定您希望保证客户接收数据的强度与拥塞崩溃的风险之间的关系.您将不得不猜测丢弃数据包的位置以及重传是否最有效地发送单播或多播.如果服务器理解数据并且可以决定不发送重传,如果有更新数据要发送(这使得重传不相关),那么你比Tibco RV这样的框架处于更好的位置.
有时理解数据可能会导致错误的假设.例如,市场数据 - 当有更新的报价时,首先看起来可能不会重新发送报价.但是稍后,您可能会发现订阅者保留了报价历史记录,而不仅仅是尝试跟踪当前报价.根据订户的不同,您可能会有不同的要求,有些客户端更喜欢单播TCP与多播.
在某些时候,您需要在服务器上做出任意决定,以便在重新传输或缓慢客户端时缓冲多少数据.
继TIBCO之后,PGM协议是一种开放式标准可靠多播,具有许多优化功能,可以在网络元素加速的情况下有效地进行大规模工作.PGM由TIBCO和CISCO开发,是TIBCO Rendezvous下的可选协议,默认协议是TRDP,其设计非常相似.
您可以计算理论效率,例如此处列出的PGM,
http://code.google.com/p/openpgm/wiki/PgmPerformance
遗憾的是,现实世界的网络元素,NIC和通用计算机体系结构的执行速度远低于理论最大值.