IP组播协议基础3(IGMPv1)

1 IPv4组播协议

要实现一套完整的组播服务,需要在网络各个位置部署多种组播协议相互配合,共同运作。但不同结构的组播网络所需使用的组播协议不完全一样。IPv4组播网络中所涉及的主要组播协议有以下几个。
在这里插入图片描述

1.1 IGMP和MDL

接收者信息的收集和管理的工作通过 IGMP(Internet Group Management Protocol,因特网组管理协议)或MLD(Multicast Listener Discovery,组播监听器发现)协议来完成的。其中,IGMP用于IPv4网络,MLD用于IPv6网络。用于为主机侧提供组播组成员动态加入与离开服务,为路由器侧提供组成员关系的维护与管理服务,同时与上层组播路由协议进行信息交互。

IGMP包含3个版本,分别是IGMPv1、IGMPv2和IGMPv3。新版本完全兼容旧版本。目前应用最广泛的是IGMPv2。在组播模型方面,3个版本都支持ASM模型;IGMPv3可以直接支持SSM模型,而IGMPv1和IGMPv2需要结合SSM-Mapping技术才能支持SSM模型。

在 IPv6 组播中使用 MLD 协议来替代 IGMP 协议,也是一种三层组播协议。MLD包含两个版本,分别是MLDv1和MLDv2。MLDv1的功能与IGMPv2相似;MLDv2的功能与IGMPv3相似。两个MDL版本都支持ASM模型;MLDv2可以直接支持SSM模型,而MLDv1也需要结合SSM-Mapping技术才能支持SSM模型。

1.2 IGMP Snooping和MLD Snooping

IGMP Snooping和MLD Snooping协议是运行在组播路由器和用户主机之间的二层交换机上的二层组播协议,配置在VLAN内。其中,IGMP Snooping用于 IPv4网络,MLD Snooping用于 IPv6网络,用来侦听路由器和主机之间发送的 IGMP、MLD报文建立组播数据的二层转发表,从而管理和控制组播数据在二层网络中的转发。

1.3 PIM和MSDP

组播报文转发路径的建立,有多种组播路由协议可以完成。目前应用广泛的是PIM(Protocol Independent Multicast,协议无关组播)协议。PIM是一种域内组播路由协议,当跨PIM域传递组播源信息时,需要MSDP(Multicast Source Discovery Protocol,组播源发现协议)支持;当跨AS域建立组播路由时则同时需要MSDP和MBGP(MultiProtocol Border Gateway Protocol,组播边界网关协议)支持。

PIM是用于IPv4 或 IPv6 组播网络(对应 IPv4 PIM版本和 IPv6 PIM版本)中域内组播路由器之间的组播路由与转发,用来在自治系统 AS 内发现组播源并构建组播分发树,将信息传递到接收者。在一个小型网络中,所有的组播路由器都在一个PIM组播域内。它可以动态响应网络拓扑变化,维护组播路由表,并按照路由表项执行转发。

PIM有两套独立的模式:

  • DM(Dense Mode):适用于小规模、接收者分布较为密集的情况,支持 ASM模型。
  • SM(Sparse Mode):适用于大规模、接收者分布较为稀疏的情况,同时支持ASM模型和SSM模型。

2 IPv4组播应用

图2-1是一个典型的单PIM 域组播网络示意图,整个组播网络是由路由器或三层交换机+二层交换机组成的,从中可以看出在这些组播设备上所运行的组播协议包括PIM(协议无关组播,同时有IPv4和IPv6版本)、IPv4网络的IGMP(因特网组管理协议),IPv6网络中的MLD(组播监听器发现)、IPv4网络的 IGMP Snooping(因特网组管理协议嗅探),IPv6网络中的MLD Snooping(组播监听器发现嗅探)。
图 2-1 典型单PIM 域组播网络示意图
图2-1 典型单PIM 域组播网络示意图
图2-2 是一个跨PIM-SM域的组播网络示意图,它与图2-1所示的单PIM域组播网络相比,在运行的组播协议上仅需在PIM域边界组播路由器上多了一个实现跨PIM域连接的MSDP(组播源发现协议)。而图2-3是一个跨AS域组播网络示意图,它与图2-2所示的跨PIM域组播网络相比,在运行的组播协议又仅需在AS边界组播路由器上多了一个用于不同AS组播连接的MBGP(组播边界管理协议)。
图 2-2 跨PIM-SM域的组播网络示意图
在这里插入图片描述
图2-3 跨AS域组播网络示意图
在这里插入图片描述

