IGMP基础原理与实验

IGMP概述:

IGMP是Internet Group Management Protocol的简称,又被称为互联网组管理协议,是TCP/IP协议栈中负责IPv4 组播成员注册管理的协议。IGMP 目前有3个版本IGMPv1版本(RFC1112)、IGMPv2版本(RFC2236)、 IGMPv3版本(RFC3376)。 三个版本中,高版本协议兼容支持低版本协议。

IGMP协议封装在IP报头上,协议号为2。其部署在组播路由器与用户主机之间,路由器配置在与主机相连的接口上。用于在主机侧实现组播组成员动态加入与离开。在路由器侧实现组成员关系的维护与管理,同时与上层组播路由协议进行信息交互。

所有IGMP版本都支持ASM(Any-Source Multicast)模型。IGMPv3可以直接应用于SSM(Source-Specific Multicast)模型,而IGMPv1和IGMPv2则需要SSM-Mapping技术的支持。

IGMPv1:

在这里插入图片描述
IGMPv1报文有两种类型:

  1. 普遍组查询报文(General Query):查询器向共享网络上所有主机和路由器发送的查询报文,用于了解哪些组播组存在成员。
  2. 成员报告报文(Report):主机向组播路由器发送的报告消息,用于申请加入某个组播组或者应答查询报文。

IGMPv1报文格式:
在这里插入图片描述

  1. Version: IGMP 版本,值为1。
  2. Type报文类型:该字段有以下两种取值,0x1:表示普遍组查询报文; 0x2:表示成员报告报文。
  3. Checksum:IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位检测。
  4. Group Address组播组地址:在普遍组查询报文中,该字段设为0;在成员报告报文中,该字段为成员加入的组播组地址。

IGMPv1普遍组查询响应机制:
IGMPv1协议主要基于查询和响应机制完成组播组管理。当一个网段内有多个组播路由器时,只需要其中一台发送查询报文就足够了,此时需要选举出一个IGMP查询器。在IGMPv1中,由组播路由协议PIM选举出唯一的组播信息转发者(Assert Winner或DR,该部分内容后续介绍)作为IGMPv1的查询器,负责该网段的组成员关系查询。

例如,组播网络中R1和R2连接主机网段,R1为查询器,在主机网段上有PC1、PC2、PC3三个接收者。假设PC1和PC2想要接收发往组播组G1的数据,PC3想要接收发往组播组G2的数据。普遍组查询和响应过程如下:

  1. IGMP查询器(R1)发送普遍组查询报文,目的地址是224.0.0.1(表示同一网段内所有主机和路由器)。普遍组查询报文是周期性发送的,发送周期可以通过命令配置,缺省每隔60秒发送一次。
  2. 网段内所有主机都接收到该查询报文,PC1和PC2是组播组G1成员,则在本地启动定时器Timer-G1。PC3是组播组G2的成员,则在本地启动定时器Timer-G2。定时器的范围为0~10秒之间的随机值。
  3. 第一个定时器超时的主机发送针对该组的报告报文。PC1上的Timer-G1首先超时,向该网段发送目的地址为G1的报告报文。也想加入组G1的PC2侦听到此报告报文,则停止定时器Timer-G1,不再发送针对G1的报告报文。这样报告报文被抑制,可以减少网段上的流量。
  4. PC3上的Timer-G2超时,向该网段发送报告报文,目的地址为G2。
  5. 路由器接收到报告报文后,了解到本网段内存在组播组G1和G2的成员,则由组播路由协议生成(*,G1)和( ,G2)组播转发项,“”代表任意组播源。网络中一旦有组播组G1和G2的数据到达路由器,将向该网段转发。

IGMPv1新组成员加入机制:
假设在网段上新接入一个主机PC4,想加入组播组G3,但是侦听到网段中没有G3的组播数据。则不等待普遍组查询报文的到来,立即发送针对G3的报告报文。路由器收到报告报文后,了解到本网段内出现了组播组G3的成员,则生成组播转发项(*,G3)。网络中一旦有G3的数据到达路由器,将向该网段转发。

