组播

组播简介

组播(Multicast)是在一台源IP主机和多台(一组)IP主机之间进行,中间的网络设备根

据接收者的需要,有选择性地对数据进行复制和转发。

• 组播技术有效地满足了单点发送、多点接收的需求,实现了IP网络中点到多点业务数据的高

效传送,能够大量节约网络带宽、降低网络负载。

• 组播分发树:组播流量的转发路径

组播地址:224.0.0.0–239.255.255.255

组播MAC:

zubomac3553

zubokun53926

RPF检查:

rpf4213

rpf2154343

IGMPv1

IGMPv1协议主要基于查询和响应机制完成组播组管理。当一个网段内有多个组播设备时,由于它们都可以接收到主机发送的成员报告报文,因此只需要选取其中一台组播设备发送查询报文,该组播设备称为IGMP查询器(Querier)。在IGMPv1中,由组播路由协议PIM选举出唯一的组播信息转发者(Assert Winner或DR)作为IGMP的查询器,负责该网段的组成员关系查询。

(不具备选举查询器,依赖PIM协议选举

IGMPv1报文

IGMPv1报文封装在IP报文中,由8个字节组成。IGMPv1包括两种类型的报文:

  • 普遍组查询报文(General Query):查询器向共享网络上所有主机发送的查询报文,用于了解哪些组播组存在成员。(60s一次)
  • 成员报告报文(Report):主机向查询器发送的报告报文,用于申请加入某个组播组或者应答查询报文。

igmpgeshi155029

字段 说明
Version IGMP版本,值为1。
Type 报文类型。该字段有以下两种取值:0x1:表示普遍组查询报文。0x2:表示成员报告报文。
Unused 在IGMPv1中,该字段在发送时被设为0,并在接收时被忽略。
Checksum 校验和。
Group Address 组播组地址。在普遍组查询报文中,该字段设为0;在成员报告报文中,该字段为成员加入的组播组地址。

查询组播组成员机制

shiyi5404

v1chaxun510155159

普遍组查询和响应过程如下:

  1. IGMP查询器发送目的地址为224.0.0.1(表示同一网段内所有主机和设备)的普遍组查询报文;收到该查询报文的组成员启动定时器。

    普遍组查询报文是周期性发送的,发送周期可以通过命令配置。HostA和HostB作为组播组G1的成员,收到普遍组查询报文后,在本地启动定时器Timer-G1。

  2. 第一个定时器(10s)超时的组成员发送针对该组的报告报文。

    假设HostA上的Timer-G1首先超时,HostA向该网段发送目的地址为G1的报告报文。也想加入组G1的HostB收到此报告报文,则停止定时器Timer-G1,不再发送针对G1的报告报文。这样报告报文被抑制,可以减少网段上的流量。

  3. IGMP查询器接收到HostA的报告报文后,了解到本网段内存在组播组G1的成员,则由组播路由协议生成(,G1)组播转发表项,“”代表任意组播源。网络中一旦有组播组G1的数据到达DeviceA,将向该网段转发。

加组机制

  1. 主机HostC不等待普遍组查询报文的到来,主动发送针对G2的报告报文以声明加入组播组G2。
  2. IGMP查询器接收到HostC的报告报文后,了解到本网段内出现了组播组G2的成员,则生成组播转发项(*,G2)。网络中一旦有G2的数据到达DeviceA,将向该网段转发。

离组机制

IGMPv1没有专门定义离开组的报文。主机离开组播组后,停止发送成员报告报文。根据主机想要离开的组播组中是否还有其他成员,处理机制有所不同。如图2所示。

  • 假设HostA想要退出组播组G1

    HostA收到IGMP查询器发送的普遍组查询报文时,不再发送针对G1的报告报文。由于网段内还存在G1组成员HostB,HostB会向IGMP查询器发送针对G1的报告报文,因此IGMP查询器感知不到HostA的离开。

  • 假设HostC想要退出组播组G2

    HostC收到IGMP查询器发送的普遍组查询报文时,不再发送针对G2的报告报文。由于网段内不存在组G2的其他成员,IGMP查询器不会收到G2组成员的报告报文,则在一定时间(缺省值为130秒)后,删除G2所对应的组播转发表项。

130=60×2+10

IGMPv2

IGMPv2的工作机制与IGMPv1基本相同,最大的不同之处在于IGMPv2增加了查询器选举和离开组机制。IGMPv2可以使IGMP查询器及时了解到网段内哪些组播组已不存在成员,从而及时更新组成员关系,减少网络中冗余的组播流量。

与IGMPv1相比,IGMPv2的变化如下:

  • 除了普遍组查询报文和成员报告报文之外,IGMPv2新增了两种报文:
    • 成员离开报文(Leave):成员离开组播组时主动向查询器发送的报文,用于宣告自己离开了某个组播组。
    • 特定组查询报文(Group-Specific Query):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。
  • IGMPv2对普遍组查询报文格式也做了改进,添加了最大响应时间(Max Response Time)字段。此字段取值可以通过命令配置,用于控制成员对于查询报文的响应速度。

IGMPv2报文:

图1 IGMPv2报文格式
img

字段 说明
Type 报文类型。该字段有以下四种取值:0x11:表示查询报文。IGMPv2的查询报文包括普遍组查询报文和特定组查询报文两类。0x12:表示IGMPv1成员报告报文。0x16:表示IGMPv2成员报告报文。0x17:表示成员离开报文。
Max Response Time 最大响应时间。成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。该字段仅在IGMP查询报文中有效。
Checksum 校验和。
Group Address 组播组地址。在普遍组查询报文中,该字段设为0。在特定组查询报文中,该字段为要查询的组播组地址。在成员报告报文和离开报文中,该字段为成员要加入或离开的组播组地址。
v235

v2查询器选举机制

在IGMPv2中,查询器的选举过程如下:

  1. 初始状态下,所有运行IGMPv2的组播设备(DeviceA和DeviceB)都认为自己是查询器,向本网段内的所有主机和组播设备发送普遍组查询报文。DeviceA和DeviceB在收到对方发送的普遍组查询报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,IP地址最小的组播设备将成为查询器,其他组播设备成为非查询器。如图所示,DeviceA的接口地址小于DeviceB,则DeviceA当选为查询器,DeviceB为非查询器。

  2. 确定查询器后,将由IGMP查询器(DeviceA)向本网段内的所有主机和其他组播设备发送普遍组查询报文,而非查询器(DeviceB)则不再发送普遍组查询报文。

    非查询器(DeviceB)上都会启动一个定时器(即其他查询器存在时间定时器Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。

v2离组机制

在IGMPv2中,成员离开组播组时可以主动向查询器发送离开报文,宣告自己离开了某个组播组。

主机HostA离开组播组G1的过程如下:

  1. HostA向本地网段内的所有组播设备(目的地址为224.0.0.2)发送针对组G1的离开报文。
  2. 查询器收到离开报文,会发送针对组G1的特定组查询报文。发送间隔和发送次数可以通过命令配置,缺省情况下每隔1秒发送一次,共发送两次。同时查询器启动组成员关系定时器(Timer-Membership=发送间隔x发送次数)。
  3. 如果该网段内还存在组G1的其他成员(如HostB),这些成员在收到查询器发送的特定组查询报文后,会立即发送针对组G1的报告报文。查询器收到针对组G1的报告报文后将继续维护该组成员关系。如果该网段内不存在组G1的其他成员,查询器将不会收到针对组G1的报告报文。在Timer-Membership超时后,查询器将删除(*,G1)对应的IGMP组表项。当有组G1的组播数据到达查询器时,查询器将不会向下游转发。

IGMPv3

IGMPv3主要是为了配合SSM(Source-Specific Multicast)模型发展起来的,提供了在报文中携带组播源信息的能力,即主机可以对组播源进行选择。

与IGMPv2相比,IGMPv3报文的变化如下:

  • IGMPv3报文包含两大类:查询报文和成员报告报文。IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
  • 查询报文中不仅包含普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-and-Source-Specific Query)。该报文由查询器向共享网段内特定组播组成员发送,用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。
  • 成员报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系简单的表示为(G,INCLUDE,(S1、S2…)),表示只接收来自指定组播源S1、S2……发往组G的数据;或(G,EXCLUDE,(S1、S2…)),表示接收除了组播源S1、S2……之外的组播源发给组G的数据。当组播组与组播源列表的对应关系发生了变化,IGMPv3报告报文会将该关系变化存放于组记录(Group Record)字段,发送给IGMP查询器。
  • 在IGMPv3中一个成员报告报文可以携带多个组播组信息,而之前的版本一个成员报告只能携带一个组播组。这样在IGMPv3中报文数量大大减少。

IGMPv3报文

v3cahx61552

字段 说明
Type 报文类型,取值为0x11。
Max Response Code 最大响应时间。成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。
Checksum 校验和。
Group Address 组播组地址。在普遍组查询报文中,该字段设为0;在特定组查询报文和特定源组查询报文中,该字段为要查询的组播组地址。
Resv 保留字段。发送报文时该字段设为0;接收报文时,对该字段不做处理。
S 该比特位为1时,所有收到此查询报文的其他设备不启动定时器刷新过程,但是此查询报文并不抑制查询器选举过程和设备的主机侧处理过程。
QRV 如果该字段非0,则表示查询器的健壮系数(Robustness Variable)。如果该字段为0,则表示查询器的健壮系数大于7。设备接收到查询报文时,如果发现该字段非0,则将自己的健壮系数调整为该字段的值;如果发现该字段为0,则不做处理。
QQIC IGMP查询器的查询间隔,单位为秒。非查询器收到查询报文时,如果发现该字段非0,则将自己的查询间隔参数调整为该字段的值;如果发现该字段为0,则不做处理。
Number of Sources 报文中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定源组查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制。
Source Address 组播源地址,其数量受到Number of Sources字段值大小的限制。

v3baog18

字段 说明
Type 报文类型,取值为0x22。
Reserved 保留字段。发送报文时该字段设为0;接收报文时,对该字段不做处理。
Checksum IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位检测,表示IGMP信息补码之和的补码。Checksum字段在进行校验计算时设为0。当发送报文时,必须计算校验和并插入到Checksum字段中去。当接收报文时,校验和必须在处理该报文之前进行检验。
Number of Group Records (M) 报文中包含的组记录的数量。
Group Record 组记录。Group Record字段的格式如图3所示,解释如表3所示。

tusan61812

字段 说明
Record Type 组记录的类型。共分为三大类。当前状态报告。用于对查询报文进行响应,通告自己目前的状态,共两种:MODE_IS_INCLUDE,表示接收源地址列表包含的源发往该组的组播数据。如果指定源地址列表为空,该报文无效。MODE_IS_EXCLUDE,表示不接收源地址列表包含的源发往该组的组播数据。过滤模式改变报告。当组和源的关系在INCLUDE和EXCLUDE之间切换时,会通告过滤模式发生变化,共两种:CHANGE_TO_INCLUDE_MODE,表示过滤模式由EXCLUDE转换到INCLUDE,接收源地址列表包含的新组播源发往该组播组的数据。如果指定源地址列表为空,主机将离开组播组。CHANGE_TO_EXCLUDE_MODE,表示过滤模式由INCLUDE转换到EXCLUDE,拒绝源地址列表包含的新组播源发往该组的组播数据。源列表改变报告。当指定源发生改变时,会通告源列表发生变化,共两种:ALLOW_NEW_SOURCES,表示在现有的基础上,需要接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则向现有源列表中添加这些组播源;如果当前对应关系为EXCLUDE,则从现有阻塞源列表中删除这些组播源。BLOCK_OLD_SOURCES,表示在现有的基础上,不再接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则从现有源列表中删除这些组播源;如果当前对应关系为EXCLUDE,则向现有源列表中添加这些组播源。
Aux Data Len 辅助数据长度。在IGMPv3的报告报文中,不存在辅助数据字段,该字段设为0。
Number of Sources (N) 本记录中包含的源地址数量。
Multicast Address 组播组地址。
Source Address 组播源地址。
Auxiliary Data 辅助数据。预留给IGMP后续扩展或后续版本。在IGMPv3的报告报文中,不存在辅助数据。

IGMPv3工作机制

在工作机制上,与IGMPv2相比,IGMPv3增加了主机对组播源的选择能力。

特定源组加入

IGMPv3的成员报告报文的目的地址为224.0.0.22(表示同一网段所有使能IGMPv3的设备)。通过在报告报文中携带组记录,主机在加入组播组的同时,能够明确要求接收或不接收特定组播源发出的组播数据。如图4所示,网络中存在S1和S2两个组播源,均向组播组G发送组播数据,Host仅希望接收从组播源S1发往组播组G的信息。

tedingh047

如果Host和组播设备之间运行的是IGMPv1或IGMPv2,Host加入组播组G时无法对组播源进行选择,无论其是否需要,都会同时接收到来自组播源S1和S2的数据。如果采用IGMPv3,成员主机可以发送IGMPv3报告(G,INCLUDE,(S1)),选择仅接收源S1向组播组G发送的数据。

特定源组查询

当接收到组成员发送的改变组播组与源列表的对应关系的报告时(比如CHANGE_TO_INCLUDE_MODE、CHANGE_TO_EXCLUDE_MODE),IGMP查询器会发送特定源组查询报文。如果组成员希望接收其中任意一个源的组播数据,将反馈报告报文。IGMP查询器根据反馈的组成员报告更新该组对应的源列表。

v3jiazu2434

v3lizu2449

各个版本比较

cahyi540

IGMP Snooping

Snooping5041

当Router将组播报文转发至Switch以后,Switch负责将组播报文转发给组播用户。由于组

播报文的目的地址为组播组地址,在二层设备上是学习不到这一类MAC表项的,因此组播

报文就会在所有接口进行广播,和它在同一广播域内的组播成员和非组播成员都能收到组

播报文。这样不但浪费了网络带宽,而且影响了网络信息安全。

• IGMP Snooping有效地解决了这个问题。配置IGMP Snooping后,二层组播设备可以侦听

和分析组播用户和上游路由器之间的IGMP报文,根据这些信息建立二层组播转发表项,控

制组播数据报文转发。这样就防止了组播数据在二层网络中的广播。

sjies153

jiekou165325

zhuafabiao5448

• 路由器端口形成后会启动老化计时器(默认180s),当路由器端口收到新的普遍组查询后刷

新该计时器。

• 成员端口形成后会启动老化计时器(默认180s),当成员端口收到新的成员关系报告报文后

刷新该计时器。

• IGMP Snooping不再使用成员关系报告报文抑制机制:

▫ 由于IGMP Snooping需要监听IGMP报文才能决定端口角色,进而指导转发,所以所

有组成员都需要发送IGMP组成员关系报告报文。

▫ 当IGMP Snooping设备收到成员关系报告报文后,只将成员关系报告报文从路由器接

口发送出去,从而避免其余组成员收到成员关系报告报文,不触发成员关系报告报文

抑制机制。

weihu65557

• 收到IGMP离开报文后,成员端口的老化定时器 = 健壮系数(默认2) x 特定组查询间隔

(默认1s)。

IGMP SSM Mapping

SSM(Source-Specific Multicast)称为指定源组播,要求设备能了解成员主机加入组播组时所指定的组播源。如果成员主机上运行IGMPv3,可以在IGMPv3报告报文中直接指定组播源地址。但是某些情况下,成员主机只能运行IGMPv1或IGMPv2,为了使其也能够使用SSM服务,设备上需要提供IGMP SSM Mapping功能。

IGMP SSM Mapping的机制是:通过在设备上静态配置SSM地址的映射规则,将IGMPv1和IGMPv2报告报文中的(*, G)信息转化为对应的(G, INCLUDE, (S1, S2…))信息,以提供SSM组播服务。

配置了SSM Mapping规则后,当IGMP查询器收到来自成员主机的IGMPv1或IGMPv2报告报文时,首先检查该报文中所携带的组播组地址G,然后根据检查结果的不同分别进行处理。

  • 如果G在ASM(Any-Source Multicast)范围内,则只提供ASM服务。
  • 如果G在SSM组地址范围内(缺省情况下为232.0.0.0~232.255.255.255):
    • 如果设备上没有G对应的SSM Mapping规则,则无法提供SSM服务,丢弃该报文。
    • 如果设备上有G对应的SSM Mapping规则,则依据规则将报告报文中所包含的(*, G)信息映射为(G, INCLUDE, (S1, S2…))信息,提供SSM服务。

SSM网络的用户网段中HostA运行IGMPv3、HostB运行IGMPv2、HostC运行IGMPv1。HostB和HostC无法升级到IGMPv3,如果要为该网段中的所有主机提供SSM服务,需要在IGMP查询器(Device)上使能IGMP SSM Mapping并配置相应的映射规则。

mm0923

假如在Device上配置如下映射关系:

组播组地址 映射的组播源地址
232.0.0.0/8 10.10.1.1
232.1.0.0/16 10.10.2.2
232.1.0.0/16 10.10.3.3
232.1.1.0/24 10.10.4.4

经过映射后,Device收到HostB和HostC的成员报告报文时,首先判断报文携带的组地址是否在SSM范围内,发现在SSM范围内,则根据配置的映射规则生成如下所示的组播表项。如果一个组地址映射了多个源,则生成多个(S,G)表项。

在映射过程中,一个组播组地址只要能在规则中匹配到,都会生成一条相应的表项。因此232.1.1.1有四条表项,232.1.2.2有三条表项。

IGMPv1/IGMPv2报告报文中的组地址 生成的组播表项
232.1.1.1 (来自HostC) (10.10.1.1,232.1.1.1)(10.10.2.2,232.1.1.1)(10.10.3.3,232.1.1.1)(10.10.4.4,232.1.1.1)
232.1.2.2 (来自HostB) (10.10.1.1,232.1.2.2)(10.10.2.2,232.1.2.2)(10.10.3.3,232.1.2.2)

IGMP Proxy

p1171231

p2171311

p371410

plizu10171452

PIM DM

PIM-DM:密集模式,采用的是“推”模式,适用于成员比较少,相对密集的场景

PIM-SM:稀疏模式 采用的是“拉”模式,适用于成员多,但是成员不集中的场景

PIM(Protocol Independent Multicast,协议无关组播)是域内组播路由协议,利用单播路由信息,对组播消息进行RPF检查,创建组播路由表项。为IP组播提供路由信息的协议可以是任何单播路由协议,比如静态路由、RIP、OSPF、IS-IS、BGP等。组播路由和单播路由协议无关,只是通过单播路由表产生相应组播路由表项。

目前在实际网络中,PIM协议有三种模式:PIM-DM、使用ASM(Any-Source Multicast)模型的PIM-SM,使用SSM(Source-Specific Multicast)模型的PIM-SM。需要注意的是,同一个PIM域中不能同时运行PIM-DM和PIM-SM。

PIM协议中依据组播分发树转发数据,组播分发树有两种,SPT和RPT

以组播源为根,组播组成员为叶子的组播分发树称为SPT(Shortest Path Tree),在PIM-DM与PIM-SM中均有使用。
以RP(Rendezvous Point)为根,组播组成员为叶子的组播分发树称为RPT(RP Tree),在PIM-SM中使用。

PIM-DM域中组播数据转发的实现过程是:

  1. 邻居发现Neighbor Discovery):在PIM-DM域中,PIM设备通过周期性的向所有其他PIM设备发送Hello消息,来发现PIM邻居,维护PIM设备之间的PIM邻居关系。缺省情况下,无论PIM设备是否收到来自邻居的Hello消息,都会接收其他的PIM控制消息或组播报文。但是如果PIM设备配置了邻居检查功能,则只有在PIM设备接收到来自邻居的Hello消息后,才会接收其他的PIM控制消息或组播报文。
  2. 扩散Flooding):PIM-DM假设网络中的每个子网都存在至少一个组播组成员,因此组播数据将被扩散到网络中的所有节点,网络中所有的PIM设备都能接收到组播数据。
  3. 剪枝(Prune):组播数据扩散到网络中后,PIM-DM对没有组播数据接收者的分支进行剪枝,只保留包含接收者的分支,即确保网络中只有需要组播数据的PIM设备能够接收到组播数据,不需要组播数据的PIM设备接收不到组播数据。
  4. 状态刷新(State-Refresh):如果设备处于剪枝状态,其上游PIM设备会维护一个“剪枝定时器”。当剪枝定时器超时,上游PIM设备恢复对不需要数据的下游PIM设备的数据转发,这样会导致不必要的网络资源浪费。采用状态刷新可使离组播源最近的第一跳设备周期性发送State-Refresh消息,刷新所有设备的剪枝定时器状态,对不需要数据的下游设备始终保持剪枝状态。
  5. 嫁接Graft):当被剪枝分支的节点上出现了组播组成员时,为了减少该节点恢复成转发状态所需的时间,PIM-DM使用嫁接机制主动恢复其对组播数据的转发。
  6. 断言(Assert):如果在一个网段内出现多台PIM设备,则相同的组播报文可能会被重复发送到该网段。通过断言可以为网段选定唯一的组播数据转发者,避免冗余的组播数据转发。

