转载自:IGMP技术总结

本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一、小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!

1.  IGMP 简介

IGMP 是Internet Group Management Protocol(互联网组管理协议)的简称。它是TCP/IP 协议族中负责IP 组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。

 IGMP 的版本

到目前为止,IGMP 有三个版本:

·         IGMPv1(由RFC 1112 定义)

·         IGMPv2(由RFC 2236 定义)

·         IGMPv3(由RFC 3376 定义)

所有版本的IGMP 都支持ASM(Any-Source Multicast,任意信源组播)模型;IGMPv3 可以直接应用于SSM(Source-Specific Multicast,指定信源组播)模型,而IGMPv1 和IGMPv2 则需要在IGMP SSM Mapping 技术的支持下才能应用于SSM 模型。

2. IGMPv1 工作机制

IGMPv1 主要基于查询和响应机制来完成对组播组成员的管理。

当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP 成员关系报告报文(Membership Report Message),因此只需要其中一台路由器发送IGMP 查询报文(Query Message)就足够了。这就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为IGMP查询器。

对于IGMPv1 来说,由组播路由协议(如PIM)选举出唯一的组播信息转发者DR(Designated Router,指定路由器)作为IGMP 查询器。

IGMP技术总结-LMLPHP

IGMP 查询相应示意图

如上图所示,假设Host B与Host C想要收到发往组播组G1 的组播数据,而Host A想要收到发往组播组G2 的组播数据,那么主机加入组播组以及IGMP查询器(Router B)维护组播组成员关系的基本过程如下:

(1)     主机会主动向其要加入的组播组发送IGMP 成员关系报告报文以声明加入,而不必等待IGMP查询器发来的IGMP 查询报文;

(2)     IGMP 查询器周期性地以组播方式向本地网段内的所有主机与路由器发送IGMP 查询报文(目的地址为224.0.0.1);

(3)     在收到该查询报文后,关注G1 的Host B 与Host C 其中之一(这取决于谁的延迟定时器先超时)——譬如Host B 会首先以组播方式向G1 发送IGMP 成员关系报告报文,以宣告其属于G1。由于本地网段中的所有主机和路由器都能收到Host B 发往G1 的报告报文,因此当Host C 收到该报告报文后,将不再发送同样针对G1 的报告报文,因为IGMP 路由器(Router A和Router B)已知道本地网段中有对G1 感兴趣的主机了。这个机制称为主机上的IGMP 成员关系报告抑制机制,该机制有助于减少本地网段的信息流量;

(4)     与此同时,由于Host A 关注的是G2,所以它仍将以组播方式向G2 发送报告报文,以宣告其属于G2;

(5)     经过以上的查询和响应过程,IGMP 路由器了解到本地网段中有G1 和G2 的成员,于是由组播路由协议(如PIM)生成(*,G1)和(*,G2)组播转发项作为组播数据的转发依据,其中的“*”代表任意组播源;

(6)     当由组播源发往G1 或G2 的组播数据经过组播路由到达IGMP 路由器时,由于IGMP 路由器上存在(*,G1)和(*,G2)组播转发项,于是将该组播数据转发到本地网段,接收者主机便能收到该组播数据了。

IGMPv1 没有专门定义离开组播组的报文。当运行IGMPv1 的主机离开某组播组时,将不会向其要离开的组播组发送报告报文。当网段中不再存在该组播组的成员后,IGMP 路由器将收不到任何发往该组播组的报告报文,于是IGMP 路由器在一段时间之后便删除该组播组所对应的组播转发项。

3. IGMPv2 的改进

与IGMPv1 相比,IGMPv2 增加了查询器选举机制和离开组机制。

·         查询器选举机制

在IGMPv1 中,当某共享网段上存在多个组播路由器时,由组播路由协议(如PIM)选举的指定路由器充当查询器。

在IGMPv2 中,增加了独立的查询器选举机制,其选举过程如下:

(1)     所有IGMPv2 路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送IGMP 普遍组查询(General Query)报文(目的地址为224.0.0.1);

(2)     本地网段中的其它IGMPv2 路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。通过比较, IP 地址最小的路由器将成为查询器, 其它路由器成为非查询器(Non-Querier);

