什么是RPF?
路由器收到组播数据报文后,只有确认这个数据报文是从自身连接到组播源的接口上收到的,才进行转发,否则丢弃。
RPF检查
在单播路由表中查找到组播报文源地址的路由
如果该路由的出接口就是组播报文的入接口,RPF检查成功否则RPF检查失败,报文丢弃。
补充说明
RPF执行过程中会用到原有的单播路由表以确定上游和下游的邻接结点。只有当报文是从上游邻接结点对应的接口(称作 RPF接口)到达时,才向下游转发。
RPF的作用除了可以正确地按照组播路由的配置转发报文外,还能避免由于各种原因造成的环路,环路避免在组播路由中是一个非常重要的问题。(环路问题可以参考RPF举例的拓扑图)
RPF的主体是RPF检查,路由器收到组播报文后,先对报文进行 RPF 检查,只有检查通过才转发,否则丢弃。RPF检查过程如下:
1)路由器在单播路由表中查找组播源或 RP 对应的 RPF 接口(当使用信源树时,查找组播源对应的 RPF接口,使用共享树时查找RP对应的RPF 接口),某个地址对应的RPF接口是指从路由器向该地址发送报文时的出接口;
2)如果组播报文是从RPF接口接收下来的,则 RPF 检查通过,报文向下游接口转发;
3)否则,丢弃该报文。
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接口,则向转发表项的所有出接口转发该报文,否则将其丢弃。
ip rpf-route-static x.x.x.x x x.x.x.x //通过手工静态方式修改下一跳
displaypim rp-info //查看组播RP设备详细信息
display multicast rpf-info x.x.x.x //查看RPF接口和RPF邻居信息