邻居发现

PIM设备在每个使能了PIM的接口上,都会对外发送Hello消息。封装Hello消息的组播报文有如下特点:

  • 目的地址是224.0.0.13,表示同一网段中所有PIM设备
  • 源地址为接口的IP地址
  • TTL数值为1,仅发送给邻居接口

Hello消息具有发现邻居、协商各项协议参数、维持邻居关系的作用。

发现PIM邻居

同一网段中的PIM设备都必须接收目的地址为224.0.0.13的组播报文。这样在收到Hello消息以后,直接相连的组播设备之间,就可以知道自己的邻居信息。

协商各项协议参数

Hello消息中携带多项协议参数,邻居之间通过Hello消息来进行协商,这些参数包括:

  • DR_Priority:表示各设备接口竞选DR的优先级,优先级越高越容易获胜。
  • Holdtime:表示保持邻居为可达状态的超时时间。
  • LAN_Delay:表示共享网段内传输Prune消息的延迟时间。
  • Override-Interval:表示Hello消息]中携带的否决剪枝的时间间隔。

维持邻居关系

PIM设备之间周期性地发送Hello消息。如果Holdtime超时还没有收到该PIM邻居发出的新的Hello消息,则认为该邻居不可达,将其从邻居列表中清除。

PIM邻居的变化将导致网络中组播拓扑的变化。如果组播分发树上的某上游邻居或下游邻居不可达,将导致组播路由重新收敛,组播分发树迁移。

