2、MOSPF(Multicast OSPF)

开放式组播最短路径优先(MOSPF)由FRC1584为OSPF组播的扩展,是OSPFV2单播路由协议的一个扩展。

组播扩展 OSPF(MOSPF)在原 OSPF 第二版本的基础上作了增强使之支持 IP 组播路由。这种改进具有向后兼容性,当转发一般的(单播)IP 数据通信量时,具有组播能力的路由器可以和无组播能力 OSPF 路由器互操作。

MOSPF 是通过在 OSPF 链接状态通告中包含组播信息而工作的。一个 MOSPF 路由器学到哪个局域网(LAN)上的哪个组播组在活动。MOSPF 为每对源/组建立一个分配树并且为发送到组的活动源确定一个树。树的状态被缓存,并且当链接状态发生变化或高速缓存器超时的情况,必须重新确定树。

MOSPF 提供了通过因特网路由器在两个 IP 网络之间转发组播数据包的能力。MOSPF 转发一个组播数据包是建立在该数据包的源和目的地址两方面的基础上。OSPF 链路状态数据库提供了一套关于自治系统(AS)拓朴的完整描述。通过加入新的链路状态通告类型,即组成员(LSA),在该数据库中可以查到所有组播组成员的位置。如此,再通过建立以数据包源为根的最短路径树,可以计算出组播数据包的路径。树上所有不包含组播的分支都被剪除。当接收到第一个数据包时,也就初步形成了剪除过的最短路径树。最短路径的计算结果被缓存起来以供具有相同源和终端的后续数据包使用。

MOSPF 被用于单个自治系统内部。当需要在整个因特网上支持 IP 组播时,MOSPF 就得与用于自治系统间的组播路由协议如 DVMRP 共同使用。

运行 MOSPF 的路由器只能工作于使用 MOSPF 的 internet 网络中,但可以与非组播 OSPF 路由器混合使用。当转发一般的(单播)IP 数据库通信量时,两种类型的路由器可以交互操作。在 MOSPF 中,与基本的 OSPF 协议中一样,数据包(组播或单播)被原样发送 ,当它们经过自治系统时,不再进行封装或解装。

组成员关系LSA携带标准的LSA头部,其类型号为6,只在MOSPF指定路由器才会发送组成员关系LSA。

clip_image002

链路状态ID(link state ID):携带被宣告多播组的地址

宣告路由器(Advertising Router):是多路访问网络中MOSPF指定路由器的路由器ID,因为只有指定路由器才能产生类型6的LSA

顶点类型(vertex type):定义了目的地是一个路由器(类型=1),还是一个转接的网络(类型=2),如果发起路由器正在运行的某些应用程序需要其成为多播组成员,那么就指定类型1,转接网络指的是发起路由器直连的网络,只有穿越该网络,多播包才能到达所连接的组成员。

顶点ID(Vertex ID):发起路由器的路由器ID

经扩展、支持MOSPF的路由器LSA(类型1)的格式,与OSPF基本相同,只是Rtype项目中有一个W比特由区域间多播转发路由器和AS间的多播转发路由器进行设置,以便向区域中的其它MOSPF路由器指示其为万能多播转发路由器。

clip_image003

l bit B ― B 即指边界。将路由器设置为一个区域边界路由器。这些路由器在 OSPF 区域内转发单播数据流量。

l bit E ― E 即指外部。将路由器设置为一个 AS 边界路由器。这些路由器在自治系统间转发单播数据流量。

l bit V ― V 即指虚拟。将路由器设置为活动虚拟链路的终端,而将区域当作 Transit 区域使用。

l bit W ― 将路由器设置为 Wild-Card 组播接收端。这些路由器接收所有组播数据报,而不管目的地是什么。在某些时候,区域内组播转发者和 AS 内组播转发者就是 Wild-Card 组播接收端。

MOSPF 数据包格式与 OSPF 第二版相同,但在 OSPF Hello 数据包、Database Description 数据包以及所有链路状态广告中另加了 Option 字段。该新选项指出了路由器或网络的组播容量。但所有非组播路由器忽略该新选项。

clip_image005

l T-bit ― 描述路由器的 TOS 容量。

l E-bit ― 由于外部链路广告没有被扩散到 OSPF 子区域,E-bit 确保所有 Stub 区域的会员在区域配置上达成一致。

l MC-bit ― 描述 OSPF 路由选择域的不同部分的组播容量。

3、CBT(Core-Based-Trees)

