7.8 案例研究:任播RP

对地理区域分布辽阔的大型PIM-SM域的设计者来说,他们常常遇到的难题是如何最有效地放置RP。由于PIM-SM仅允许有一个group-to-RP映射,因而对大型多播源来说可能会引起以下问题。

• 可能的流量瓶颈;

• 缺乏可扩展的Register消息解封装(使用共享树时);

• 活动RP失效后的故障倒换很慢;

• 可能存在多播包的次优转发行为;

• 依赖远程RP。

第5章和第6章曾经介绍过解决上述部分问题的一些解决方案,如用于PIMv2 Bootstrap协议的哈希算法以及Auto-RP过滤,但这些工具都无法提供一个完整的解决方案。任播(anycast)RP是一种可以将单个多播包映射到多个RP的方法,这些RP可以分布于整个多播域中,并且全部使用相同的RP地址,因而创建了一个”虚拟RP”,而MSDP则是创建虚拟 RP的基础。


注意: 通常来说,任播意味着可以将数据包发送给单个地址,而多台设备中的任一台设备都可以响应该地址。


图7-17中的路由器与前一个案例研究类似,但此时的4台路由器都在运行Auto-RP,并且都在宣告RP地址10.100.254.1。该多播域中的源DR知道只有一个RP地址,并注册到物理上最靠近的RP,这通常会导致PIM域的分区,但使用了MSDP网状多播组之后,任播RP就可以在多播组中交换源信息。

img459

图7-17 4台路由器组成一个虚拟RP,宣告单个RP地址10.100.254.1,并使用MSDP来交换已注册到每台路由器的源信息

由每个任播RP的单播路由协议负责宣告公共RP地址,从多播源和组DR的角度来看,该地址上只有一个RP,但是有多条路由去往该地址。DR会从中选择最短路由,通过该路由可以去往最近的任播RP,如果此任播RP出现故障,单播路由协议会将去往该RP的路由宣告为不可行路由,此时DR将看到该不可行路由,从而选择次优路由。通过该路由可以去往次最近任播RP,因而RP的故障倒换被链接到单播路由协议,而且与单播路由的重收敛时间一样快。

虽然MSDP的对等关系建立在接口LO0之间,但却使用了其他环回接口来配置这些路由器所宣告的RP地址。通常情况下,MSDP在其SA消息中使用的是RP地址,由于这4台路由器都在宣告相同的RP地址,因而必须将MSDP配置为在其SA消息中使用一个惟一的地址,命令ip msdp originator-id就可以完成该要求。例7-18显示了这4台路由器使用网状多播组和ip msdp originator-id的相关配置。

例17-18:为Frankenstein、Wolfman、Mummy和Dracula配置任播RP。

img460

img461

img462

在例7-18中,这4台路由器都被配置为Auto-RP C-RP和映射代理,也可以为任播RP使用静态映射或PIMv2 Bootstrap。此外,这4台路由器都被配置为缓存SA消息。

每台路由器都使用接口LO5来配置虚拟RP地址,而LO0则是MSDP会话的端点。需要注意的是,上述配置中的Auto-RP命令引用的是接口LO5,而命令ip msdp originator-id引用的则是接口LO0,这一点非常重要,因为MSDP要求其对等会话的端点必须使用惟一的IP地址。

上例中的OSPF和BGP配置出于一个非常重要的原因:前面说过,OSPF和BGP会将配置在环回接口上的最大IP地址作为其路由器ID,但不幸的是,这些路由器的接口LO5上的IP地址都大于接口LO0上的IP地址。因而每台路由器上的OSPF和BGP进程在默认情况下都会将10.100.254.1作为路由器ID,从而会产生大量的非期望结果,其中一种结果就是OSPF数据库将出现系统震荡(thrashing),这是因为每台路由器的LSA都试图覆盖其他路由器的LSA。一种解决方案就是总使用一个数值上小于所有环回地址的虚拟RP地址,但很明显这种方法不切实际,而且也很容易出现配置失误。本例使用了一种更好的解决方案,即在OSPF和BGP的配置中利用router-id来强制每台路由器都使用其惟一的LO0地址。

需要注意的是,这些路由器的接口LO0都没有运行PIM,这些接口都不需要PIM功能,只要为MSDP对等会话提供与路由器相关的IP地址即可。