维护邻居关系 30s 邻居超时时间105s

扩散机制

全网建立(S,G)路由表项 组播源开始发送组播数据,组播数据全网进行转发,生成(S,G )表项,表项默认老化时间210s,,超过210s没有组播数据转发,将删除表项,有组播 数据的时候重新建立表项

扩散机制会周期性(默认180s)全网扩散组播数据,周期性扩散的主要目的是探测是否有新成员加组,但是由于全网扩散组播数据会浪费大量带宽,所以现在的组播网络一般使用“状态刷新机制”加上“嫁接机制”来实现周期性全网扩散感知新成员加组的目的。

剪枝

如果路由器下游没有组成员,将向上游发起剪枝,剪到最后一个不需要发组播报文的路由器

剪枝接口会有一个计时器,210s,计时器超时,接口将加入下游接口,转发组播报文

状态刷新机制

状态刷新报文60s发一次

对于剪枝端口而言,收到状态刷新报文,计时器将重置

离组播源最近的第一跳路由器周期性触发State-Refresh消息。State-Refresh消息在全网扩散,刷新所有设备上的剪枝定时器状态,对不需要数据的下游设备始终保持剪枝状态。

嫁接

一旦有新成员加入,叶子路由器会基于本地的组播路由表向上游发送Graft报文,请求上游路由器恢复相应出接口转发,将其添加在(S,G)表项下游接口列表中。

