开发者社区> 技术小大人> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

ISP Lab Multicast

简介:
+关注继续查看

ISP Lab Multicast

image

1- IGMP

clip_image002

1-1 IGMP基本配置

R3(config)#int f0/0

R3(config-if)#ip ospf 110 a 0

R3(config)#ip multicast-routing

R3(config)#int f0/0

R3(config-if)#ip pim sparse-mode \\使得路由器可以接受client的igmp信息

R3#sh ip igmp interface f 0/0

FastEthernet0/0 is up, line protocol is up

Internet address is 1.1.1.3/24

IGMP is enabled on interface

Current IGMP host version is 2

Current IGMP router version is 2

IGMP query interval is 60 seconds

IGMP configured query interval is 60 seconds

IGMP querier timeout is 120 seconds

IGMP configured querier timeout is 120 seconds

IGMP max query response time is 10 seconds

Last member query count is 2

Last member query response interval is 1000 ms

Inbound IGMP access group is not set

IGMP activity: 1 joins, 0 leaves

Multicast routing is enabled on interface

Multicast TTL threshold is 0

Multicast designated router (DR) is 1.1.1.3 (this system)

IGMP querying router is 1.1.1.3 (this system)

Multicast groups joined by this system (number of users):

224.0.1.40(1)

1-2查询路由器作用

clip_image004

R4#sh ip igmp interface f0/0

FastEthernet0/0 is up, line protocol is up

Internet address is 1.1.1.4/24

IGMP is enabled on interface

Current IGMP host version is 2

Current IGMP router version is 2

IGMP query interval is 60 seconds

IGMP configured query interval is 60 seconds\\查询间隔,每隔60S发送一个查询

IGMP querier timeout is 120 seconds\\查询器超时时间

IGMP configured querier timeout is 120 seconds

IGMP max query response time is 10 seconds

Last member query count is 2

Last member query response interval is 1000 ms

Inbound IGMP access group is not set

IGMP activity: 1 joins, 0 leaves

Multicast routing is enabled on interface

Multicast TTL threshold is 0

Multicast designated router (DR) is 1.1.1.4 (this system)

IGMP querying router is 1.1.1.3 \\查询路由器选择小的IP地址

Multicast groups joined by this system (number of users):

224.0.1.40(1)

1-3 DR作用

在有多个第一跳路由器,DR负责转发组播源发出的组播流和向RP注册

在有多个最后一条路由器,DR负责向组播源或者RP发送PIM的join消息

DR的选取原则:优选DR优先级高的,次选IP地址大的为 DR

R4(config-if)#ip pim dr-priority 4

R4#sh ip pim interface

Address Interface Ver/ Nbr Query DR DR

Mode Count Intvl Prior

1.1.1.4 FastEthernet0/0 v2/S 1 30 4 1.1.1.4

IGMP V1中查询路由器选取原则:

V1中,DR也是查询路由器

R3/R4优先级都调为一样,igmp version改为1

R4(config)#int f0/0

R4(config-if)#ip pim dr-priority 1

R4(config-if)#ip igmp version 1

R3#sh ip igmp interface f0/0

FastEthernet0/0 is up, line protocol is up

Internet address is 1.1.1.3/24

IGMP is enabled on interface

Current IGMP host version is 1

Current IGMP router version is 1

IGMP query interval is 60 seconds

IGMP configured query interval is 60 seconds

Inbound IGMP access group is not set

IGMP activity: 1 joins, 0 leaves

Multicast routing is enabled on interface

Multicast TTL threshold is 0

Multicast designated router (DR) is 1.1.1.4

IGMP querying router is 1.1.1.4 (this system) \\DRQR其实是一台路由器《优选IP 地址大的路由器》

Multicast groups joined by this system (number of users):224.0.1.40(1)

1-4 IGMP V2

R3/4(config)#int f0/0

R3/4(config-if)#ip igmp version 2\\改回version 2

R1#sh run int f0/0

Building configuration...

Current configuration : 164 bytes

!

interface FastEthernet0/0

ip address 1.1.1.1 255.255.255.0

ip pim sparse-mode