(3)      所有非查询器上都会启动一个定时器(即其它查询器存在时间定时器Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的IGMP 查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。

·          离开组机制

在IGMPv1 中,主机离开组播组时不会向组播路由器发出任何通知,导致组播路由器只能依靠组播组成员查询的响应超时来获知组播组成员的离开。

而在IGMPv2 中,当一个主机离开某组播组时:

(1)     该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文;

(2)     当查询器收到该报文后, 向该主机所声明要离开的那个组播组发送特定组查询(Group-Specific Query)报文(目的地址字段和组地址字段均填充为所要查询的组播组地址);

(3)     如果该网段内还有该组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间(Max Response Time)内发送成员关系报告报文;

(4)     如果在最大响应时间内收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。

4. IGMPv3 的改进

IGMPv3 在兼容和继承IGMPv1 和IGMPv2 的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。

·         主机控制能力的增强

IGMPv3 增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),使主机在加入某组播组G的同时,能够明确要求接收或拒绝来自某特定组播源S的组播信息。当主机加入组播组时:

若要求只接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为INCLUDE Sources(S1,S2,……);

若拒绝接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为EXCLUDE Sources(S1,S2,……)。

IGMP技术总结-LMLPHP

指定源组的组播流路经

如上图所示,网络中存在Source 1(S1)和Source 2(S2)两个组播源,均向组播组G发送组播报文。Host B仅对从Source 1 发往G的信息感兴趣,而对来自Source 2 的信息没有兴趣。

如果主机与路由器之间运行的是IGMPv1 或IGMPv2,Host B 加入组播组G 时无法对组播源进行选择,因此无论Host B 是否需要,来自Source 1 和Source 2 的组播信息都将传递给Host B。

当主机与路由器之间运行了IGMPv3 之后,Host B 就可以要求只接收来自Source 1、发往G 的组播信息(S1,G),或要求拒绝来自Source 2、发往G 的组播信息(S2,G),这样就只有来自Source 1 的组播信息才能传递给Host B 了。

·          查询和报告报文功能的增强

(1)     携带源地址的查询报文

IGMPv3 不仅支持IGMPv1 的普遍组查询和IGMPv2 的特定组查询,而且还增加了对特定源组查询的支持:

§  普遍组查询报文中,既不携带组地址,也不携带源地址;

§  特定组查询报文中,携带组地址,但不携带源地址;

§ 特定源组查询报文中,既携带组地址,还携带一个或多个源地址。

(2)     包含多组记录的报告报文

IGMPv3 报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:

§ IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据。

§ IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源发往该组播组的组播数据。

§ TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE 转变为INCLUDE。

§ TO_EX:表示组播组与组播源列表之间的过滤模式由INCLUDE 转变为EXCLUDE。

§ ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。

§ BLOCK:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。

5.  组播模型分类

根据接收者对组播源处理方式的不同,组播模型分为以下三类:

·         ASM 模型:Any-Source Multicast,任意信源组播

在ASM 模型中,任意一个发送者都可以作为组播源向某组播组地址发送信息。众多接收者通过加入由该组播组地址标识的组播组以获得发往该组播组的组播信息。在ASM 模型中,接收者无法预先知道组播源的位置,但可以在任意时间加入或离开该组播组。

·          SFM 模型:Source-Filtered Multicast,信源过滤组播

该模型继承了ASM 模型,从发送者角度来看,两者的组播组成员关系完全相同。SFM 模型在功能上对ASM 模型进行了扩展。在SFM 模型中,上层软件对收到的组播报文的源地址进行检查,允许或禁止来自某些组播源的报文通过。因此,接收者只能收到来自部分组播源的组播数据。从接收者的角度来看,只有部分组播源是有效的,组播源被经过了筛选。

·         SSM 模型:Source-Specific Multicast,指定信源组播

在现实生活中,用户可能只对某些组播源发送的组播信息感兴趣,而不愿接收其它源发送的信息。该模型为用户提供了一种能够在客户端指定组播源的传输服务。

SSM 模型与ASM 模型的根本区别在于:SSM 模型中的接收者已经通过其它手段预先知道了组播源的具体位置。SSM 模型使用与ASM/SFM 模型不同的组播地址范围,直接在接收者与其指定的组播源之间建立专用的组播转发路径。

6. IP组播

§  对于IP 组播,需要关注下列问题:

·         组播源将组播信息传输到哪里?即组播寻址机制;

·         网络中有哪些接收者?即主机注册;

·         这些接收者需要从哪个组播源接收信息?即组播源发现;

·         组播信息如何传输?即组播路由。

§  IP 组播属于端到端的服务,组播机制包括以下四个部分:

·         寻址机制:借助组播地址,实现信息从组播源发送到一组接收者;

·          主机注册:允许接收者主机动态加入和离开某组播组,实现对组播成员的管理;

·          组播路由:构建组播报文分发树(即组播数据在网络中的树型转发路径),并通过该分发树将报文从组播源传输到接收者;

·          组播应用:组播源与接收者必须安装支持视频会议等组播应用的软件,TCP/IP 协议栈必须支持组播信息的发送和接收。