IGMPv1组成员离开机制:
IGMPv1没有专门定义离开组的报文。当主机离开组播组时,将不会再对普遍组查询报文做出回应。假设PC4退出组播组G3,当收到普遍组查询报文时,PC3不再发送针对G3的报告报文。由于网段上不存在组G3的其他成员,路由器不会收到G3的报告报文,则在一定时间(130秒,即组成员关系超时时间=IGMP普遍查询消息发送间隔 × 健壮系数 + 最大查询响应时间)后,删除G2所对应的组播转发项,也是为了保险起见。例如在同一网段还有其他设备的时候,就算原来的发送报告的设备离开了,当自己接收到了对应的查询报文,自己也会回应,组播不会断开。但是如果网段中没有了接收的设备,要白白发送130s,也是有很大的缺陷。

华为设备上,健壮系数默认为2,最大响应时间为10s。

抓包分析:

  1. 通用组查询报文:由路由器发送。
    在这里插入图片描述
    类型为0x11,表示通用组查询报文,默认每60s发送一次,并且组播地址为0.0.0.0,也是表示通用组查询。通用查询报文周期性发送是为了时时维护组播组成员的关系,及时发现组成员的加入和退出,把没有用的数据清理掉。目的组播地址为永久组播地址(224.0.0.1的对应MAC组播),表示所有的设备。

  2. 成员报告报文:当设备新加入或者收到了通用查询报文以后(可能)就会进行回复。
    在这里插入图片描述
    类型为0x12,表示成员报告报文,并且组播地址为自己想加入的组播组,225.0.0.1。需要注意的是,本网段中有多个设备收到了查询报文,按照常理就会直接回复报告报文,这样如设备很多的话,完全就造成了带宽的浪费,所以回复报文只需要一台设备去发就可以了,路由器只需要接收到一个报告就能向下发生对应的组播流量,网段中所有需要对应组播流量的设备都能接收到,也减少了带宽浪费。这是怎么避免的呢?也就是通过定时器抑制(随机0-10s,只能取整数),当一台设备接收到了组播成员报告(自己会拆开,因为目的MAC,IP地址为自己想加入的组播地址),自己就不会发送了。同时,如果路由器收到了多个组地址相同的成员报告报文,也会只按照最后收到的组播成员报告进行记录。

我们可以在路由器上查看相应的IGMP状态:(华为设备)
在这里插入图片描述
上图中,可以看到IGMP是否开启,版本为多少,间隔时间,并且自己是querier(DR)等参数。

可以通过如下命令查看——display igmp group:
在这里插入图片描述
其中有组播组(按照IP地址)的报告报文,每个组播组只记录最后一个报告者。Expires 时间(可以理解为dead时间)每次接收到刷新到130s 。

IGMPv2:

在这里插入图片描述
IGMPv2针对V1最大的缺陷,没有离组报文而进行的改进。

相比于IGMPv1,除了普遍组查询报文和成员报告报文之外,IGMPv2新增了两种报文:

  1. 特定组查询报文(Group-Specific Query):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。(需要对方在1.0秒内回复,否则就不发送对应组播信息,所以这里不需要老化时间,老化时间用于在设备挂掉,没有发送离组信息的时候使用,也是130s,机制和v1相同)
  2. 成员离开报文(Leave):成员离开组播组时主动向路由器发送的报文,用于宣告自己离开了某个组播组。

IGMPv2报文格式:
在这里插入图片描述

  1. Type (8-bit):报文类型。IGMPv2与IGMPv1报文格式的区别是没有定义version字段,所以前8位是标识报文类型的。该字段有以下四种取值。
    0x11:表示查询报文,包括普遍组查询报文和特定组查询报文。
    0x12:表示IGMPv1成员报告报文。
    0x16:表示IGMPv2成员报告报文。
    0x17:表示成员离开报文。
  2. Max Response Time (8-bit):最大响应时间(Max Response Time)字段,该字段仅在IGMPv2和v3中存在,成员主机在收到IGMP查询者发出的普遍组查询报文后,需要在最大响应时间内做出回应。此字段取值可以配置,用于控制成员的响应速度。(0-10.0s更加精细)。在普遍组查询报文中,该字段的默认值是10 .0s, 在特定组查询报文中,该字段默认值是1.0s。
  3. Checksum ( 16-bit):IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位校验和。
  4. Group Address (32-bit):组播组地址。在普遍组查询报文中,该字段设为全0。在特定组查询报文中,该字段为要查询的组播组地址。在成员报告报文和离开报文中,该字段为成员要加入或离开的组播组地址。

IGMPv2普遍组查询响应机制:
IGMPv2普遍组查询和响应机制同IGMPv1相似。

