18 CCNP讲解笔记-PIM 2

更新时间:2024-06-12 03:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

PIM 2

研究三层架构中的第二层架构

如何让路由器来转发组播流量,此时涉及到组播路由选择协议(PIM)。

一、Multicast Forwarding

先研究路由器在收到组播流量,转发组播流量和转发单播流量的一个转发原则。这个原则正好是相反的。

举例:

比如单播使用的是OSPF协议:

在一个AS内部署了一个OSPF域,所有路由器建立起OSPF邻居,传递LSA生成路 由表,达到全网可达。

a.每台路由器形成的路由表,是基于什么的表项? 答:是一张基于目的网段可达性的表项。

我们可以这样理解,在单播路由选择中,路由器收到报文之后,我虽然查看的是三 层报头,但我重点查看的是三层报头中的目的IP。

组播:

正好与单播相反,一台路由器收到一个组播流量,在我关心通过哪个接口把这个报 文发走之前,我更关心这个报文是从哪里发送来的。 为什么会这样呢?举个例子:

有个组播组信源Server,它不停的发送组播流量,连接着路由器R1和R2。如图, 假定R1和R2已经运行了正确的组播路由选择协议。 Server开始发送组播流量,正常发应该是同时发送给R1和R2,并且报文是相同的。 此时如果R1和R2都把报文转发给R3。

R3收到R1和R2过来的组播流量,会把这两股流量都发给下游PC群。如果是单播 的话,这样发送是没有问题的。但是,如果是组播报文就不行了吧。这产生了重复报文。

重复报文,会导致组播传递出现很多问题。

这也就是说,在这种情况下,我一台路由器对于一个组播组的Server而言,我能接 收你的组播流量,但并不是我通过每个接口收到你的流量,都要帮你转发。 总结:

在运行组播路由选择协议的时候,路由器收到了组播流量,更加关注报文从哪

里来,目的就是为了解决重复报文问题。

注意:

组播路由器对于一个组播组信源,你只有通过一个接口接收该Server报文的时 候我可以帮你转发下去,但这个接口该怎么判断呢?我怎么知道对于这个Server, 我通过哪个接口收到你的报文,该帮你转发下去呢?

这是需要一套原则的,这个原则如下。 解决方法:

非常重要的原则 RPF Checking(RPF校验):

一台路由器,收到一个组播报文,我必须要先进行RPF校验来确定我哪个接口收 到你的流量的时候,这个流量我是可以帮你转发的。而我哪个接口收到你的流量, 在我接收的一瞬间,我就要把你的流量给丢弃。

1. RPF Checking目的:

为一台路由器确定对于一个组播组Server信源的RPF接口。这个RPF接口就是, 当我选出了这个接口之后,只有通过这个接口我收到该Server发送来的组播流量的 时候,我可以帮你转发下去。而对于其他非RPF接口,这些接口接收到流量之后就直 接丢弃。

RPF Checking不但解决重复报文,还解决了组播报文传递环路问题。

2.RPF选举原则:

一台路由器收到了一个组播组信源发送的组播流量(目的IP肯定是组播组地址, 源地址是该信源发送组播报文接口的地址)。当路由器收到了该组播流量,会提取三 层报头源IP地址,并且在其单播路由表内查找是否拥有去往信源所在网段的单播路 由条目。

如果没有,则该路由器对于该组播组信源没有RPF接口,报文直接在接口被丢弃。 如果该路由器单播路由表内拥有去往信源所在网段的单播路由,则查看该路由对应 的出战接口和接收到该组播报文的接口是否为同一个接口,如果是,则转发该报文, 如果不是则丢弃该报文。

问题:

一台路由器只有一个RPF接口这个说法对吗? 答:

错的。一台路由器对于一台Server而言,我的RPF接口只有一个。而发 送组播组流量的Server不止有一台吧,他们的IP地址肯定不一样。所以基 于这一点,我一台路由器不会只有一个RPF接口。但对于一个组播组而言, 我有且只有一个RPF接口。

扩展知识:

在拥有冗余和负载均衡的环境下,RPF接口该怎样选举? 举例1:

连接方式如图,Source地址为1.1.1.1。R1与R2通过以太网和帧中继相连。 此时全网运行OSPF协议。

