取消
显示结果 
搜索替代 
您的意思是: 
cancel
3848
查看次数
8
有帮助
5
评论
ywanxin
Cisco Employee
Cisco Employee
首先要强调一下组播的环境,组播的目的是为多客户端传输数据的时候尽量节约带宽资源,只在有必要的时候才将数据帧复制,所以对于组播来讲,天生就是来对付“一对多”这样的网络环境的。

所以虽然传输模式有很多种,多对一,一对一的模式是用不着组播的,因为这里的一就是指的一个客户端,单播就可以搞定。组播要解决的传输模型是一对多和多对多。

PIM-SM可以很好的解决一对多的组播环境,因为RP和组成员之间是共享树,不管有多少成员加入,在RP那里都是维护一个(*,G)条目,建立的是一棵共享树。但是RP对于源维护的是(S,G)条目,所以一旦源增多,维护的开销会很大。

PIM-SM Bidir 可以很好的解决多对多的组播环境,因为RP与源之间,RP与组成员之间全部用RPT搞定,源有多少,成员有多少,全都不Care,再多也是两棵树。

PIM SSM 可以在一对多的组播环境中更为有效的传输数据,不存在RP,因为全部用SPT搞定,接收者一旦通过目录服务了解到某个源的信息,就能直接从该信源获得数据。

这里强调一下RP,RP的概念针对一个Group,即凡属于这个Group的成员都要知道自己组的RP是谁,RP为所有的组成员建立一棵共享树。但是一般我们在部署的时候只设一个RP地址来担当多个组的RP,实际上是超载使用了,这个实际RP就要为每个组建立一棵RPT。

PS:所谓SPT切换就是最后一跳路由收到第2个组波包的时候开始建立(S,G)条目,到向沿源RPF向上游发送(S,G)加入信息,然后逐台上游路由器将(*,G)建立一个(S,G)条目的这样一个过程。当上游路由器的(S,G)从空到非空,那么触发也会沿源的方向发送(S,G)加入信息。最后所有上游路由器将(S,G)的in接口生产,最后沿RP方向进行(S,G)RP-bit修剪。导致(*,G)条目的out接口为空。从而将前面生成的共享树删除,建立一条SPT。
PIM-DM 推的模式,该模式在设计的时候,前提是假设网络里的每个子网至少有一个(S,G)组播信息的接收者。

PIM-SM 拉的模式 假定组播不被需要,除非用一个显式的加入机制来专门申请,否则不会发送。

有RP做中间人,即使没有有效信源,接收站点也能加入共享树;即使没有接收者,源也能注册成功。

注意:RP本身是每个Group一个!不过有时候几个组用一个RP也没有什么关系,共享树就相应的有几棵,只不过根相同而已。 该组的成员都找自己组的RP,有流量转发到这个组的源都会到RP这里来注册。

PIM-SM用的是单向共享树,即以组播数据只能通过共享树由根到接收者。而双向共享树,可以经过也可以不经过,就近选择。

共享树是用*来代表所有的源,不管哪个信源的数据,要给组成员传输,都要通过这棵共享树(至少一开始是这样),因为一开始RP是信源唯一的联系人,只能先到它那,再通过共享树传输。

在组播实验中,我们用命令 ip igmp join-group 238.1.1.1来仿真客户端主机。可以通过 show ip igmp int loop 0 命令来进行验证。

运行PIM协议的接口会自动启用IGMP协议。

启用PIM协议,不管是DM还是SM,都是在接口下完成的,ip pim dense-mode 或者 sparse-mode,不过能在接口启用的前提是全局支持组播路由,ip multicast-routing
在PIM-DM中,虽然(*,G)条目并不能用来转发组播数据,但是在加入组的时候,各DM路由器还是会建立(*,238.1.1.1)这样的条目。

PIM-DM从发送第一个数据包开始,全网泛洪之后伴随修剪,形成SPT,这个动作完成之后即定格,OIL接口是Forward就为Forward,是Prune就为Prune,任凭你其间有组成员的加入或退出,一律要等到3mins之后的重新修剪再改动。