下游发送Graft消息,请求上游恢复对应出接口的转发。上游收到Graft消息后,将下游的出接口恢复转发

断言

在组播网络中,如果出现如下情况,则说明网段上还存在着其他的组播转发者。

  • 该组播报文不能通过RPF检查。
  • 接收到该组播报文的接口是本设备上(S,G)表项中的一个下游接口。

此时,设备会执行Assert机制。设备从该下游接口发送Assert消息。同时,该下游接口也接收到了来自该网段上其他组播转发者的Assert消息Assert消息的目的地址为224.0.0.13,源地址为下游接口地址,TTL为1。Assert消息中携带该PIM设备到组播源或RP的开销、所采用的单播路由协议的优先级和组播组地址G。

设备将自身条件与对方报文中携带的信息进行比较,称为Assert竞选。规则如下

  1. 单播路由协议优先级较高者获胜。
  2. 如果优先级相同,则到组播源或RP的开销较小者获胜。
  3. 如果以上都相同,则下游接口IP地址最大者获胜。

根据Assert竞选结果,设备将执行不同的操作:

  • 如果获胜,则该下游接口保持转发状态,设备负责后续在该网段上的(S,G)转发,该下游接口称为Assert winner。
  • 如果落败,则禁止该下游接口转发组播报文,将其从(S,G)表项下游接口列表中删除。该下游接口称为Assert loser。

