定义

组播组管理协议

功能

管理主机加入和离开组播组

维护本地组播组信息表

IGMPv1

主机加入

  • I.路由器向开启了IGMP的端口发送查询报文,询问该接口下有没有组播接收者
  • II.收到查询报文的主机,如果希望接收某个组的组播,则向路由器回复report报文,把希望加入的组播组地址通告给路由器;如果不希望接收任何组播,则不回复
  • III.收到report报文后,路由器就会在本地建立组播信息表,记录改组的(*、G)表项,后续将会转发该组组播

主机离开

  • 默默离开
  • 当路由器在后续的查询报文中没有收到某个组的report报文时,路由器将会把该组的(*、G)表项删除,不再转发该组组播

查询器选举

  • 一个网段中只能有一个路由器负责处理组播,该路由器就是查询器
  • IGMPv1没有查询器选举机制,只能依靠上层组播路由协议选举

成员报告抑制机制

  • 主机以组播224.0.0.1的地址发送report报文,该报文会发送至其他主机
  • 收到该report报文的主机会启动计时器(10s);在该计时器时间内,如果本机也希望加入该组播组,不会重复发送report报文

主机希望加入某个组播组,不用等到路由器发送查询报文,会直接向路由器发送report报文

IGMPv2

主机加入

  • 路由器会周期性向开启了IGMP的接口发送普遍查询报文
  • 其他和IGMPv1一致

主机离开

  • I.主机主动向路由器发送Leave报文,通告希望离开的组播组地址
  • II.路由器收到leave报文后,会发送指定组查询报文,询问该网段内是否还有主机希望接收该组的组播
  • III.如网段内还有该组接收者,则该接收者会向路由器回复membership-report报文,通告路由器本机还希望接收该组播;如果不希望接收该组播,则不回复
  • IV.如接收到membership-report报文,则不对组播组信息做任何操作;如没有接收到任何报文,则删除该组播组信息

查询器选举

  • 自动选举
  • IP地址小的优先

成员报告抑制机制

  • 与IGMPv1一致

IGMPv3

主机上维护的组播信息

  • 组地址 过滤模式 源列表
  • 主机通过发送membership-report报文向路由器通告本机当前组播信息状态、过滤模式变化、源列表变化

路由器维护的组播信息

  • 组状态 (组地址、组定时器、过滤模式、源列表)
  • 源列表 (源地址、源定时器)

主机加入

  • I.路由器发送普遍查询报文
  • II.收到普遍查询报文的主机,如果希望加入某个组播组,就会发送membership-report报文;报文格式会包含组地址、源过滤模式、源列表
  • III.路由器收到report报文后,会根据报文的汇总信息,生成相应的组播信息表项

主机离开

离开某个组播源

  • I.主动向路由器发送membership-report报文、报文会包含希望变更的组播组地址、离开的源地址
  • II.路由器收到该报文后,会发送指定组查询报文,询问是否还有其他主机希望接收该组播源在该组播地址发送的组播
  • III.如果未收到回复,路由器则在组状态中删除该组播源;如果收到,则不做任何操作

离开某个组播组

  • I.主动向路由器发送membership-report报文;报文包含希望离开的组播组和TO_IN(NULL)消息
  • II.路由器收到该报文,会发送指定组查询报文,询问是否还有其他主机希望继续接收该组播
  • III.如果未收到回复,路由器则删除该组播组的信息记录;如果收到,则不做任何操作

取消成员报告抑制机制

IGMP Snooping

  • 用于在交换机上建立二层组播信息
  • 二层交换机在不使能IGMP Snooping的情况下,默认把组播报文当做广播处理

工作原理

  • 开启IGMP Snooping后,交换机会把收到普遍查询报文的接口设置为路由器接口
  • 交换机只会把从路由器接口收到的组播报文转发至成员端口;从非路由器端口收到的组播报文丢弃
  • 交换机从某个端口收到IGMP Report报文后,就自动把该端口加入到组播转发表的成员端口
  • 交换机只会把Report报文从路由器端口转发,所有其他主机不会收到Report报文,不会触发成员报告抑制机制

组播VLAN

  • 路由器只在组播VLAN内复制数据,减轻路由器负担,节省网络带宽资源
  • 二层交换机在该组播Vlan的所有子Vlan中复制组播报文

相关命令

1
2
3
[h3c]igmp	#进入IGMP视图
[h3c]igmp version 'version' #配置IGMP版本
[h3c-GigabitEthernet0/0]igmp enable #接口开启IGMP