CBT(Core-Based-Trees)核心树,是和种与协议无关的、稀疏模式的共享树。DVNRP与MOSPF有两个共同的局限:

l 都是密集模式的协议,不能在稀疏拓扑中有很好的扩展性。当网络中组员的数量相对总的主机数要少很多,且组员分布于整个网络中,DVMRP和MOSPF都会消耗大量的网络资源才能到达组员。很多资源消耗在用于计算的开销和为每一个以多播源为根的树保持状态。

l 两个均受限于以单播的路由协议来判断多播树——DVMRP是基于RIP的协议,而MOSP是基于OSPF的。

CBT可以用于下层任何路由协议,而不是为了多播加一个新的协议,从而减少了开销。CBT树根植于一个核心CBT路由器,而非源网络,这个核心可以被放置在网络中的任何位置,许多个组的树都可以根植在一个核心上,以使协议更适于稀疏多播拓扑。

目前CBT有3个版本,CBTv2在RFC2189中描述。CBTv2代替CBTv1,CBTv3正处于提议状态。这3个版本的CBT都试验性的,没有一个被广泛使用。CBTv2和CBTv3都不能与CBTv1版本兼容。

CBT使用了以下9种类型消息。

l JOIN_REQUEST

l JOIN_ACK

l ECHO_REQUEST

l ECHO_REPLY

l QUIT_NOTIFICATION

l FLUSH_TREE

l Candidate Core Advertisement

l Bootstrap

l HELLO

CBT消息以IP头封装,它的协议是7,包传送的目的地址为224.0.0.15(除了在单播特殊情况下),TTL设为1。如下图为CBT消息的报头。

消息报头

clip_image006

版本(Version):指定CBG版本号

类型(type):消息类型,具体如下表所示

Type

Message

0

HELLO

1

JOIN_REQUEST

2

JOIN_ACK

3

QUIT_NOTIFICATION

4

ECHO_REQUEST

5

ECHO_REPLY

6

FLUSH_TREE

7

Bootstrap

8

Candidate Core Advertisement

地址长度(address length):定义了属地海战上包含的单播或多播的地址长度,以字节为单位

检验和(chechsum):采用标准算法

HELLO消息

HELLO消息用于选举多播网络中的指定路由器,它们也由DR每隔60s发送一次,以保持存活。

clip_image007

优先权(preference):取值为0~255,1~254表示由发起路由器变为DR的合格程序,优先权值越低就越合格。值为0表示这个HELLO消息由DR产生。

可选项(option type):定义了可选项值中的可选类型。BR产生的HELLO消息的可选类型为0.

选项长度(option length):可选项值的长度,以字节计

可选项值(option value):可变长,用于承载可选项值,由BR产生的HELLO消息的可选项为0。

JOIN_REQUEST消息类型

当路由器想要嫁接到CBT树中时发送的信息。

clip_image009

组地址(group address):要加入的组的多播地址

目标路由器(target router):这个组的核心路由器地址

发起路由器(originating router):为产生这个消息的路由器的地址

可选项类型(option type)、可选长度(option length)、可选项值(option value)与HELLO消息中定义相同。

JOIN_ACK消息

核心路由器或嫁接多播树的路由器以JOIN_ACK消息来响应JOIN_REQUEST消息。

clip_image010

组播地址(group address):加入组的多播地址

目标路由器(target router):为JOIN_ACK发向的那个路由器的地址

可选项类型(option type)、可选长度(option length)、可选项值(option value)与HELLO消息中定义相同。

QUIT_NOTIFICATION消息

此消息是向父路由器发送的,以请求从一个特定的多播树剪除。

clip_image011

组地址(group address):退出的组的多播地址

发起子路由器(originating child router):发起这个消息的路由器的地址

ECHO_REQUEST消息

子路由器有义务维护父路由器的链路状态,子路由器每隔60s发送ECHO_REQUEST消息来完成这个任务。

clip_image012

ECHO_REPLY消息

父路由器以ECHO_REPLY消息来响应子路由器的ECHO_REQUEST消息

clip_image013

发起父路由器(originating parent router):消息发起的地下

组地下(group address):一个或多个列出地址的项父路由器为子路由器转发这些组的包。

FLUSH_TREE消息

当路由器失去与父路由器连接,它向下游子路由器发送这个消息,子路由器收到FLUSH_TREE消息后,将清除所有列在这个消息中的多播组的相关信息。

clip_image015