Assert竞选结束后,该网段上只存在一个有下游接口的上游设备,只传输一份组播报文。Assert winner周期性发送Assert消息,维持Assert winner的状态。若Assert loser的定时器超时后,Assert loser仍没有收到Assert winner的Assert消息,则重新添加下游接口转发组播数据。

图6所示,如果DeviceB和DeviceC都能够接收到组播源Source发出的组播报文,并且均能通过RPF检查,创建(S,G)表项。DeviceB、DeviceC的下游接口连接在同一网段,那么DeviceB和DeviceC就会同时向该网段发送组播数据。Assert机制可以保证一个网段只能存在一个组播数据转发者。Assert过程如下:

  1. DeviceB从下游接口接收到DeviceC发来的组播报文,RPF检查失败,报文被丢弃。同时,DeviceB向该网段发送Assert消息
  2. DeviceC将自身的路由信息与对方的Assert消息中携带的路由信息进行比较,由于自身到组播源的开销较大而落败。于是禁止该下游接口转发组播报文,将其从DeviceC的(S,G)表项的下游接口列表中删除。
  3. DeviceC从该网段接收到DeviceB发来的组播报文,RPF检查失败,报文被丢弃。Assert过程结束。

duanyan10181610

PIM SM

pimsm32

RP介绍

