IGMP协议用途
IGMP(Internet Group Management Protocol)用于维护主机和路由器之间组播组成员的协议,其功能主要是建立和维护组播组成员关系。
1、在主机侧实现组播成员动态加入与离开。
2、在路由器测实现组成员关系的维护与管理,同时支持与上层组播路由协议的信息交互。
3、接收者主机向所在的共享网络报告组成员。
4、查询器周期性的向该共享网段发送组成员查询信息。
5、接收者主机接收到查询消息后进行响应以报告组成员关系。
6、网段中的组播路由器依据接收到的响应来刷新组成员的存在信息。
IGMP的三个版本
IGMPv1
IGMPv1是在RFC 1112中定义的,本协议定义了基本的组成成员查询和报告过程,基本上已经被停用了。
报文格式:
- 版本:(version):对IGMPv1而言,该字段值为1.
- 类型:(type):指示了IGMPv1报文的报文类型。如果是成员关系查询报文,该字段值为1,若是成员关系报告报文,该字段值为2。
- 校验和:(checksum):用于校验IGMPv1报文。
- 组地址:(group address):若是IGMPv1成员关系查询报文,该字段值为0(0.0.0.0);若是IGMPv1成员关系报告报文,该字段值是主机加入组播组的组地址。
主机主动发送IGMP成员关系报告报文,表示想加入组播组中。
该报文中组播地址为主机想加入的组播组的地址
IGMPv2
GMPv2是在RFC 2236中定义的,在IGMPv1的基础上添加了组成员快速离开的机制。
组成员关系维护
前提:当同一个网段内有多个组播路由器时,IGMPv2通过查询器选举机制从中选举出唯一的查询器。
- 查询器周期性地发送通用组查询消息进行成员关系查询。
- 网段内主机收到通用组查询消息后,不同的主机会有不同的响应。
- 如果定时器超时,未侦听到其它成员响应的Report报文,则向查询器发送Report响应报文。
- 如果在定时器超时前,侦听到其它成员响应的Report报文,则不向查询器发送Report响应报文,即抑制自己的响应报文。
- 不在组播组的成员,不做任何响应。
- 在组播组的成员会在本地启动定时器。
- 查询器接收到Report消息后,了解到本网段内存在组播组成员,则生成组播转发项。网络中一旦有该组播组的数据到达路由器,将向该网段成员转发。
新组成员加入
- 主机A加入组播组G1,且侦听到网段中没有G1的组播数据。则不等待查询消息的到来,立即发送针对组G1的Report消息。
- 网段中的路由器接收到Report消息后,了解到本网段内出现了组播组G1的成员,则在组播路由表项(*,G1)中添加对应的下游接口。网络中一旦有组播组G1的数据到达路由器,将向该网段转发。
组成员离开
- 主机A退出组播组G1,发出针对G1的Leave消息。
- 收到离开组消息后,查询器发送特定组查询消息来确定是否所有组成员都已离开。
- 如果有组成员向查询器发送Report响应消息,则说明该网段还有G1的组成员,查询器不会删除(*,G1)表项中对应的下游接口。
- 如果没有组成员向查询器发送Report响应消息,则查询器删除(*,G1)表项中对应的下游接口。 IGMPv3
IGMPv3是在RFC 3376中定义的,相比IGMPv2(RFC 2236)主要有以下改进点:
- 兼容和继承 IGMPv1 和 IGMPv2 的基础上进一步增强了主机的控制能力。
- 支持指定组播源/组播组功能(即主机在加入某组播组 G 的同时能够明确地要求接收或不接收某特定组播源 S 发出的组播信息。这主要是为了配合 SSM 模型发展起来的,提供了在报文中携带组播源信息的能力,使组播成员能加入指定源的组播组。)
- 在IGMPv3中一个成员报告报文可以携带多个组播组信息(而之前的IGMP版本一个成员报告只能携带一个组播组)
- IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。例如组225.1.1.1的成员想离开这个组,则会发送:
- (225.1.1.1,CHANGE_TO_INCLUDE_MODE,(0))的报告报文,通过清空里面的指定组播源来预示要离开对应的组播组。
IGMPv3报告报文示例
- 查询报文中最大查询响应时间支持范围从IGMPv2的25.5秒扩大到3174.4秒,从而使IGMP能够适应更大的网络规模。
- 支持源过滤功能,所谓源过滤:指主机能指定接收或不接收来自特定组播源IP地址的组播数据。通过该功能可以更好的实现SSM,以支持多ISP场景。而IGMPv2只支持ASM。下面通过不同报文类型的说明,来解释源过滤功能的实现。
- 查询报文
报告报文
点播行为转换为IGMPv3报文