问题:对于该组播组Server而言,R2的RPF接口应该是哪个? 答:右边的接口

如果此时全网运行RIPv2协议

问题:对于该组播组Server而言,R2的RPF接口应该是哪个?

此时R2去往这个1.1.1.1网段的路由条目的度量值,两边都为1,负载均衡。 此时不可能这两个接口都为RPF接口。因为对于一个组播Server而言,路由 器有且只有一个RPF接口。

答:如果是负载均衡的情况,我们RPF接口比较的是出站接口(指的是连接FR 和交换的那俩接口)的IP地址,IP地址越大,该接口越有可能成为RPF 接口。

举例2:

描述,此时有两个组播信源S1和S2,假如这两台Server发送的是相同的组播流量, 去往相同的组播组地址。

这时,我有这么一个需求,就是在R2上,S1发送的流量从右边过来,S2发送的流 量从左边过来。我希望基于不同的Server实现负载均衡。

这该怎么实现?

通过这样一个技术来实现 组播静态路由:

命令:全局模式ip mroute x.x.x.x 255.255.255.0 interface //配置命令与单播静态路由配置命令相似 但是,单播静态路由和组播静态路由有本质的区别。 单播静态路由:

让路由器转发报文时使用。 组播静态路由:

创建组播路由条目之后,不是用来帮助转发组播报文的。而是用来确定一台 路由器对于一个组播组信源的RPF接口。就这一个作用。

如上图,该怎么通过组播静态路由改选RPF接口。 命令:

R2(config)# ip mroute 1.1.1.2 255.255.255.255 s0/0

//当我收到了来自于1.1.1.2组播组信源发来的组播流量时,我的RPF 接口是S0/0接口。

组播静态路由带来的优势:

让多个不同的组播组信源发送组播流量达到这台路由器的时候,可以通过负 载均衡的方式来实现转发。

组播路由选择协议:PIM

在一个路由选择域内使用PIM协议,在部署PIM后,路由器转发组播报文,使用的结构是树形结构。

当路由器使用PIM协议的时候,转发组播流量所使用的不同的两种树形结构。 a.Source-rooted(源树):又叫做Shortest path trees(最短路径树,简称SPTs) b.Shared trees(共享树):又叫做Readezvous point trees(集合点树,RP)

这两种树形结构对应着就是PIM的两种模式 a.Dense mode protocols(密集模式):该模式对应的是Source-rooted(源树) b.Sparse mode protocols(稀疏模式):该模式对应的是Shared trees(共享树)

先看Shortest-Path Trees:

该树想要生成的条件,所有路由器启用PIM的Dense mode。然后路由器之间会基于

Dense mode建立邻居。建完邻居之后,所有路由器就已经收敛完成了。 在这里注意:

单播路由选择协议和组播路由选择协议有着本质区别:

单播路由选择协议:路由器之间建完邻居是要传递路由的。

组播路由选择协议:建好邻居之后,路由表项此时是空的,这个组播路由表项不是通 过这个组播协议来传路由。

路由只有在数据层面收到组播组流量的时候,才会生成相应的组

播路由表项。

如图,最短路径树与信源有没有什么关联?

答: 在运行源树的环境中,一个源对应一棵树,这个数就是从源到达目的地最短 的树。这相当于源树的优势。 而源树的劣势:

源树的组播路由表项类似于(S,G)的表项,如图所示(1.1.1.1,224.1.1.1)。 这个表项仅仅是一个标题,在这个表项下面还会包含我对于这个组播组 Server的RPF接口,以及我收到流量之后通过哪些接口把流量转发下去。 这个一个表项大概占300多Kb,下面的一个RPF接口和转发接口又各占150 Byte。

所以源树的缺陷就是路由器对于每个源都对应一棵树,当源越来越多的时 候,源树就越来越多,而每个源树用占用一定内存,导致路由器开销会越来 越大。浪费资源。

由于源树的劣势大于优势,所以当今社会上源树用的很少。

取代源树的技术,就是Shared Trees(共享树,也称之为RPT): RP的概念:

RP我们称之为集合点,这个集合点我们可以理解为一个组播路由选择域内 的某台路由器的某个接口,这个RP需要管理员人为定义的。可以定义为任何 一台路由器。

如图,此时如果D是RP,会有什么现象?

组播组信源开始发送流量:

如果此时是源树,第一跳路由器A收到组播组流量,我会第一个考虑把报文转

发给接收者。

如果此时是共享树,第一跳路由器A收到组播组流量后,我不是第一时间往接收 者转发,而是把信源发送过来的流量全部转发到RP上,在RP上所有组播流量集个 和,在由RP把组播流量下放给下游的路由器,直到最终的接收者。

这样做得好处是什么?

对于下游路由器C和E而言,我收到的组播流量是Source 1还是Source 2发 来的,对于C和E路由器来说不重要,因为不管你是哪个源给我发的,都是由RP 给我转发过来的。

此时C和E路由器在组播路由表项中,不再需要(S,G)表项。因为C和E根 本不会关心Source在哪里。

所以好处节约在由RP到接收者那块网络所有路由器上,他们收到组播流量的时 候,路由表项中只会形成(*,G)。 * = All Sources G = Group (*,G)用来表示我不关心源在哪里,只关心流量发给哪个组播组。

在一个组播域内使用共享树,那这个共享树是哪到哪?

答:共享树是从RP到达接收者,而信源达到RP依旧是源树!!!

共享树优势:

就是节省了RP下游所有路由器路由表项资源 共享树劣势:

从信源发送流量到达接收者,使用的不再是最优路径,使用的是次优路径。会 导致高延迟,高抖动。 怎样解决这劣势呢?

PIM协议有方式解决这个问题,当我们使用共享树的时候,只有第一个组播报 文会实现这种次优路径转发。

而当我们实现了树形结构切换之后,从第二份组播报文开始,我们的流量依据 会使用最短路径去转发。

至于怎么实现,一会去谈。

PIM(Protocol Independent Multicast)协议

当前有两个版本,v1和v2,当前使用最多的是PIMv2版本。该版本是一个业界标准协议。这个协议分为两种模式,Sparse Mode和Dense Mode。

而当今社会上使用最多的是第三种模式,Sparse-Dense-Mode。

1.PIM Neighbor Discovery

PIM是四层协议,协议号为 13 。

注意:路由器之间运行了PIM,在我们能够传递组播报文之前,先要关注PIM邻接关 系是否正确建立。这个邻接关系就是通过Hello报文来建立的。 Hello报文也是组播发送,目标组播地址为224.0.0.13。

Hello: 30s Hold: 3.5 X 30s

运行PIM的路由器想要建立邻接关系,必须是直连建立邻居。但是,我们的连接有两 种类型,一种是point-to-point,一种是MA网络。

PIM协议可能是学习OSPF协议,在MA网段建立邻接需要选举DR(指定路由器)。 DR的选举:

a.该网段内所有接口的PIM的优先级,优先级越高越优,缺省接口优先级都为1 b.看接口的IP地址,越大越优 DR的作用:

在IGMPv2中有查询者的概念,而IGMPv1中没有查询者。IGMPv1在一个MA网段内 如果选不出查询者,这个时候就由PIM的DR来充当查询者。

由于IGMPv2有查询者,所以对于PIM协议的DR这个概念来说,只适用于IGMPv1。

注意:

A. PIM协议下,只有DR,没有BDR。相对于OSPF协议来说,一旦DR选举出来,该 网络DR的角色不会随着新加入的路由器而会改变。

相对于PIM协议而言,DR是时时选举的。任何时候一台路由器连接到这个网段, 只要把接口PIM的优先级改高,我都可以抢占DR的角色。

B. 在OSPF协议中,DR是接口概念

而在PIM协议中,DR也是一个接口概念。每个MA网段都要选举出一个DR。

C. 在OSPF协议中,如果一个接口优先级为0,则表示放弃选举DR的能力 在PIM协议中,如果一个接口优先级为0,仍然可以参与DR的选举

注意:

PIM建立邻居后,是不会传递路由的。只有当收到数据层面的组播报文的时候,我才会形成路由表项。 问题:

既然PIM不传递路由,那运行PIM协议有什么用?有个重要原则跟大家提一下 答:

