组播的路由与传统路由的处理方式不同。
在单播路由中,只有当拓扑结构发生改变或设备出现故障是才会发生路由改变,而组播路由在应用程序加入或退出一个组播群组时就会发生组播路由变化。
由于组播路由的目的地往往是多个,因此组播转发需要路由器检查多个目的地址;组播数据报可以从非组播群组成员的计算机发起,并且可以路由经过没有任何组播成员的网络。因此,决定如何转发数据报时,组播路由器到底依赖哪些信息是非常重要的。
首先我们确定组播路由的需求,即组播的目的地是一个计算机的集合,最佳转发系统将使数据报到达该集合中的每个成员,并且一个数据报不会在同一个网络中出现两次。
第一种组播路由的方法称为反向路径转发RPF(Reverse Path Forwarding)。其思想是使用数据报的源地址来避免数据报反复通过一个环路。要使用RPF,组播路由器必须有一个常规路由表,其中有到每个目的站的最短路径。当数据报到达时,路由器提取出源地址,在本地路由表中进行查找,并找出对应源地址的接口,如果数据报来自此接口,则根据需要向其他接口转发该数据报的副本,否则就丢弃该数据报。
该方法能够保证组播群组中的每台主机都能接收到发往该群组的数据报副本,但是,RPF不能单独用于组播路由,因为对于没有组播成员,也不通向组播成员的网络,这样的传输是浪费带宽的。
另一种改进的方法是截尾反向路径转发TRPF(Truncated Reverse Path Forwarding)或截尾反向路径广播TRPB(Truncated Reverse Path Broadcasting)。
该方法的思想是在RPF的基础上,通过避免不通向群组成员的路径,进一步对传播进行限制。这需要两种信息:常规路由表和通过每个网络接口可达的组播群组列表。这样首先根据源地址筛选非环路的数据,然后根据目的地址验证到达指定的群组需要经过哪些接口。
尽管TRPF依靠RPF避免了环路,但是,它并不能保证每个组成员只收到一份数据报。有些情况下,一个成员可能会收到同一数据报的多个副本,从下面的动画可以看到这种情况。
另外,TRPF在转发数据报时使用了源地址和目的地址,使得交付取决于数据报的源地址,如下图所示。
组播路由的核心是提供传播成员信息的机制,以及转发数据报时使用这些信息的方式。一方面,由于成员信息变化迅速,如果组播路由器迅速传播群组成员信息,那么会导致大量的通信量;另一方面,如果群组成员信息不能迅速传播,会导致组播路由器不能做出最佳的决策。因此,组播路由是在以上两个方面进行折衷。