与支持SPT的协议相比,从路由器创建的组播状态的数量来看,CBT的最大优点是效率更高。在具有大量源和组的网络中能把组状态最小化为O(G)。然而,在网络延迟存在时,这种高效率导致对SPT的支持不够。在CBTV2中维护的简单(*,G)状态不能很好处理非成员发送或域间边界路由器。

4、PIM协议(Protocol Independent Multicast)

DVMRP同单播的距离向量协议有共同的特征,那就是很容易实现——所需要的工作仅仅是把它启动,但其简单性将带很的开销,除了在小型的、宽带的网络中有较密集的组员的情况下,这个协议都存在扩展性的问题。

MOSFP把链路状态的优点带入了路由表中,不过代价是设计复杂性的增加.MOSPF基于源树使用协议不适于稀疏的拓扑,由于这个局限,许多网络设计者不愿意在MOSPF较为复杂的拓扑需求上花费很多。

MOSFP是一个单播协议的扩展,所以不需要单独的单播协议,它不能独立于OSFP运行。

CBT与协议真正无关,它通过查询单播的路由表找到单播的目的地址,而不关心什么单播协议来维护这个路由表,CBT在稀疏拓扑中可以扩展,因为它还不成熟,所以实际应用对它的兴趣很有限。

PIMv2消息格式

PIMV2消息封装在IP包头中,协议号103,除了某些情况下用单播的消息外,PIMV2的IP目的地址是保留的多播地址224.0.0.13,TTL值设为1。

PIMV1也很常见,这个版本的IP协议号为2,使其成为IGMP协议的一个子集。版本1使用多播地址224.0.0.2。

PIMV2消息头

所有PIM消息均有标准的包头,如下图所示:

clip_image016

版本号(version):定义版本号

类型(type):定义了包头后的PIM消息类型,如下表所示:

Type

Message

0

Hello

1

Register (used in PIM-SM only)

2

Register-Stop (used in PIM-SM only)

3

Join/Prune

4

Bootstrap (used in PIM-SM only)

5

Assert

6

Graft (used in PIM-DM only)

7

Graft-Ack (used in PIM-DM only)

8

Candidate-RP-Advertisement (used in PIM-SM only)

校验和(chechsum):一个标准IP风格的检验和

保留(reserved):全为0,接收时忽略

HELLO消息格式

用于对邻居的发现和邻居的生存保持,这个消息默认为每30秒发送一个。
clip_image018

可选类型(option type):定义了可选项值中的可选项类型,当前,只有可选项类型1,它定义可选项类型为保持时间,2~16是保留的。

可选项长度(option length):定义了可选项值的长度,以字节为单位。当可选项值为保持时间(可选类型为1)时,可选值长度为2

可选项值(option value):可变长度的项,能装下可选项类型中定义的任何值。保持时间(可选项类型=1,可选长度=2)为路由器在宣布邻居无效前,等待从它发出的HELLO消息的时间,保持时间为HELLO间隔的3.5倍。

下图为采集到的HELLO报文。

clip_image020

Register(注册)消息格式

这个消息只用于PIM-SM,是从源DR向RP用单播发送的一个消息,它承载着从源发出的初始多播包。就是说,在还没有建立从源DR到RP的SPT之前,用Register消息把多播流量从源传送到RP。

clip_image021

校验和(checksum):在register消息里,只计算消息头,而不包括数据部分

B为边界比特,如果消息发起者为一个直连着源的DR,那么这个比特设为0,如果源为PIM多播边界路由器(PMBR),则这个比特设为1。

N为空注册比特。DR在注册抑制计时器超时前查找RP时设置这个比特为1。

多播数据包为来自源的一个多播包,它通过register消息传到RP。

Register Stop(注册终止)消息格式

这个消息用于RP响应DR产生的Register消息,此消息在两种情况下使用

RP通过SPT收到多播,而不再需要收到register消息封装的多播消息

没有直连的,或连到SPT、RPT上的组员等待RP转发这个包。

clip_image022

经编码的多播地址(encoded group address):是多播组的IP地址,对于这个地址,接收者要停止发送register消息

经编码的单播地址(encoded unicast source address):为多播源的IP地址,这顶也可以被(*,G)路由条目定义为全0,作为通配的源地址。

JOIN/PRUNE(加入/剪除)消息格式

这个消息将向上游RP或多播源发送,用于加入或退出RPT或SPT,这个消息由多播地址列表组成。对于每一个多播地址,有一个或多个源地址列表,这些列表共同定义了要加入和退出的(S,G)与(*,G)路由条目。