PIM-DM每隔3mins都要进行一次全网泛洪+修剪的过程,只要源服务器发送数据包这个过程就不会停止。因此泛洪的间隔等于修剪掉的路由的老化时间。这和上一段的意思差不多。

PIM-SM采用拉的模式进行,RP地址一定要指定,因为是共享树的根,共享树并不是PIM-SM赖以转发的路径,只是在一开始用一下,让RP知道该组的组成员的具体位置,一旦源沿共享树到达各组成员,会切换到SPT,那会RP就不承担转发数据的任务了。

理论上而言RP可以放在网络中的任何一个位置,不过要可达,RP的位置也要显示的告知其他PIM路由器,因为他们必须得知道,通告方式有多种,比如在每一台PIM-SM路由器上手动指定 ip pim rp-add,或者通过具体协议,Auto-RP或者BSR
所以说PIM-SM开始是 源到RP最短路径树,RP到组成员共享树,后来RP不介入,均为源和组成员之间的最短路径树。默认情况下,只有第一个组播数据包使用RPT,而后继的全部为SPT。

RP概念针对的是一个Group,比如238.1.1.1,RP所形成的共享树,枝叶衍生到所有属于238.1.1.1这个组的组成员,而之所以容易混淆,是因为我们在部署PIM-SM的时候,往往只指定一个RP,这个RP事实上承担着多个组的RP的角色,针对每一个组都会形成一课共享树。
224.0.0.0/4代表所有的组播地址。

在IOS中使用Ping命令发送组播报文,如果不定义源地址,那么会以所有运行PIM的接口地址为源。如果手动指定以Loopback口为源,除非在该Loopback口启用PIM-SM,否则不会触发向RP发送源注册信息。

所以一旦发现注册有问题,排查接口是否启用PIM-SM是最关键的。

当前的IOS,允许切换至SPT之后,仍保留RPT(而不被修剪),通过全局命令 ip pim spr-threshold infinity实现,但实际上在部署组播的时候没有什么意义。

PIM-SM Bidir

在PIM-SM初始的时候,RP和组成员之间建立的是(*,G)的条目,组成员这会儿还不能沿共享树向上转发流量(事实上就是那注册消息,我一接收者还要给你源传数据不成?),一来不知道给谁,二来路由器对于向上转发的流量还是凭借那个(*,G)条目,势必造成接口既in又out,这过不了RPF检查。

所以只有等源端的数据沿着共享树发下来,才能知道源在哪里,然后从共享树切换为源树,通过(S,G)条目转发。

但事实上PIM-SM之所以从共享树平滑过渡到源树,目的是为了让源通过最短路径到达接收者,而不是让接收者有向上游转发的能力(都说是接收者了),当然我们这里考虑的是数据流量,不是机制中的注册消息。

总的来说,PIM-SM是借用一下共享树,最终的流量转发还是要回归源树,但是双向PIM就不同了,整套机制都不涉及源树,全靠共享树搞定,也就不能期待什么“数据先通过共享树发下来,我就能获取点源的信息”,在这样的机制下,如果没有沿共享树向上游转发的能力,像实验中R4同时源和组的接收者,就这么一个(*,G)条目,这辈子都等不来转发的时候了。

所以双向PIM要实现流量的双向转发,有的接口需要既IN又OUT,同时在每个网段内引入DF选举机制来保证转发。

在PIM-SM中,共享树的路由器"不能向上游转发流量"和不能注册是两把事,你注册了共享树才会有枝节伸到你那里,说明你和RP是有联系的,不能向上转发流量是因为共享树建立的时候相应的(*,G)条目的OIL和IIL已经确定好,你沿共享树向上转发过不了RPF那一关。
注意:启用PIM-SM bidir的配置(DF自动选举,无需手动指定):

1)在所有已启用PIM-SM的路由器上全局加上两条命令:

ip pim bidir-enable ip pim rp-add bidir

2)RP所在接口也要运行PIM-SM模式,否则不会安装下游的组加入信息。

在双向PIM的组播路由条目中,OIL包含有Bidir-Upstream标记的接口代表该接口相对于RP有最短的距离。

PIM SSM协议(Source Specific Multicast)常用来部署域间组播,默认情况下使用232.0.0.0/8的组播地址,路由器识别出是加入在这个范围内的组播地址,均采用SSM的方式来运作。