运行PIM后,路由器接口的工作改变

a.对于First hop Router的接收组播流量接口,如果该接口没有启用PIM,则 无论收到什么组播报文,都会本地拆包后将报文丢弃。 b.对于 List hop Router连接接收者所在网段的接口,如果该接口没有启用PIM, 则路由器不会周期性的发送IGMP Query报文。

c.对于中间路由器彼此互连的物理接口,如果没有启用PIM,这些路由器不会通 过任何接口转发任何组播报文。

下面对于Dense Mode和Sparse Mode在运作的时候注意的一些细节 1.Dense Mode

在这个Dense Mode下被开发的PIM时,初期我们的开发者这样定义该模式。他会假象 什么情况下需要使用该模式?

在整个路由选择域内,95%以上的PC都是组播组流量的接收者时,这个时候使用Dense

Mode。在这种情况下,我们的Dense Mode是基于一个Push model(推模型)来运作的。

先不提Push model,先把Dense Mode和Push model以及分发树来做一个对应。

此时看一下Push model是一个怎样的工作原理?

这里涉及到一个初始泛洪(Initial Flooding),如图,此时在所有的路由器上部署了PIM-DM之后,等邻接关系建立完毕,协议收敛完成。Source开始发送组播流量,这个组播流量到达第一跳路由器,第一跳路由器会通过所有的接口把这个流量泛洪下去。所有受到该泛洪流量的路由器呢,会通过其他接口在把该流量依次的泛洪下去。这个就是初始泛洪,也就是Push原理。

Push就是,只要组播组信源开始发送组播组流量,我不管下游有没有接收者,我都一股脑的把该流量给泼下去。

这种无谓的把流量泼下去,不知道接收者在哪。这样做仅仅浪费带宽。

对于该情况,Dense Mode该怎么补救呢?

这个补救方式如图,如果一台路由器判断它的下游,没有组播组的成员,我会通过接收组播流量的RPF接口,反向发送一个Prune Messages报文。

该报文的目的就是,该路由器告诉上游转发组播流量的路由器,本地没有接收者,请你不要在通过这个接口给我发送组播流量。

修剪最后的结果就是,只有接收者的那条链路会传递组播组报文。

注意:

一个接口收到Prune报文之后,会停止转发组播流量,但我不会永远停止发送组播组流量。因为如果永久停止发送组播组流量,不符合DM的设计原理。 DM的设计原理就是:全网95%以上都是组播组成员,谁又能知道当该接口被阻塞之后,多久之后,该邻居又会连接组播组成员呢。

重点:当一个接口收到Prune报文之后,我会在该接口开启一个计时器,该计时器缺省值180s。也就是一个接收收到Prune报文后,在该180s内该接口不会转发任何的组播流

量。但180s计时器一旦过期,立即通过这个接口在发送组播流量。以此循环。 PIM-DM的Push model工作总结:

初始情况下,只要PIM邻接关系建立完毕,只要信源发送组播流量。每台路由器收到之后,都会默认通过所有其他启用PIM的接口泛洪该组播流量。而此时会导致,大量的链路带宽被浪费。

此时,如果一台路由器发现自己下游并没有连接组播组成员,该路由器会通过RPF接口反向发送Prune报文,邻居路由器只要通过接口收到Prune报文,会开启一个1180s的倒计时计时器。

在这个计时器到期之前,该接口无法在转发组播流量。当该计时器过期,我会在通过这个接口发送组播组流量。

这就是每3分钟一次的泛洪与修剪过程。

问题:

路由器是怎么发现下游有没有组播组成员? 答:

通过IGMP协议,只要收到Report报文就是由组播组成员。

PIM-DM实验举例:

如图:R3是组播源,发送去往224.1.1.1组播组的流量。R2为接收者,也就是PC。R1、

R4、R5、R6为组播路由器。全网运行PIM-DM。

配置:

第一步:如图所示,先把各个接口配置上IP地址,起个Loopback接口。

第二步:做一个单播IGP路由协议,如果不做,其他路由器RPF校验失败。也就是在组播路 由选择协议之前,单播路由选择协议已经收敛完成。