clip_image023

经编码的单播上游邻居地址(encoded unicast upstream neighbor address):是RPF或上游邻居的地址,这个消息将发送到这个地址上。

多播组数目(number of groups)定义了这个消息里面包含的多播组的数目。

经编码的多播组地址(encoded multicast groups address):定义了多播组的IP地址。

加入的多播组的数目(number of joined sources):定义了在这个多播组地址中列出的“经编码的加入多播源地址”的数目。

剪除的多播源的数目(number of pruned sources):定义了这个多播地址中列出的“经编码的剪除的多播源地址”的数目。

经编码的加入多播地址(encoded joined source address):定义(S,G)对的源地址或(*,G)对的通配置地址。(*,*,RP)三元组的两个通配符也可在此定义。除了源地址外,这一项中还规定了3个标识。

S为稀疏标识比特,这个比特设为1表示PIM-SM,用于与版本1的兼容

W为通配(WC)比特。这个比特设为1,则经编码的加入多播源地址代表(*,G)或(*,*,RP)路由条目中的通配符。当它设为0时,经编码的加入多播源地址代表(S,G)路由条目中的源地址,当向RP发送了JOIN消息,W比特必须设为1.

R为RPT比特,当这个比特设为1时,将向RP发送一个JOIN消息。当这个比特为0地,向多播源发送JOIN消息。

经编码的剪除的多播源地址(encoded pruned source address):定义了被剪除的多播源地址。这个编码与经编码的加入多播源地址相同,S、W、R比特同样与加入的地址一样,适用于被剪除的地址。

下图为采集到的报文。

clip_image025

Bootstrap(引导)消息格式

它由自举路由器(BSR)每60秒产生一个,扩散到PIM-SM域中,以保证一个组的所有路由器判断的RP相同,这个消息包含了一个或多个多播地址的列表,对于每一个组地址,都有一个候选RP及它们的优先权的列表,这个列表为这个组的RP集。收到消息的路由器用同样的算法从C-CP列表中算出这个组的RP。这个算法保证了PIM域中的路由器能得出相同的RP地址。

clip_image026

分段标签(fragment tag):用于bootstrap消息必须分为多个部分的情况。这个标签为一个随机产生的数,相同消息的片段分配同一个标签。

HASH掩码长度(hash mask length):用于hash算法的掩码的长度。

BSR优先权(BSR Priority):取值0~255,它定义了发出这个消息的BSR的优先权。有最高优先树的C-BSR会成为BSR。

经编码的单播BSR地址(encoded unicast BSR address):这个域的BSR的地址

RP计数(RP count):定义了对一个多播组列出的C-RP的总数,也就是RP集的大小。对RP集大小的描述很重要。因为如果bootstrap消息是分段的,一个分段丢失了,那么在PIM域中对RP的判断可能会不一致,因此,如果收到的RP集中的RP数目与RP数目不符,则整个RP集会被丢弃。

分段RP计数(fragment RP count):定义了对于某个组在这个分段中的C-RP的数目。

经编码的单播RP地址(encoded unicast RP address):为C-RP的IP地址。

RP保持时间(RPm holdtime):一个BSR在把一个C-RP从RP集中删除前等待C-RP发出Candidate-RP-Advertisement消息的时间,这个保持时间为150s。

RP优先权(PRm priority):取值0~255,用于选择RP的算法中,最高的优先权为0。

Assert(声明)消息格式

这个消息用于在多路访问网络中选举一个指定的转发路由器,PIM路由器在它的输出接口上收到多播包之后,会认定该数据链路层层上连接了另一台正在转发该多播组流量的路由器,因而该PIM路由器会发送一条Assert消息,以便让共享该多路接入网络的其它路由器能确定由谁负责转发该多播组的流量。

clip_image027

已编码的组地址(encoded group address):这个包的多播IP地址,这个地址触发了Assert消息。

经编码的单播源地址(encoded unicast source address):触发Assert消息的多播包的源地址。

度量优先组(metric preference):分配给提供到源的路由的单播路由器的优先权值。这个值与管理距离的使用相同,在比较不同路由协议发现的路由时提供一致的量度。

下图为采集到的报文。

clip_image029

Graft(嫁接)消息

PIM-DM路由器向上游邻居发出PIMV2 Graft消息,请求再次加入到以剪除的树中。其消息格式与JOIN/PRUNE消息格式类型相似,类型为6。