为了让组播源和组播组成员进行通信,需要提供网络层组播地址,即IP 组播地址。同时必须存在一种技术将IP 组播地址映射为链路层的组播MAC 地址。

§  IP 组播地址

·         IANA(Internet Assigned Numbers Authority,互联网编号分配委员会)将D类地址空间分配给IPv4组播使用,范围从224.0.0.0到239.255.255.255,具体分类及其含义如下表所示。

IPv4 组播地址的范围及含义

地址范围

含义

224.0.0.0~224.0.0.255

永久组地址。除224.0.0.0 保留不做分配外,其它地址供路由协议、拓扑查找和协议维护等使用,常用的永久组地址及其含义如表1-3 所示。对于以该范围内组播地址为目的地址的数据包来说,不论其TTL(Time to Live ,生存时间)值为多少,都不会被转发出本地网段

224.0.1.0~238.255.255.255

用户组地址,全网范围内有效。包含两种特定的组地址:232.0.0.0/8:SSM 组地址;233.0.0.0/8:GLOP 组地址

239.0.0.0~239.255.255.255

本地管理组地址,仅在本地管理域内有效。使用本地管理组地址可以灵活定义组播域的范围,以实现不同组播域之间的地址隔离,从而有助于在不同组播域内重复使用相同组播地址而不会引起冲突。详情请参见RFC 2365

说明:

·          组播组中的成员是动态的,主机可以在任何时刻加入或离开组播组。

·          GLOP 是一种AS(Autonomous System,自治系统)之间的组播地址分配机制,将AS 号填入该范围内组播地址的中间两个字节中,每个AS 都可以得到255 个组播地址。有关GLOP 的详细介绍请参见RFC 2770。

永久组地址

含义

224.0.0.1

所有系统,包括主机与路由器

224.0.0.2

所有组播路由器

224.0.0.3

未分配

224.0.0.4

DVMRP(Distance Vector Multicast Routing Protocol ,距离矢量组播路由协议)路由器

224.0.0.5

OSPF(Open Shortest Path First ,开放最短路径优先)路由器

224.0.0.6

OSPF 指定路由器/备用指定路由器

224.0.0.7

ST(Shared Tree ,共享树)路由器

224.0.0.8

ST 主机

224.0.0.9

RIP-2(Routing Information Protocol version 2 ,路由信息协议版本2)路由器

224.0.0.11

移动代理

224.0.0.12

DHCP(Dynamic Host Configuration Protocol ,动态主机配置协议)服务器/中继代理

224.0.0.13

所有PIM(Protocol Independent Multicast , 协议无关组播)路由器

224.0.0.14

RSVP(Resource Reservation Protocol ,资源预留协议)封装

224.0.0.15

所有CBT(Core-Based Tree ,有核树)路由器

224.0.0.16

指定SBM(Subnetwork Bandwidth Management ,子网带宽管理)

224.0.0.17

所有SBM

224.0.0.18

VRRP(Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)

§  以太网组播MAC 地址

·         以太网传输单播IP 报文的时候,目的MAC 地址使用的是接收者的MAC 地址。但是在传输组播数据包时,其目的地不再是一个具体的接收者,而是一个成员不确定的组,所以要使用组播MAC 地址。

·         IANA规定,IPv4 组播MAC地址的高24 位为0x01005E,第25 位为0,低23 位为IPv4 组播地址的低23 位。IPv4 组播地址与MAC地址的映射关系如下图所示。

IGMP技术总结-LMLPHP

IPv4 组播地址与MAC 地址的映射关系

·         由于IPv4 组播地址的高4 位是1110,代表组播标识,而低28 位中只有23 位被映射到IPv4 组播MAC 地址,这样IPv4 组播地址中就有5 位信息丢失。于是,就有32 个IPv4 组播地址映射到了同一个IPv4 组播MAC 地址上,因此在二层处理过程中,设备可能要接收一些本IPv4 组播组以外的组播数据,而这些多余的组播数据就需要设备的上层进行过滤了。

7. 组播协议

通常,我们把工作在网络层的IP 组播称为“三层组播”,相应的组播协议称为“三层组播协议”,包括IGMP、PIM、MSDP、MBGP等;把工作在数据链路层的IP 组播称为“二层组播”,相应的组播协议称为“二层组播协议”,包括IGMP Snooping、组播VLAN 等。

·         三层组播协议

三层组播协议包括组播组管理协议和组播路由协议两种类型,它们在网络中的应用位置如下图。

IGMP技术总结-LMLPHP

三层组播协议的应用位置

(1)     组播组管理协议

