RPF,reverse path forwarding.网络
是组播转发的一个重要基础。只有当RPF检测成功之后,组播流量才能正确的在网络中进行转发。ide
当在baidu或者google里面查询关键字 "CISCO RPF检测机制和工做原理",咱们会轻易获得下面的原理:oop
RPF检查的原理:路由器在单播路由表中查找源地址以肯定数据包到达的接口是否位于返回信源的的反向路径上,若是是则RPF检查成功,若是不是则标记“RPF失败丢弃”并丢弃数据包。简单来讲就是根据去的数据路由表项来检查回来的包,肯定去回在一线上。google
做用:对于多播,能防止环路(多播RPF检查是默认开启且不能关闭的);对于单播,能防止IP欺骗***(须要手工配置RPF检查)spa
就这么简单的一句话,其实我看了不少次都没有真正理解其中的意义在于哪里。cisco也有一个专门的ppt来说解这个问题,可是最后我仍是很模糊。不知所云,可是我记住了一个概念,组播流量来的方向或者接口,在本台路由器上面show ip route x.x.x.x回去的单播路由表必须也要一致,不然的话就是RPF失败,而后把组播流量丢弃。orm
今天从同事那里找了一个实验,作完之后,我发现RPF也不是那么神秘,下面就是实验过程,咱们能够一块儿来验证一下是否是上面我理解的:blog
在该拓扑图中,R1-R4分别按照拓扑图中的标示,配置接口IP地址,而且在每一台路由器上面使能ip multicast-routing,而后在每一个接口下面配置ip pim sparse-mode.接口
R2的F0/0做为rp 候选和bsr 候选。ip
这个时候,整个网络的单播和组播部分就已经齐活了。ci
组播的配置很简单,就几条命令,该拓扑图的配置若是有疑问能够参考附件,这里就不用多的篇幅去说如何配置组播了。
这个时候,在R4上面起一个loopback接口做为模拟链接组播客户端(接收方)的接口,在接口下面使能命令ip igmp join 224.1.1.1.
而后R4的loopback0接口就会向RP发送(*,G)的join报文进行加入.
而后再从R1路由器上面ping 224.1.1.1,来模拟R1做为组播源在发送224.1.1.1的组播数据。
这里能够看到。R1去ping224.1.1.1是通的,由于R1是组播源,会发送(S,G)注册到RP,而后R4是组播客户端,会发(*,G)到rp,而后rp把S回应给R4,最后创建SPT(最短路径树),R4从R1那里得到组播流量。
好了,重点在于RPF是如何工做的。前面看了网上查的原理。这里用实验来证实。
在拓扑图中,从R1到R4实际上是又两条工做路径的。
R2和R3之间,以太口相互链接,串口也相互链接。
整网启用ospf,这个时候根据ospf最短路径优先,确定是走的cost小的,因此从R4到R1,走的都是以太接口。
实验这里就开始了,假如在R3的f1/0接口下面,no ip pim sparse-mode,那么组播流量会从棕色的路径发送给R3,可是在R3上面回去的路由是红色的线路,这个时候RPF检测就失败了,由于接收组播流量的接口和回去的单播路由的接口不是同一个接口。
在R3上面,咱们能够看到:
原本之前在R3上面没有再接口f1/0删除命令ip pim sparse-mode以前:
R3#show ip rpf 1.1.1.1
RPF information for ? (1.1.1.1)
RPF interface: FastEthernet1/0
RPF neighbor: ? (3.1.1.1)
RPF route/mask: 1.1.1.0/24
RPF type: unicast (ospf 1)
RPF recursion count: 0
Doing distance-preferred lookups across tables
当删除之后,再去看看rpf的检测:
R3#show ip rpf 1.1.1.1
RPF information for ? (1.1.1.1) failed, no route exists
缘由在于,由于R3在f1/0移除了pim协议,因此和对端f1/0创建不起来邻居,天然组播流量不会通过以太口进行转发,R3只有从s2/0收到组播流量,可是,在R3上面的路由表因为是ospf会选择最短的路径,因此回去的时候走的是以太口,路径不匹配,丢包...
R3#show ip route 1.1.1.1
Routing entry for 1.1.1.0/24
Known via "ospf 1", distance 110, metric 2, type intra area
Last update from 3.1.1.1 on FastEthernet1/0, 00:04:10 ago
Routing Descriptor Blocks:
* 3.1.1.1, from 3.1.1.1, 00:04:10 ago, via FastEthernet1/0
Route metric is 2, traffic share count is 1
在RPF的源检测标准中,只能有一个输入接口,选举方法以下:
lower AD>longest match>lower metric>higher ip