(此时做IGP,R5要不要把35网段宣告进来?一定要,如果没宣告进来,R1及后 面的路由器的IGP表里没有35网段,就没法访问源,访问不了源地址,RPF校 验就失败。

此时R4要不要把24网段宣告进IGP?这就没有必要了,因为Source发送组播 组流量给目的地,Source不需要知道目的地在哪吧。因为只要我向这个组播地 址发,我的接收者只要加入这个组播组,接收者就能收到该组播组的流量。)

所以24网段可宣告可不宣告,35网段必须宣告进IGP。 全网运行OSPF协议

第三步:启用PIM协议 命令:

R(config)#ip multicast-routing distributed //该红色单词在三层交

换机上开启组播路由功能时才需要添加,路由器上不会添加该单词 R(config)#int f0/1

R(config-if)#ip pim dense-mode

Neighbor:直连PIM邻居的接口IP地址 Interface:本地连接邻居的接口

Uptime:邻接关系从建立开始计时,已经多久了

Expires:超时时间,也就是Hold time,默认3.5 X 30s Ver:PIM版本 Prio:优先级

Mode:描述邻居的角色,S代表状态可刷新

状态可刷新:对于一些早期设备,它启用PIM后,选举DR角色只看接口IP地址, 不识别优先级。如果该设备识别优先级,就打S,不识别优先级呢就打N。

第四步:R3为组播组信源,先把他模拟为PC 命令:

R3(config)#no ip routing

R3(config)#ip default-gateway 35.1.1.5 R2(config)#no ip routing R2(config)#int f0/1

R2(config-if)#ip igmp join-group 224.1.1.1

此时,由于没有产生组播流量,所以组播路由表是空的 但是R4组播路由表中有表项

因为,R4此时作为List hop Router,我已经收到了R2给我发送的IGMP的组播组成员资格通告。

这个表项只是做准备,收到该表项的组播流量,我就会发。但该表项目前不会转发任何流量,因为他是(*,G)

第五步:产生组播流量

收到一个回复,Ping组播一次只有一个包。如果不通,仍然是个“.”。

先看第一个表项(*,224.1.1.1):按理说,对于Dense Mode应该只会产生(S,G) 表项,怎么会有(*,G)? 这是组播通用原则第一条:只要一台路由器在我的组播路由表中拥有(S,G)的表项, 我会对应该表项自动生成一个(*,G)的表项。

这个表项不用于转发任何组播报文,它仅仅告知我们,哪些出接口启用了PIM。

而真正转发流量的是(35.1.1.3, 224.1.1.1)条目,这个条目后面的flags:T。 T的含义是SPT-bit set(SPT比特置位),show ip mroute 上面去找即可。代表这个 表项的存在已经建立好源树。

在看R1的mroute表项:

此时只关注(S,G)表项。

此时可以看到Out going接口下,多了一个接口F0/0。而该接口的状态为Prune。 后面第一个计时器表示通过这个接口启用PIM多长时间了, 第二个计时器是Prune后等待的最大时间180s,倒计时。

注意:单播组播的区别

单播想要通信,源目必须互通,而组播想要通信,80%以上,只要信源能通接收者就可 以了。接收者能否通信源,没有任何关系。

Ping一个组播包,Request报文是以组播方式发送出去的,但是Reply是以单播回复 的。

而对于组播而言,只要关心接收者在哪即可,至于源地址在哪,接收者不关心也行。所以一个组播配置可能正确,但就是ping不通。这是正常的。因为组播发过去,接收者不知道Source在哪,所以没有回包,即不能ping通。

PIM Sparse Mode

运行PIM SM,整个域内的分发树分为两段,从组播组信源到RP是源树,从RP到接收者

是共享树。

设计这个模式的设计家,在设计这个模式之前假想,这个模式试用于这么一个场合。就是在该环境中,只有5%不到的PC是组播组流量的接收者。 对于这样一个环境,我们将使用Pull model(拉模型)。 SM - Pull - RPT + SPT

1.Pull model