下图为采集到的报文。

clip_image031

Graft(嫁接确认)消息

PIM-DM路由器向下游邻居发送PIMv2 graft-ack消息,以响应其Graft消息。其消息格式与JOIN/PRUNE消息格式类型相似,类型为为7。

下图为采集到的报文。

clip_image033

Candidate-RP-Advertisement(候选RP宣告)消息格式

候选RP向BSR周期性单播发送Candidate-RP-Advertisement消息。BSR用于这个消息中的信息来建立RP集,这个RP集通过bootstrap消息域中的有的PIM-SM路由器来对外宣告。

clip_image034

前缀数目(prefix count):定义了包括在这个消息中的多播组地址的数目,如果发起消息的是一台多播域中所有多播组C-RP,则前缀数目为0

优先权(priority):取值0~255,定义了发起C-RP的优先权,这个值被用于选择RP的算法中,优先权与其值的大小相反:0为最高优先权,255为最低。

保持时间(holdtime):这个消息有效的时间

经编码的单播RP地址(encoded unicast RP address):为C-RP的地址,这个地址是路由器一个接口的IP地址,这个地址通常为loopback地址。

经编码的组地址(encoded group address):定义一个或多个多播组的地址,对于这个多播组,消息发起者为一个候选RP。

下图为采集到的报文。

5、PIM-DM(Protocol Independent Multicast Dense Mode)

PIM-DM使用了5个PIMv2消息。

l Hello

l Join/Prune

l Graft

l Graft-Ack

l Assert

在 PIM-DM 域中,运行 PIM-DM 协议的路由器周期性的发送 Hello 消息,发现邻接的 PIM 路由器,进行叶子网络、叶子路由器的判断,并且负责在多路访问网络中选举指定路由器(DR)。

PIM-DM 协议使用下面的假设:当组播源开始发送组播数据时,域内所有的网络节点都需要接收数据,因此采用“扩散-剪枝”的方式进行组播数据包的转发。组播源开始发送数据时,沿途路由器向除组播源对应的 RPF 接口之外的所有接口转发组播数据包。这样,PIM-DM 域中所有网络节点都会收到这些组播数据包。为了完成组播转发,沿途的路由器需要为组 G 和源 S 创建相应的组播路由项 (S, G)。 (S, G) 路由项包括组播源地址、组播组地址、入接口、出接口列表、定时器和标志等。

如果网络中某区域没有组播组成员,该区域内的路由器会发送剪枝消息,将通往该区域的转发接口剪枝,并且建立剪枝状态。剪枝状态对应着超时定时器。当定时器超时时,剪枝状态又重新变为转发状态,组播数据得以再次沿着这些分支流下。另外,剪枝状态包含组播源和组播组的信息。当剪枝区域内出现了组播组成员时,为了减少反应时间,协议不必等待上游剪枝状态超时,而是主动向上游发送嫁接报文,以使剪枝状态变为转发状态。

Prune消息的覆盖

如下图所示,运行PIM-DM的网络环境中,一台单独的路由器有多个多播下游邻居,上游路由器Mercury,把组内的多播包扩散到通过LAN连接的三台路由器上,copper路由器的输出接口表为空,于是向mercury发送一条剪除消息,但是sliver有一连接的组员,于是希望收到多播报文。

clip_image036

Mercury根据hello消息明确知道它的下游有两个邻居。但hello消息中并没有描述任何路由相关性信息,因而当copper发送prune消息时,mercury不知道是否要剪除该LAN接口。

PIM-DM利用剪除覆盖进程解决这个问题,copper向mercury发送了一条prune消息,但mercury的地址也被编码在该消息中,携带该消息的IP包被发送到ALL PIM ROUTERS地址224.0.0.13.当mercury接收到该prune消息后,并不立即剪除该接口,而是设置一个3秒定时器,与此同时,sliver也接收到了该prune消息,看到消息中所要剪除的多播组是其希望继续接收的多播流量的多播组,而且该消息已经被发送给正在转发多播流量的其上游邻居。

clip_image038

因而sliver向mercury发送了一条join消息。Sliver就覆盖了由copper发送的prune消息,只要mercury在3秒定时器到期前收到一条join消息,就不会中断多播流量。

PIM-DM指派路由器

PIM-DM会在多路接入网络中选举一台指派路由器,需要注意的是,PIM-DM协议本身不需DR,只是由于IGMPV1没有查询进程,为了管理IGMP查询,IGMP需要依赖该路由协议来选举DR。

