MSR系列路由器
RPF检测失败导致组播不可达的经验案例
一、组网:
实际组网如下图,三台MSR路由器启用OSPF,保证全网连通。Router A与RouterB分别连接组播源和组播接收PC,希望PC能够正常接收组播数据。
二、问题描述:
如上图组网后,保证路由状态正常,发现并没有出现想要的结果:接收组播的PC并不能收到组播源的组播报文。
三、过程分析:
三台路由器上的简略配置和单播路由表如下:
Router A 配置
sysname H3C
#
interface Serial3/0
link-protocol ppp
ip address 10.0.0.1 255.0.0.0
ospf cost 1
#
interface GigabitEthernet0/0
port link-mode route
ip address 20.0.0.1 255.0.0.0
pim dm
#
interface GigabitEthernet0/1
port link-mode route
ip address 1.0.0.1 255.0.0.0
pim dm
#
ospf 1
area 0.0.0.0
network 1.0.0.0 0.0.0.255
network 20.0.0.0 0.0.0.255
network 10.0.0.0 0.0.0.255
#
<H3C>dis ip rou
Routing Tables: Public
Destinations : 11 Routes : 12
Destination/Mask Proto Pre Cost NextHop Interface
1.0.0.0/8 Direct 0 0 1.0.0.1 GE0/1
1.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
2.0.0.0/8 OSPF 10 2 10.0.0.2 S3/0
10.0.0.0/8 Direct 0 0 10.0.0.1 S3/0
10.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
10.0.0.2/32 Direct 0 0 10.0.0.2 S3/0
20.0.0.0/8 Direct 0 0 20.0.0.1 GE0/0
20.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
30.0.0.0/8 OSPF 10 2 20.0.0.3 GE0/0
OSPF 10 2 10.0.0.2 S3/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
Router B 配置
sysname H3C
#
interface Ethernet0/0
port link-mode route
ip address 30.0.0.2 255.0.0.0
pim dm
#
interface Ethernet0/1
port link-mode route
ip address 2.0.0.2 255.0.0.0
igmp enable
#
interface Serial3/0
fe1 clock master
link-protocol ppp
ip address 10.0.0.2 255.0.0.0
ospf cost 1
#
ospf 1
import-route direct
area 0.0.0.0
network 2.0.0.0 0.0.0.255
network 10.0.0.0 0.0.0.255
network 30.0.0.0 0.0.0.255
#
<H3C>dis ip rou
Routing Tables: Public
Destinations : 11 Routes : 12
Destination/Mask Proto Pre Cost NextHop Interface
1.0.0.0/8 OSPF 10 2 10.0.0.1 S3/0
2.0.0.0/8 Direct 0 0 2.0.0.2 Eth0/1
2.0.0.2/32 Direct 0 0 127.0.0.1 InLoop0
10.0.0.0/8 Direct 0 0 10.0.0.2 S3/0
10.0.0.1/32 Direct 0 0 10.0.0.1 S3/0
10.0.0.2/32 Direct 0 0 127.0.0.1 InLoop0
20.0.0.0/8 OSPF 10 2 30.0.0.3 Eth0/0
OSPF 10 2 10.0.0.1 S3/0
30.0.0.0/8 Direct 0 0 30.0.0.2 Eth0/0
30.0.0.2/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
Router C 配置
sysname H3C
#
interface Ethernet0/0
port link-mode route
ip address 30.0.0.3 255.0.0.0
pim dm
#
interface Ethernet0/1
port link-mode route
ip address 20.0.0.3 255.0.0.0
pim dm
#
interface NULL0
#
ospf 1
area 0.0.0.0
network 30.0.0.0 0.0.0.255
network 20.0.0.0 0.0.0.255
#
<H3C>dis ip rou
Routing Tables: Public
Destinations : 8 Routes : 8
Destination/Mask Proto Pre Cost NextHop Interface
1.0.0.0/8 OSPF 10 2 20.0.0.1 Eth0/1
2.0.0.0/8 OSPF 10 2 30.0.0.2 Eth0/0
20.0.0.0/8 Direct 0 0 20.0.0.3 Eth0/1
20.0.0.3/32 Direct 0 0 127.0.0.1 InLoop0
30.0.0.0/8 Direct 0 0 30.0.0.3 Eth0/0
30.0.0.3/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
为了解决上述的问题,首先要确定单播路由器是正确的。首先从组播接收PC上Ping组播源的单播地址,测试结果如下:
证明设备间的连通性没有问题,观察设备上的路由表也会发现路由学习正常。检查组播源和组播接收PC的配置,发现配置没有错误,组播数据已经从组播源正常发出。最后检查各个设备上的组播路由表:
Router A上的组播路由表如下:
<H3C>dis multicast routing-table
Multicast routing table
Total 1 entry
00001. (1.0.0.10, 230.0.0.1)
Uptime: 03:37:14
Upstream Interface: GigabitEthernet0/1
List of 1 downstream interface
1: GigabitEthernet0/0
Router C上的组播路由表如下:
<H3C>dis multicast routing-table
Multicast routing table
Total 1 entry
00001. (1.0.0.10, 230.0.0.1)
Uptime: 00:10:57
Upstream Interface: Ethernet0/1
List of 1 downstream interface
1: Ethernet0/0
而Router B上组播路由表为空,如果Router B上没有组播路由表,则组播接收PC是不可能接收到组播报文的。为了看个究竟,我们打开设备的debug ip packet开关,得到如下信息:
*Aug 7 14:54:34:917 2007 H3C IPFWD/7/debug_case:
Receiving, interface = Ethernet0/0, version = 4, headlen = 20, tos = 0,
pktlen = 284, pktid = 35482, offset = 0, ttl = 6, protocol = 17,
checksum = 16940, s = 1.0.0.10, d = 230.0.0.1
prompt: Receiving IP packet from Ethernet0/0
*Aug 7 14:54:35:167 2007 H3C IPFWD/7/debug_case:
Receiving, interface = Ethernet0/0, version = 4, headlen = 20, tos = 0,
pktlen = 284, pktid = 35483, offset = 0, ttl = 6, protocol = 17,
checksum = 16939, s = 1.0.0.10, d = 230.0.0.1
prompt: Receiving IP packet from Ethernet0/0
*Aug 7 14:54:35:417 2007 H3C IPFWD/7/debug_case:
Receiving, interface = Ethernet0/0, version = 4, headlen = 20, tos = 0,
pktlen = 284, pktid = 35484, offset = 0, ttl = 6, protocol = 17,
checksum = 16938, s = 1.0.0.10, d = 230.0.0.1
prompt: Receiving IP packet from Ethernet0/0
证明在Router B上确实接收到了组播数据,但是路由器并没有转发,而是将数据包丢弃了。什么情况会导致这种现象呢?不难联想到如果组播(PIM DM)的RPF检查失败会导致组播报文丢弃。一个组播路由器就有可能从两个或多个不同的接口上收到相同的多播报文,如何丢掉多余的组播报文呢?组播路由器通过进行RPF检查来解决这个问题。假设组播路由器从接口i收到了一个源地址为S,目的地址为G的组播报文。组播路由器首先利用源地址S来查询单播路由转发表,看看如果自己收到了一个目的地址为S的单播报文,那么该报文应该从哪个端口送出。如果查询得到的结果为端口i,那么就认为组播报文(S,G)通过了RPF检查;否则就认为没有通过RPF检查,一般情况下没有通过RPF检查的报文应该加以丢弃。
为了证实这样的猜测,仔细观察上述的单播和组播路由表我们不难发现,单播和组播的数据实际转发路径如下图所示:
因为要求单播和组播转发使用相同的转发路径,但由于在Router A的S3/0口和Router B的S3/0口并没有使能PIM DM,这时候组播报文并不能通过RPF检测,被Router B丢弃。
四、解决方法:
为了解决问题,必须使组播报文通过RPF检查。可以在Router A和Router B的S3/0接口上启用PIM DM;当然也可以修改单播路由,使得单播路径和组播路径一致,具体作法为删除Router A和Router B的S3/0接口上OSPF cost 1配置,这样重新计算得到的路由器表会使得单播报文按照Source-àRouter A-àRouter C-àRouter B-àReceiver的路径转发。
解决PIM DM的组播问题可以从检查组播工具,检查单播路由和检查RPF三个方面考虑,最后一点通常是隐藏比较深且较难发现的,但往往也是问题的根本原因。
该案例暂时没有网友评论
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作