IGMP

一、IGMP简述

IGMP 的全称为Internet Group Management Protocol(互联网组管理协议),用于最后一跳路由器与接收者之间建立和维护组播组成员关系.

二、IGMP版本

IGMP一共分为有三个版本:
IGMPv1版本(由RFC 1112定义)
IGMPv2版本(由RFC 2236定义)
IGMPv3版本(由RFC 3376定义)
IGMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了查询器选举和组成员离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。
三个版本在演进过程中对协议报文的处理是向前兼容的,因此尽管各个版本的协议报文格式不同,但是运行IGMP高版本的路由器可以识别低版本的成员报告。即高版本兼容低版本。

IGMP版本的互操作性

以下以v1与v2举例.
1.v2主机与v1路由器
v1路由器把v2报告视为无效IGMP信息类型并忽略
2.v1主机与v2路由器
版本1的主机离组,并不发送离组报文 版本1忽略版本2的报告
3.混合版本
运行IGMPv1的路由器存在于子网中.必须强制性地为子网中的所有路由器配置IGMPv1来正常使用
所有IGMP版本都支持ASM(Any-Source Multicast)模型。IGMPv3可以直接应用于SSM(Source-Specific Multicast)模型,而IGMPv1和IGMPv2则需要SSM-Mapping技术的支持。

三、IGMPv1工作原理

IGMPv1报文格式

IGMP
type含义
成员关系查询 (0x11)
版本2成员报告(0x16)
版本1成员关系报告(0x12)
离组消息(0x17)

IGMP报文封装在IP报文中,IGMPv1报文有两种类型:
通用组查询报文(General Query):查询器向共享网络上所有主机和路由器发送的查询报文,用于了解哪些组播组存在成员。
通用组查询会向本地网段内的所有主机与路由器(allsystem/224.0.0.1)发送IGMP 查询报文
相当于学校上课前老师点名.老师即查询者,学生为接收者.
IGMP
这个老师有神经质,60s点一次名字.学生逃课他却不做记录,所以很多学生受不了他,过段时间就逃课了.
即在IGMPv1中查询者的查询周期为60s.没有离组报文,悄悄离开.
IGMP
成员报告报文(Report):主机向组播路由器发送的报告消息,用于申请加入某个组播组或者应答查询报文。
相当于学校上课前学生签到
IGMP

四、IGMPv1工作机制

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

DR选举:

1.优先级大的
2.IP地址较大的
默认DR优先级均为1.即选择IP地址较大的.
如下图 DR优先级均为默认 R4 0/0/2口地址为10.1.2.4 R5 0/0/2口地址为10.1.2.5 则选举R5为查询者
IGMPIGMPIGMP

通用组查询和响应

IGMP
如上图所示,组播网络中RouterA和RouterB连接主机网段,RouterA为查询器,在主机网段上有HostA、HostB、HostC三个接收者。假设HostA和HostB想要接收发往组播组G1的数据,HostC想要接收发往组播组G2的数据。普遍组查询和响应过程如下:

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

IGMPv1没有专门定义离开组的报文。当主机离开组播组时,将不会再对普遍组查询报文做出回应。假设HostC退出组播组G2,当收到普遍组查询报文时,HostC不再发送针对G2的报告报文。由于网段上不存在组G2的其他成员,路由器不会收到G2的报告报文,则在一定时间(130秒)后,删除G2所对应的组播转发项。
如果是HostA退出组播组G1,则路由器不会感知到他的离开,因为G1中还有成员HostB。
相当于学校上课时逃课.