1、协议无关组播——密集模式(PIM-DM)
组播(多播)路由协议概述
- DVMRP v#(距离矢量多播路由协议)(internet Draft)
- 协议无关组播——密集模式(PIM-DM)(Internet Draft)
- 协议无关组播——稀疏模式(PIM-SM)(RFC2362)
- 开放式组播最短路径优先(MOSPF)(RFC 1584)
- 其他(有核树组播路由协议<CBTv2>)(RFC2189)
前面讲到路由器依靠转发项来转发组播数据包。转发项的生成则是组播路由协议所要完成的任务。组播路由协议有距离矢量组播路由协议(DVMRP)、协议无关组播一密集模式(PIM-DM)、协议无关组播一稀疏模式(PIM-SM)、开放式组播最短路径优先(MOSPF)、有核树组播路由协议(CBT)等多种.这里只讲述目前最成功也是最流行的PIM协议.
(1)协议无关多播——PIM
PIM(Protocol Independent Multicasting)独立于单播协议(使用任意单播路由,依赖单播协议进行RPF检查)
UDP端口号:103
PM路由器组地址为:224.0.0.13
PIM协议分为:PIM-DM(协议无关多播——密集模式)和PIM-SM(协议无关多播——稀疏模式)
PIM(协议无关组播)表示它不依赖于某种具体的IP路由选择协议。它仅仅是利用单播路由表来实现RPF校验功能。因此,它能工作在任何可以产生单播路由表的IP路由协议上,包括静态路由。值得强调的是:协议无关并不是指不需要单播路由协议;相反,组播协议必须有单播路由协议的支撑,因为它无单播路由功能。
PIM协议报文基于UDP协议,其端口号是1 03。PIM还有专门的组播地址224.0.0. 13,表示所有的PIM路由器。
在组播应用环境中大致可分为两类:一类是密集环境。即:在某一个范围内组成员众多。比如:股票交易大厅信息的发布,学校的网上教学等。路由器的几乎每一个接口都有组成员正在接收组播信息。对于这种环境将采用密集模式协议如:PIM一DM(协议无关组播密集模式)来解决。
一类是稀疏环境。即:在某一范围内组成员比较少或分布比较散。路由器只有少数几个接口上有组成员接收数据。比如:小区音/视频点播等。在这种环境里将不再适宜采用密集模式协议,因为这将增加路由器的负担和导致网络拥塞。因此,如果采用稀疏模式的组播协议(比如PIM-SM,协议无关组播一稀疏模式)将带来更大的好处。
接下来,先讲述PIM-DM协议。
(2)PIM-DM
在运行PIM-DM协议的网络中,路由器默认所有接口上都有接收者。当组播数据到达路由器后,路由器立即建立起转发项。转发项的入接口是路由器依据单播到数据源的接口;出接口则包括除入接口外的所有接口。如果数据RPF检查成功,它将根据转发项向所有接口(除入接口外)溢流。
PIM-DM剪枝
如果路由器所有出接口上都没有接收者,它将清空转发项的出接口列表,并向其RPF上游发送剪枝消息,以使组播数据不再流向本路由器。上游路由器收到剪枝消息后,从转发项出接口列表中删除接收到剪枝消息的接口。组播数据就不再从该接口转发出去。
但是这种状况只能维持一段时间。在经过一段时间后,上游路由器重新将该出口添加到转发项出接口列表中。组播数据又能流向先前被剪枝的下游路由器。然后,下游路由器再发起剪枝。周而复始,这个过程被称之为扩散一剪枝
PIM-DM嫁接和嫁接应答
当剪枝期间,路由器需要接收组播数据(比如:收到IGMP加入),怎么办?这时,路由器并不需要等到下一个扩散一剪枝周期,而是立即向RPF上游路由器发送嫁接消息,要求将自己添加到出接口列表中。
上游路由器收到嫁接消息后,立即回送一个嫁接应答,告知下游路由器已收到嫁接消息;然后,上游路由器将收到嫁接消息的接口添加到出接口列表中。组播数据就能够到达希望接收数据的路由器和组成员。
PIM-DM状态维护
PIM DM如何维护转发项而不必总是重复创建过程?PIM DM是依靠组播数据流来维护的。只要路由器收到某个组的组播数据包,路由器就刷新该转发项。路由器如果长时间未收到这个组的组播数据包,将删除该转发项。
断言(assert)机制
在共享网段上,当有多个路由器向网络上发送组播数据包时,共享网段上将收到重复的数据包。怎么办?Assert断言机制能够解决这个问题。当路由器从出接口接收到其它路由器发来的重复组播数据时,路由器将向该出接口发送断言消息。断言消息中带有本路由器的优先级、到源S的路由开销等信息。
网段上的其它路由器收到断言消息后,将对端路由器的优先级、路由开销以及IP地址与自身相比较(先比较优先级,优先级低者获胜;若二者相同,则比较路由开销,开销小者获胜;若二者还相等,则比较IP地址,大者获胜)。若自己失败,则剪枝该接口,不再向该共享网段转发组播数据包。若自己获胜,则发送断言消息,申明组播数据流应该从本出接口转发,其它路由器重复上面的动作。
PIM邻居发现与PIM HELLO消息
路由器周期性的发送Hello消息到所有PIM路由器(224.0.0.13),并借此来发现邻居,建立邻居关系。PIM路由器可以借邻接关系判断自己是否为叶路由器。PIM Hello消息除了用于建立邻接外,它还被用来为共享网段上选择指定路由器(DR)。PIM路由器都被配有优先级。这个优先级被包含在PIM Hello消息中。当路由器收到PIM Hello消息时,先比较自己的优先级。如果自己的优先级高,路由器将默认消息源为DR,自己变成非DR。当优先级相同时,IP地址最大的获胜,被选举为DR。
DR主要应用在SM中,将在SM中由DR负责向上游发起加入/剪枝过程,或是将直连组播源的数据发向组播分发树。这在PIM-SM -节会有讲述。如果路由器是工作在IGMPv1下,DR同时也是IGMP查询器。
PIM-DM配置
三层交换机上的配置
-启动组播进程
[Quidway]multicast routing-enable
- 在接口上启动PIM-DM
[Quidway-VLAN-interface 10]pim dm
pim dm
undo pim dm
pim dm命令用来启动PIM-DM协议,undo pim dm命令用来禁用PIM-DM协议。
pim timer hello seconds
undo pim timer hello
pim timer hello命令用来配置接口发送Hello报文的时间间隔,undo pim timer hello命令用来恢复接口发送Hello报文时间间隔的缺省值。
display pim interface [interface-type interface-number]
显示当前运行PIM接口的简要信息。
display pim routing-table [ { { *g [group-address [ mask { mask-length | mask } ] ] | **rp [rp-address [ mask { mask-length | mask } ] ] } |
{ group-address [ mask { mask-length | mask } ] | source-address [ mask { mask-length | mask} ] } *} | incoming-interface { interface-type interface-num
| interface-name | null} | {dense-mode | sparse-mode} ]*
显示dm或sm组播路由表。
debugging pim dm {all | mrt | timer | warning | { recv | send} {all | assert | graft | graft-ack | join | prune} }
undo debugging pim dm {all | mrt | timer | warning | {recv | send } {all | assert | graft | graft-ack | join | prune}}
打开和关闭PIM-DM的调试开关。
(3)
配置VLAN虚接口
PIM-DM协议是应用层协议,运行在三层接口上
启动组播路由协议
[Quidway]multicast routing-enable
在每个VLAN虚接口上配置PIM-DM
[Quidway-VLAN-interface 10]pim dm
PIM-DM一般运行在接收者比较密集的网络中。在以上网络中,全网都运行PIM-DM组播协议。则在每个三层交换设备上都要配置PIM-DM协议:
首先,配置VLAN虚接口。PIM-DM协议是应用层协议,运行在三层接口上。(具体配置见VLAN路由章节)
其次,启动组播路由协议
[Quidway] multicast routing-enable
最后,在每个VLAN接口视图配置PIM-DM(例如:VLAN虚接口2)
[Quidway-VLAN-interface 2] pim dm
这样,PIM-DM组播网络配置就完成了。记住:组播协议必须依赖单播路由才能工作。单播路由协议可以是OSPF、RIP或者是静态路由等。
2、协议无关组播——稀疏模式(PIM-SM)
(1)PIM-SM基础
PIM-SM转发、加入
前面讲到,PIM-SM适合于接收成员较少的环境。那么它与DM有何显著的区别?先看看PIM-SM转发机制。
转发
当组播数据到达路由器时,路由器也会去创建转发项。转发项的入接口也依据单播路由指向源(请注意这里的源不再一定是数据源S,它是网络中某一个作为核心的路由器RP。所有数据源向组发送数据时都由源DR先将数据发向RP。RP再将数据向网络转发);但出接口列表却为空。因此,路由器并不向网络转发组播数据。为什么会这样?因为,SM默认为其所有接口上并无谁需要组播数据。
加入
但是,当网络中有主机想加入组,接收组数据时怎么办?这时主机先向DR发送IGMP加入。DR接收到IGMP加入后,就在该组转发项出接口列表中添加接收到IGMP加入的接口。
如果DR出接口列表从空变成非空,则向其RP发送加入消息。沿途所有路由器就会将收到加入消息的接口添加到出接口列表中。如果路由器的转发项出接口也从空变为非空,则路由器向RP转发该加入消息。如果路由器的转发项不为空,则路由器只是在出接口列表中添加收到消息的接口。这样路由器就建立起了转发项。组播数据就能够流到加入到组的所有组成员。
由此可以看出,SM转发项的建立是依靠主机和RPF下游显式发送加入消息建立起来的
(2)PIM-SM剪枝
当主机不再希望收到组数据时怎么办?主机就向DR发送IGMP离开消息。DR收到IGMP离开后就将接收到该消息的接口从出接口列表中删除;如果出接口列表从非空变为空,DR将向RP发送剪枝消息。上游路由器收到剪枝消息后,也将收到该消息的接口从出接口列表中删除。当其出接口列表从非空变为空时,上游路由器也向RP发送剪枝消息。这样组播数据就不再流向该分支了。
值得提醒的是:SM转发项是通过加入消息显式建立的。所以,剪枝后的接口不会像DM那样经过一段时间后会恢复。SM要恢复向剪枝接口转发数据必须等待下游或主机发送加入消息。
(3)PIM-SM状态维护
PIM-SM如何维护转发项?在PIM-SM是依靠下游路由器周期性的发送加入消息来维护转发项。当路由器收到加入消息,路由器就刷新转发项和出接口。路由器如果长时间未收到加入消息,将删除该出接口;如果出接口列表为空,路由器就删除该转发项。
(4)PIM-SM注册
前一节讲到,在网络中某个作为核心的路由器RP。所有组播数据都被DR先发向RP。那么,DR是如何将组播数据发向RP的呢?这就依靠注册消息。当源的DR收到组播数据后,将整个IP包封装注册消息中,并以单播的方式将注册消息发向RP。RP收到注册消息后,取出里面的组播数据包。如果RP有该组的转发项并且其出接口列表不为空,则转发该数据包;如果RP没有该转发项或者出接口列表为空,则向源的DR单播注册停止消息。DR收到注册停止消息后,停止向RP发送注册消息。但经过一段时间后DR重新发起一次注册过程。
3、最短路径树切换
组播数据流在网络中分发途径可以用“树’’模型来描述。组播分发树分为最短路径树( Shortest Path Tree)和汇接点树(RPT: Rendezvous Point Tree, 也称共享树)。
最短路径树的树根就在源S。网络中所有组成员都根据到源的单播最短路径获得组播数据。按照这种分发树模型,组成员可以更快的接收到组播数据,同时还能避免在网络中某些点出形成拥塞。PIM DM分发树就是这种模型。
共享树的树根是网络中某一个作核心的路由器RP。源的DR首先将组播数据发到RP。组成员再根据到RP的单播路径获得组播数据。PIM-SM分发树就是这种模型。
为什么PIM-SM要采用这种模型?还得从PIM-SM假设说起:PIM-SM首先假定网络中没有组成员,并不需要组播数据流。因此,主机起初并不知道源是谁(当然知道组,因为这是一个前提,就如知道某个频道是某个电视台电视节目一样)。因此,DR在收到某组的IGMjO入后,只能向RP发起加入消息。通过RP获得组播数据,知道源S后才能直接从源获得组播数据。这个切换过程就是最短路径树切换SPT—Switch。
PIM-SM中还涉及到其根节点RP的选择机制。PIM-SM域肉配置了一个或多个候选自举路由器(Candidate-BSR)。应用一定的规则从中选出自举路由器(BSR)。PIM-SM域中还配置了候选RP路由器(Candidate-RP),这些候选RP将包含了它们地址及可以服务的组播组喜蓓息的包单播至自举路由器。BSR定期生成包括一系列候选RP以及相应的组地址的“自举’’消息。“自举¨消息在整个域中逐跳发送。路由器接收并保存这些“自举¨消息。若DR从直连主机收到了某组的成员关系报告后,如果它没有这个组的路由项,DR将使用一个hash算法将组地址映射至一个可以为该组服务的候选RP。然后DR将朝RP方向逐跳组播“加入/剪枝”消息。若DR从直连主机收到组播数据包,如果它没有这个组的路由项,DR将使用hash算法将组地址映射至一个可以为该组服务的候选RP。然后DR将组播数据封装在注册消息中单播到RP。
SPT切换由最后一跳路由器DR发起。发生切换的规则很多,最常用的就是流量统计:当流量超过一定阈值时,DR发起从RPT到SPT的切换。
DR首先向其RPT上游发送带有SPT标志的加入消息。上游路由器收到SPT加入后也向源方向发送SPT加入。如果本路由器到源的出接口与到RP的出接口不是同一接口,则路由器还向RP发送带有RPT标志的剪枝消息。
这样路由器将不再从RP而是直接从源S获取组播数据。当然DR也能发起逆过程,当流量低于该阈值时从SPT切回RPT。
4、PIM-SM配置
PIM-SM基本配置
启动组播进程
[Quidway]multicast routing-enable
在接口上启动PIM-SM
[Quidway-VLAN-interface 10]pim sm
pim sm
undo pim sm
pim sm命令用来启动PIM-SM协议,undo pim sm命令用来禁用PIM-SM协议。
pim bsr-boundary
undo pim bsr-boundary
pim bsr-boundary命令用来将以太网交换机的接口配置为PIM域边界,undo pim bsr-boundary命令用来删除配置的PIM域边界。
c-bsr vlan-interface vlan-id hash-mask-length [priority]
undo c-bsr
c-bsr命令用来将以太网交换机配置成为C-BSR (Candidate Bootstrap Router),undo c-bsr命令用来删除C-BSR。
pim timer hello seconds
undo pim timer hello
pim timer hello命令用来配置接口发送Hello报文的时间间隔,undo pim timer hello命令用来恢复接口发送Hello报文时间间隔的缺省值。
c-rp vlan-interface vlan-id [accept-group-policy acl-number]
undo c-rp vlan_interface Vlan-id
c-rp命令用来将以太网交换机配置成为C-RP (Candidate Rendezvous Point),undo c-rp命令用来取消以太网交换机为C-RP。
spt-switch-threshold {traffic-rate | infinity} [accept-group-policy acl_number]
undo spt-switch-threshold {traffic-rate | infinity} [accept-group-policy acl_number]
spt-switch-threshold命令用来配置从共享树切换到源最短路径树的闽值,undo spt-switch-threshold命令用来恢复配置从共享树切换到源最短路径树阈值的缺省值。
display pim bsr-info 显示当前BSR的信息。
display pim interface [interface-type interface-number] 显示当前运行PIM接口的简要信息。
display pim routing-table [ { { *g [group-address [mask {mask-length | mask} ] ] | **rp [rp-address [mask {mask-length | mask} ] ] } | { group-address [mask{mask-length | mask} ] | source-address [mask {mask-length | mask} ] } * } | incoming-interface {interface-type interface-num | interface-name | null} | {dense-mode | sparse-mode} ] *
显示dm或sm组播路由表。
display pim neighbor [interface interface-type interface-number]
显示路由器发现的PIM邻居。
display pim rp-info [group-address]
显示指定组的RP。不带参数则显示所有组的RP 。
5、配置方案
配置VLAN虚接口
PIM-SM协议是应用层协议,运行在三层接口上
启动组播路由协议
[Quidway]multicast routing-enable
在每个VLAN虚接口上配置PIM-SM
[Quidway-VLAN-interface 10]pim sm
在整个PIM-SM域中要配置候选BSR和候选RP
[Quidway-pim]c-bsr vlan-interface 10 24 2
[Quidway-pim]c-rp vlan-interface 10
PIM-SM一般运行在接收者比较稀少的网络中。在以上网络中,全网都运行PIM-SM组播协议。则在每个三层交换设备上都要配置PIM-SM协议:
首先,配置VLAN虚接口。PIM-SM协议是应用层协议,运行在三层接口上。(体配置见VLAN路由章节)