no ip route-cache

ip igmp join-group 228.1.1.1

duplex auto

speed auto

!

End

R3#sh ip igmp groups

IGMP Connected Group Membership

Group Address Interface Uptime Expires Last Reporter Group Accounted

228.1.1.1 FastEthernet0/0 00:40:38 00:02:18 1.1.1.1

224.0.1.40 FastEthernet0/0 00:40:41 00:02:11 1.1.1.4

IGMP V 2原理:

1.消息格式

clip_image006

TYPE: 请看消息类型小节

Max Resp Time:

最大响应时间(只在查询消息中设置,其他消息中为0x00)是主机用membership report 来响应查询包的最长等待时间,默认10s,使用ip igmp query-max-response-time修改(此处设置的单位是s),而这个时间存储在报文中则是以1/10s为单位。因此这个值的范围是:0-255个1/10s或0-25.5s

Group address:

在发送常规查询时,该字段为全0;特定组查询中该字段设置为该组的组播地址。

在成员关系报告或离开组消息中,该字段设置为目标组播组地址。

2.消息类型

2.1 成员关系查询 Membership query (TYPE:0x11)

2.1.1 常规查询General Query    
路由器向子网中所有主机进行轮询 发向224.0.0.1,而且不涉及任何一个具体组播组。消息中的组地址设置为0.0.0.0。如果一台组播路由器在querier timeout 计时器(默认是3倍的查询间隔)超前仍没有收到一个特定子网的Membership Report消息,那么这个路由器将宣布这个子网中没有组员,不再向这个子网发送组播数据。    
常规查询默认60s发送一次(范围0-65535),可使用ip igmp query-interval修改。

这个查询中同时包含Max ResponseTime,这个值告诉主机用membership report消息回应这个查询的最长等待时间,默认10S,使用ip igmp query-max-response-time修改,单位1/10S,范围是0-255个1/10S。

2.1.2 特定组查询Group-Specific Query    
路由器的Group-Specific Query消息是根据主机发出的Leave Group消息而发出的,当路由器收到Leave Group消息时,必须判断子网中是否仍有组员存在。特定组查询消息报文目的地址为该发出Leave Group的主机所在组的组地址。为了避免Group-Specific Query被意外丢弃或被破坏导致路由器误以为组内没有成员了,因此查询路由器将间隔1S一次性发送两个Group-Specific Query消息(可以使用ip igmp last-member-query-count修改发送几个特定组查询消息),如果依然没有成员响应,路由器删除该组。

2.2 Membership Report (0x16)

这个消息在一台主机第一次加入组播组时发送,用于通知IGMP查询器自己要加入特定的组播组。这个报文也用来响应IGMP查询器发出的membership Query。该消息被封装在IP报文中,目的是该主机期望加入的组播组地址。

2.3 Version1 Membership Report (0x12)

功能同上,为兼容V1而设定的消息。

2.4 Leave report (0x17)

发向224.0.0.2,这样子网中的组播路由器都知道。这个消息包含有想退出的组播组的地址。当IGMP查询器收到一个离开消息的时候,会向这个特定组发送一个“特定组查询消息”,这样,如果这个组内还有其他PC,则有人会回应,如果没有人回应,则路由器将不向该组发送组播消息。

[如果组播组x.x.x.x已经没有成员了,因此没有主机对这个查询包进行响应。查询器在等待“最后组成员查询期间”(last-member-query-interval 默认1s),仍然向没有响应的地方发送另一个特定组查询(其实前后一共发了两个,可以用last-member-query-count来修改个数)。此后确认组中没有成员,停止转发该组在子网中的流量]

3.报告抑制机制

当一台主机想加入某个组播组(224.5.5.5)时,发送关于224.5.5.5的Membership Report,由于这是个组播报文,当二层交换机收到时,没有关于这个目的MAC地址(01-00-5e-05-05-05)的转发表项,因此就从所有端口发送出去,这时,当网络中还有需要接收224.5.5.5组播数据的主机收到这个关于224.5.5.5的Membership Report时,自己就不会再发送关于224.5.5.5的Membership 报文.这样可以减少组播数据在网络中的泛洪。这些个现象,可以通过debug ip igmp看到。

