概念
组播通信是一种一对多的通信方式,组播报文(目的IP地址为组播IP地址的报文)发向一组接收者,这些接收者需要加入到相应的组播组中才会收到发往该组播组的报文。针对某个特定的组播组,即使网络中存在多个接收者,对于组播源而言,每次也只需发送一份报文,网络中的组播转发设备负责拷贝组播报文并向有需要的接口转发。一般而言,网络设备在收到组播报文后,缺省并不会对其进行转发,这些设备需要激活组播路由功能,并且维护组播路由表项,然后依据这些表项对组播报文进行合理转发
| 概念 | 描述 |
|---|---|
| 组播源(Multicast Source) | 组播流量的发送源;组播源不需要激活任何组播协议 |
| 组播接收者(Multicast Receiver) | 期望接收特定组播组流量的终端PC或者其他类型的设备;只有加入特定组播组的接收者,才会收到发往该组的组播流量 |
| 组播组(Multicast Group) | 采用一个特定的组播IP地址标识的群组,例如239.1.1.1 |
| 组播路由器(Multicast Router) | 激活了组播路由功能的路由器(防火墙、交换机);两种角色需要额外关注:“第一跳路由器(First-hop Router)”:直接面对组播源的组播路由器,它直接从组播源接收组播流浪,是组播流量进入组播网络的入口;“最后一条路由器(Last-hop Router)”:直接面对组播接收者的路由器,除了负责将其从组播网络中收到的组播流量从存在接收者的接口转发出去,同时也负责维护其直连网络中的组成员关系 |
组播IP地址
D类IPV4地址范围是224.0.0.0-239.255.255.255,D类IP不能作为源IP地址使用,只能作为目的IP地址使用,并且D类IP也不能进行子网划分
| 地址范围 | 组播IP地址分类 |
|---|---|
| 224.0.0.0-224.0.0.255 | IANA(Internet Assigned Numbers Authority)将这些地址分配于特殊用途。该类组播IP地址为永久组地址,其工作范围只限于链路本地,而不能用于组播转发。目的IP地址为此类地址的组播报文在IP头部中的TTL值通常为1.这类组播IP地址中,有一些已经被大家所熟知,例如:224.0.0.1——所有节点组播地址;224.0.0.2——所有路由器组播地址;224.0.0.5——所有OSPF路由器组播地址;224.0.0.6——所有OSPF DR组播地址;224.0.0.9——所有RIPv2路由器组播地址;224.0.0.13——所有PIMv2路由器组播地址;224.0.0.18——VRRP组播地址 |
| 224.0.1.0-231.255.255.255;233.0.0.0-238.255.255.255 | 该类IP地址为临时组地址,这种类型的组播地址全局有效 |
| 232.0.0.0-232.255.255.255 | SSM(Source Specific Multicast,特定源组播)组地址,该类IP地址为临时组地址,这些地址被用于特定源组播 |
| 239.0.0.0-239.255.255.255 | 本地管理组地址,该范围的组播地址仅在本地管理域内有效 |
组播MAC地址
第一个八位组的最低比特位标识了该MAC地址的类型,如果该比特位为0,意味着是一个单播MAC地址,如果是1则是组播MAC地址,组播MAC地址共有2^47个,占据了整个MAC地址空间的一半
组播IPv4地址相对应的组播MAC地址的高25bit是固定的(其中高24bit是0x01005e,第25个比特位为0),而剩余的23bit则从其对应的组播IPv4地址的低23bit拷贝
拓展资料,搜索“ip组播为什么只有23位是映射的”
组播IPv6地址相对应的组播MAC地址的高16bit是固定的33-33,剩余的32bit从对应的IPv6地址的低32bit拷贝而来
组播网络架构
| 架构 | 描述 |
|---|---|
| 组播源与第一跳组播路由器构成了第一部分 | 组播源无需运行任何组播协议,只需将组播报文发送出去;组播报文在传输层通常采用UDP封装,在网络层采用IP封装 |
| 网络中的组播路由器所组成的组播网络构成了第二部分 | 为了能够正确地转发组播报文,路由器需要维护组播路由表,需要组播路由协议,常见的有PIM、MOSPF、MBGP等。 |
| 最后一条路由器与组播接收者构成了第三部分 | 只有当最后一跳路由器获知其直连网段中存在某个组播组成员时,它才会向该网段转发该组播流量,否则,路由器将不会把该组播组的流量转发到这个网段。确保本地网络中的组播路由器(最后一跳路由器)知晓组成员的存在,IGMP(Internet Group Management Protocol)便是用于实现此功能 |
IGMP(Internet Group Management Protocol,因特网组管理协议)
IGMP报文采用IP封装,IP头部中的协议号为2,TTL字段值通常为1,因此IGMP报文只在本地网段内传播
- IGMPv1,只定义了基本的组成员查询及组成员关系报告机制
- IGMPv2,在IGMPv1的基础上改进,定义了组成员离开机制、支持特定组播组查询以及定义了查询器选举机制
- IGMPv3,在之前的版本基础上增加了组成员对特定组播源的限制功能,,也是SSM(Source-Specific Multicast,特定源组播)的重要组件之一
IGMPv1
| 报文 | 描述 |
|---|---|
| 成员关系查询(Membership Query)报文 | IGMP查询器使用该报文向直连网段进行查询,以便确认该网段中是否存在组播组成员。成员关系查询报文的目的IP地址是224.0.0.1(所有节点组播地址)。IGMP查询器指的是在一个网段中执行IGMP查询操作的最后一跳路由器,并且这些路由器都在接口上激活了IGMP,此时只有其中的一台路由器会成为该网段的IGMP查询器,并在该网段中执行查询操作 |
| 成员关系报告(Membership Report)报文 | 组播组成员收到路由器发送的成员关系查询报文后,会以成员关系报告报文进行回应,以便告知路由器自己所加入的组播组。当然,新加入组播组的成员无需等待路由器的成员关系查询报文,可以直接发送成员关系报文以宣告自己加组。成员关系报告报文的目的IP地址是主机期望加入的组播组的IP地址,而且报文荷载中的“组地址”字段也记录了该组播组的IP地址 |
IGMPv1报文
| 字段 | 比特 | 描述 |
|---|---|---|
| 版本(Version) | 8bit | 对于IGMPv1该字段恒为1 |
| 类型(Type) | 4bit | 对于成员关系查询报文,该字段值为1;对于成员关系报告报文,该字段值为2 |
| 校验和(Checksum) | 16bit | 校验和 |
| 未使用 | 8bit | 未使用 |
| 组地址(Group Address) | 32bit | 对于IGMPv1成员关系查询报文,该字段的值被设置为0.0.0.0;对于IGMPv1成员关系报告报文,该字段的值被设置为主机所加入的组播组地址 |
IGMPv1查询及响应
- 如图,PC1、PC2和PC3以及AR1连接到同一台交换机LSW1,并且属于相同的VLAN,使用相同的IP网段。PC1及PC3属于组播组239.1.1.1的成员,PC2属于组播组239.1.1.2的成员。在AR1的G0/0/1口激活了IGMPv1后,将在G0/0/1口周期性地(缺省以60秒为周期)发送IGMPv1成员关系查询报文,该报文的目的IP地址是224.0.0.1(所有节点组播地址),并且报文中“组地址”字段的值为0.0.0.0,该查询面向所有组播组。AR1发送的IGMPv1成员关系查询报文到达LSW1后,会被LSW1进行泛洪,因此PC1、PC2和PC3都会收到该报文
- 为了使自己能够正常地收到组播流量,组成员收到IGMPv1成员关系查询报文后需要使用IGMPv1成员关系报告报文进行回应,以便刷新IGMP路由器的相关表项。然而当网段中同一个组播组存在多个成员时,如果所有的成员都是用关系报告报文回应此查询,那么将产生多余的IGMP流量。其实在一个组播组中只需要一个组成员对成员关系查询进行回应即可,毕竟IGMP路由器只需要知道直连网段中存在某个组播组的成员,而至于存在多少个组成员,它并不关心。
- 连接在LSW1的PC都会收到AR1发送的IGMPv1成员关系查询报文,所有的PC都会在本地启动一个报告延迟计时器(Report Delay Timer),计时器的值被设置为0至10秒之间的一个随机数,当该计时器超时的时候,PC便立即发送IGMPv1成员关系报告报文。假设PC1的计时器率先超时,那么它将立即发送IGMPv1成员关系报告,这个报文的目的IP地址是239.1.1.1,封装成帧发往LSW1,LSW1将这个数据帧进行泛洪,AR1及其他PC都会收到该帧
- AR1收到这个IGMP报文后,了解到其G0/0/1接口上存在组播组239.1.1.1的成员,于是AR1将维护相关IGMP组表项及IGMP路由表项,当AR1收到发往239.1.1.1组播流量后,便将这些组播流量从该接口转发出去
- 同时,当PC3收到PC1发送的IGMPv1成员关系报告报文后(此时它的报告延迟计时器并未超时),发现PC1所加入的组播组与自己相同,于是PC3将抑制自己的成员关系报告来减少网络中多余的IGMP流量
- PC2加入的组播组是239.1.1.2,与PC1不在同一个组,因此PC2的计时器超时后,将自行发送成员关系报告报文,该报文的目的IP地址是239.1.1.2。AR1收到该报文后,了解到接口G0/0/1存在239.1.1.2的成员,因此当AR1收到发往239.1.1.2组播组的流量时,从G0/0/1口转发出去
IGMPv1组成员加入
- 当网络中某个PC想要加入某个组播时,无需等待路由器的成员关系查询,可以直接发送成员关系报告。上图假设加入PC4的组播为239.1.1.4,PC4将直接发送IGMPv1成员关系报告,该报文目的IP为239.1.1.3,AR1收到报文后,了解到G0/0/1口的直连网段中出现了组239.1.1.3的成员,于是将维护相关的IGMP组表项和IGMP路由表项,当AR1收到发往239.1.1.3的组播流量时,便会将这些流量转发到该网络中
IGMPv1组成员离开
- IGMPv1并没有明确定义组成员离开组播组的机制,当组成员离开组播组时,它只是简单地不再回应成员关系查询。假设PC1离开组播组239.1.1.1后,它将对AR1的IGMPv1成员关系查询报文不再回应。然而由于组播组239.1.1.1还存在组成员PC3,而PC3会对该查询进行回应,因此PC1的离开不会对网络产生影响。而当PC3页离开组播组后,该网络中不会再有239.1.1.1的组成员回应AR1的成员关系查询,因此AR1将在一定时间(缺省130秒)后认为该网络中不再存在组239.1.1.1的成员,因此不会再想该网络转发组播组239.1.1.1的流量
IGMPv1查询器
假设再加一台AR3,AR3的G0/0/0口激活了IGMPv1,那么AR1和AR3会进行竞争,胜出的路由器(的接口)将成为该网段的IGMP查询器。假设AR1胜出,那么AR1将以60秒为周期,向该网段发送IGMPv1成员关系查询报文,而AR3则不会发送这些报文,它只是默默地在一旁侦听AR1发送的IGMPv1成员关系查询报文,当AR1发生故障时,AR3可以随时接替工作。实际上IGMPv1并没有定义查询器的选举机制,它只能求助于PIM(Protocol Independent Multicast,协议无关组播)这样的组播路由协议,此图,AR1和AR3激活了IGMPv1和PIM,那么PIM选举产生的DR(Designated Router,指定路由器)将充当IGMPv1的查询器
IGMPv2
成员关系查询(Membership Query)
| 报文类型 | 描述 |
|---|---|
| 成员关系查询 | |
| 常规查询 | IGMP查询器使用该报文向直连网段进行查询,以确认该网段中是否存在组播组成员。由于该报文查询的是所有组播组,因此也被称为普通组查询报文。常规查询报文的目的IP地址为224.0.0.1 |
| 特定组查询 | 运行IGMPv2的主机在离开其所加入的组播组时,会主动发送一个IGMPv2离组报文,用于宣告自己离开组播组,当网络中的查询器收到这个离组报文后,需要确认该组播组中是否存在其他成员,此时该查询器便会发送特定组查询报文,该报文只针对特定的组播组进行查询,报文的目的IP地址为其所查询的组播组地址,而且报文荷载中的“组地址”字段也记录了这个组播组地址 |
| 成员关系报告(Membership Report) | 当主机加入组播组时,或者当其收到查询器发送的常规查询报文时,主机将发送成员关系报告报文,该报文的目的IP地址是主机所加入的组播组地址,而且报文荷载中的“组地址”字段也记录了该组播组地址 |
| 离组(Leave Group) | 当主机离开其所加入的组播组时,便会主动发送离组报文。离组报文的目的IP地址为224.0.0.2,报文荷载中的“组地址”字段记录了主机所要离开的组播组地址 |
| 版本1成员关系报告(Version1 Membership Report) | 该报文用于兼容IGMPv1 |
IGMPv2报文
| 字段 | 比特 | 描述 |
|---|---|---|
| 类型(Type) | 4bit | 对于成员关系查询报文,该字段值为0x11;对于成员关系报告(IGMPv2)报文,该字段值为0x16;对于离组报文,该字段值为0x17;对于版本1成员关系报告报文,该字段值为0x12 |
| 校验和(Checksum) | 16bit | 校验和 |
| 最大响应时间(Max Response Time) | 8bit | 该字段指的是主机使用成员关系报告来响应该成员关系查询报文的最长等待时间。该字段只在成员关系查询报文中被设置,在其他IGMPv2报文中被设置为0 |
| 组地址(Group Address) | 32bit | 对于常规查询报文,该字段的值被设置为0.0.0.0;对于特定组查询报文,该字段值被设置为所查询的特定组播组的IP地址。对于离组报文,该字段的值被设置为主机离开的组播组的IP地址 |
IGMPv2查询及响应
与IGMPv1大体相同。不同的是IGMPv2定义了协议自己的查询器选举机制,不再像IGMPv1那样,需要依赖组播路由协议进行查询器的选举。同时,IGMPv2可以通过最大响应时间调节组成员响应查询的速度,查询器发送的IGMPv2常规查询报文中所携带的最大响应时间缺省为10秒(可在接口视图下,使用igmp max-response-time,命令修改该时间值),当主机收到该报文时,会读取该报文中的“最大响应时间”字段的值,并启动一个报告延迟计时器,该计时器的时间被设置为一个随机数,取值范围是-0最大响应时间。当该计时器超时的时候,主机便立即发送成员关系报告;若在超时之前,主机收到一个组播组内的其他成员的成员关系报告,则会抑制自己的报告
IGMPv2组成员离开
- 组成员离开组播组时,会主动发送IGMPv2离组报文。如图,当PC1离开组播组239.1.1.1时,PC1将发送一个IGMPv2离组报文,该报文的目的IP地址是224.0.0.2(所有路由器组播地址),报文中的“组地址”字段的值被设置为239.1.1.1
- AR1收到这个离组报文后,得知有组成员要离开组播组239.1.1.1,于是AR1立即针对该组发送IGMPv2特定组查询报文,以确认该组播组中是否还有其他成员。如果在很短的时间内没有主机回应该查询,则AR1将再次发送一个IGMPv2特定组查询报文。AR1缺省以1秒为间隔发送特定组查询报文,一共发送两次(发送时间间隔及发送次数均是可配置的)。为了让可能存在的组成员尽快响应该特定组查询报文,路由器将该报文中的最大响应时间设置成缺省1秒
- PC3收到了AR1发送的IGMPv2特定组查询报文后,发现AR1正在查询的就是自己所加入的组播组,因此PC3立即发送一个IGMPv2组成员关系报告报文用于通告自己的存在
- AR1收到了PC3发送的成员关系报告后,知道了组播组239.1.1.1还有其他成员,因此它将继续维护该组的成员关系,并继续想该网段转发239.1.1.1的组播流量
- PC2发送一个IGMPv2离组报文
- 由于组播组239.1.1.2中已经没有其他组员了,因此不会有任何PC对AR1的特定组查询报文进行回应,在一段时间后,AR1将认为该网段中组播组239.1.1.2已经不存在任何成员了,因此它将不再向该网段转发239.1.1.2的组播流量
IGMPv2查询器
IGMPv2定义了查询器的选举机制:接口IP地址最小的路由器成为该网段的IGMPv2查询器。
如图,AR1和AR3激活了IGMPv2,初始情况下,双方都认为自己是查询器,因此都向该网段发送IGMPv2常规查询报文。AR1和AR2都收到对方发送的常规查询报文,它们将报文的源IP地址与自己的接口IP地址进行比较,由于AR3的G0/0/1接口IP地址更小,因此AR3为查询器,AR3会周期性发送常规查询报文;非查询器会为当前的查询器启动一个其他查询器存活计时器(Other Querier Present Timer),该计时器的时间缺省为125秒,可在接口配置视图下使用igmp timer other-querier-present命令修改,每次收到查询器发送的查询报文时,该计时器将被重置,而如果长时间没有收到查询器发送的查询报文并导致该计时器超时,那么非查询器将认为当前的查询器已经发生故障,此时新一轮查询器的选举过程将被触发
//AR1
#
multicast routing-enable
#
interface GigabitEthernet0/0/1
ip address 192.168.1.254 255.255.255.0
igmp version 2
igmp enable
igmp group-policy 2000
#
acl number 2000
rule 5 permit source 239.1.1.1 0
rule 10 permit source 239.1.1.2 0
rule 15 permit source 239.1.1.3 0
rule 20 deny
#
//AR3
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 192.168.1.253 255.255.255.0
igmp version 2
igmp enable
igmp group-policy 2000
#
acl number 2000
rule 5 permit source 239.1.1.1 0
rule 10 permit source 239.1.1.2 0
rule 15 permit source 239.1.1.3 0
rule 20 deny
#
配置完后,因为PC3的G0/0/0口IP比PC1的G0/0/1口小,因此PC3为查询器
当各PC加入相应的组播组后,如图,查询器会周期性的发送常规查询,PC们收到后会发送成员关系报告
假设此时PC1发送离组报文,查询器会发送特定组查询报文来判断239.1.1.1是否还存在组成员
上图配置,当使用acl只匹配239.1.1.1、239.1.1.2和239.1.1.3的组播组时,此时加入其他组播组就会被AR1和AR3忽略
//配置静态组播组239.1.1.10,组播源10.10.10.1
igmp static-group 239.1.1.10 source 10.10.10.1
//查看静态组表项
display igmp group static
IGMPv3
在IGMPv2的基础上主要增加了组播接收者对组播源的过滤功能,简单地说就是主机可以通过IGMPv3宣告自己期望加入的组播组,并限定或过滤特定的组播源。
ASM(Any-Source Multicast,任河源组播)
任意的设备都可以成为组播源并向网络中发送组播流量,对于接收者而言,它们事先并不晓得组播源的地址,只要它们加入了组播组,当任意的源向该组播组发送组播流量时,接收者即会收到这些流量,接收者无法对组播源进行选择。IGMPv1、IGMPv2和IGMPv3都支持ASM
SSM(Source-Specific Multicast,特定源组播)
接收者加入组播组时,可指定接收或者拒绝特定组播组发往某个组播组的流量。当然,对于SSM,接收者要求事先知道组播源的地址,。IGMPv3是SSM的重要组件之一,而IGMPv1和IGMPv2则需要借助其他手段才能够在SSM中应用
IGMPv3报文
成员关系查询(Membership Query)
| 字段 | 比特 | 描述 |
|---|---|---|
| 类型(Type) | 8bit | 对于IGMPv3成员关系查询报文,该字段的值为0x11 |
| 校验和(Checksum) | 16bit | 校验和 |
| 最大响应时间(Max Response Time) | 8bit | 主机使用IGMPv3成员关系报告来响应该成员关系查询报文的最长等待时间。 |
| 组地址(Group Address) | 32bit | 对于常规查询报文,该字段的值被设置为0.0.0.0;对于特定组和特定组/源查询报文,该字段值被设置为所查询的特定组播组的IP地址。 |
| S(Suppress Router-Side Processing,抑制路由器侧处理)标志位 | 1bit | 值为1或0时具有不同的功能。当前不做详细赘述 |
| QRV(Querier's Robustness Variable,查询器健壮系数) | 3bit | 影响组成员关系的超时时间等。IGMPv3查询器在自己发送的查询报文中设置QRV,缺省时,QRV被设置为2 |
| QQIC(Querier's Query Interval Code,查询器查询间隔) | 8bit | IGMPv3查询器发送常规查询的时间间隔,缺省时该值为60秒 |
| 组播源个数 | 16bit | 该查询报文中所包含的组播源个数。在常规查询报文或者特定组查询报文中,该字段的值为0,此时该报文将不包含任何组播源地址信息。而在特定组/源查询报文中,该字段的值为非0,此时该报文所包含的组播源地址个数取决于本字段 |
| 组播源地址(Source Address) | 32bit | 组播源地址 |
| 保留 | 4bit | 保留 |
| 成员关系查询类型 | 描述 |
|---|---|
| 常规查询(General Query) | IGMPv3查询器周期性发送常规查询报文,对网络中的所有组播组进行查询,以便维护组成员关系。由于该报文被用于查询任意的组播组中是否存在成员,因此也被称为普通组查询报文。在IGMPv3常规查询报文中,“组地址”字段的值为0.0.0.0,另外“组播源个数”字段的值也为0 |
| 特定组查询(Group-Specific Query) | 特定组查询报文只针对特定的组播组进行查询。在该报文中,“组地址”字段的值为该组播组的地址,另外“组播源个数”字段的值也为0 |
| 特定组/源查询(Group-and-Source-Specific Query) | 特定组/源查询报文用于查询网络中是否存在期望接收特定组播源发往特定组播组的流量的组成员。在该报文中,“组地址”字段的值为该组播组的地址,另外,“组播源个数”字段填充的是报文所包含的组播源地址个数,而“组播源地址”字段则填充的是报文所查询的组播源 |
成员关系报告(Membership Report)
当主机加入组播组时,或者当主机收到查询器发送的成员关系查询报文时,主机将发送成员关系报文,该报文的目的IP地址是224.0.0.22,这是IANA分配给IGMP协议的组播地址。IGMPv3中没有专门定义离组报文,IGMPv3组成员离开组播组时,使用特殊的成员关系报告报文宣告自己离开
| 字段 | 比特 | 描述 |
|---|---|---|
| 类型(Type) | 8bit | 对于IGMPv3成员关系报告报文,该字段的值为0x22 |
| 校验和(Checksum) | 16bit | 校验和 |
| 组记录个数(Number of Group Records) | 16bit | 该IGMPv3成员关系报告报文中所包含的组记录的个数 |
| 组记录(Group Record) | 32bit | 每个组记录实际上包含了多个字段,一个IGMPv3成员关系报告可能包含多个组记录 |
| 保留 | 8bit | 保留 |
组记录
| 字段 | 比特 | 描述 |
|---|---|---|
| 记录类型(Record Type) | 8bit | 6中组记录类型 |
| 附加数据长度(Auxiliary Data Length) | 8bit | 指示本报文中“附加数据”字段的长度,一般而言,该字段的值为0,因此通常IGMPv3成员关系报告报文不包含附加数据 |
| 组播源个数(Number of Source)) | 16bit | 指示报文中所包含的组播源的个数 |
| 组播地址(Multicast Address)) | 32bit | 组播组地址 |
| 组播源地址(Source Address)) | 32bit | 组播源地址 |
| 附加数据 | 32bit | 附加数据 |
| 分类 | 说明 | 组记录类型 |
|---|---|---|
| 当前状态记录(Current-State Record) | 用于对成员关系查询进行回应,并宣告当前状态 | Mode_Is_Include;Mode_Is_Exclude |
| 过滤模式改变记录(Filter-Mode-Change Record) | 用于宣告过滤模式发生变化 | Change_To_Include_Mode;Change_To_Exclude_Mode |
| 源列表改变记录(Source-List-Change Record) | 用于宣告源列表发生变化 | Allow_New_Source;Block_Old_Source |
| 组记录类型 | 说明 |
|---|---|
| Mode_Is_Include | 该组成员期望值接收该组记录中的组播源发往特定组播组的流量 |
| Mode_Is_Exclude | 该组成员期望接收除了该组记录中的组播源之外的其他组播源发往特定组播组的流量 |
| Change_To_Include_Mode | 表示过滤模式由Exclude变更为Include |
| Change_To_Exclude_Mode | 表示过滤模式由Include变更为Exclude |
| Allow_New_Source | 在当前基础上,在组播组中增加新的被允许的组播源 |
| Block_Old_Source | 在当前基础上,在组播组中过滤指定的组播源 |
IGMPv3查询及响应
- 如图,当AR1的G0/0/1口和AR3的g0/0/0口激活IGMPv3后,它们便开始在接口上发送IGMPv3常规查询报文,查询器选举过程将会被触发,IGMPv3使用与IGMPv2相同的查询器选举机制,因此接口IP更小的AR3成为查询器。随后AR3周期性在G0/0/0口发送IGMPv3常规查询报文
- 若PC1只期望接收组播源MCS1发往组播组239.1.1.1的组播流量,因此收到AR3发送的IGMPv3常规查询报文后,PC1将使用IGMPv3成员关系报告报文进行回应(当然,PC1也可主动发送成员关系报告报文)。在PC1发送的成员关系报告中,可以包含一个Mode_Is_Include类型的组记录,在该组记录中,组地址为239.1.1.1,组播源只有一个,即10.1.1.1
- AR3收到该成员关系报告后,便知道其G0/0/0口的直连网段中,存在组播组239.1.1.1成员,并且该成员只接收组播源10.1.1.1发往该组播组的流量,当它收到这些组播流量时,便会将这些流量从该接口转发出去。而如果AR3收到了其他组播源例如10.2.2.2发往239.1.1.1,那么AR3不会将这些流量从G0/0/0口转发出去
IGMPv3组成员离开
- IGMPv3没有专门定义离组报文,当组成员离开当前组播组时,使用特殊的组记录来实现。上图,假设PC1已经是组播组239.1.1.1的成员(PC1通过Mode_Is_Include类型的组记录宣告自己只接收10.1.1.1发往239.1.1.1的组播流量),现在PC1不再期望接收该组播组的流量,于是PC1发送一个IGMPv3成员关系报告,在该报告中包含Change_To_Include_Mode类型的组记录,并且在该组记录中,组地址为239.1.1.1,组播源为空
- AR3收到该报文后,将立即启动特定组/源查询过程,从g0/0/0口发送IGMPv3特定组/源查询报文,以便确认该网段中是否有其他成员期望接收组播源10.1.1.1发往239.1.1.1的组播流量,若是当前网段中没有其他成员,很短的一段时间后,AR3将删除相关IGMP组表项,不会再向该网段转发相关组播流量