DR选举进程很简单,每台PIM-DM路由器每隔30秒就发送一条PIMV2 hello消息或一个PIMV1 query消息,以进行邻居发现,在多路接入网络上,IP地址最大的PIM-DM路由器将成为DR,其他的路由器则监控DR发出的hello包,如果在105秒内都没有收到该hello包,则认为DR已失效,从而选举一个新的DR。

PIM转发路由器选举

如下图所示,在运行PIM-DM的网络环境中,mercury和copper都有一条去往多播源172.16.1.1的路由,且都有一个下行接口去住多播组239.70.49.238的成员。如果两台路由器都转发相同的多播流量到相同的网络上,那么网络效率会非常低下。

clip_image040

为了防止这种情况的发生,PIM路由器将在共享网络上选择一台转发路由器。由于PIM没有自己的路由协议,因而需要利用Assert(声明)消息来选择转发路由器。

clip_image042

当路由器在出站接口上接收到一个多播包时,会向网络发送一条Assert消息,消息中包含了多播源的地址和多播组的地址、去往多播源的单播路由器的度量值以及单播路由协议用来发现该路由的度量优先值(管理距离)。这两台路由器会比较这些信息,根据下面的规则来确定转发路由器。

l 所有宣告的度量优先值最低的路由器为转发路由器,如果这些路由器是通过不同的单播路由协议来发现这些去往多播源的路由,那么这些路由器仅宣告不同的度量优先值。

l 如果度量优先值相等,那么所宣告的度量值最低的路由器为转发路由器。也就是说,最靠近多播源的路由器就成为转发路由器。

l 如果度量优先值和度量值都相等,那么网络中IP地址最大的路由器就是转发路由器。

由转发路由器负责继续将多播流量转发到多路接入网络中,其他的路由器则停止转发该多播流量,并从各自的出站接口上删除该多路接入接口。

下面是配置 PIM-DM的两个实例。

实例1:在多路访问的网络环境

如下拓扑图所示:

clip_image044

具体配置如下所示:

R1#sh running-config

Building configuration...

Current configuration : 1106 bytes

!

version 12.4

service timestamps debug datetime msec

service timestamps log datetime msec

no service password-encryption

!

hostname R1

!

boot-start-marker

boot-end-marker

!

!

no aaa new-model

!

resource policy

!

ip subnet-zero

ip cef

!

!

ip multicast-routing

!

!

interface FastEthernet0/0

ip address 10.1.1.1 255.255.255.0

ip pim dense-mode

duplex half

!

interface Ethernet1/0

ip address 172.16.1.1 255.255.255.0

ip pim dense-mode

duplex half

!

interface Ethernet1/1

ip address 172.16.2.1 255.255.255.0

ip pim dense-mode

duplex half

!

interface Ethernet1/2

no ip address

shutdown

duplex half

!

interface Ethernet1/3

no ip address

shutdown

duplex half

!

router ospf 10

log-adjacency-changes

network 10.1.1.0 0.0.0.255 area 0

network 172.16.1.0 0.0.0.255 area 0

network 172.16.2.0 0.0.0.255 area 0

!

ip classless

no ip http server

no ip http secure-server

!

!

!

logging alarm informational

!

control-plane

!

!

!

gatekeeper

shutdown

!

!

line con 0

exec-timeout 0 0

stopbits 1

line aux 0

stopbits 1

line vty 0 4

login

!

!

End

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

R2#sh running-config

Building configuration...

Current configuration : 1042 bytes

!

version 12.4

service timestamps debug datetime msec

service timestamps log datetime msec

no service password-encryption

!

hostname R2

!

boot-start-marker

boot-end-marker

!

!

no aaa new-model

!

resource policy

!

ip subnet-zero

ip cef

!

!

!

!

ip multicast-routing

!

!

!

!

interface FastEthernet0/0

ip address 172.16.3.1 255.255.255.0

ip pim dense-mode

duplex full

!

interface Ethernet1/0

ip address 172.16.1.2 255.255.255.0

ip pim dense-mode

duplex half

!

interface Ethernet1/1

no ip address

shutdown

duplex half

!

interface Ethernet1/2

no ip address

shutdown

duplex half

!

interface Ethernet1/3

no ip address

shutdown

duplex half

!

router ospf 10

log-adjacency-changes

network 172.16.1.0 0.0.0.255 area 0

network 172.16.3.0 0.0.0.255 area 0