4.IGMP V2 查询器

如果一个LAN中有多个组播路由器,这些组播路由器都发送IGMP查询消息的话那就显得非常多余且低效,这种情况下我们会在这些路由器(的接口)中选择出一台IGMP查询器。前面我们已经了解到IGMPv1没有定义机制来选举查询器,因此不得不依赖于第三层的组播路由协议来协助选择。而IGMPv2就定义了查询器的选举办法,IP地址小(指的是发送genernal Query的源地址)的路由器来充当IGMP查询器,由它来发送查询消息。

初始化的时候大家伙儿都会发,稳定后只有IP小的那个充当查询者。如果非查询者在“other query persent Interval”(other query persent Interval这个计时器在CISCO IOS上默认120s,这个时间是查询间隔计时器的两倍,后来IETF又做了微调,把查询间隔计时器改成125s,因此other query persent Interval默认就是两倍的125s也就是250s,这里在实际部署的时候一定要注意新旧设备的计时器差异)内没有收到查询者的查询,那么它会认为查询者挂了,自己就会成为查询者

clip_image008

详细试验过程:

http://blog.sina.com.cn/s/blog_5ec353710101icm1.html

2- PIM Dense-Mode

1-PIM DM协议概述

PIM-DM(PIM-DenseMode)使用“推”(Push)的方式,在PIM开始工作后,先假设网络中的每个分支都有组播组的成员,将组播流量扩散(Flood)到网络中的所有角落(先把组播数据给你,你不要的话再说)。

如果网络的一个分支没有该组播组的成员,则PIM将这个分支剪枝Prune掉(我这里不需要,把我剪掉吧,别给我发组播数据了)。

被剪枝的分支,其剪枝状态是有时间限制的,如果某个分支一直不需要组播组的流量,则需要周期性的发送剪枝消息,除非该分支下有了组播组的成员。

如果此前不需要组播流量的分支(已被剪枝的分支)现在有了组播成员,那么可以使用Graft嫁接机制来恢复组播流量的转发。

PIM-DM使用源树,或称为最短路径树SPT

PIM路由器使用Hello报文发现邻居,Hello包以query-interval(默认30s)为周期发送,报文的目的地址是224.0.0.13。 show ip pim neighor

clip_image010

clip_image012

2-PIM DM扩散

路由器都运行PIM-DM,组播源10.1.1.1开始向组播组224.1.1.1发送组播数据,在初始化情况下,组播流量被路由器扩散到网络的各个角落,这么做的目的是PIM-DM比较“狂野”,它假设网络的任一个角落都存在组播组的接收者。所有的组播路由器在扩散组播流量的同时也为这个组播组创建一个组播路由表项,每台组播路由器形成的表项是这样的:(10.1.1.1,224.1.1.1),这就是(S,G)表项,其中S代表源,G代表组播组。与这个组播路由表项相关联的,还有Incoming接口和Outgoing接口列表。Incoming接口是朝向组播源的接口,也就是能够通过RPF检查的接口,而Outgoing接口列表则是组播数据的出站接口列表。

当PIM-DM路由器收到组播数据,PIM使用单播路由选择表中的信息进行RPF检验,判断收到该组播数据的接口是否是匹配本地路由表中到达源的最优路由(如果到达源存在路由负载均衡现象,拥有最大的下一跳IP的路由条目将用于RPF检验)。组播数据必须从RPF接口收到,路由器才会对这些数据进行转发,转发时,路由器将数据从Outgoing接口列表中包含的接口转发出去

3-PIM DM剪枝

接下去,不需要组播数据的路由器开始纷纷发送Prune剪枝消息,将所在分支从组播树上剪除。剪枝消息发向224.0.0.13,报文中包含要剪枝的组播组地址及组播源IP。

4-PIM DM嫁接

此时有新的接收者加入到网络中,收到接收者发出的IGMP消息的组播路由器向着源的方向发送Graft消息以便将自己重新嫁接到最短路径树中。这个Graft消息是以单播的形式发送的,消息中含有上游路由器的IP地址,以及要加入的组播组的地址及组播源IP。