汇聚点RP(Rendezvous Point)为网络中一台重要的PIM路由器,用于处理源端DR注册信息及组成员加入

请求,网络中的所有PIM路由器都必须知道RP的地址,类似于一个供求信息的汇聚中心。

• 目前可以通过以下方式配置RP:

▫ 静态RP:在网络中的所有PIM路由器上配置相同的RP地址,静态指定RP的位置。

▫ 动态RP:通过选举机制在多个C-RP(Candidate-RP,候选RP)之间选举出RP。

rp1

2rp

• PIM-SM(ASM)模式首次形成组播分发树主要依赖RPT构建机制,组播源注册机制与DR选举机制。

▫ RPT构建机制:组播叶子路由器主动建立到RP的组播分发树(RPT)

▫ 组播源注册机制:通过该机制形成组播源到RP的组播分发树(SPT)

▫ DR选举机制:DR负责源端或组成员端组播报文的收发,避免重复组播报文,同时成员端DR还负责发送Join加组消息。

rpt82833

zhuce0183042

2zhuce83158

dr3316

dr1

rptciyou183410

sptqiehuan3531

• 当组播分发树(SPT或RPT)稳定后,成员端DR会周期性发送Join/Prune报文,用于维护组播分发树。

• 如果组播在一段时间后(默认210s)没有流量则SPT树会消失,成员端DR恢复到RP的RPT树。

PIM(SSM)

ssm822

• PIM-SM(SSM)无需Assert机制

Q0183905

bijiao929