3 IGMP的3个版本及各自工作原理

IGMP(因特网组管理协议)是 TCP/IP协议族中负责 IP组播成员管理的一个子协议,用来在IP主机和与其直接相邻的组播路由器之间(不是应用于多个组播路由器之间)建立、维护组播组成员关系。IGMP消息封装在IP报文中,其IP的协议号为2。
到目前为止,IGMP有 3个版本:IGMPv1(由RFC 1112定义)、IGMPv2(由RFC 2236定义)和 IGMPv3(由RFC 3376定义)。IGMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了查询器选举和组成员离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。

IGMP的3个版本在演进过程中对协议报文的处理是向前兼容的,因此,尽管各个版本的协议报文格式不同,但是运行IGMP高版本的路由器可以识别低版本的成员报告。所有这 3 个版本的 IGMP 都支持 ASM 模型,IGMPv3 可以直接应用于 SSM 模型。而IGMPv1和IGMPv2则需要SSM-Mapping技术的支持。

3.1 IGMPv1工作原理

IGMPv1 是最初的版本,主要基于查询和响应机制来完成对组播组成员的管理。IGMPv1 主机可以通过发送加入(Join)消息加入直接相连的组播路由器上特定的组播组,但离开时不会发送离开(leave )信息。IGMPv1组播路由器使用基于超时的机制去发现其成员不关注的组