!

ip classless

no ip http server

no ip http secure-server

!

!

logging alarm informational

!

!

!

control-plane

!

!

!

!

gatekeeper

shutdown

!

!

line con 0

exec-timeout 0 0

stopbits 1

line aux 0

stopbits 1

line vty 0 4

login

!

!

End

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

R3#sh run

Building configuration...

Current configuration : 1042 bytes

!

version 12.4

service timestamps debug datetime msec

service timestamps log datetime msec

no service password-encryption

!

hostname R3

!

boot-start-marker

boot-end-marker

!

!

no aaa new-model

!

resource policy

!

ip subnet-zero

ip cef

!

!

!

!

ip multicast-routing

!

!

interface FastEthernet0/0

ip address 172.16.3.2 255.255.255.0

ip pim dense-mode

duplex full

!

interface Ethernet1/0

ip address 172.16.2.2 255.255.255.0

ip pim dense-mode

duplex half

!

interface Ethernet1/1

no ip address

shutdown

duplex half

!

interface Ethernet1/2

no ip address

shutdown

duplex half

!

interface Ethernet1/3

no ip address

shutdown

duplex half

!

router ospf 10

log-adjacency-changes

network 172.16.2.0 0.0.0.255 area 0

network 172.16.3.0 0.0.0.255 area 0

!

ip classless

no ip http server

no ip http secure-server

!

logging alarm informational

!

!

control-plane

!

!

gatekeeper

shutdown

!

!

line con 0

exec-timeout 0 0

stopbits 1

line aux 0

stopbits 1

line vty 0 4

login

!

!

End

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

R4#sh running-config

Building configuration...

Current configuration : 1038 bytes

!

version 12.4

service timestamps debug datetime msec

service timestamps log datetime msec

no service password-encryption

!

hostname R4

!

boot-start-marker

boot-end-marker

!

!

no aaa new-model

!

resource policy

!

ip subnet-zero

ip cef

!

!

!

!

ip multicast-routing

!

!

!

!

interface FastEthernet0/0

ip address 10.1.2.1 255.255.255.0

ip pim dense-mode

duplex half

!

interface Ethernet1/0

ip address 172.16.3.3 255.255.255.0

ip pim dense-mode

duplex full

!

interface Ethernet1/1

no ip address

shutdown

duplex half

!

interface Ethernet1/2

no ip address

shutdown

duplex half

!

interface Ethernet1/3

no ip address

shutdown

duplex half

!

router ospf 10

log-adjacency-changes

network 10.1.2.0 0.0.0.255 area 0

network 172.16.3.0 0.0.0.255 area 0

!

ip classless

no ip http server

no ip http secure-server

!

!

!

logging alarm informational

!

!

!

!

control-plane

!

!

!

gatekeeper

shutdown

!

!

line con 0

exec-timeout 0 0

stopbits 1

line aux 0

stopbits 1

line vty 0 4

login

!

!

end

R4#

配置完成后,可以使用组播工具进行测试,分别在多播源端发出多播包,在组成员端接收多播包。如下图所示:

clip_image045clip_image046

使用sh ip pim neighbor命令查看PIM邻居表

R2#sh ip pim neighbor

PIM Neighbor Table

Neighbor Interface Uptime/Expires Ver DR

Address Prio/Mode

172.16.3.2 FastEthernet0/0 00:21:14/00:01:42 v2 1 / S

172.16.3.3 FastEthernet0/0 00:21:14/00:01:42 v2 1 / DR S

172.16.1.1 Ethernet1/0 00:22:39/00:01:22 v2 1 / S

如上图所示,选举的DR是172.16.3.3,因为拓扑中IP地址最大的则是172.16.3.3。

使用sh ip mroute命令显示多播转发表

R2#sh ip mroute

IP Multicast Routing Table

Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,

L - Local, P - Pruned, R - RP-bit set, F - Register flag,

T - SPT-bit set, J - Join SPT, M - MSDP created entry,

X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,

U - URD, I - Received Source Specific Host Report,

Z - Multicast Tunnel, z - MDT-data group sender,

Y - Joined MDT-data group, y - Sending to MDT-data group

Outgoing interface flags: H - Hardware switched, A - Assert winner

Timers: Uptime/Expires

Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 224.0.1.40), 00:28:19/00:02:21, RP 0.0.0.0, flags: DCL

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

Ethernet1/0, Forward/Dense, 00:28:19/00:00:00