如图,先不考虑发送方,先考虑接收方。 如果此时接收方已经存在了,接收方会发送IGMP 的Report报文,这个报文会发送给List hop Router。该路由器收到该报文之后,在IGMP表项中会形成一个组表项。此时如果在该图中所有的路由器上都启用了PIM-SM。这List hop Router,当生成了IGMP的组表项之后,会立即的发送(*,G)Join,这个Join就表明了List hop Router知道下游有PC想要加入某个组播组。

此时,组播组信源还没有发送组播组流量,该路由器并不知道信源在哪里。所以说呢,我就要发送(*,G)Join来告知我们到达RP的沿途所有路由器,List hop Router下游已经有接收者了。这个(*,G)Join也会沿着RPT树一直发向RP。

RP收到(*,G)Join,就会记录该组播组域内已经有某个成员想要加入某个组播组。 此时,我们会发现,信源并没有发送任何组播组流量,我们的一棵RPT树就已经形成了。

注意:RPT树不需要依赖组播组信源,只要依赖于组播组的接收者即可形成。

下面来考虑一下信源,此时信源开始发送组播组流量

流量会先到达First hop Router,该路由器收到该流量后,不会直接发给接收者。而是借助RP帮我确认这么一点,就是域内有没有该组播组的成员。 怎么确认呢?

就是First hop Router会立即的将这个源发送的第一份组播报文封装成一个单播的注册包[(S,G)Register的unicast包],把该包发送给RP。 这个包是由一个组播包重新封装成的单播包,举例:

该图中红色部分是VoIP数据包。

First hop Router收到这个红色包之后,该路由器把这个红色包作为一个完整的PIM的载荷,然后封装进PIM包中去。也就是在该包前面封装IP和LLC报头,后面封装FCS校验和(也就是黑色部分)。

相当于把原始的组播帧,当做PIM载荷封装成一个单播的注册帧。把注册帧发给RP,相当于First hop Router在问RP,请问这个域内有没有人想要接收发往这个组播组内的流量。 如果有接收成员,RP收到这个注册帧之后,会把这个包重新的拆封装成我们的组播包,也就是把黑色部分拆掉。按照RPT树发送给接收者。

在发下去的同时,RP还需要做向First hop Router发送(S,G)Join。告知First hop Router请你不要再把该组播报文封装成单播发非我,请你直接把报文以源树的形式,使用组播给我传递过来。

但此时有问题了:

此时,First hop Router收到了(S,G)Join,它就会即给RP发送单播的注册包,又会给RP发送组播报文。此时重复报文出现了!!!解决方法: RP会给First hop Router发送(S,G)Register-stop(停止注册)报文,也是unicast发送的。也就是请你不要在给我发送单播的注册包了。

至此,真实的组播流量路径就是如图,红色标准的那条。但这条是最优的吗? 答:明显不是,最优的应该是下面那条路径。

当流量通过源树和共享树发给接收者的时候,一定要经过List hop Router。该路由器只要收到了一份组播报文之后,该路由器就会实现树形结构的切换。

这个切换就是,把我当前所处的共享树切换成一个路径最短的源树。而这个切换,取决于一个阈值(threshold value) ,这个阈值缺省值就是0 kbps。就是当你收到了组播流量速率高于0kbps的时候,我就要进行切换了。只要产生数据,就不会低于这个值,也就是说,一有流量产生就会进行共享树到源树的切换。 切换过程:

这个时候,List hop Router收到了组播组信源发送的流量,该路由器就知道组播组信源在哪里,此时该路由器就会使用(S,G)Join沿途一跳一跳的把这个报文发给First hop Router。以建立从First hop Router到达List hop Router的最短路径树。

沿途报文会发给即去往First hop Router又去往RP的分叉点的路由器。也就是如图

该路由器比较尴尬,它在正常的RPT路径中,应该把报文发给RP,而在切换后的SPT中,应该把报文发给左边那台路由器。

此时,它会干两件事情:

1.把(S,G)Join报文继续沿途发给左边路由器。

2.它会发送一个(S,G)RP-bit Prune(RP置为的Prune)报文给RP,告知RP不要 在通过共享树给我发送流量了。

这个切换会导致,一棵新的最短路径树建立完毕,而共享树消失。 这就是PIM-SM的工作流程。

PIM-SM实验举例:

