Datacom-HCIP-23 IGMP原理与配置
组播通信中,组播网络需要将组播数据发送给特定的组播组成员,因此组播网络需要知道组成员的位置与组成员所加的组播组。
通过IGMP(Internet Group Management Protocol,因特网组管理协议),组成员可以将加组消息发送给组播网络,从而让组播网络感知到组成员的位置和所加组播组。
本课程主要讲解IGMP的作用和基本原理,包括IGMPv1、IGMPv2和IGMPv3三个版本的原理与区别,和IGMP Snooping的工作机制、IGMP SSM Mapping工作机制、IGMP代理的工作机制。
IGMP介绍
IGMP简介
组播网络的转发困境
IP组播通信的特点是报文从一个源发出,被转发到一组特定的组播组成员。在组播通信模型中,组播源不关注接收者的位置信息,组播数据转发需要依赖组播网络才能将数据发送至组播组成员。
组播数据在进行传递时,组播网络为了将组播数据转发至组播组成员,需要知道组播组成员的位置与所加组播组。
组播网络如何感知组播组成员?
感知组播组成员
组播网络感知组播组成员有两种方法:
手工静态配置:在组播路由器上静态指定连接组播组成员的接口,静态配置组成员加组信息。
手工静态方式灵活性差,配置工作量大,但相对比较稳定,对于新上线的组成员能够快速建立组播转发通路。
动态感知:通过IGMP协议通知组播网络,组播网络根据IGMP消息感知组播组成员所在接口,以及组成员加组信息。
动态感知方式较为灵活,且配置简单,现网一般使用动态感知方式。
当组播网络获得组成员位置与加组信息后,可以基于这些信息转发组播报文。
IGMP协议的概述
IGMP是TCP/IP协议族中负责IPv4组播成员管理的协议,用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。
IGMP通过在组播组成员和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。
到目前位置,IGMP有三个版本:
IGMPv1
IGMPv2
IGMPv3
组播路由器与组成员间交互报文后会生成IGMP路由表项与IGMP组表项。
IGMP路由表项与IGMP组表项将帮助设备生成组播路由表项。
IGMP组表项与路由表项
IGMP协议会生成IGMP路由表项与IGMP组表项,组播路由表项需要基于IGMP路由表项与IGMP组表项的信息生成。
IGMP组表项是由用户主机发送的IGMP加入报文触发创建的,用于维护组加入信息并通知组播路由协议(通常所说的为PIM协议)创建相应(*,G)表项。
IGMP组表项如下:
GigabitEthernet1/0/0(192.168.1.254):
Total 1 IGMP Group reported
Group Address Last Reporter Uptime Expires
239.0.0.1 192.168.1.1 00:02:04 00:01:17
(组播组) (组成员IP)
IGMP路由表项的作用主要是用来扩展组播路由表项的出接口。
IGMP路由表项如下:
00001. (*, 239.0.0.1) //接收任意源的组播
List of 1 downstream interface
GigabitEthernet1/0/0 (192.168.1.254), //出接口
Protocol: IGMP
IGMP表项与组播路由表项
在最后一跳组播路由器(组播叶子路由器)上,组播路由表可以基于IGMP路由表项,IGMP组表项与组播协议路由表(PIM路由表)汇总后形成。
IGMP路由表项与IGMP组表项能为组播协议路由表提供组播组地址信息与出接口信息。
IGMP工作原理
IGMPv1基本概念
IGMPv1主要基于查询和响应机制完成组播组管理。
查询和响应机制由两种报文实现:
普遍组查询报文(General Query):查询器向共享网络上所有主机和路由器发送的查询报文,用于查询哪些组播组存在成员。
成员关系报告报文(Report):主机向查询器发送的报告报文,用于申请加入某个组播组或者应答查询报文。
由于IGMP报文是组播报文,因此一个多路访问网络里只需要一个组播路由器发送查询报文即可,该组播路由器被称为IGMP查询器(Querier)。
IGMPv1报文格式
IGMPv1普遍组查询报文与成员关系报告报文均为组播报文,目的地址为224.0.0.1。
IGMPv1普遍组查询报文与成员关系报告报文格式类似,其中最主要的是Version,Type,Group Address这三个字段:
IGMPv1组成员加组机制
通过普遍组查询报文与成员关系报告报文,IGMP查询器可以了解到该网段内哪些组播组存在成员。
IGMPv1组成员加组基本流程如下:
IGMPv1查询器选举机制
普遍组查询是组播报文,因此同一网段内只需要一台查询器即可查询所有组成员的加组信息。
IGMPv1没有基于IGMP的查询器选举机制,所以需要依赖组播路由协议(PIM)进行IGMP查询器选举。
IGMPv1将组播路由协议(PIM)选举出唯一的组播信息转发者(Assert Winner或DR)作为IGMPv1的查询器,负责该网段的组成员关系查询。
查询器和非查询器均能收到成员关系报告(目的地址224.0.0.1),因此均能形成IGMP路由表与IGMP组表项。
IGMPv1组成员离组机制
IGMPv1没有专门定义离开组消息,当组播组成员离开组播组时,将不会再对普遍组查询报文做出回应。
当网段内不存在特定组的组成员,IGMP查询器不会收到特定组成员的报告报文,则在一定时间(缺省值为130s)后,删除特定组所对应的组播转发表项。
IGMPv2介绍
IGMPv1在离组机制与查询器选举机制上有一定缺陷:
IGMPv1离组使用超时机制,组成员只能静默离组。在未超时的时间内,组播流量依然会被组播路由器转发。
IGMPv1查询器选举必须要依赖PIM协议,导致查询器选举不够灵活。
IGMPv2改善了IGMPv1的缺陷:
IGMPv2组成员加组机制与IGMPv1基本相同
IGMPv2增加了离开组机制
IGMPv2增加了查询器选举机制
IGMPv2能与IGMPv1兼容。
IGMPv2报文格式
为了改善组成员离开机制,IGMPv2新增了两种报文:
成员离开报文(Leave):成员离开组播组时主动向查询器发送的报文,用于宣告自己离开了某个组播组。成员离开报文目的地址为224.0.0.2。
特定组查询报文(Group-Specific Query):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。特定组查询报文目的地址为所查询组播组的组地址。
IGMPv2对普遍组查询报文格式也做了改进,添加了最大响应时间(Max Response Time)字段。此字段取值可以通过命令配置,用于控制成员对于查询报文的响应速度。
IGMPv2报文格式如下:
IGMPv2查询器选举机制
IGMPv2组成员加组机制与IGMPv1一致,不再赘述。
IGMPv2查询器选举机制与IGMPv1有较大差异。IGMPv2使用独立的查询器选举机制,当共享网段上存在多个组播路由器时,IP地址最小的路由器成为查询器。
IGMPv2组成员离开机制
IGMPv2使用成员离开报文与特定组查询报文加速感知IGMPv2组成员离开。
SSM模型带来的挑战
出于安全考虑,组播组成员可以只选择接收从特定组播源发来的组播数据。组成员需要告知组播网络,接收来自哪些特定组播源的组播流量。
IGMPv1与IGMPv2的报文中均无法携带组播源的信息,因此无法配合SSM使用(可使用SSM Mapping功能解决这个问题)。
IGMPv3主要是为了配合SSM(Source-Specific Multicast)模型发展起来的,提供了在报文中携带组播源信息的能力,即主机可以对组播源进行选择。
IGMPv3介绍
IGMPv3大部分工作机制与IGMPv2类似:
查询器选举机制一致:IP地址小的为查询器。
使用普遍组查询报文查询组成员加组信息。
使用特定组查询报文查询特定组播的成员存活情况。
IGMPv3需要支持上报组播源信息,与IGMPv2相比IGMPv3的变化如下:
IGMPv3查询报文除了包含普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-andSource-Specific Query)。
IGMPv3成员关系报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。
由于同个组播组的不同成员可能希望接收来自不同源的组播,因此IGMPv3无需成员关系报告报文抑制机制。
IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
IGMPv3报文格式 – 查询报文
IGMPv3的查询报文共有三类:
普遍组查询报文(General Query)。该报文作用与IGMPv1,IGMPv2中的普遍组查询报文作用一致。
特定组查询报文(Group-Specific Query) 。该报文作用与IGMPv2中的特定组查询报文作用一致。
特定源组查询报文(Group-and-Source-Specific Query)。该报文用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。
IGMPv3查询报文格式如下:
IGMPv3报文格式 – 成员关系报告报文
IGMPv3成员关系报告报文除了通告组成员的加组信息外,还能通告组成员希望接收的组播源信息。通告组播源主要有两种模式:
INCLUDE:希望接收来自特定组播源的组播流量
EXCLUDE:希望过滤来自特定组播源的组播流量
成员关系报告报文中的组播组信息和组播源信息的关系会记录在组记录(Group Record)字段,发送给IGMP查询器。IGMPv3成员关系报告报文的目的地址为224.0.0.22,报文格式如下:
IGMPv3组成员加组机制
IGMPv3组成员加组机制与IGMPv2类似,但有以下不同:
IGMPv3的成员关系报告报文能够携带组播源信息。
IGMPv3成员关系报告报文没有成员关系报告报文抑制机制。
IGMPv3组成员加组流程如下:
IGMPv3组成员离组机制
IGMPv3没有专门的成员离开报文,成员离开需要借助组成员关系报告实现。
IGMP查询器在收到改变源组对应关系的成员关系报告后,会发送特定源组查询报文,确认是否还有组成员存在。
IGMP各版本间的差异
IGMP特性介绍
IGMP Snooping介绍
以太网的组播转发问题
当组播数据从最后一跳路由器发往组播组成员时,往往会经过交换机。由于组播数据的目的MAC地址是组播MAC地址,默认情况下交换机将泛洪此类数据帧,有可能导致不同组的组播流量会被别组的成员接收。
IGMP Snooping功能可以控制组播流量在以太网的泛洪范围,避免不同组的组播流量被别组成员接收。
IGMP Snooping介绍
IGMP Snooping可以实现组播数据在数据链路层的转发和控制。
当主机和上游三层设备之间传递的IGMP协议报文通过二层组播设备时,IGMP Snooping分析报文携带的信息,根据这些信息建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发。
IGMP Snooping端口与转发表介绍
二层组播转发表项中存在两类接口:
路由器端口(Router Port):二层组播设备上朝向三层组播设备(DR或IGMP查询器)一侧的接口,二层组播设备从此接口接收组播数据报文。
成员端口(Member Port):又称组播组成员端口,表示二层组播设备上朝向组播组成员一侧的端口,二层组播设备往此接口发送组播数据报文。
IGMP Snooping工作原理 –形成转发表项
IGMP Snooping设备通过监听IGMP报文,形成二层组播转发表,并决定接口类型,具体过程如下:
IGMP Snooping设备通过监听IGMP离开报文,IGMP成员关系报告报文决定特定端口是否还需要发送特定组播,具体过程如下:
IGMP SSM Mapping介绍
IGMP SSM Mapping介绍
现网中存在部分只能运行IGMPv1与IGMPv2的老旧终端,在部署SSM模式的组播时,由于IGMPv1与IGMPv2报文中无法携带组播源信息,因此无法使用SSM模式的组播网络。
IGMP SSM Mapping通过静态的将组播源与组播组进行绑定,使得IGMPv1与IGMPv2的组成员也能接入SSM组播网络。
IGMP SSM Mapping工作原理
在IGMP查询器上静态配置SSM地址的映射规则,将IGMPv1或IGMPv2成员关系报告中的组信息映射为源组信息。
IGMP SSM Mapping工作原理如下:
IGMP代理介绍
IGMP Proxy介绍
现网中可能存在一台IGMP查询器需要管理大量组成员的情况,大量成员主机频繁加入/离开组播组时,会产生大量的IGMP成员关系报告/离开报文,从而给IGMP查询器带来较大的处理压力。
通过IGMP Proxy功能可减少IGMP查询器接收IGMP成员关系报告/离开报文的数量,减轻IGMP查询器压力。
IGMP Proxy通常被部署在IGMP查询器和成员主机之间的三层设备上。
IGMP Proxy基本概念
为了缓解IGMP查询器压力,IGMP Proxy设备将成员关系报告/离开报文汇聚后统一上送给IGMP查询器。
IGMP Proxy设备也可以代理IGMP查询器向成员主机发送查询报文,维护组成员关系,基于组成员关系进行组播转发。
为了实现以上功能,IGMP Proxy定义了两类接口:
主机接口(Host Interface):IGMP Proxy设备上配置IGMP Proxy功能的接口,该接口一般面向IGMP查询器。
路由器接口(Router Interface):IGMP Proxy设备上配置IGMP功能的接口,该接口一般面向组成员。
IGMP Proxy工作机制 – 成员加组
IGMP Proxy减少成员关系报告报文的工作机制如下:
路由器接口作为IGMP接口,对下呈现为IGMP查询器,发送查询报文,处理成员关系报告报文,形成IGMP表项,并将成员关系报告从主机接口发送给上游的IGMP查询器。
当新用户加入同一个组播组时,IGMP Proxy设备不会再向IGMP查询器反馈成员关系报告报文,因此减少了成员关系报告报文数量。
IGMP Proxy工作机制 – 成员离组
IGMP Proxy减少离组报文的工作机制如下:
当组成员离开时,IGMP Proxy通过IGMP离组机制确定是否有特定组播组的组成员,当确定已经没有组成员后才发送离开报文给上游IGMP查询器。
IGMP配置
IGMP协议的基本配置
- 使能IGMP功能
[Huawei - GigabitEthernet1/0/0] igmp enable
- 配置IGMP版本
[Huawei - GigabitEthernet1/0/0] igmp version number
- 全局使能IGMP snopping功能
[Huawei ]igmp-snooping enable
- VLAN下使能IGMP代理功能
[Huawei-vlan10] igmp-snooping proxy
- 在接口下使能IGMP SSM Mapping
[Huawei - GigabitEthernet1/0/0] igmp ssm-mapping enable
6.在IGMP视图下配置静态SSM映射关系。
[Huawei-igmp] ssm-mapping group-address group-mask source-address
7.查看接口的IGMP配置和运行信息
<Huawei>display igmp interface
- 查看加入组播组的成员信息
<Huawei>display igmp group
- 查看二层组播转发表
<Huawei>display I2-multicast forwarding-table vlan vlan-id
10.查看IGMP SSM Mapping静态映射关系
<Huawei>display igmp ssm-mapping
IGMP基础实验
在上述路由器配置IGMP协议,实现IP组播成员管理。通过配置RTA的GE0/0/1口使能IGMP协议,RTA成为查询器负责发送接收IGMP报文
RTA的配置如下:
[RTA]multicast routing-enable
[RTA]interface g0/0/1
[RTA-GigabitEthernet0/0/1]ip address 192.168.1.1 24
[RTA-GigabitEthernet0/0/1]igmp enable
[RTA-GigabitEthernet0/0/1]igmp version 2
IGMP配置验证
在路由器RTA上查看查看接口的IGMP配置和运行信息。