在主机和与其直接相连的三层组播设备之间通常采用组播组的管理协议IGMP(Internet Group Management Protocol,互联网组管理协议),该协议规定了主机与三层组播设备之间建立和维护组播组成员关系的机制。

(2)      组播路由协议

组播路由协议运行在三层组播设备之间,用于建立和维护组播路由,并正确、高效地转发组播数据包。组播路由建立了从一个数据源端到多个接收端的无环(loop-free)数据传输路径,即组播分发树。

对于ASM 模型,可以将组播路由分为域内和域间两大类:

·         域内组播路由用来在AS 内部发现组播源并构建组播分发树,从而将组播信息传递到接收者。在众多域内组播路由协议中,PIM(Protocol Independent Multicast,协议无关组播)是目前较为典型的一个。按照转发机制的不同,PIM 可以分为DM(Dense Mode,密集模式)和SM(Sparse Mode,稀疏模式)两种模式。

·         域间组播路由用来实现组播信息在AS 之间的传递,目前比较成型的解决方案有:MSDP(Multicast Source Discovery Protocol,组播源发现协议)能够跨越AS 传播组播源的信息;而MP-BGP(MultiProtocol Border Gateway Protocol,多协议边界网关协议)的组播扩展MBGP(Multicast BGP)则能够跨越AS 传播组播路由。

对于SSM 模型,没有域内和域间的划分。由于接收者预先知道组播源的具体位置,因此只需要借助PIM-SM 构建的通道即可实现组播信息的传输。

·         二层组播协议

二层组播协议包括IGMP Snooping和组播VLAN等,它们在网络中的应用位置如下图。

IGMP技术总结-LMLPHP

二层组播协议的应用位置

(1)     IGMP Snooping

IGMP Snooping(Internet Group Management Protocol Snooping,互联网组管理协议窥探)是运行在二层设备上的组播约束机制,通过窥探和分析主机与三层组播设备之间交互的IGMP 报文来管理和控制组播组,从而可以有效抑制组播数据在二层网络中的扩散。

(2)      组播VLAN

在传统的组播点播方式下,当连接在二层设备上、属于不同VLAN 的用户分别进行组播点播时,三层组播设备需要向该二层设备的每个VLAN 分别发送一份组播数据;而当二层设备运行了组播VLAN 之后,三层组播设备只需向该二层设备的组播VLAN 发送一份组播数据即可,从而既避免了带宽的浪费,也减轻了三层组播设备的负担。

8. 组播报文的转发机制

在组播模型中,IP 报文的目的地址字段为组播组地址,组播源向以此目的地址所标识的主机群组传送信息。因此,转发路径上的组播路由器为了将组播报文传送到各个方位的接收站点,往往需要将从一个入接口收到的组播报文转发到多个出接口。与单播模型相比,组播模型的复杂性就在于:

·         为了保证组播报文在网络中的传输,必须依靠单播路由表或者单独提供给组播使用的路由表(如MBGP 路由表)来指导转发;

·         为了处理同一设备在不同接口上收到来自不同对端的相同组播信息,需要对组播报文的入接口进行RPF(Reverse Path Forwarding,逆向路径转发)检查,以决定转发还是丢弃该报文。RPF 检查机制是大部分组播路由协议进行组播转发的基础。

9. IGMP SSM Mapping

IGMP SSM Mapping 通过在路由器上配置SSM 静态映射规则,从而为运行IGMPv1 或IGMPv2 的接收者主机提供对SSM 模型的支持。

SSM 模型要求在接收者主机所在的网段,路由器能够了解主机加入组播组时所指定的组播源。如果接收者主机上运行的是IGMPv3,则可以在IGMPv3 的报告报文中直接指定组播源的地址;如果某些接收者主机只能运行IGMPv1 或IGMPv2,则在IGMPv1 或IGMPv2 的报告报文中无法指定组播源的地址。这种情况下需要通过在路由器上配置IGMP SSM Mapping 功能,将IGMPv1 或IGMPv2报告报文中所包含的(*,G)信息映射为(G,INCLUDE,(S1,S2...))信息。

在下图所示的SSM网络中,Host A、Host B和Host C上分别运行IGMPv1、IGMPv2 和IGMPv3。

在不允许将Host A和Host B升级为IGMPv3 的情况下,若要为Host A和Host B也提供SSM组播服务,则需在Router A上使能IGMP SSM Mapping并配置相应的映射规则。

IGMP技术总结-LMLPHP

IGMP SSM Mapping组网图

配置完成后,当Router A 收到来自主机的IGMPv1 或IGMPv2 报告报文时,首先检查该报文中所携带的组播组地址G,然后根据检查结果的不同分别进行处理:

