目录
一、前言
Internet 组管理协议称为IGMP协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。
IGMP包含了IGMPv1、IGMPv2、IGMPv3三个版本,目前正处于由IGMPv2向IGMPv3的过渡阶段。本篇将按照IGMP基本原理、IGMP三个版本、IGMP Snooping 几部分对IGMP协议进行介绍。
二、IGMP基本原理
(一)IGMP 定义
IGMP是“互联网管理协议”的简称,负责TCP/IP协议栈中的IPv4组播组成员注册的管理,IGMP协议运行在接收者主机和与其直接相邻的组播路由器之间,用于建立和维护成员关系。
(二)IGMP 基本工作机制
不同的 IGMP 协议版本的工作机制不同,但其基本工作机制大体如下:
① 接收者主机向所在的共享网络报告组成员关系;
② 查询器周期性地向该共享网段发送组成员查询消息;
③ 接收者主机接收到查询消息后进行响应以报告组成员关系;
④ 网段中的组播路由器依据接收到的响应来刷新组成员的存在关系。
(三)IGMPv1、v2、v3的区别
IGMP的新版本较老一版本会增加一定的主要功能,列表如下:
IGMP协议 | 各版本协议的区别(新版本增加的功能) |
---|---|
IGMPv1 | 定义了基本的组成员查询和报告机制 |
IGMPv2 | 添加了查询者选举和组成员 |
IGMPv3 | 成员可以指定接收或不接收来自某些源的报文 |
IGMP各版本的功能比较如下:
三、IGMPv1
(一)报文格式
IGMPv1报文包括普遍组查询报文(成员关系查询报文)和成员报告(成员关系报告)报文,其格式如下:
Version(IGMP版本):
在IGMPv1中,该值为1;
Type(报文类型):
0x11表示普遍组查询报文;0x12表示成员报告报文;
Checksum(IGMP报文校验和):
是对IGMP报文长度(IP报文的整个有效负载)的16位检测;
Group Adress(组播组地址):
在0x1中,该字段为0且被忽略;在0x2中,该字段为成员加入的组播组地址。
(二)组成员加入
组成员加入过程示意如下:
① 主机加入组播组时,会向该组播组中发送成员关系报告报文,表示该主机希望加入组播组。
② 当IGMP查询器接收到来自PC的成员关系报告报文后,了解到本地出现了组播组的新成员,则生成相应的转发表项,当有向该组的组播数据时,则根据该表项转发。
(三)查询与响应、响应抑制
查询与相应、相应抑制机制的过程示意如下:
① IGMP向普遍查询组的IP地址(224.0.0.1)周期性地发送普遍组查询报文;
② 收到普遍组查询报文的主机会开启定时器,定时器首先超时的主机会向普遍查询组的IP地址(224.0.0.1)发送成员关系报告。
(水平线以上是查询与响应机制)
(水平线以下是响应抑制机制)
③ 对该普遍查询组的IP地址(224.0.0.1)进行监听的其他主机收到已经由其他主机发送的成员关系报告后,抑制自身的成员关系报告发送。
(四)组成员离开
IGMPv1中组成员离开的过程示意如下:
① IGMPv1中,主机离开不会发送任何报告,直接离开;
② 当IGMP查询器连续三个查询周期没有收到离开的主机发送的成员关系报告时,则认为该主机不存在,删除该组播成员。
四、IGMPv2
IGMPv2与IGMPv1相比,增加了查询者选举和组成员离开机制。
(一)报文格式
IGMPv2包括路由器查询报文(包括普遍组查询报文和特定组查询报文)、成员报告报文、成员离开报文,其报文格式如下:
Type(报文类型):
0x11表示查询报文,包括普遍组查询报文(常规查询信息报文)和特定组查询报文;0x12表示IGMPv1成员(关系)报告报文;0x16表示IGMPv2成员(关系)报告报文;0x17表示成员离开报文;
Max Resp Time(最大响应时间):
仅存在于IGMPv2和IGMPv3中,表示成员主机收到IGMP查询报文作出回应的最大相应时间;仅在IGMPv2查询报文中有效;在普遍组查询报文中,默认值是10s;在特定组查询报文中,默认值是1s;
Checksum(IGMP报文校验和):
是对IGMP报文长度(IP报文的整个有效负载)的16位检测;
Group Adress(组播组地址):
在普遍组查询报文中,该字段为0;在特定组查询报文中,该字段为要查询的组播地址;在成员报告报文和离开报文中,该字段为成员要加入或离开的组播组地址。
(二)组成员加入
组成员加入过程示意如下:
① 主机加入组播组时,会向该组播组中发送成员关系报告报文,表示该主机希望加入组播组。
② 当IGMP查询器接收到来自PC的成员关系报告报文后,了解到本地出现了组播组的新成员,则生成相应的转发表项,当有向该组的组播数据时,则根据该表项转发。
(三)查询与响应、响应抑制
查询与相应、相应抑制机制的过程示意如下:
① IGMP向普遍查询组的IP地址(224.0.0.1)周期性地发送普遍组查询报文;
② 收到普遍组查询报文的主机会开启定时器,定时器首先超时的主机会向普遍查询组的IP地址(224.0.0.1)发送成员关系报告。
(水平线以上是查询与响应机制)
(水平线以下是响应抑制机制)
③ 对该普遍查询组的IP地址(224.0.0.1)进行监听的其他主机收到已经由其他主机发送的成员关系报告后,抑制自身的成员关系报告发送。
(四)查询器选举
IGMPv2相比IGMPv1增加了查询器的选举机制,其示意如下:
① 当路由器启动时,会主动向普遍查询组的IP地址(224.0.0.1)发送普遍查询报文;
② 当其他路由器收到该普遍查询报文后,会比较信息的源IP地址和接口IP地址;
③ IP地址小的路由器成为IGMPv2的查询器;
④ 非查询器的路由器也会收到来自查询器的普遍查询报文,当连续125秒(默认,可改)没有收到时,该路由器自动成为查询器。
(五)组成员离开
与IGMPv1相比,IGMPv2增加了离开组报告,使主机在离开时告知路由器,进而使得最后一个成员离开组时的离网延迟减少;其过程示意如下:
① 当主机离开组播组时,会向224.0.0.2发送离开组地址报文;
② 当查询器收到该离开组报文时,会向其原所在的组播组发送特定组查询以确定该组播组中是否还有其他主机;
③ 若该组播组中有其他主机,则其他主机会在收到特定组查询报文后发送成员关系报告;若该组播组中没有其他主机,则查询器在两次特定组查询没有收到成员关系报告时认为没有该组播组及组播成员,将该组播组删除。
(六)与IGMPv1兼容问题
① 同时存在IGMPv1和IGMPv2的主机
IGMPv2主机会将IGMPv1和IGMPv2的成员关系报告报文都视为IGMPv2(即接收到IGMPv2报告后也会抑制自己);IGMPv1主机会忽略IGMPv2消息(即仍然会在延时定时器到期时发送报告);
② 同时存在IGMPv1路由器和IGMPv2路由器
IGMPv1路由器将不参与查询路由器的选举或将IGMPv2路由器改为IGMPv1路由器;
② IGMPv1主机和IGMPv2路由器
由于IGMPv1主机只能发送一个IGMPv1的报告,因此IGMPv2路由器会设置一个与组相关(该组是特定的、可以同时存在IGMPv1和IGMPv2的组)的并考虑到IGMPv1主机的倒数计时器,用于通知局域网有一个版本1的主机是组成员。
③ IGMPv2主机和IGMPv1路由器
IGMPv1路由器会忽略IGMPv2报告并发送IGMPv1查询,主机接收到IGMPv1查询后会用IGMPv1报告回应。
五、IGMPv3
IGMPv3目前尚未得到广泛支持,它在IGMPv2的基础上增加了对“源过滤”功能的支持,服务于SSM模型,使得成员可以指定接收或不接收来自某些源的报文;
(一)IGMPv3 报文
IGMPv3 本身只有两种报文类型,分别为类型为 0x11 的查询报文和类型为 0x22 的成员报告报文,但出于兼容性考虑,它支持并识别其他三种以前版本的报文,分别是:
类型为 0x12 的IGMPv1 成员报告报文;类型为 0x16 的IGMPv2成员报告报文;类型为 0x17 的 IGMPv2 离开组报文。
① IGMPv3的查询报文分为普遍组查询、特定组查询及特定组及特定源查询,其格式如下:
Type(报文类型):
0x11代表查询报文。
Max Resp Time(最大响应时间):
仅存在于IGMPv2和IGMPv3中,表示成员主机收到IGMP查询报文作出回应的最大相应时间。
Checksum(IGMP报文校验和):
是对IGMP报文长度(IP报文的整个有效负载)的16位检测。
Group Adress(组播组地址):
在普遍组查询报文中,该字段为0;在特定组查询报文中,该字段为要查询的组播地址;在成员报告报文和离开报文中,该字段为成员要加入或离开的组播组地址。
Resv(保留字段):
发送报文时该字段设为0;接收报文时,对该字段不处理。
S(标志位):
该比特位为1时,所有收到此查询报文的其他路由器不启动定时器刷新过程,但是此查询报文并不抑制查询者选举过程和路由器的主机侧处理过程;默认未置位。
QRV(查询者向网络通告的健壮系数):
此参数可使查询者使用自己的健壮系统同步其他组播路由器的健壮系数;其他路由器接收到查询报文时,如果发现该字段非0,则将自己的健壮系数调整为该字段的值;如果发现该字段为0,则不做处理。默认健壮系数值为2。
QQIC(IGMP查询者的查询间隔):
非查询者收到查询报文时,如果发现该字段非0,则将自己的查询间隔参数调整为该字段的值:如果发现该字段为0,则不做处理。默认值为60。
Number of Sources(报文中包含的组播源的数量):
对于普遍组查询报文和特定组查询报文,该字段为0;对于特定源组查询报文,该字段非0。
Source Address(组播源地址):
其数量受到Number of Sources字段值大小的限制。
② IGMPv3的报告报文格式如下 :
区别于IGMPv1及v2报告报文,IGMPv3的报告报文使用组记录来表达组和源的对应关系,并且与IGMPv1、v2不同,IGMPv3的一份主机通告的成员报告报文中可携带多个组记录,可同时通告给多个组及源的对应给组播路由器,从而减少了IGMPv3报文的数量。
Type(报文类型):
0x22代表成员报告报文。
Resv(保留字段):
发送报文时该字段设为0;接收报文时,对该字段不处理。
Checksum(IGMP报文校验和):
是对IGMP报文长度(IP报文的整个有效负载)的16位检测。
Number of Group Records(报文中包含的组记录的数量):
报文中包含的组记录的数量。
Group Record(组记录):
每个组记录是一块字域, 包含发送者接口当前所要表达的成员关系信息。
IGMPv3 中组记录的格式如下:
组记录的字段说明如下:
Record Type
“Group Record”
消息类型
- MODE_IS_INCLUDE:接收源地址列表包含的源发往该组的组播数据。如果指定源地址列表为空,该消息为无效消息。
- MODE_IS_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
辅助数据长度
辅助数据长度含有在组记录中的辅助数据的实际长度,其单位是32bit字。它有可能是0,这就表示辅助数据不存在。 Number of Sources
源数量
源数量(N)字段标明在组记录中存在多少源地址。 Multicast Address
组播组地址
多播地址字段标明该组记录从属的多播IP地址。 Source Address
组播源地址
源地址[i]字段是一个数组,含有n个单播地址。n就是该记录的源数量(N)字段的值。 Additional Data
附加数据
如果收到的报告中的IP首部的数据报长度字段标明在最后一个组记录后面有附加的数据存在。IGMPv3的实现必须在计算和验证校验和的时候包含这些附加数据,但是同时必须忽略这些附加数据。当发送一个报告时,一个IGMPv3的实现在最后一个组记录后面不能包含附加数据。
(二)IGMPv3 工作机制
IGMPv3的查询是IGMPv2的基础上增加了主机包含希望或拒绝某些组的报告并且删除了抑制机制,其示意如下:
① IGMP查询器向普遍查询组的IP地址(224.0.0.1)周期性地发送普遍组查询报文;
② 每个主机都向普遍查询组的IP地址(224.0.0.1)发送成员关系报告报文,报文包括了主机希望加入或拒绝某些组播组的信息;
③ IGMP查询器收到这些成员关系报告报文后,根据其中希望或拒绝某些组播组的信息进行组播发送时的操作。
此外,IGMPv3中组成员的加入与离开与IGMPv2基本一致,不再赘述。
六、IGMP Snooping
(一)原理及作用
IGMP Snooping 用于解决组播报文在二层(数据链路层)的广播问题(将对全部设备的广播转化成对特定设备的组播,进而降低流量),用于管理和控制二层组播组,其通过监听主机发送的IGMP 报文,建立组播MAC地址表。
(二)工作机制
IGMP Snooping 的工作机制与IGMPv2的工作机制基本一致(但是存在于二层、缺少了报文的抑制功能),其工作机制示意如下:
① 运行IGMP Snooping 的二层交换机通过侦听组播路由器和主机之间的IGMP协议,建立二层的组播转发表。
② 当交换机转发组播报文时,报文按照交换机组播转发表转发。
③ 如果没有对应的组播转发表项,则泛洪到所有端口;否则,仅泛洪到有接收者的端口上去。