收到该Graft消息的上游路由器会返回一个Graft-ACK以作确认,同时继续向上游发送Graft消息(如果需要的话),直到到达第一跳路由器。收到Graft的上游路由器,将收到该报文的接口加入组播组的OutGoing Interface List。

5-Prune的覆盖

PIM-DM Prune Delay on MA networks

clip_image014

上图中,ABC三台路由器处于同一个LAN中,B路由器下没有任何组播成员或路由器,因此它发送prune给上游想把自己从组播树上修剪掉,这时A咋办?如果A将其连接到该LAN的接口修剪掉的话,就会直接影响到C。

PIM-DM有办法搞定这个事儿,B发送prune消息,目的地址是224.0.0.13(PIM的保留地址)。当A收到B发的prune消息后,并不立即剪除这个接口而是等待3S。

这3S内发生啥事儿呢?C路由器也会收到B发的prune包,这个时候C就会主动向A发个Join消息,这样Join消息就会把prune 消息覆盖。只要3S内,A能收到这个消息,组播流量就不会断。

这个机制在上面的拓扑中还是非常有作用的,至少可以保证C存在组播组成员的情况下,A不会将其连接MA的接口修剪掉,但是这个机制也存在一个潜在的问题。如果存在这个连续以太网链路直连的网络,那么当这个网络末端剪枝时,沿途的每个MA网络都会等待3S,如此一来这个末端网络要等待上一段时间,才会被真正剪枝。

6-Assert机制

PIM-DM前转器

下图中,同一个LAN有两台路由器,R1及R3都从其RPF接口收到组播流量,他们都会转发组播流量,这就造成了LAN中的组播用户收到两份重复的组播数据。Assert机制可以避免这个问题。通过Assert消息在这个LAN中,R1及R3之间选出一个转发器,由它来负责转发组播数据。

这是通过Assert消息实现的,Assert消息包括源和组的地址、到源单播路由的度量与发现这条路由的路由协议的AD管理距离。

clip_image016

Assert比较原则如下:先比较AD值 。如果AD值相等,那么比较各自到源的metric (两者运行同样的单播路由协议,离源更近的优选) 。如果以上都相等,那么最高IP的那个成为转发路由器。选举出来后,转发路由器继续向多路访问网络发送组播流量,而其他的路由器停止发送,并把下游接口从输出接口表中删除。

7-PIM DM DR

PIM路由器使用HELLO包来进行DR选举,IP地址最大的接口成为DR。DR主要用于稀疏模式。但当接口上启用了IGMPv1的话,由于IGMPv1没有查询路由器选举机制,因此PIM-DR与IGMP查询路由器的身份重叠,也就是说IGMPv1的查询路由器选举机制需依赖于PIM的DR选举。

DR的选举上面说了,IP最大的成为DR,但是这个因素不太稳定,毕竟想要改变DR还得改IP编址,因此增强的PIM协议建议在PIMv2的hello信息中加入DR优先级选项(默认值为1),优先级最高的路由器成为DR。

DR可抢占

当然并非所有的PIM路由器都支持这个DR优先级选项,不支持的路由器在发送PIM HELLO的时候不携带这个选项,当PIMv2路由器收到一个不包含DR优先级选项的hello时(或此消息中的优先级=0),那么接收方就知道,发送者不支持这个优先级选项,因此这个子网中的DR选举将使用IP地址进行比较。

R1#sh ip pim neighbor

PIM Neighbor Table

Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,

      S - State Refresh Capable

Neighbor          Interface                   Uptime/Expires                    Ver           DR

Address                                                                                                       Prio/Mode

10.1.13.3          Serial0/0                     04:39:17/00:01:15             v2               1 / S

10.1.124.4        FastEthernet1/0          04:31:42/00:01:43            v2                1 / DR S

10.1.124.2        FastEthernet1/0          04:36:41/00:01:28            v2                1 / S

注意DR不是组播数据转发器。

PIM V2的DR一方面用于加组往RP发JOIN 信息,另外一方面源第一跳路由器往RP register消息。