IGMPv1报文有两种类型。

  • 普遍组查询报文(General Query):是查询器(运行IGMP的路由器主动向共享网络上所有主机和路由器发送的查询报文(报文类型0x11),用于了解哪些组播组存在成员。
  • 成员报告报文(Report):是主机为了响应普遍查询报文被动向组播路由器发送的,或者是主机主动向组播路由器发送的报告消息(报文类型位0x12),用于应答普遍查询报文加入某个 组播组,或者主动申请加入某个组播组。

查询器是运行IGMP的路由器,IGMPv1协议是基于查询/响应机制来完成组播管理的。但当一个网段内有多个运行IGMP的组播路由其实,就需要选举出一个IGMP查询器。在IGMPv1中,由组播路由协议PIM(并不是由IGMP自身选举)选举出唯一的组播信息转发者(Assert Winner或DR)作为IGMPv1的查询器。

3.1.1 普遍组查询和响应机制

如图3.1-1所示(左图显示的是普遍查询报文的传递过程,右图显示的是成员报告报文的传递过程),组播网络中RouterA和RouterB连接主机网段,RouterA为查询器(由PIM路由器选举决定,具体将在本章后面介绍PIM协议时介绍)。在主机网段上有HostA、HostB、HostC三个接收者。现假设HostA和HostB想要接收发往组播组G1的数据,HostC想要接收发往组播组G2的数据(均需要事先要经过相应配置)。普遍组查询和响应过程如下。
图3.1-1 普遍组查询和响应机制示意图
在这里插入图片描述
(1) IGMP查询器(RouterA)以目的地址224.0.0.1(包括了同一网段内所有主机和路由器)、目的MAC地址为 01-00-5e-00-00-01 发送普遍组查询报文,以了解该网段中有哪些组播成员存在。网段内所有主机和路由器都会接收到该查询报文,但只有已配置了对应组播组的成员才做出响应。收到该查询报文的组成员启动定时器。
普遍组查询报文是周期性发送的,发送周期可以通过命令配置,缺省情况下每隔60s发送一次。HostA和HostB是组播组G1的成员,则在本地启动定时器Timer-G1,为了避免多个成员主机同时发送响应的报告报文,缺省情况下,定时器的范围为(0~10s)的随机值,只有定时器超时后才会发送报告报文。

(2)第一个定时器超时的组成员发送针对该组的报告报文
组播组中的第一个成员启动的定时器超时后,会以224.0.0.1为目的地址发送针对该组播组的报告报文,在该网段中所有主机和组播路由器(包括IGMP查询 器)上都可以收到该报文,但只有查询器才会做出相应的响应。 现假设 HostA 上的Timer-G1首先超时,它会向该网段发送目的地址为G1的报告报文,此时也想加入组G1的HostB也可以侦听到HostA发送的报告报文,则停止自己的定时器Timer-G1,不再发送针对G1的报告报文,这样做的目的是可以减少网段上的流量。

(3)IGMP查询器接收到HostA的报告报文后,了解到本网段内存在组播组G1的成员,由组播路由器生成(*,G1)组播转发表项,“*” 代表任意组播源。此后,网络中一旦有组播组G1的数据到达路由器,将向该网段转发。

3.1.2 新组成员加入

在图3.1-1中,HostC是要加入组播组G2的,其加入过程如下:
① 主机HostC不等待普遍组查询报文的到来,主动发送针对G2的报告(Report)报文(目的IP地址为G2)以声明自己要加入G2。
② IGMP查询器接收到HostC的Report报文后,了解到本网段内出现了组播组G2的成员,则生成组播转发项(*,G2),此后,网络中一旦有G2的数据到达路由器,将向该网段转发。

3.1.3 实验说明

为了更直观的学习IGMPv1相关工作原理,我将通过以下拓扑进行实验说明:
在这里插入图片描述
如上图所示,整个拓扑使用的是PIM-DM+ASM+IGMPv1的组播模式,也可以理解为前面图3.1-1的实验图。配置好PIM-DM 和 IGMPv1后先将RouterB接口关闭,避免PIM选举查询器,在RouterA上抓包查看:
在这里插入图片描述
可以看到,查询报文每60s发送一次,且目的IP为224.0.0.1,目的MAC为01-00-5e-00-00-01发送报文:
在这里插入图片描述
将HostA、B加入到G1组后,report报文将跟随来自查询器的查询报文实时响应:
在这里插入图片描述
在这里插入图片描述
如上图所示,组成员加入组时是以组的唯一标识地址为目的地址进行发送的,此时在查询器RouterA上查看组播转发项:
在这里插入图片描述
*” 代表任意组播源。这样,网络中一旦有对应组播组(225.1.1.1)的数据到达组播路由器,则将向该网段的对应组播 组中的所有成员主机转发。
此时我们开启G1(10.1.1.1)的组播应用,再次查看RouterA的组播路由转发表:
在这里插入图片描述
此时,可以看到组播源10.1.1.1的映射到了225.1.1.1这个组播组中,由于拓扑使用的是ASM模型,这也意味着可以有多个组播源使用该组播标识(225.1.1.1),例如此时我们将G2的组播组IP也设置为225.1.1.1,并运行G2的组播应用,再次查看RouterA的组播转发表:
在这里插入图片描述
可以看到G2的组播源10.1.1.2也映射到了组播组225.1.1.1中,但如果使用这种方式的话,成员接入时将导致数据紊乱,好比成员本来是加入到G1中参加数学老师的课程,结果由于此时语文老师也在使用225.1.1.1组播标识导致成员接收到的视频画面是语文老师的课程,所以该方式只能在不同时刻不同组播源可以使用同一个组播标识,或是使用不同的组播组地址区分不同的组播源,当然,成员侧也可使用IGMPv3进行组播组数据过滤,IGMPv3将在后面的文章做叙述。

另外,也可以通过display multicast routing-tabledisplay multicast forwarding-table 查看组播路由表和组播转发表。

最后将RouterB上的接口全部开启,此时网段中有多个PIM设备,则需要通过断言(Assert)竞选来保证只有一个PIM设备向该网段转发组播数据。在竞选中落败的PIM设备会抑制相应下游接口向该网段转发组播数据。但是这种竞选失败的状态只会保持一段时间,这段时间称为Assert报文的保持时间。超时后,落选的设备会重新恢复转发组播数据从而触发新一轮的竞选。PIM-DM相关机制原理后续会继续更新。

整个拓扑最终实现了对应组成员加入到对应组播组中。
在这里插入图片描述

3.1.4 成员离开

当成员离开组播组时,由于IGMPv1没有专门定义离开报文,当主机离开组播组时不会再对后续的普遍组查询报文做出回应,纯粹通过普遍查询报文的最大响应定时器来确定某组播组中是否还有组播成员。假设图中的HostC退出组播组G2,当收到普遍组查询报文时,HostC不再发送针对G2的报告报文进行响应。此时,由于网段上不存在组G2的其他成员,查询器永远不会收到G2的报告报文,会在一定时间(130s)后删除G2所对应的组播转发项。但如果是HostA退出组播组G1,则路由器不会感知到他的离开,因为G1中还有成员HostB,它会进行响应的。

如下图所示,设置HostA(192.168.1.1)离开G1组,此后HostA便不会对查询报文作出回应,但由于G1中还有一个成HostB(192.168.1.2)存在,所以HostB还会继续相应查询报文,但查询器不会感知HostA 的离开。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Sakura0156/article/details/124359625
今日推荐