IGMPv2路由器初次成为查询者时会相继发送2次普遍组查询,间隔15s,方便迅速了解组员信息。此后,才间隔60s周期发送普遍组查询。IGMPv2的普遍组查询报文中,添加了最大响应时间字域,默认值为0x64,十进制为100, 代表10s,可调大或调小。如果不考虑报告抑制机制的作用,该值越大,由IGMP报告所引起的突发就小,而如果值越小,突发就相应变大。igmp max-response-time命令在IGMPv2中用来调整最大响应时间,最大值为25s。

成员报告抑制功能是IGMPv1/v2主机的特性,其目的用于降低主机收到查询报文后,所有成员主机都进行响应而带来的性能问题。但也因为主机间的这种报告抑制机制,组播路由器在查询时仅知道有相应组的成员存在,却无法了解到当前的组播组中有多少成员存在。

IGMPv1新组成员加入机制: 和IGMPv1相同。

新增机制一:查询者选举机制
在这里插入图片描述
IGMPv2使用独立的查询器选举机制,当共享网段上存在多个组播路由器时,IP地址最小的路由器成为查询器。而IGMPv1依赖于PIM等上层协议进行选举。

拓扑描述:

  1. 所有IGMPv2路由器在初始时都认为自己是查询器,向本地网段内的所有主机和路由器发送普遍组查询报文。
  2. 其他路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,IP地址最小的路由器将成为查询器,其他路由器成为非查询器(Non-Querier)。RA的接口地址小于RB,则R1当选为查询器。
  3. 所有非查询器上都会启动一个定时器(即其他查询器存在时间定时器Other Querier Present Timer,其他IGMP查询器的存活时间 = 健壮系数 × IGMP普遍查询消息发送间隔 +(1/2)× 最大查询响应时间。当健壮系数、IGMP普遍查询消息发送间隔和最大查询响应时间都取缺省值时,其他IGMP查询器的存活时间的值为125秒)。在该定时器超时前,如果收到了来自查询器的查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。

华为设备上,查询者存活时间igmp timer other-querier-present接口命令或timer other-querier-present全局命令用来设置“其他IGMP查询者的存活时间”计时器。如果二者同时配置,接口的配置优于全局的配置。建议在同网段上的多台组播路由器上配置一致。

新增机制二:离组机制
在这里插入图片描述
使用到新增的两个报文:特定组查询报文和成员离开报文。

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

华为设备上,可以使用igmp lastmember-queryinterval 命令或lastmember-query interval命令在接口上配置IGMP查询者在收到主机发送的IGMP离开报文时,发送IGMP特定组\源组查询报文的时间间隔。取值范围是1~5,单位是秒。

IGMPv2中,组播组中最后一个主机正常离开时,组播路由器在2s后,停止转发组播流量。但若在IGMPv2场景下最后一个主机异常离线,则组播路由器在没有收到离组报文的情况下,仍需要使用130s 来判定有没有必要再转发流量到当前网段。最好2s、最坏130s的离开延迟使IGMPv2优于IGMPv1的130s离开延迟。

IGMPv2与IGMPv1路由器兼容:
在这里插入图片描述
主机IGMPv2与IGMPv1路由器兼容

  1. 当版本2的主机发现版本1的路由器后,版本2的主机必须发送版本1的成员关系报告报文,并且不能发送成员离开报文(因为版本1没有,无法识别)。
  2. 同一网段既有版本1路由器,又有版本2路由器,则查询路由器必须发送版本1报文。

IGMPv2路由器与IGMPv1主机兼容

  1. 版本2主机的成员关系报告报文必须被版本1主机的成员关系报告报文抑制,否则查询者将不会知道网络中存在版本1的主机。如果查询者为版本2路由器,且该查询者收到成员关系(假设版本1主机在该组中)离开报文,则会导致版本1主机不能收到特定组的流量(IGMPv1主机无法识别特定组查询报文,无法进行回复,所以收不到特定组的流量)。
  2. IGMPv2路由器如果发现网络中存在版本1的主机后,该路由器会忽略后续收到的成员离开报文。

IGMPv3:

IGMPv3添加了对“源过滤”功能的支持,使系统有能力报告路由器,希望仅接收来自于特定源的组播流量,或者向路由器报告希望仅接收“除了特定源”以外的其他源发出来的组播流量。