如图:R3是组播源,发送去往224.1.1.1组播组的流量。R2为接收者,也就是PC。R1、R4、R5、R6为组播路由器。全网运行PIM-SM。

配置命令,就是把PIM-DM改为PIM-SM即可,但此时需要注意,在SM模式下需要定义一

个RP。RP就是某台路由器的某个接口。

此时我们假定让R1的Loopback 0作为RP。

RP在定义的时候,有两大种方式 a.静态RP(通过命令人为指定RP)

注意:该命令一定要在所有启用PIM的路由器上都指定,包括RP本身路由器。就是告 知域内所有路由器,哪台路由器的哪个接口是RP。

问题:此时R1是否需要把RP的地址(Loopback 0接口IP地址),宣告进IGP呢? 答:

必须要,因为如果你不宣告进去,第一点就是此时不知道(*,G)Join不 知道发给谁。第二点是(S,G)Register也不知道发给谁。

所以想要配置PIM-SM需要注意两点:

1.参与PIM-SM协议的所有路由器上,必须都要手工指定RP 2.被指定为RP的接口IP地址必须宣告进IGP中。 命令:

R(config)#ip pim rp-address 1.1.1.1 //人为指定RP R(config)#ip multicast-routing R(config-if)#ip pim sparse-mode

该Show命令显示所有组播组的RP都是1.1.1.1且是人为Static配置的。

此时,虽然Source没产生流量,但在RP及下游路由器都会产生(*,G)

R1上也会有(*,G),同时flags:S表示是Sparse-Mode

R6上就没有(*,G)的表项了。因为该设备不再是RP下游路由器了。

接下来R3开始发送Ping包:

通了

R5、R1肯定会形成(S,G)的表项,因为在RP及上游设备都是源树。此时着重看R4

此时R4也形成了(S,G)表项,表明已经完成了共享树到源树的切换。 那这个切换是在哪台设备上切换的?

答:

R4上,切换者肯定是List hop Router,我们在List hop Router上只要收到了 沿RPT树发下来的第一份组播报文时候,就会自动实现切换。

对于该拓扑而言,你切不切换没什么区别吧。所以此时不建议切换,那怎么让它不切换呢?

答:修改它的阈值就可以

命令:该命令一定是做在切换者上

后面可以跟数字,表示阀值多少kbps,也可以跟infinity(无限),表示永不切换

R4#clear ip igmp group R4#clear ip mroute *

此时,R4上只有(*,G)的表项

此时,R1虽然还有(*,G),但是出接口只有S1/0(连接R4的接口)。前面配置Dense Mode的时候,这个表项还有连接R6的接口。此时却没有了,为什么? 答:

这也正好体现了拉模型的原则,因为R6下游没有RPT树,没有接收者。这也证明 了使用Sparse Mode,我只会把组播流量发给真正拥有接收者的网段。

静态RP的缺点:

没有冗余性(R1的Loopback 0接口Down了,整个PIM-SM域就瘫了),如果已经 静态配置了RP,你在配置一个RP,原来的RP直接被顶掉。

b.动态RP:

(1)Auto-RP 该方式最重点,Cisco私有

能实现RP冗余备份性,Auto-RP在部署的时候,是基于C/S模型的协议。C 代表CRP(candidate RP,RP候选者),S代表MA(映射代理)。

简单理解CRP就是一群想到班长的人,MA就是班主任。一群想当班长的人 谁能当上班长,班主任说了算。

注意:当我们把一台路由器的接口定义为CRP之后,该路由器会周期性的发 送Announce(通告)报文,这个报文将发给224.0.1.39。但是有个 问题,就是其他路由器此时不会识别该组播组地址,因为其他路由器 上只有224.0.1.40(只要路由器启用了PIM,就会自动生成该组播组 地址)。

为了解决这问题,此时隆重的欢迎班主任出场。当一台路由器起为 了MA,它就会即监听224.0.1.40,也会监听224.0.1.39。也就是说, 能够监听224.0.1.39这个组播地址的只有MA。

当MA收到所有CRP的Announce报文时,会比较谁能成为RP,比较 方式,比IP地址,谁的IP地址大,谁就成为RP。