另外如果是 IGMPv1环境,由于IGMPv1本身没有定义查询器的选举方式,因此需依赖PIM DR的选举结果,也就是说IGMPv1中,PIM DR同时充当IGMP查询器。

8-RPF检查

在单播路由表(主流,下面还有其他参考依据)中查找到组播数据包源地址的路由。

如果该路由的出接口就是组播报文的入接口,RPF检查成功,因为这意味着组播数据是从该路由器“朝向组播源的接口”上收到的 。否则RPF失败 ,用于防环.

RPF检查的参考依据

1) 组播静态路由

2) DVMRP

3) MP-BGP

4) 单播路由协议

    a) 根据最长匹配原则选择最精确匹配的路由

    b) 选择AD值最小的路由

    c) 选择Metric最优的路由

    d) 选择IP地址最大的下一跳

9-Lab

clip_image018

《全网跑ospf,R1/2/3/4启用pim dm》

R1#sh ip pim neighbor

PIM Neighbor Table

Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,

P - Proxy Capable, S - State Refresh Capable, G - GenID Capable

Neighbor Interface Uptime/Expires Ver DR

Address Prio/Mode

13.1.1.3 Serial1/1 00:03:12/00:01:30 v2 1 / S P G

124.1.1.4 FastEthernet0/0 00:02:00/00:01:43 v2 1 / DR S P G

124.1.1.2 FastEthernet0/0 00:02:16/00:01:42 v2 1 / S P G

R1#sh ip pim interface

Address Interface Ver/ Nbr Query DR DR

Mode Count Intvl Prior

13.1.1.1 Serial1/1 v2/D 1 30 1 0.0.0.0

124.1.1.1 FastEthernet0/0 v2/D 2 30 1 124.1.1.4

留意到R1、R2、R4处于一个BMA(广播多路访问)网络,因此会进行DR的选择,由于大家优先级都一样,那么IP地址最大的将成为DR,也就是R4

<PC 模拟加入组播组>

R5(config)#ip multicast-routing

R5(config)#int f0/1

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

R5 PC会周期性发送IGMP membership report,报告自己的作为224.1.1.1组播组成员的存在

R4#sh ip igmp groups

IGMP Connected Group Membership

Group Address Interface Uptime Expires Last Reporter Group Accounted

224.1.1.1 FastEthernet0/1 00:01:50 00:02:13 10.1.1.1

224.0.1.40 FastEthernet0/0 00:16:26 00:02:34 124.1.1.4

注意,当我们在路由器接口激活PIM后,同时也就自动激活了IGMPv2

从上面的输出我们可以看到R4已经在224.1.1.1组中添加了成员10.1.1.1,如此同时R4会周期性(默认60S)的发送General Query消息,PC在收到这个查询消息后会以IGMP membership report进行回应。

理解ASSert机制:

在拓扑中这个MA网络,存在一定的不合理性,毕竟R4从R1及R2收到重复的组播报文,因为R1及R2都会从各自的RPF接口收到组播报文并且进行转发,那么接下去R1及R2就会通过Assert报文进行PK,最终PK胜利的路由器将成为这个MA网络的“前转器”并负责将来自Source的组播流量向下游转发。我们知道根据PK的原则,R2最终胜出,这是因为在其他条件同等的情况下,R2的接口IP更大。接下去R1作为Assert输方,将会向RPF上游发送一个Prune消息将自己从SPT上剪掉

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, E - Extranet,

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,

V - RD & Vector, v - Vector

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

Timers: Uptime/Expires

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

(*, 224.1.1.1), 00:00:07/stopped, RP 0.0.0.0, flags: D

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

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

Serial1/1, Forward/Dense, 00:00:07/00:00:00

(10.10.10.10, 224.1.1.1), 00:00:07/00:02:52, flags: PT \\ P:向上游发送了purne报文 T:表示有流量通过

Incoming interface: Serial1/1, RPF nbr 13.1.1.3 //RFP 接口及邻居

Outgoing interface list:

FastEthernet0/0, Prune/Dense, 00:00:07/00:02:52 // F0/0被修剪了

