组播转发区别于单播转发,单播转发是基于报文目标IP地址查表转发的过程,而组播转发是根据报文源IP地址查表转发的过程,报文沿远离源的方向转发,可避免环路。PIM协议使用RPF机制确定转发路径。看这张图前,先了解一下RPF的概念。
1、RPF(Reverse Path Forwoarding)反向路径转发
路由器收到一份组播报文后,会根据报文的源地址通过单播路由表查找到达“报文源”的路由,查看到“报文源”的路由表项的出接口是否与收到组播报文的入接口一致。如果一致,则认为该组播报文从正确的接口到达,从而保证了整个转发路径的正确性和唯一性。这个过程就被称为RPF检查。
这里“正确的接口”通常被称为RPF接口,即RPF检查通过的接口。下图分别是失败和成功的两种情形。
如果这几条等价路由都是来自同一张路由表项,则选取下一跳地址最大的路由作为RPF路由。
RPF检查可以基于单播路由、MBGP路由和组播静态路由。如果配置了最长匹配原则,这三种路由中优选最长匹配;如果掩码一样,优选优先级高的路由;如果优先级相同,按组播静态路由、MBGP路由和单播路由选择。
2、RPF检查在组播数据转发中的应用
组播路由协议通过已有的单播路由、MBGP路由或组播静态路由信息来确定上、下游邻居设备,创建组播路由表项。运用RPF检查机制,来确保组播数据流能够沿组播分发树(路径)正确的传输,同时可以避免转发路径上环路的产生。
在实际组播数据转发过程中,如果对每一份接收到的组播数据报文都通过单播路由表进行RPF检查,会给路由器带来很大负担。因此,路由器在收到一份来自源S发往组G的组播数据报文之后,首先会在组播转发表中查找有无相应的(S,G)组播转发表项:
- 如果不存在(S,G)转发表项,则对该报文执行RPF检查,将检查到的RPF接口作为入接口,创建组播路由表项,下发到组播转发表中。其中,对RPF检查结果的处理方式为:如果检查通过,表明接收接口为RPF接口,向转发表项的所有出接口转发;如果检查失败,表明报文来源路径错误,丢弃该报文。
- 如果存在(S,G)转发表项,并且接收该报文的接口与转发表项的入接口一致,则向所有的出接口转发该报文。
- 如果存在(S,G)转发表项,但是接收该报文的接口与转发表项的入接口不一致,则对此报文进行RPF检查。对RPF检查结果的处理方式为:
- 若RPF检查选取出的RPF接口与转发表项的入接口一致,则说明(S,G)表项正确,报文来源路径错误,将其丢弃。
- 若RPF检查选取出的RPF接口与转发表项的入接口不符,则说明(S,G)表项已过时,于是把表项中的入接口更新为RPF接口。然后再根据RPF检查规则进行判断:如果接收该报文的接口正是其RPF接口,则向转发表项的所有出接口转发该报文,否则将其丢弃。