此时,MA本身知道谁是RP了,但CRP们还不知道。所以MA会发送 Discovery报文,目的为224.0.1.40。告诉所有路由器RP是谁。 至此,RP选举完成!!!

但有个问题,MA要不要备份?

也要备份,比较IP地址,越大越优

配置:

在该拓扑真实环境中配置Auto-RP,使用PIM-SM能不能搞的定? 答:

肯定不能,因为CRP发送的Announce报文是以组播形式发送,而此 时我们启用的PIM-SM,那么接收Announce报文的路由器需要把该报文 封装成Register报文给RP,而此时没有RP。因为发送Announce报文 就是为了选RP的,此时RP又没有。所以此时Announce报文传递不了。 Discovery报文也发送不了

在纯PIM-SM模式中,使用Auto-RP是根本无法实现的。

解决方法:

使用Auto-RP原则:

a.整网迁移使用Sparse-Dense-Mode

Sparse-Dense-Mode工作方式是,当一个接口启用了该模式, 该接口收到组播报文,我会优先考虑Sparse Mode。如果找不到 RP,发现使用Sparse Mode失败,又为了让流量通,我则使用Dense Mode来转发报文。

使用Sparse-Dense-Mode,Announce报文就可以发送了。当第 一跳路由器收到该报文后,发现没有RP,我则会直接使用Dense

Mode把该报文给泼下去。Discovery报文也一样。只有Discovery 报文传递完之后。我们RP的位置知道了,身份知道了。接下来 大家在转发组播流量的时候,我们在迁移到使用Sparse Mode。

b.依旧使用纯Sparse-Mode,但是所有路由器要启用ip pim auto-rp listener

这是一个非常诡异的PIM的高级机制,该机制在路由器上启用 之后,可以实现当一台路由器收到Announce报文或Discovery 报文的时候,我单就对这两个组播组的流量,使用Dense Mode 转发。

注意:建议使用第一种方式部署Auto-RP 实验举例:

第一步,定义Auto-RP

仍然让R1的Loopback 0成为Auto-RP

R1(config)#ip pim send-rp-announce loopback 0 scope 5 该命令说明,描述R1以loopback 0为CRP,并且Announce报文可以发5 跳,其实只要保证这个跳数能让MA收到就行。

让R6成为MA

R6(config)#ip pim send-rp-discovery loopback 0 scope 10

a.使用ip pim autorp listener解决Auto-RP发Announce报文和 Discovery报文问题 命令:

R(config)#ip pim autorp listener //当我收到去往224.0.1.39 和224.0.1.40的组播组流量时,我使用Dense Mode处理。 b.使用Sparse-Dense-Mode解决Auto-RP发Announce报文和Discovery 报文问题 命令:

R(config)#int f0/0

R(config-if)#ip pim sparse-dense-mode 所有路由器的物理接口都得改为该模式

注意:Auto-RP的优先级高于静态RP,也就是当配置了Auto-RP和静态RP 时,优选Auto-RP。 如果想优选静态RP,方法:

命令:

R(config)#ip pim rp-address 1.1.1.1 override //此时静态RP的 优先级才能够优于任何的动态RP。

(2)BSR(叫自举路由器)

公有标准,仿Cisco的Auto-RP而得来的。这俩机制差不错。 原理:

跟Auto-RP基本完全一致,也定义了两种角色。也是基于C/S模型。 C代表RPC(candidate),而S代表BSRC。RPC就是Auto-RP的CRP,BSRC 就是Auto-RP的MA。

配置命令: 指定RPC

R(config)#ip pim rp-candidate loopback 0 priority 10

这个优先级是BSR选举的一个重要指标,值越低该设备成为RP的几率越高。

在BSR中选举RP,先看优先级,在比较IP地址。都是越小越优!!!

指定BSRC

这三种选举方式,对于Cisco路由器的优先级 Auto-RP > BSR > Static RP

PIM DR

在IGMPv1中充当查询者,在IGMPv2中无用

在PIM DM中,DR无用,在PIM SM中,DR负负责发送(*,G)的Join报文,以及(S,G)的Register报文。 DR选举:

先比较优先级,在比较接口IP地址,越大越优!

本文来源:https://www.bwwdw.com/article/bip6.html

Top