(*, 224.0.1.40), 00:41:44/00:02:30, RP 0.0.0.0, flags: DCL

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

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

Serial1/1, Forward/Dense, 00:41:44/00:00:00

R2#sh ip mroute

IP Multicast Routing Table

(*, 224.1.1.1), 00:27:54/stopped, RP 0.0.0.0, flags: D

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

FastEthernet0/0, Forward/Dense, 00:27:54/00:00:00

Serial1/2, Forward/Dense, 00:27:54/00:00:00

(10.10.10.10, 224.1.1.1), 00:09:08/00:01:40, flags: T

Incoming interface: Serial1/2, RPF nbr 23.1.1.3

Outgoing interface list:

FastEthernet0/0, Forward/Dense, 00:09:08/00:00:00, A \\assert竞选出来的接口

(*, 224.0.1.40), 00:49:56/00:02:25, RP 0.0.0.0, flags: DCL

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

FastEthernet0/0, Forward/Dense, 00:49:48/00:00:00

Serial1/2, Forward/Dense, 00:49:56/00:00:00

另外,要关注(10.10.10.10, 224.1.1.1), 00:09:08/00:01:40的(S,G)条目中的两个计时器 -运行时间 / 期满定时器。00:09:08表示当前表项的运行时间,00:01:40是一个倒计时计时器,这个计时器会在每次转发组播组报文后被刷新重置(重置为3分钟,然后再开始倒计时),当该计时器倒计时到0时,该(S,G)表项删除,同时其父(*,G)表项也开始倒计时。

理解嫁接过程:

clip_image020

R5(config)#int f0/1

R5(config-if)#ip igmp join-group 224.1.1.2

在R4 上debug ip pim

R4#

*Oct 2 15:56:59.271: PIM(0): Building Graft message for 224.1.1.2, FastEthernet0/1: no entries

*Oct 2 15:56:59.271: PIM(0): Building Graft message for 224.1.1.2, FastEthernet0/0:

10.10.10.10/32 count 1

*Oct 2 15:56:59.275: PIM(0): Send v2 Graft to 124.1.1.2 (FastEthernet0/0)

*Oct 2 15:56:59.371: PIM(0): Received v2 Graft-Ack on FastEthernet0/0 from 124.1.1.2

*Oct 2 15:56:59.375: Group 224.1.1.2:

10.10.10.10/32

PC R5的加组直接导致R4下出现224.1.1.2的组播用户,注意,此时R4已经是(S,G) SPT的一个分支,只不过由于没有组播用户,因此将自己修剪掉了,而这时候出现了组播用户,因此R4将向上游RPF邻居,也就是10.1.124.2发送一个嫁接消息(Graft),R2收到这个消息后,将继续向R2自己的RPF邻居发送Graft消息直到first-hop-router。如此一来SPT又打通了

3-PIM SM

3-1协议概述

1-PIM-DM适用于网络规模较小、组播接收者较为密集的组网;而PIM-SM(PIM-Sparse Mode稀疏模式)则适用于组播接收者较为分散、网络规模较大的组网。

2-PIM-SM采用拉(Pull)的方式,接收者需显式的加入共享树。

3-引入汇聚点(Rendezvous Ping)作为共享树的公共树根。PIM-SM支持共享树和源树。

4-第一跳路由器向RP注册,把组播分组发给RP,RP将单个组播数据拷贝发送给接收方。

5-与组播用户直连的最后一跳路由器知道去RP的最短路径,PIM Join消息逐跳到达RP的过程中,便创建了共享树的一个分支。

6-PIM-SM中的SPT切换机制使得组播流量的转发更加科学

3-2关于汇聚点RP

3-2-1关于RP:

作为RPT的根,负责将来自于源(Source)的组播流量转发到接收者

作为汇聚点,负责一个或多个组播组的组播流量转发

一个组播组只能有一个RP(可以有主备)

3-2-2RP的发现机制:

静态手工指定(需在所有组播路由器上配置)

动态协议选举:Auto-RP、BSR

3-3与DM有几个共同点

通过HELLO发现邻居

当单播路由发生变化时,重新计算RPF接口