SSM并不依赖RP,因此纯SSM的环境下不需要配置RP,启用SSM使用全局命令 ip pim ssm default。

PIM SSM 可以在一对多的组播环境中更为有效的传输数据,SSM使得接收者一旦通过目录服务了解到某个源的信息,就能直接从该信源获得数据,不需要RP的介入。
SSM不需要MSDP来发现其他PIM域内的活动信源。一种应用层的外带服务(out-of-web),比如Web服务器,就可以完成信源发现的任务,所以这里也不用RP。

在传统的组播实现中,应用程序必须加入IP组播地址组,因为组播数据要发到这里。
如果具有不同<信源 & 接收者>的两个应用程序使用了相同的组播组,接收者可能同时收到两个应用程序的数据。(如果使用的是(*,G)条目,Group又相同,很可能发生这种情况)

即使接收者这里可以过滤掉不需要的数据,不过不必要的网络流量已经产生了。

SSM可以解决这种地址冲突的问题,因为SSM路由器依据完整的(S,G)条目对数据进行选路,只要信源的地址是在Internet上可路由的公有地址,就可以保证(S,G)条目的唯一性。

在SSM中,距离接收者最近的路由器会收到接收端应用程序加入特定组的请求,接收端应用程序可以使用IGMP V3的Include模式来表示这个意向。

而组播路由器可以直接向信源发送请求,不需要RP的介入,然后形成SPT传输数据。

SSM能够明确指定包含或者排除特定信源,在Include列表中没有列出的信源发出的数据包不会被转发。

末端客户端支持IGMPv3,即可加入到SSM网络中,如果不知道IGMPv3,还有另外3种解决方案:

1.IGMPv3 lite主机信令,即在客户端安装一个程序使之部分支持IGMP v3(这一部分是SSM所需要的)

2.URD 主机信令,依赖URD web服务器以及Cisco路由器在末跳(最接近客户端位置)截获(S,G)信道订阅(同时客户端使用IGMPv2加入组)

3.DNS解析,SSM Mapping建立组播加入组和源的映射关系,不过新版本似乎已经取消这个功能。

用路由器模拟支持一个IGMPv3的客户端主机,可以使用命令:ip igmp static-group 232.1.1.1 source 5.5.5.5,不过这样加入组,是不支持用ping命令进行测试的,即不可能ping通,不过这是目前在路由器环境下仿真加入(S,G)的唯一方法。
Auto-RP & BSR

在大型的组播环境中,静态指定RP并不具备很好的扩展性,Cisco有一种自动通告RP地址的机制成为Auto-RP。Auto-RP使用组播地址224.0.1.39(RP候选者,即C-RP使用)和224.0.1.40(映射代理,这个地址正是在路由表中看到的)

基本流程如下:

1.C-RP将RP地址通告到整个网络
2.映射代理收到C-RP的通告,每60s向域中其他设备发送一次通告。

Auto-RP所用的组播地址224.0.1.39和224.0.1.40相关条目仍使用秘籍模式转发。C-RP和映射代理也是同一台路由器,C-RP和映射代理在大型网络中部署往往设置多个,起到冗余和分担组播注册流量的作用。

这样做有一些矛盾的地方:

1.Auto-RP依赖组播通告,但是组播依赖于RP来形成转发树。

2.PIM-SM路由器基本无法在获得RP之前进行组播转发。

为解决这个问题,思科设置了密集-稀疏模式(ip pim sparse-dense-mode),即在没有获得RP之前,先采用PIM-DM模式完成组播转发。新版本可以用命令 ip pim autorp listener (每台PIM路由器上都要敲)

配置候选RP:

ip pim send-rp-announce loop 0 scope 100 [group-list]

宣告自己的loopback 0的IP地址为RP地址,该通告信息的TTL为100,Group-list可以定义做那些组的RP。配置候选RP的时候要注意,RP地址所在接口一定要运行PIM-SM,否则会报错。映射代理的源地址也需要启用PIM-SM。

配置映射代理(相当于一个中继器):

ip pim send-rp-discovery loop 0 scope 100 (以loopback 0为源地址)