FastEthernet0/0, Forward/Dense, 00:28:19/00:00:00

(*, 228.13.20.216), 00:00:18/stopped, RP 0.0.0.0, flags: D

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

Ethernet1/0, Forward/Dense, 00:00:18/00:00:00

FastEthernet0/0, Forward/Dense, 00:00:18/00:00:00

(10.1.1.88, 228.13.20.216), 00:00:18/00:02:41, flags: PT

Incoming interface: Ethernet1/0, RPF nbr 172.16.1.1

Outgoing interface list:

FastEthernet0/0, Prune/Dense, 00:00:18/00:02:41

R3#sh ip mroute

IP Multicast Routing Table

Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,

L - Local, P - Pruned, R - RP-bit set, F - Register flag,

T - SPT-bit set, J - Join SPT, M - MSDP created entry,

X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,

U - URD, I - Received Source Specific Host Report,

Z - Multicast Tunnel, z - MDT-data group sender,

Y - Joined MDT-data group, y - Sending to MDT-data group

Outgoing interface flags: H - Hardware switched, A - Assert winner

Timers: Uptime/Expires

Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 224.0.1.40), 00:29:12/00:02:03, RP 0.0.0.0, flags: DCL

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

Ethernet1/0, Forward/Dense, 00:29:12/00:00:00

FastEthernet0/0, Forward/Dense, 00:29:12/00:00:00

(*, 228.13.20.216), 00:01:40/stopped, RP 0.0.0.0, flags: D

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

Ethernet1/0, Forward/Dense, 00:01:40/00:00:00

FastEthernet0/0, Forward/Dense, 00:01:40/00:00:00

(10.1.1.88, 228.13.20.216), 00:01:40/00:02:58, flags: T

Incoming interface: Ethernet1/0, RPF nbr 172.16.2.1

Outgoing interface list:

FastEthernet0/0, Forward/Dense, 00:01:40/00:00:00, A

R1#sh ip mroute

IP Multicast Routing Table

Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,

L - Local, P - Pruned, R - RP-bit set, F - Register flag,

T - SPT-bit set, J - Join SPT, M - MSDP created entry,

X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,

U - URD, I - Received Source Specific Host Report,

Z - Multicast Tunnel, z - MDT-data group sender,

Y - Joined MDT-data group, y - Sending to MDT-data group

Outgoing interface flags: H - Hardware switched, A - Assert winner

Timers: Uptime/Expires

Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 224.0.1.40), 00:32:36/00:02:04, RP 0.0.0.0, flags: DCL

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

Ethernet1/1, Forward/Dense, 00:30:51/00:00:00

Ethernet1/0, Forward/Dense, 00:31:14/00:00:00

FastEthernet0/0, Forward/Dense, 00:32:36/00:00:00

(*, 228.13.20.216), 00:03:21/stopped, RP 0.0.0.0, flags: DC

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

FastEthernet0/0, Forward/Dense, 00:03:21/00:00:00

Ethernet1/1, Forward/Dense, 00:03:21/00:00:00

Ethernet1/0, Forward/Dense, 00:03:21/00:00:00

(10.1.1.88, 228.13.20.216), 00:03:21/00:02:55, flags: T

Incoming interface: FastEthernet0/0, RPF nbr 0.0.0.0

Outgoing interface list:

Ethernet1/0, Prune/Dense, 00:00:15/00:02:44

Ethernet1/1, Forward/Dense, 00:00:13/00:00:00

(*, 239.255.255.250), 00:31:53/00:02:03, RP 0.0.0.0, flags: DC

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

Ethernet1/1, Forward/Dense, 00:30:52/00:00:00

Ethernet1/0, Forward/Dense, 00:31:15/00:00:00

FastEthernet0/0, Forward/Dense, 00:31:53/00:00:00

在上面所示,路由器R2和R3的FastEthernet0/0接口状态是不同的,一个是修剪一个是转发,在这里这两台路由器需要选举转发路由器。因为都采用的OSPF路由协议,度量优先值相同,而其路径开销也是相同的,所以只有IP地址最大的采能成为转发路由器。

使用sh ip igmp groups命令查看记录在IGMP成员关系表中所连接的组成员

R4#sh ip igmp groups 228.13.20.216

IGMP Connected Group Membership

Group Address Interface Uptime Expires Last Reporter

228.13.20.216 FastEthernet0/0 00:07:28 00:02:36 10.1.2.113

实例2:在帧中继的网络环境

待续。。。。。。