为实现上述功能,IGMPv3 对成员报告报文做了修改,区别于IGMPv1及v2报文中仅通告加入的组播组,IGMPv3 添加了一种能够表达组和源的组记录(Group-Record),简单表达为三元组(组地址、过滤模式、源地址列表),来向组播路由器表达希望接收特定组播流的意图。例如主机发送成员报告含有一个组记录(229.1.2.3, include, (10.1.1.1,20.1.1.2)),组播路由器听到后,了解到有组播接收者希望接收源自于10.1.1.1 或20.1.1.2的发向229.1.2.3 的组播流量。组记录中,include 是一种过滤模式,和源地址列表组合使用,代表包含关系,即希望接收源地址列表中源的流量;反之,相对应的exclude 过滤模式则代表不包含,排除关系,即不接收源地址列表所列源来的组播流量。

IGMP其他版本并不支持上述过滤模式,而且接口的数据结构也相当简单。但从IGMPv3开始,新的表达方式应用于组播路由器,接口开始使用(组、过滤模式和组播源)这种表达。

IGMPv3报文变化:
IGMPv3报文包含两大类:查询报文和报告报文。相较IGMPv2,其变化如下:

  1. 查询报文,除了普遍组查询和特定组查询,新增了特定源组查询报文(Group-and-Source-Specific Query)。该报文由查询器向共享网段内特定组播组成员发送,用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。

  2. 报告报文,不仅通知路由器主机要加入某组播组,并且可以指定只接收哪些组播源发往该组的数据。IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系简单的表示为(G,INCLUDE,(S1、S2…)),表示只接收来自指定组播源S1、S2……发往组G的数据;或(G,EXCLUDE,(S1、S2…)),表示接收除了组播源S1、S2……之外的组播源发给组G的数据,即S1、S2……在接收范围之外。

  3. 取消了离组报文,功能可以由报告报文代替。

  4. 取消了抑制机制,是因为各个设备虽然都可能加入同一个组,但是要求的组播源地址不一样,因此可以看到划分的更加细致了。

IGMPv3报文格式:
IGMPv3仅有两种报文类型,类型为0x11的查询报文和类型为0x22的成员报告报文,但出于兼容,它支持并识别其他三种以前版本的报文,分别是:

  1. 类型为0x12的IGMPv1成员报告报文。
  2. 类型为0x16的IGMPv2成员报告报文。
  3. 类型为0x17的IGMPv2离开组报文。

一、查询报文格式:
在这里插入图片描述

  1. Type (8-bit):0x11代表查询报文。
  2. Max Response Code ( 8-bit):最大响应时间。成员主机在收到IGMP查询者发送的普遍组查询报文后,需要在最大响应时间内做出回应。
  3. Checksum ( 16-bit):IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位检测。Checksum 字段在进行校验计算时设为0。当发送报文时,必须计算校验和并插入到Checksum字段中去。当接收报文时,校验和必须在处理该报文之前进行检验。
  4. Group Address (32-bit):组播组地址。在普遍组查询报文中,该字段设为0;在特定组查询报文和特定源组查询报文中,该字段为要查询的组播组地址。
  5. Resv (4-bit):保留字段。发送报文时该字段设为0;接收报文时,对该字段不做处理。
  6. S (suppress router- side processing) (1-bit):该比特位为1时,所有收到此查询报文的其他路由器不启动定时器刷新过程,但是此查询报文并不抑制查询者选举过程和路由器的主机侧处理过程。默认未置位。
  7. QRV (Querier’s Robustness Variable) (3-bit):查询者向网络通告的健壮系数(RobustnessVariable)。其他路由器接收到查询报文时,如果发现该字段非0,则将自己的健壮系数调整为该字段的值;如果发现该字段为0,则不做处理。默认健壮系数值为2。此参数可使查询者使用自己的健壮系统同步其他组播路由器的健壮系数
  8. QQIC (querier’s query interval code) (8-bit):IGMP查询者的查询间隔,单位为s。非查询者收到查询报文时,如果发现该字段非0,则将自己的查询间隔参数调整为该字段的值:如果发现该字段为0,则不做处理。默认值为60。
  9. Number of Sources ( 16-bit):报文中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定源组查询报文,该字段非0。.
  10. Source Address (32-bit):组播源地址,其数量受到NumberofSources字段值大小的限制。