(1) 如果G 不在SSM 组地址范围内,则提供ASM 组播服务。

(2) 如果G 在SSM 组地址范围内:

§  若Router A 上没有G 对应的IGMP SSM Mapping 规则,则无法提供SSM 组播服务,丢弃该报文;

§  若Router A 上有G 对应的IGMP SSM Mapping 规则,则依据规则将报告报文中所包含的(*,G)信息映射为(G,INCLUDE,(S1,S2...))信息,可以提供SSM 组播服务。

IGMP SSM Mapping 不对IGMPv3 的报告报文进行处理。

10. IGMP Proxy

在一些简单的树型网络拓扑中,边缘设备上并不需要运行复杂的组播路由协议(如PIM),可以通过在这些设备上配置IGMP Proxying(IGMP 代理)功能,使其代理下游主机来发送IGMP 报文及维护组成员关系,并基于该关系进行组播转发。在上游设备看来,配置了IGMP Proxying 功能的设备(称为IGMP 代理设备)不再是一个PIM 邻居,而只是一台主机。

IGMP技术总结-LMLPHP

如上图所示,IGMP Proxying中定义了以下两种接口类型:

§  上行接口:又称代理接口,指IGMP 代理设备上运行IGMP Proxying 功能的接口,即朝向组播分发树树根方向的接口。由于该接口执行IGMP 协议的主机行为,因此也称为主机接口(Host Interface)。

§  下行接口:指IGMP 代理设备上除上行接口外其它运行IGMP 协议的接口,即背向组播分发树树根方向的接口。由于该接口执行IGMP 协议的路由器行为,因此也称为路由器接口(Router Interface)。

IGMP 代理设备上维护着一个组成员关系数据库(Membership Database),将所有下行接口维护的组成员关系记录都存到这个数据库中。组成员关系记录的结构如下:(Multicast-address,Filter-mode,Source-list),每条记录都是各下行接口上具有相同组地址的成员关系记录的合集。

上行接口正是依据这个数据库来执行主机行为——当收到查询报文时根据当前数据库状态响应报告报文,或者当数据库变化时主动发送报告或离开报文;而下行接口则执行路由器行为——参与查询器的选举、发送查询报文并根据报告报文维护组成员关系等。

11. 组播传输的特点

·         “组播组”是一个用IP 组播地址进行标识的接收者集合,主机通过加入某组播组成为该组播组的成员,从而可以接收发往该组播组的组播数据。组播源通常不需要加入组播组。

·         信息的发送者称为“组播源”,一个组播源可以同时向多个组播组发送信息,多个组播源也可以同时向一个组播组发送信息。

·         所有加入某组播组的主机便成为该组播组的成员,组播组中的成员是动态的,主机可以在任何时刻加入或离开组播组。组播组成员可以广泛地分布在网络中的任何地方。

·         支持三层组播功能的路由器或三层交换机统称为“组播路由器”或“三层组播设备”。组播路由器不仅能够提供组播路由功能,也能够在与用户连接的末梢网段上提供组播组成员的管理功能。组播路由器本身也可能是组播组的成员。

12. 组播技术的优点

·         提高效率:减轻信息源服务器和网络设备CPU 的负荷;

·         优化性能:减少冗余流量;

·         分布式应用:使用最少的网络资源实现点到多点应用。

13. 组播相对单播、广播的优势

·         相比单播来说,组播的优势在于:由于被传递的信息在距信息源尽可能远的网络节点才开始被复制和分发,所以用户的增加不会导致信息源负载的加重以及网络资源消耗的显著增加。

·         相比广播来说,组播的优势在于:由于被传递的信息只会发送给需要该信息的接收者,所以不会造成网络资源的浪费,并能提高信息传输的安全性;另外,广播只能在同一网段中进行,而组播可以实现跨网段的传输。

组播信息传输与电视节目传输的类比

步骤

电视节目的传送过程

组播方式的信息传输过程

1

电视台S 通过频道G 传送电视节目

组播源S 向组播组G 发送组播数据

2

用户U 将电视机的频道调至频道G

接收者U 加入组播组G

3

用户U 能够收看到由电视台S 通过频道G 传送的电视节目了

接收者U 能够收到由组播源S 发往组播组G 的组播数据了

4

用户U 关闭电视机或切换到其它频道

接收者U 离开组播组G

14. 组播技术应用

·         多媒体、流媒体的应用,如:网络电视、网络电台、实时视/音频会议;

·         培训、联合作业场合的通信,如:远程教育、远程医疗;

·         数据仓库、金融应用(股票);

·         其它任何“点到多点”的数据发布应用。

05-25 13:40