网站认证要钱,动画设计师资格证,网站建设部门,wordpress 免费中文模板下载IGMP概述#xff1a;
IGMP是Internet Group Management Protocol的简称#xff0c;又被称为互联网组管理协议#xff0c;是TCP/IP协议栈中负责IPv4 组播成员注册管理的协议。IGMP 目前有3个版本IGMPv1版本(RFC1112)、IGMPv2版本(RFC2236)、 IGMPv3版本(RFC3376)。 三个版本…IGMP概述
IGMP是Internet Group Management Protocol的简称又被称为互联网组管理协议是TCP/IP协议栈中负责IPv4 组播成员注册管理的协议。IGMP 目前有3个版本IGMPv1版本(RFC1112)、IGMPv2版本(RFC2236)、 IGMPv3版本(RFC3376)。 三个版本中高版本协议兼容支持低版本协议。
IGMP协议封装在IP报头上协议号为2。其部署在组播路由器与用户主机之间路由器配置在与主机相连的接口上。用于在主机侧实现组播组成员动态加入与离开。在路由器侧实现组成员关系的维护与管理同时与上层组播路由协议进行信息交互。
所有IGMP版本都支持ASMAny-Source Multicast模型。IGMPv3可以直接应用于SSMSource-Specific Multicast模型而IGMPv1和IGMPv2则需要SSM-Mapping技术的支持。
IGMPv1 IGMPv1报文有两种类型
普遍组查询报文General Query查询器向共享网络上所有主机和路由器发送的查询报文用于了解哪些组播组存在成员。成员报告报文Report主机向组播路由器发送的报告消息用于申请加入某个组播组或者应答查询报文。
IGMPv1报文格式
Version: IGMP 版本值为1。Type报文类型该字段有以下两种取值0x1表示普遍组查询报文 0x2表示成员报告报文。ChecksumIGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位检测。Group Address组播组地址在普遍组查询报文中该字段设为0在成员报告报文中该字段为成员加入的组播组地址。
IGMPv1普遍组查询响应机制 IGMPv1协议主要基于查询和响应机制完成组播组管理。当一个网段内有多个组播路由器时只需要其中一台发送查询报文就足够了此时需要选举出一个IGMP查询器。在IGMPv1中由组播路由协议PIM选举出唯一的组播信息转发者Assert Winner或DR该部分内容后续介绍作为IGMPv1的查询器负责该网段的组成员关系查询。
例如组播网络中R1和R2连接主机网段R1为查询器在主机网段上有PC1、PC2、PC3三个接收者。假设PC1和PC2想要接收发往组播组G1的数据PC3想要接收发往组播组G2的数据。普遍组查询和响应过程如下
IGMP查询器R1发送普遍组查询报文目的地址是224.0.0.1表示同一网段内所有主机和路由器。普遍组查询报文是周期性发送的发送周期可以通过命令配置缺省每隔60秒发送一次。网段内所有主机都接收到该查询报文PC1和PC2是组播组G1成员则在本地启动定时器Timer-G1。PC3是组播组G2的成员则在本地启动定时器Timer-G2。定时器的范围为010秒之间的随机值。第一个定时器超时的主机发送针对该组的报告报文。PC1上的Timer-G1首先超时向该网段发送目的地址为G1的报告报文。也想加入组G1的PC2侦听到此报告报文则停止定时器Timer-G1不再发送针对G1的报告报文。这样报告报文被抑制可以减少网段上的流量。PC3上的Timer-G2超时向该网段发送报告报文目的地址为G2。路由器接收到报告报文后了解到本网段内存在组播组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。
抓包分析 通用组查询报文由路由器发送。 类型为0x11表示通用组查询报文默认每60s发送一次并且组播地址为0.0.0.0也是表示通用组查询。通用查询报文周期性发送是为了时时维护组播组成员的关系及时发现组成员的加入和退出把没有用的数据清理掉。目的组播地址为永久组播地址224.0.0.1的对应MAC组播表示所有的设备。 成员报告报文当设备新加入或者收到了通用查询报文以后可能就会进行回复。 类型为0x12表示成员报告报文并且组播地址为自己想加入的组播组225.0.0.1。需要注意的是本网段中有多个设备收到了查询报文按照常理就会直接回复报告报文这样如设备很多的话完全就造成了带宽的浪费所以回复报文只需要一台设备去发就可以了路由器只需要接收到一个报告就能向下发生对应的组播流量网段中所有需要对应组播流量的设备都能接收到也减少了带宽浪费。这是怎么避免的呢也就是通过定时器抑制随机0-10s只能取整数当一台设备接收到了组播成员报告自己会拆开因为目的MACIP地址为自己想加入的组播地址自己就不会发送了。同时如果路由器收到了多个组地址相同的成员报告报文也会只按照最后收到的组播成员报告进行记录。
我们可以在路由器上查看相应的IGMP状态华为设备 上图中可以看到IGMP是否开启版本为多少间隔时间并且自己是querierDR等参数。
可以通过如下命令查看——display igmp group 其中有组播组按照IP地址的报告报文每个组播组只记录最后一个报告者。Expires 时间可以理解为dead时间每次接收到刷新到130s 。
IGMPv2 IGMPv2针对V1最大的缺陷没有离组报文而进行的改进。
相比于IGMPv1除了普遍组查询报文和成员报告报文之外IGMPv2新增了两种报文
特定组查询报文Group-Specific Query查询器向共享网段内指定组播组发送的查询报文用于查询该组播组是否存在成员。需要对方在1.0秒内回复否则就不发送对应组播信息所以这里不需要老化时间老化时间用于在设备挂掉没有发送离组信息的时候使用也是130s机制和v1相同成员离开报文Leave成员离开组播组时主动向路由器发送的报文用于宣告自己离开了某个组播组。
IGMPv2报文格式
Type (8-bit)报文类型。IGMPv2与IGMPv1报文格式的区别是没有定义version字段所以前8位是标识报文类型的。该字段有以下四种取值。 0x11:表示查询报文包括普遍组查询报文和特定组查询报文。 0x12:表示IGMPv1成员报告报文。 0x16:表示IGMPv2成员报告报文。 0x17:表示成员离开报文。Max Response Time (8-bit)最大响应时间Max Response Time字段该字段仅在IGMPv2和v3中存在成员主机在收到IGMP查询者发出的普遍组查询报文后需要在最大响应时间内做出回应。此字段取值可以配置用于控制成员的响应速度。0-10.0s更加精细。在普遍组查询报文中该字段的默认值是10 .0s 在特定组查询报文中该字段默认值是1.0s。Checksum ( 16-bit)IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位校验和。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等上层协议进行选举。
拓扑描述
所有IGMPv2路由器在初始时都认为自己是查询器向本地网段内的所有主机和路由器发送普遍组查询报文。其他路由器在收到该报文后将报文的源IP地址与自己的接口地址作比较。通过比较IP地址最小的路由器将成为查询器其他路由器成为非查询器Non-Querier。RA的接口地址小于RB则R1当选为查询器。所有非查询器上都会启动一个定时器即其他查询器存在时间定时器Other Querier Present Timer其他IGMP查询器的存活时间 健壮系数 × IGMP普遍查询消息发送间隔 1/2× 最大查询响应时间。当健壮系数、IGMP普遍查询消息发送间隔和最大查询响应时间都取缺省值时其他IGMP查询器的存活时间的值为125秒。在该定时器超时前如果收到了来自查询器的查询报文则重置该定时器否则就认为原查询器失效并发起新的查询器选举过程。
华为设备上查询者存活时间igmp timer other-querier-present接口命令或timer other-querier-present全局命令用来设置“其他IGMP查询者的存活时间”计时器。如果二者同时配置接口的配置优于全局的配置。建议在同网段上的多台组播路由器上配置一致。
新增机制二离组机制 使用到新增的两个报文特定组查询报文和成员离开报文。
HostA向本地网段内的所有组播路由器目的地址为224.0.0.2发送针对组G1的离开报文。查询器收到离开报文会发送针对组G1的特定组查询报文。发送间隔和发送次数可以通过命令配置缺省情况下每隔1秒发送一次共发送两次。同时查询器启动组成员关系定时器Timer-Membership发送间隔x发送次数。该网段内还存在组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路由器兼容
当版本2的主机发现版本1的路由器后版本2的主机必须发送版本1的成员关系报告报文并且不能发送成员离开报文因为版本1没有无法识别。同一网段既有版本1路由器又有版本2路由器则查询路由器必须发送版本1报文。
IGMPv2路由器与IGMPv1主机兼容
版本2主机的成员关系报告报文必须被版本1主机的成员关系报告报文抑制否则查询者将不会知道网络中存在版本1的主机。如果查询者为版本2路由器且该查询者收到成员关系假设版本1主机在该组中离开报文则会导致版本1主机不能收到特定组的流量IGMPv1主机无法识别特定组查询报文无法进行回复所以收不到特定组的流量。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其变化如下 查询报文除了普遍组查询和特定组查询新增了特定源组查询报文Group-and-Source-Specific Query。该报文由查询器向共享网段内特定组播组成员发送用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。 报告报文不仅通知路由器主机要加入某组播组并且可以指定只接收哪些组播源发往该组的数据。IGMPv3增加了针对组播源的过滤模式INCLUDE/EXCLUDE将组播组与源列表之间的对应关系简单的表示为GINCLUDE(S1、S2…)表示只接收来自指定组播源S1、S2……发往组G的数据或GEXCLUDE(S1、S2…)表示接收除了组播源S1、S2……之外的组播源发给组G的数据即S1、S2……在接收范围之外。 取消了离组报文功能可以由报告报文代替。 取消了抑制机制是因为各个设备虽然都可能加入同一个组但是要求的组播源地址不一样因此可以看到划分的更加细致了。
IGMPv3报文格式 IGMPv3仅有两种报文类型类型为0x11的查询报文和类型为0x22的成员报告报文但出于兼容它支持并识别其他三种以前版本的报文分别是
类型为0x12的IGMPv1成员报告报文。类型为0x16的IGMPv2成员报告报文。类型为0x17的IGMPv2离开组报文。
一、查询报文格式
Type (8-bit)0x11代表查询报文。Max Response Code ( 8-bit)最大响应时间。成员主机在收到IGMP查询者发送的普遍组查询报文后需要在最大响应时间内做出回应。Checksum ( 16-bit)IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位检测。Checksum 字段在进行校验计算时设为0。当发送报文时必须计算校验和并插入到Checksum字段中去。当接收报文时校验和必须在处理该报文之前进行检验。Group Address (32-bit)组播组地址。在普遍组查询报文中该字段设为0在特定组查询报文和特定源组查询报文中该字段为要查询的组播组地址。Resv (4-bit)保留字段。发送报文时该字段设为0;接收报文时对该字段不做处理。S (suppress router- side processing) (1-bit)该比特位为1时所有收到此查询报文的其他路由器不启动定时器刷新过程但是此查询报文并不抑制查询者选举过程和路由器的主机侧处理过程。默认未置位。QRV (Querier’s Robustness Variable) (3-bit)查询者向网络通告的健壮系数(RobustnessVariable)。其他路由器接收到查询报文时如果发现该字段非0,则将自己的健壮系数调整为该字段的值;如果发现该字段为0则不做处理。默认健壮系数值为2。此参数可使查询者使用自己的健壮系统同步其他组播路由器的健壮系数QQIC (querier’s query interval code) (8-bit)IGMP查询者的查询间隔单位为s。非查询者收到查询报文时如果发现该字段非0则将自己的查询间隔参数调整为该字段的值:如果发现该字段为0则不做处理。默认值为60。Number of Sources ( 16-bit)报文中包含的组播源的数量。对于普遍组查询报文和特定组查询报文该字段为0对于特定源组查询报文该字段非0。.Source Address (32-bit)组播源地址其数量受到NumberofSources字段值大小的限制。
根据组地址和源地址的不同划分出下面三种查询报文 通用查询报文 普遍组查询报文是查询者定期向共享网段内所有主机以组播方式发送的查询报文用于发现组播组成员并维护组播组与源列表的对应关系。封装该报文的IP报文头的目的地址字段为224.0.0.1,本地网段上的所有主机和路由器都能识别并接收。 上图中可以发现QRV健壮系数为2QQIC为60表示每60s发送一次multicast address为0.0.0.0表示为通用查询报文number of sources表示报文中所带有的组播源的数量因为这是一个通用查询报文所以为0。Source Address字段为在此报文中也不存在。当子接口存在时如果路由器上发送查询信息所有子接口都会发送。 特殊组查询报文 特定组查询报文是查询者向共享网段内特定组播组成员发送的报文用于查询该组播组是否存在成员。封装该报文的 IP 报文头的目的地址宇段为被查询的组播组的 IP 地址本地网段上的所有路由器及属于该组的所有主机都能够识别并接收。组播组宇段为被查询的组播组 IP 地址。 Number of Sources 宇段为0。 上图中可以看到组播组为255.0.0.2查询有没有这个组所有其他设备想加入的没有的话就断开整个组断开流量回复时间为1.0s。其他的部分和通用查询报文相同。只有当一个组播组内所有源都退出的时候才会发送此报文进行查询。当子接口存在时如果在路由器上发送查询信息只有接收处理到对应报告消息的子接口才会发送。 特殊源组查询报文 特定组查询报文是查询者向共享网段内特定组播组成员发送的报文用于查询该组成员是否愿意接收特定源发送的数据。封装该报文的 IP 报文头的目的地址字段为被查询的组播组的 IP 地址本地网段上的所有路由器及属于该组的所有主机都能够识别并接收。组播组字段为被查询的组播组IP地址。 上图中Number of Sources字段为1报文中包含的组播源数量为1具体的组播源地址由Source Address标识为192.168.1.1。当一个组播组内有组播源退出的时候会发送此报文进行查询。当子接口存在时如果在路由器上发送查询信息只有接收处理到对应报告消息的子接口才会发送。
二、成员报告报文格式 IGMPv3成员报告报文区别于IGMPv1及v2报告报文使用组记录来表达组和源的对应关系而且如下图IGMPv3报告报文的格式中可看出在一份主机通告的成员报告报文中可携带多个组记录可同时通告多个组及源的对应给组播路由器需要的IGMPv3报告报文数量可大大减少这区别于IGMPv1v2一份报文只能携带一个组播组 Type8-bit0x22代表IGMPv3的成员报告报文。Reserved ( 8-bit)保留字段。发送报文时该字段设为0接收报文时对该字段不做处理。Checksum ( 16-bit)IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位校验和。Checksum 字段在进行校验计算时设为0。当发送报文时必须计算校验和并插入到Checksum字段中去。当接收报文时校验和必须在处理该报文之前进行检验。Number of Group Records ( 16-bit)报文中包含的组记录的数量。Group Record组记录每个组记录是一块字域 包含发送者接口当前所要表达的成员关系信息具体格式如下图 Record Type Aux Data Len辅助数据长度。在IGMPv3的报告报文中由于不存在辅助数据字段所以该字段内容为0 。Number of Sources组记录中包含的源地的数量。Multicast Address组播组地址。Sources Address组播源地址。Auxiliary data包含有关group record的额外信息。目前协议不要求使用该字域。
组记录Group Record详解 IGMPv3使用相应的过滤模式来通知路由器欲接收的组播源路由器会在接口上维护一个组记录信息依此来判断下发哪些组播流量。组记录的简单关系可表示为
(GINCLUDE, (S1、S2、S3…)) 或(GEXCLUDE (S1、 S2、 S3…))。其中INCLUDE和EXCLUDE代表过滤模式如果是“INCLUDE(S1, S2, S3)”则代表接收S1、S2、 S3 的组播流而如果是“EXCLUDE, (S1 S2 S3)” 则代表不在一份组报告报文中可同时包含多个不同类型的上述组记录但实际上组记录的类型不止上面两种可分成报告“当前状态”的组记录和“状态改变”的组记录。
一、当前状态记录 类型值为MODE_ IS_ INCLUDE表明接口对组播组的过滤模式为INCLUDE 如果源地址列表非空表明仅接收源地址所指定的组播源来的组播流但如果源地址列表空则报文无效。如果路由器发送普遍组查询主机分别回应以下报告 例回应Report (G, IS-INCLUDE (S1S2S3)) 代表当前的接口仅接收来自S1、S2、 S3发往G的组播流。 例回应Report (G1IS-INCLUDE(S1)) (G2IS- INCLUDE, (S2S3)) 代表当前接口接收S1发往G1的组播流以及S2、S3发往G2的组播流。 例回应Report (G1IS- INCLUDE, (S1)) (G1, IS-INCLUDE (S2S3))这种表达的报文不存在在一份报告中同一个组播组只能有一种类 型的组记录。 类型值为MODE IS-EXCLUDE ,表明接口对组播组的过滤模式为EXCLUDE即该接口不接收源地址列表中所列的源地址流出给特定组播组的组播流。如果源地址列表为空表明不过滤任何源来的组播流但如果源列表为非空则不接收所列源地址所发出的组播流而仅接收其他未列出的源地址发出的组播流。 例回应Report (G1IS-EXCLUDE(S1S2)) 代表当前接口不接收从源S1、S2发出的组播流接收其他源发给G1的组播流。 例回应Report (G1IS-EXCLUDE()) 代表当前接口接收来自任意源的组播流。
二、状态变化记录类型 主机接口的状态不会一直不变 会由一种状态变为另外一种状态这包含过滤模式的变化和源地址列表的变化。
过滤模式变化记录( Filter-Mode-Change Record )任何时候接口的过滤模式发生变化时即由INCLUDE变为EXCLUDE或由EXCLUDE变为INCLUDE时在主机发送的成员报告报文中包含“过滤模式变化”记录共有两种类型。 CHANGE-TO- INCLUDE-MODE表示过滤模式由EXCLUDE 转换到INCLUDE开始接收源地址列表包含的新组播源发往该组播组的数据。如果指定源地址列表为空主机将离开组播组 例主机接口当前接收状态为(G EXCLUDE(S1S2S3)) 若用户意欲接收组播源S1、S2的组播流则主机发送组记录(G, CHANGE-TO-INCLUDE, (S1, S2))。 CHANGE-TO- EXCLUDE-MODE表示过滤模式由INCLUDE 转换到EXCLUDE不接收源地址列表包含的新组播源发往该组的组播数据。 例主机当前接收状态为(G INCLUDE(S1S2)) 如改变为接收其他组播源的组播流则发送组记录(G, CHANGE-TO- EXCLUDE, (S1, S2))。
源列表变化记录( Source-List-Change Record)当主机希望接收其他组播源的组播流时会主动发送包含“通告源变化”的组记录共两种类型。
ALLOW-NEW-SOURCES 表示在现有的基础上需要再接收源地址列表包含的组播源发往该组播组的组播数据。如果当前先有的对应关系为INCLUDE则向现有源列表中添加这些组播源如果当前对应关系为EXCLUDE则从现有阻塞源列表中删除这些组播源。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(GIS-INCLUDE(S1S2))。
IGMPv3加组机制 当新成员加入到网络中会直接发送当前状态记录的报告报文例如report(GIS-INCLUDE(S1S2))。
当主机已经加了组播组了还需要加入其它主备源则可以发送状态变化记录类型来完成例如主机当前状态为(GIS-INCLUDE(S1S2))如果希望接收到S3的流量当前主机发送(G, ALLOW-NEW-SOURCES3)主机当前状态为(GIS-EXCLUDE(S1S2))如果希望接收到S3的流量当前主机发送(G, BLOCK-OLD- SOURCES3)。
所以具体如何加组和主机目前保持的状态有关。
IGMPv3离组机制 同IGMPv2不同的是在IGMPv2中添加的Leave-Group离开组报文在IGMPv3中不再使用所以在IGMPv3中主机离开组或不希望再收到来自特定源的组播流IGMPv3主机会发送带有特定含义组记录的成员报告来表达。
例主机当前状态为(GIS-INCLUDE(S1S2))如果不希望收到组播组G的任意流量当前主机发送(G, BLOCK-OLD- SOURCES1S2)如果不希望收到组播组G的S1的流量当前主机发送(GBLOCK-OLD-SOURCES1)。
所以具体如何离组和主机目前保持的状态有关。
当查询者接收到改变组播组与源列表的对应关系的报告(GBLOCK-OLD-SOURCE,SOURCE)时发现有组播源离开发送特定源组查询报文查询特定组及源的成员是否还存在。如果组成员存在且希望接收其中任意一个源的组播数据则将响应成员报告报文。路由器根据响应的组成员报告更新该组对应的源列表。如果没有接收者响应则在查询两次后每次间隔1s来自S1或/和S2的组播流将不再流下来。
IGMP组和路由表
路由器接口下会记录网段上用户主机所加入的组播组当路由器收到IGMP组加入报文后接口维护IGMP组加入信息并通知组播路由协议创建相应*G或者SG表项分别由IGMPv1v2和IGMPv3产生如果IGMPv1v2想要产生SG表项则需要使用SSM-mapping技术。只要设备接口使能了IGMP并收到组加入报文就会为每个接口维护一个组加入信息表项组表项形式如下所示 任何组播路由协议都会有组播协议路由表IGMP路由表是由IGMP协议维护的但它只有在接口没有使能PIM协议时才会存在它的作用主要是用来在组播路由协议无法工作的接口上组播最后一跳路由器连接组播接收者处使用IGMP扩展组播路由表的出接口。组播数据可以根据IGMP路由表向非PIM接口转发。以下是组播路由表示例 当接收者所在的接口没有PIM时组播报文的转发行为依据IGMP 路由表而定。但如果接口PIM协议启用组播报文是否转发到当前接口则参考PIM协议路由表即PIM协议路由表优先于IGMP协议路由表。
查看接口上IGMP的信息可以看到IGMP的版本是v2查询的时间间隔60s最大回复时间10s健壮系数等同时也可以查看到主机的IGMP加组的相关信息joins、leaves。
IGMP静态组播组
使用在某些特殊的应用场景中比如
网络中存在稳定的组播组成员。主机无法发送报告报文但是又需要将组播数据转发到该网段。为了实现组播数据的快速、稳定转发或者将组播数据引流到接口可以在组播交换机的用户侧接口上配置静态组播组。在接口上配置静态组播组后组播交换机就认为此接口网段上一直存在该组播组的成员从而转发该组的组播数据。
华为设备配置 在接口下配置静态组合对应的源[R1-GigabitEthernet0/0/0]igmp static-group 227.0.0.1 source 10.1.1.2
查看静态加入的组成员信息 dis igmp group static verbose
参考资料《HCIE路由交换学习指南》、HCIE RS培训文档