根据组地址和源地址的不同,划分出下面三种查询报文:

  1. 通用查询报文:
    普遍组查询报文是查询者定期向共享网段内所有主机以组播方式发送的查询报文,用于发现组播组成员,并维护组播组与源列表的对应关系。封装该报文的IP报文头的目的地址字段为224.0.0.1,本地网段上的所有主机和路由器都能识别并接收。
    在这里插入图片描述
    上图中,可以发现QRV(健壮系数)为2,QQIC为60,表示每60s发送一次,multicast address为0.0.0.0,表示为通用查询报文,number of sources表示报文中所带有的组播源的数量,因为这是一个通用查询报文,所以为0。Source Address字段为在此报文中也不存在。当子接口存在时,如果路由器上发送查询信息,所有子接口都会发送。

  2. 特殊组查询报文:
    特定组查询报文是查询者向共享网段内特定组播组成员发送的报文,用于查询该组播组是否存在成员。封装该报文的 IP 报文头的目的地址宇段为被查询的组播组的 IP 地址,本地网段上的所有路由器及属于该组的所有主机都能够识别并接收。组播组宇段为被查询的组播组 IP 地址。 Number of Sources 宇段为0。
    在这里插入图片描述
    上图中,可以看到组播组为255.0.0.2,查询有没有这个组所有其他设备想加入的,没有的话就断开整个组断开流量,回复时间为1.0s。其他的部分和通用查询报文相同。只有当一个组播组内所有源都退出的时候,才会发送此报文进行查询。当子接口存在时,如果在路由器上发送查询信息,只有接收处理到对应报告消息的子接口才会发送。

  3. 特殊源组查询报文:
    特定组查询报文是查询者向共享网段内特定组播组成员发送的报文,用于查询该组成员是否愿意接收特定源发送的数据。封装该报文的 IP 报文头的目的地址字段为被查询的组播组的 IP 地址,本地网段上的所有路由器及属于该组的所有主机都能够识别并接收。组播组字段为被查询的组播组IP地址。
    在这里插入图片描述
    上图中,Number of Sources字段为1,报文中包含的组播源数量为1,具体的组播源地址由Source Address标识,为192.168.1.1。当一个组播组内有组播源退出的时候,会发送此报文进行查询。当子接口存在时,如果在路由器上发送查询信息,只有接收处理到对应报告消息的子接口才会发送。

二、成员报告报文格式:
IGMPv3成员报告报文区别于IGMPv1及v2报告报文,使用组记录来表达组和源的对应关系,而且,如下图,IGMPv3报告报文的格式中,可看出在一份主机通告的成员报告报文中可携带多个组记录,可同时通告多个组及源的对应给组播路由器,需要的IGMPv3报告报文数量可大大减少,这区别于IGMPv1v2一份报文只能携带一个组播组:

在这里插入图片描述

  1. Type:8-bit:0x22代表IGMPv3的成员报告报文。
  2. Reserved ( 8-bit):保留字段。发送报文时该字段设为0;接收报文时,对该字段不做处理。
  3. Checksum ( 16-bit):IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位校验和。Checksum 字段在进行校验计算时设为0。当发送报文时,必须计算校验和并插入到Checksum字段中去。当接收报文时,校验和必须在处理该报文之前进行检验。
  4. Number of Group Records ( 16-bit):报文中包含的组记录的数量。
  5. Group Record组记录:每个组记录是一块字域, 包含发送者接口当前所要表达的成员关系信息,具体格式如下图:

在这里插入图片描述

  1. Record Type:
    在这里插入图片描述
  2. Aux Data Len:辅助数据长度。在IGMPv3的报告报文中,由于不存在辅助数据字段,所以该字段内容为0 。
  3. Number of Sources:组记录中包含的源地的数量。
  4. Multicast Address:组播组地址。
  5. Sources Address:组播源地址。
  6. Auxiliary data:包含有关group record的额外信息。目前协议不要求使用该字域。

组记录(Group Record)详解:
IGMPv3使用相应的过滤模式来通知路由器欲接收的组播源,路由器会在接口上维护一个组记录信息,依此来判断下发哪些组播流量。组记录的简单关系可表示为:

(G,INCLUDE, (S1、S2、S3…)) 或(G,EXCLUDE, (S1、 S2、 S3…))。其中,INCLUDE和EXCLUDE代表过滤模式,如果是“INCLUDE,(S1, S2, S3)”,则代表接收S1、S2、 S3 的组播流,而如果是“EXCLUDE, (S1, S2, S3)”, 则代表不在一份组报告报文中,可同时包含多个不同类型的上述组记录,但实际上,组记录的类型不止上面两种,可分成报告“当前状态”的组记录和“状态改变”的组记录。