和IGP一样,组播中的测试有时也需要清空一次组播路由表,排除测试命令过程中因组播路由条目尚未老化造成的问题。 (clear ip mroute *)

PIMv2 BSR和Auto-RP作用相同,但是机制上有些差别:

1.PIMv2 BSR使用PIM协议来通告RP,逐跳通告,不需要依赖密集模式。

2.BSR是PIMv2的一个组成部分,而Auto-RP是独立的思科专有协议。

3.BSR不能设置通告范围,但是可以设置边界。

4.BSR可以设置优先级,选择出最优的C-RP和C-BSR

在一个PIM-SM域中,RP可以有多个,服务于不同的Group,但是BSR作为域的核心只能有一个,C-BSR可以来做备份。一个RP可以同时服务于多个Group,但是一个Group只能对应一个RP。一台设备可以同时充当C-RP和C-BSR。

BSR工作流程:

1.从宣称自己为C-BSR的路由器中选举出一个BSR,这个BSR是C-BSR之间自己商量选出来的。

2.凡是宣称自己为C-RP的路由器会发出通告信息,BSR只负责搜集这些信息,然后通告给域内所有的PIM-SM路由器。

3.PIM路由器会先比较这些C-RP的优先级,选低优先级的,如果优先级一样就会通过相同的RP哈希算法选出自己的RP,告诉BSR。

注意参与这个hash算法的数据有RP地址,hash码和Group地址等,单是这三个参数就决定了同属一个Group的PIM路由器选出来的RP应该是一样的。

4.BSR宣布RP的选举结果。

需要注意的是RP是由PIM路由器民主选举出来的,因为他们可能要为不同的Group选出各自的RP。

BSR选举C-RP的价值观 1)较低的优先级 2)较大的hash值 3)较大的RP地址

BSR选举C-BSR的价值观 1)较高的优先级 2)较高的源IP地址

Auto-RP中RP选举不涉及优先级,只比源地址,较高的IP地址优选。

配置C-RP

ip pim rp-candidate loopback 0 [group-list]

group-list 可以为C-RP定义要成为哪些组的RP

配置C-BSR

ip pim bsr-candidate loopback 0 0 (hash掩码长度) 50 (优先级)

C-BSR这里可以通过hash码定义将那些Group分给一个RP

如果多个RP同时工作,建议使用hash掩码,用Group-list则属于静态配置,存在单点失效的可能。

Hash运算的过程并不复杂,根据唯一原则,只要在掩码范围内相同的组地址,一定会分到相同的RP。

比如设hash码为24,那么意味着凡是前24位相同的组都分给同一个RP,即一个RP最多会分配到2^8-2=254个Groups。

MSDP & 任播RP

多个ISP之间实现域间组播,如果使用一个RP,会导致单点故障和RP负载过重,因为最好每个域(AS)使用各自的RP,实现冗余和分担机制:但由于信源,接收者可能注册到不同的RP,因此需要在RP上交换源信息,这种信息是通过MSDP交换的。
另外为实现迅速在不同RP间切换,用任播RP方式通告。而所谓任播RP,就是不同区域使用相同的RP地址,实现冗余。

配置MSDP Peer

ip msdp peer 5.5.5.5 connect-source loop 0

指定对等体的IP地址是5.5.5.5,用自己Loop 0的接口地址作为源IP地址进行TCP的连接。
ip msdp originator-id loop 0

指定以自己的loop 0的接口地址作为RP地址放进 Source-Active Message 中通告给对等体。
show ip msdp peer 2.2.2.2
评论
cpmld-199
Community Member
谢谢楼主分享,学习了。
yssqt5211
Level 1
Level 1
学习了、学习了、
yssqt5211
Level 1
Level 1
学习了、学习了、
yssqt5211
Level 1
Level 1
学习了、学习了、
ad240035
Community Member
自从考完IE后没接触 组播 都忘记怎么玩了,惭愧!
入门指南

使用上面的搜索栏输入关键字、短语或问题,搜索问题的答案。

我们希望您在这里的旅程尽可能顺利,因此这里有一些链接可以帮助您快速熟悉思科社区:









快捷链接