在多路访问的网络中选举指定路由器

在多路访问的网络中使用prune覆盖

在多路访问的网络中使用Assert消息选举指定前传器

3-4RPF检查

PIM-SM使用源树和共享树,因此PIM-SM在做RPF检查时:

对于源树,使用组播源的地址进行RPF check

对于共享树,使用RP的地址进行RPF check

3-5工作机制

PIM-SM使用一种拉(Pull)模式来传送组播数据包。只有包含活动接收者,并且接收者直接发送数据接收请求的网段才会收到数据。PIM-SM引入了一个非常重要的概念,RP(Rendezous Point),汇聚点。RP的作用:所有的组播源在发送组播数据时,与组播源相连的第一跳路由器都会把组播数据发送给RP,然后再由RP把组播数据发送给有接收需求的路由器,依次类推。

1- 共享树加入(接收者到RP)

2- 共享树剪枝

3- 组播源注册

4- RPT切换到SPT

3-6 PIM-SM状态刷新

共享树建立起来后,路由器周期性的向上游邻居发送join/prune消息保活。默认60S,使用ip pim message-interval修改。保活时间是join/prune间隔的3倍,也就是3分钟,3分钟后,如果路由器没收到已知下游邻居的join/prune消息,则将那个接口从输出列表中删除。所以,总结如下:

  • 路由器默认每60s向RP方向的上游邻居发送(*,G)加入消息刷新RPT;

  • 路由器默认每60s向源方向的上游邻居发送(S,G)加入消息刷新SPT。

  • 只要是这些组播转发表项在其输出接口合集中存在接口,这个周期性的动作就会续

3-7PIM-SM DR

PIM在每一个多路访问网络,使用HELLO消息选择一个DR(Designated Router, 指定路由器)。DR的角色是可抢占的。

clip_image022

3-7-1. PIM-DM中的DR

在PIM-DM中,只有当IGMPv1被用在多路访问网络的时候DR才会有意义,这是因为IGMPv1没有定义IGMP查询器选择机制,在这种情况下,被选择的DR也有IGMP查询功能。PIM-SM中,指定路由器的作用更大。

3-7-2. PIM-SM中的DR

靠近源的DR负责将source的组播数据发给RP

设想一下,源与两个第一跳路由器连接在同一个LAN中,源发送组播数据的话,R1、R2都会收到,如果两者都向RP发送PIM Register消息,RP就会收到两份组播数据,这显然是无意义的,因此再这种情况下,会在LAN中选举出一个DR,由该DR负责向RP发送PIM Register消息。当然,在完成源到RP的SPT构建后,也是由DR来向RP发送(S,G)的组播数据。

靠近接收者的DR负责向RP发送Join消息从而将分支拉到共享树

上图中,与组播接收者同处于一个LAN的最后一跳路由器有两台,当接收者发出IGMP成员关系报告时,R3及R4都能感知到该LAN中出现了组播组的成 员,如果他们都向RP发送Join消息、都试图将自己拉近共享树的话,就有会导致接收者接收到两份相同的组播数据,这是无意义的,因此R3及R4的连接到 该LAN的接口会进行DR的选举,成为DR的路由器负责向RP发送Join消息形成共享树的分支。

一个LAN中IP最大的PIM接口成为DR,但是这个因素不太稳定,毕竟想要改变DR还得改IP编址,因此增强的PIM协议建议在PIMv2的hello 信息中加入DR优先级选项(默认值为1),优先级最高的路由器成为DR,如果优先级相等,则再比较IP地址,选拥有最大IP的接口。

当然并非所有的PIM路由器都支持这个DR优先级选项,不支持的路由器在发送PIM HELLO的时候不携带这个选项,当PIMv2路由器收到一个不包含DR优先级选项的hello时(或此消息中的优先级=0),那么接收方就知道,发送者不支持这个优先级选项,因此这个子网中的DR选举将使用IP地址进行比较。使用如下命令修改接口的PIM DR优先级(默认为1):Router(config-if)#ip pim dr-priority x

4- PIM 双向树和 SSM

4-1双向树

