7.3 连接到DVMP网络

读者可能偶尔会碰到需要将PIM路由器连接到某台DVMRP路由器的应用需求。虽然这本身并不是一个大规模IP多播路由问题(因为在任何规模的互联网络中都可能存在仅支持DVMRP的路由器),但最可能的应用需求就是将自己的PIM路由器连接到MBone上。

在Cisco路由器的某个接口上启用了PIM之后,该路由器就将侦听DVMRP Probe(探测)消息,一旦接收到Probe消息(如例7-4输出结果所示),Cisco IOS软件就会自动在该接口上启用DVMRP。无需做任何配置,PIM路由就会通过DVMRP Report(报告)消息宣告给DVMRP邻居。虽然学习自邻居的DVMRP Report消息都会被保存在一个独立的DVMRP路由表中(如例7-5所示),但仍然由PIM来控制Cisco路由器的多播转发决策。虽然Cisco路由器可以正常发送和接收DVMRP Graft(嫁接)消息,但Cisco IOS软件对Prune(剪除)和Probe消息的处理方式使其与完整的DVMRP实现仍存在着一定的差异。

例7-4:路由器正在接口E0上接收来自邻居10.224.1.1的DVMRP Probe(探测)消息。

img439a

例7-5:命令show ip dvmrp route显示了DVMRP路由的相关信息。

img439b

完整的DVMRP实现与基于Cisco IOS软件的DVMRP实现之间的第一个差异是对Probe消息的处理方式。如前所述,Cisco路由器通过检测Probe消息来发现DVMRP邻居。但是,假设该DVMRP邻居位于某个多路接入网络上,而且有多台Cisco路由器也连接在该网络上,如果其中的某台Cisco路由器发起一条Probe消息,那么邻接的Cisco路由器将会错误地认为该消息的发起者是DVMRP路由器,而不是PIM路由器(如图7-2所示)。因而,Cisco路由器仅侦听Probe消息,而不会发起Probe消息。

第二个差异是对Prune消息的处理方式。第5章中曾经谈到,DVMRP路由器需要维护每个下游邻居的状态,如果某个下游邻居发出了Prune消息,那么仅剪除该邻居的状态,DVMRP路由器仍然要通过该接口转发多播流量(除非所有的DVMRP邻居都发送了Prune消息)。这种方式解决的是一个多路接入网络中存在多个下游邻居的应用场合,这样做的目的是防止某个下游邻居发出Prune消息后导致其他邻居也被剪除。

img440a

图7-2 如果顶部的Cisco路由器会生成DVMRP Probe消息,那么底部的Cisco路由器将会误认为该消息的发起者是一个DVMRP邻居,因而Cisco路由器从不生成DVMRP Probe消息


注意: 第5章中曾经提到,PIM-DM使用剪除覆盖机制来解决该问题,而无需维护邻居的状态信息。


但是Cisco路由器并不维护DVMRP邻居的状态,因而为了避免某个下游邻居发出的Prune消息剪除了其他下游邻居所需的多播流量,Cisco路由器将忽略多路接入接口上接收到的DVMRP Prune消息。由于点到点接口只有一个下游邻居,因而可以正常处理该接口上接收到的Prune消息。此外,Cisco路由器可以在连接了DVMRP邻居的多路接入和点到点接口上正常发送Prune消息。

该方法的难点也很明显,如果经多路接入网络连接到上游Cisco路由器的DVMRP路由器无法剪除自己,那么Cisco路由器就会将非期望的多播流量转发到DVMRP域中。解决该难点的方法仍然是隧道。

如图7-3所示,一台Cisco路由器经多路接入网络连接到两台DVMRP路由器上,与每台DVMRP路由器创建了隧道之后,Cisco IOS软件将认为是通过点到点链路(而不是多路接入链路)连接到DVMRP邻居。之后,Cisco路由器就可以正常接收剪除消息。

img440b

图7-3 利用隧道在多路接入网络中创建点到点连接,以便让DVMRP的剪除操作正常运行

例7-6显示了图7-3中Cisco路由器的配置情况。

例7-6:配置图7-3中的Cisco路由器以通过点到点链路接收剪除消息。

img441

与前面的隧道配置相比,本例隧道配置的最大区别在于将隧道模式设置为DVMRP(而不是默认的GRE),而且是在隧道(而不是物理接口)上配置PIM。如果多路接入网络中存在Cisco PIM路由器,那么就要在以太网接口上配置PIM,以便让DVMRP路由器通过隧道进行连接,而PIM路由器则通过以太网进行连接。


注意: 请记住,如果通过DVMRP路由器可达多播源,那么就必须配置静态多播路由,以免RPF检查失败。