一、当前状态记录:

  1. 类型值为MODE_ IS_ INCLUDE:表明接口对组播组的过滤模式为INCLUDE, 如果源地址列表非空,表明仅接收源地址所指定的组播源来的组播流,但如果源地址列表空,则报文无效。如果路由器发送普遍组查询,主机分别回应以下报告:
    例:回应Report (G, IS-INCLUDE, (S1,S2,S3)), 代表当前的接口仅接收来自S1、S2、 S3发往G的组播流。
    例:回应Report (G1,IS-INCLUDE,(S1)) (G2,IS- INCLUDE, (S2,S3)) 代表当前接口接收S1发往G1的组播流以及S2、S3发往G2的组播流。
    例:回应Report (G1,IS- INCLUDE, (S1)) (G1, IS-INCLUDE, (S2,S3))这种表达的报文不存在,在一份报告中,同一个组播组只能有一种类 型的组记录。

  2. 类型值为MODE IS-EXCLUDE ,表明接口对组播组的过滤模式为EXCLUDE,即该接口不接收源地址列表中所列的源地址流出给特定组播组的组播流。如果源地址列表为空,表明不过滤任何源来的组播流;但如果源列表为非空,则不接收所列源地址所发出的组播流,而仅接收其他未列出的源地址发出的组播流。
    例:回应Report (G1,IS-EXCLUDE,(S1,S2)), 代表当前接口不接收从源S1、S2发出的组播流,接收其他源发给G1的组播流。
    例:回应Report (G1,IS-EXCLUDE,()), 代表当前接口接收来自任意源的组播流。

二、状态变化记录类型:
主机接口的状态不会一直不变, 会由一种状态变为另外一种状态,这包含过滤模式的变化和源地址列表的变化。

过滤模式变化记录( Filter-Mode-Change Record ),任何时候接口的过滤模式发生变化时,即由INCLUDE变为EXCLUDE或由EXCLUDE变为INCLUDE时,在主机发送的成员报告报文中包含“过滤模式变化”记录,共有两种类型。

  1. CHANGE-TO- INCLUDE-MODE,表示过滤模式由EXCLUDE 转换到INCLUDE,开始接收源地址列表包含的新组播源发往该组播组的数据。如果指定源地址列表为空,主机将离开组播组:
    例:主机接口当前接收状态为(G, EXCLUDE,(S1,S2,S3)), 若用户意欲接收组播源S1、S2的组播流,则主机发送组记录(G, CHANGE-TO-INCLUDE, (S1, S2))。

  2. CHANGE-TO- EXCLUDE-MODE,表示过滤模式由INCLUDE 转换到EXCLUDE,不接收源地址列表包含的新组播源发往该组的组播数据。
    例:主机当前接收状态为(G, INCLUDE,(S1,S2)), 如改变为接收其他组播源的组播流,则发送组记录(G, CHANGE-TO- EXCLUDE, (S1, S2))。

源列表变化记录( Source-List-Change Record):当主机希望接收其他组播源的组播流时,会主动发送包含“通告源变化”的组记录,共两种类型。

  1. ALLOW-NEW-SOURCES, 表示在现有的基础上,需要再接收源地址列表包含的组播源发往该组播组的组播数据。如果当前先有的对应关系为INCLUDE,则向现有源列表中添加这些组播源;如果当前对应关系为EXCLUDE,则从现有阻塞源列表中删除这些组播源。
  2. BLOCK-OLD-SOURCES,表示在现有的基础上,不再接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则从现有源列表中删除这些组播源;如果当前对应关系为EXCLUDE,则向现有源列表中添加这些
    组播源。

例:G组播组员接收S1、S2、S3和S4组播源的组播流,如果一个接口发生源列表的变化,G组播组接收S1、S2的新的组播源的组播流,不再接收S3、S4的组播源的组播流,使用的报告报文为:Report(G, ALLOW- NEW-SOURCE, (S1, S2)) (G, BLOCK-OLD-SOURCES,(S3, S4) )。

接口状态的变化会致系统立即发送状态变化通告给路由器。报告中的组记录的类型和内容依状态变化前后接口过滤模式和源地址列表的变化而定。下表为不同场景下IGMPv3组记录的通告内容:
在这里插入图片描述
IGMPv3查询者选举机制: 和IGMPv2保持一样。