只生成一颗共享树RPT,只有(*,G)表项

首先需要定义基于每个bidir group定义RP可以是静态也可以是动态,所有流量都直接走向RP.在多路访问中必须选举DF,有谁来来决定转发给RP ,选DF 除了看metric值,最后看得是IP地址大小

配置如下:

clip_image024

4-2 SSM

只生成一颗源树SPT ,只有(S,G)表项,在client端使用IGMP V3 带源

基本配置:

clip_image026

SSM MAP 是为了解决 IGMP v2 与V3 兼容的问题

5-Sparse-Mode Lab

clip_image028

具体配置我就不show,<命令简单>

RP 的选举都是静态指定的

R2#sh ip pim rp mapping

PIM Group-to-RP Mappings

Group(s): 224.0.0.0/4, Static

RP: 22.1.1.1 (?)

唯一要注意的一点R2的loopback interface 也要ip pim sparse-mode

R7#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, E - Extranet,

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,

V - RD & Vector, v - Vector

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

Timers: Uptime/Expires

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

(*, 228.1.1.1), 00:05:12/00:02:26, RP 22.1.1.1, flags: SJC

//S代表sparse-mode C代表直连下游有接受者 J代表有从spt切换到共享树的功能

Incoming interface: FastEthernet2/0, RPF nbr 17.1.1.1 \\RPF邻居为R1

Outgoing interface list:

FastEthernet0/0, Forward/Sparse, 00:05:12/00:02:26

R7(config)#ip pim spt-threshold infinity \\如果敲入这条命令,则J标示消失

clip_image030

6-RP

静态Rp,每台路由器必须指定,数量多了占一定资源,override 可以让静态RP的优先级高于其他方式选出的RP

6-1 Auto RP

clip_image032

AutoRP先配置一个或者多个MA,然后再配置一个或者多个RP路由器

MA选举RP的原则:

1如果RP的服务地址完全重合,则选择IP地址大的 Candidate RP 为RP

2 如果RP的服务地址不完全重合,ACL定义范围下的优先

注意:

clip_image034

Step1: 所有pim接口都运行sparse dense模式

R5(config)#int f2/0

R5(config-if)#ip pim sparse-dense-mode

Step2:指定候选RP C-RP

R2(config)#int lo 0

R2(config-if)#ip pim sparse-dense-mode

R2(config)#ip pim send-rp-announce loopback 0 scope 20 group-list rp

这里我们让R2-3成为CRP

Step3:指定MA

这里我们让R1 成为 MA

R1(config)#ip pim send-rp-discovery loopback 0 scope 20

Step4 :在R7上查看 RP

R7#sh ip pim rp mapping

PIM Group-to-RP Mappings

Group(s) 228.1.1.1/32

RP 33.1.1.1 (?), v2v1

Info source: 11.1.1.1 (?), elected via Auto-RP

Uptime: 00:15:19, expires: 00:02:34

\\选择R3 为RP,通过auto rp来实现

clip_image036

6-2 BSR

clip_image038

Step1 :制定候选BSR

R1(config)#ip pim bsr-candidate lo0 4 10 《选择优先级高的》

R3(config)#ip pim bsr-candidate lo 0 5 <hash值> 5 <优先级值>

\\hash值一般用于BSR的负载均衡

R3#sh ip pim bsr-router \\察看BSR

PIMv2 Bootstrap information

BSR address: 11.1.1.1 (?)

Uptime: 00:09:16, BSR Priority: 10, Hash mask length: 4

Expires: 00:02:00

This system is a candidate BSR

Candidate BSR address: 33.1.1.1, priority: 5, hash mask length: 5

Step2 :制定候选RP R2/R7

R7(config)#ip pim rp-candidate lo 0 group-list 1 priority 100

R2(config)#ip pim rp-candidate lo 0 group-list 1

R3#sh ip pim rp

Group: 224.0.1.40, RP: 22.1.1.1, uptime 00:20:43, expires never

clip_image040


http://blog.51cto.com/ericfu/1706887

本文转自 bilinyee博客,原文链接:    http://blog.51cto.com/ericfu/1706887    如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载