IGMPv3普遍组查询响应机制:
与IGMPv2基本相同,当主机收到了普遍组查询后,会回复当前状态记录的报告报文,例如:report(G,IS-INCLUDE,(S1,S2))。

IGMPv3加组机制:
当新成员加入到网络中,会直接发送当前状态记录的报告报文,例如:report(G,IS-INCLUDE,(S1,S2))。

当主机已经加了组播组了,还需要加入其它主备源,则可以发送状态变化记录类型来完成,例如:主机当前状态为(G,IS-INCLUDE,(S1,S2)),如果希望接收到S3的流量,当前主机发送(G, ALLOW-NEW-SOURCE,S3);主机当前状态为(G,IS-EXCLUDE,(S1,S2)),如果希望接收到S3的流量,当前主机发送(G, BLOCK-OLD- SOURCE,S3)。

所以具体如何加组,和主机目前保持的状态有关。

IGMPv3离组机制:
同IGMPv2不同的是,在IGMPv2中添加的Leave-Group离开组报文在IGMPv3中不再使用,所以在IGMPv3中主机离开组或不希望再收到来自特定源的组播流,IGMPv3主机会发送带有特定含义组记录的成员报告来表达。

例:主机当前状态为(G,IS-INCLUDE,(S1,S2)),如果不希望收到组播组G的任意流量,当前主机发送(G, BLOCK-OLD- SOURCE,S1,S2);如果不希望收到组播组G的S1的流量,当前主机发送(G,BLOCK-OLD-SOURCE,S1)。

所以具体如何离组,和主机目前保持的状态有关。

当查询者接收到改变组播组与源列表的对应关系的报告(G,BLOCK-OLD-SOURCE,SOURCE)时,发现有组播源离开,发送特定源组查询报文,查询特定组及源的成员是否还存在。如果组成员存在且希望接收其中任意一个源的组播数据,则将响应成员报告报文。路由器根据响应的组成员报告更新该组对应的源列表。如果没有接收者响应,则在查询两次后,每次间隔1s,来自S1或/和S2的组播流将不再流下来。

IGMP组和路由表:

路由器接口下会记录网段上用户主机所加入的组播组,当路由器收到IGMP组加入报文后,接口维护IGMP组加入信息并通知组播路由协议创建相应(*,G)或者(S,G)表项,分别由IGMPv1v2和IGMPv3产生,如果IGMPv1v2想要产生(S,G)表项,则需要使用SSM-mapping技术。只要设备接口使能了IGMP并收到组加入报文就会为每个接口维护一个组加入信息表项,组表项形式如下所示:
在这里插入图片描述
任何组播路由协议都会有组播协议路由表,IGMP路由表是由IGMP协议维护的,但它只有在接口没有使能PIM协议时才会存在,它的作用主要是用来在组播路由协议无法工作的接口上(组播最后一跳路由器连接组播接收者处),使用IGMP扩展组播路由表的出接口。组播数据可以根据IGMP路由表向非PIM接口转发。以下是组播路由表示例:
在这里插入图片描述
当接收者所在的接口没有PIM时,组播报文的转发行为依据IGMP 路由表而定。但如果接口PIM协议启用,组播报文是否转发到当前接口,则参考PIM协议路由表,即PIM协议路由表优先于IGMP协议路由表。

查看接口上IGMP的信息:可以看到IGMP的版本是v2,查询的时间间隔60s,最大回复时间10s,健壮系数等;同时也可以查看到主机的IGMP加组的相关信息(joins、leaves)。
以查看到对应的接口信息

IGMP静态组播组:

使用在某些特殊的应用场景中,比如:

  1. 网络中存在稳定的组播组成员。
  2. 主机无法发送报告报文,但是又需要将组播数据转发到该网段。
  3. 为了实现组播数据的快速、稳定转发,或者将组播数据引流到接口,可以在组播交换机的用户侧接口上配置静态组播组。在接口上配置静态组播组后,组播交换机就认为此接口网段上一直存在该组播组的成员,从而转发该组的组播数据。

华为设备配置:
在接口下配置静态组合对应的源[R1-GigabitEthernet0/0/0]igmp static-group 227.0.0.1 source 10.1.1.2

查看静态加入的组成员信息: dis igmp group static verbose
在这里插入图片描述

参考资料:《HCIE路由交换学习指南》、HCIE R&S培训文档

  • 14
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格洛米爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值