Internet 组管理协议称为IGMP协议(Internet Group Management
Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。IGMP协议共有三个版本,即IGMPv1、v2
和v3。
主机IP软件需要进行组播扩展,才能使主机能够在本地网络上收发组播分组。但仅靠这一点是不够的,因为跨越多个网络的组播转发必须依赖于路由器。路由器为建立组播转发路由必需了解每个组员在Internet中的分布,这要求主机必须能将其所在的组播组通知给本地路由器,这也是建立组播转发路由的基础。主机与本地路由器之间使用Internet组管理协议(IGMP,Internet
Group Management
Protocol)来进行组播组成员信息的交互。在此基础上,本地路由器再将信息与其他组播路由器通信,传播组播组的成员信息,并建立组播路由。这个过程与路由器之间的常规单播路由。这个过程与路由器之间的常规单播路由的传播十分相似
[1]
。IGMP是TCP/IP中重要标准之一,所有IP组播系统(包括主机和路由器)都需要支持IGMP协议。
组播协议包括组成员管理协议和组播路由协议。组成员管理协议用于管理组播组成员的加入和离开,组播路由协议负责在路由器之间交互信息来建立组播树。IGMP属于前者,是组播路由器用来维护组播组成员信息的协议,运行于主机和和组播路由器之间。IGMP
信息封装在IP报文中,其IP的协议号为2。
若一个主机想要接收发送到一个特定组的组播数据包,它需要监听发往那个特定组的所有数据包。为解决Internet上组播数据包的路径选择,主机需通过通知其子网上的组播路由器来加入或离开一个组,组播中采用IGMP来完成这一任务。这样,组播路由器就可以知道网络上组播组的成员,并由此决定是否向它们的网络转发组播数据包。当一个组播路由器收到一个组播分组时,它检查数据包的组播目的地址,仅当接口上有那个组的成员时才向其转发。
IGMP提供了在转发组播数据包到目的地的最后阶段所需的信息,实现如下双向的功能:
主机通过IGMP通知路由器希望接收或离开某个特定组播组的信息。
路由器通过IGMP周期性地查询局域网内的组播组成员是否处于活动状态,实现所连网段组成员关系的收集与维护。
IGMP共有三个版本,即IGMP v1、v2 和 v3。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xQP8CMXJ-1638327953235)(media/0a4581a2b2ade7a73e400e11ee9f8d19.png)]
IGMP 在TCP/IP 协议中的位置:
IGMPv1
定义了主机只可以加入组播组,但没有定义离开成员组的信息,路由器基于成员组的超时机制发现离线的组成员。
IGMPv1
主要基于查询和响应机制来完成对组播组成员的管理。当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP
成员关系报告报文(Membership Report
Message),因此只需要其中一台路由器发送IGMP查询报文(Query
Message)就足够了。这就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为IGMP
查询器。对于IGMPv1
来说,由组播路由协议(如PIM)选举出唯一的组播信息转发者DR(Designated
Router,指定路由器)作为IGMP 查询器。
IGMPv1 没有专门定义离开组播组的报文。当运行IGMPv1
的主机离开某组播组时,将不会向其要离开的组播组发送报告报文。当网段中不再存在该组播组的成员后,IGMP路由器将收不到任何发往该组播组的报告报文,于是IGMP
路由器在一段时间之后便删除该组播组所对应的组播转发项。
IGMPv1包括两种类型的报文:
普遍组查询报文(General
Query):查询器向共享网络上所有主机和路由器发送的查询报文,用于了解哪些组播组存在成员。
成员报告报文(Report):主机向查询器发送的报告报文,用于申请加入某个组播组或者应答查询报文。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hWB2q6Rw-1638327953236)(media/db4a5b87fc72bc2081a82f96d1a79ec9.jpeg)]
图 组播报文
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FTBUqP6z-1638327953237)(media/30cd8982eac1597d65937f7cc4237d98.png)]
表IGMPv1报文字段说明
字段 | 说明 |
---|---|
Version | IGMP版本,值为1。 |
Type | 报文类型。该字段有以下两种取值:0x11:表示普遍组查询报文。0x12:表示成员报告报文。 |
Unused | 在IGMPv1中,该字段在发送时被设为0,并在接收时被忽略。 |
Checksum | IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位检测,表示IGMP信息补码之和的补码。Checksum字段在进行校验计算时设为0。当发送报文时,必须计算校验和并插入到Checksum字段中去。当接收报文时,校验和必须在处理该报文之前进行检验。 |
Group Address | 组播组地址。在普遍组查询报文中,该字段设为0;在成员报告报文中,该字段为成员加入的组播组地址。 |
IGMPv1协议主要基于查询和响应机制完成组播组管理。当一个网段内有多个组播路由器时,由于它们都可以接收到主机发送的成员报告报文,因此只需要选取其中一台组播路由器发送查询报文就足够了,该组播路由器称为IGMP查询器(Querier)。在IGMPv1中,由组播路由协议PIM选举出唯一的组播信息转发者(Assert
Winner或DR)作为IGMPv1的查询器,负责该网段的组成员关系查询。
IGMPv1的工作机制可以分为:普遍组查询和响应机制、新成员加入机制和组成员离开机制三个方面。
通过普遍组查询和响应,IGMP查询器可以了解到该网段内哪些组播组存在成员。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MZ7XhKxc-1638327953238)(media/238d260fe39650bd77698a1455c43874.png)]
图:IGMPv1查询和响应示意图
如上图所示,普遍组查询和响应过程如下:
普遍组查询报文是周期性发送的,发送周期可以通过命令配置,缺省情况下每隔60秒发送一次。HostA和HostB是组播组G1的成员,则在本地启动定时器Timer-G1。缺省情况下,定时器的范围为0~10秒之间的随机值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v7BZTO0m-1638327953239)(media/fee9352b55eac9c333cb2fc605acac0e.png)]
图:IGMPv1普遍组查询报文
如上图,为v1的查询报文,类型为0x11,目的IP地址为224.0.0.1。源IP地址为自己接口的IP地址。在组播地址中,填充为0.0.0.0。
假设HostA上的Timer-G1首先超时,HostA向该网段发送目的地址为G1的报告报文。也想加入组G1的HostB收到此报告报文,则停止定时器Timer-G1,不再发送针对G1的报告报文。这样报告报文被抑制,可以减少网段上的流量。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7wEXAcAq-1638327953240)(media/4dce2435c83114047560665c12178e4e.png)]
图:IGMPv1报告报文抓包示例
如上图,为主机向路由器发送的报告报文,类型值为0x12,源IP地址为自己主机的IP地址,目的IP地址为组播地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xtOQ7yhv-1638327953241)(media/6e61a9c3c504baa8d1cc85411582d681.png)]
图:新组成员加入示意图
如上图所示,主机HostC加入组播组G2的过程如下:
主机HostC不等待普遍组查询报文的到来,主动发送针对G2的报告报文以声明加入。
IGMP查询器接收到HostC的报告报文后,了解到本网段内出现了组播组G2的成员,则生成组播转发项(*,G2)。网络中一旦有G2的数据到达路由器,将向该网段转发。
IGMPv1没有专门定义离开组的报文。主机离开组播组后,便不会再对普遍组查询报文做出回应。
假设HostA想要退出组播组G1
HostA收到IGMP查询器发送的普遍组查询报文时,不再发送针对G1的报告报文。由于网段内还存在G1组成员HostB,HostB会向IGMP查询器发送针对G1的报告报文,因此IGMP查询器感知不到HostA的离开。
假设HostC想要退出组播组G2
HostC收到IGMP查询器发送的普遍组查询报文时,不再发送针对G2的报告报文。由于网段内不存在组G2的其他成员,IGMP查询器不会收到G2组成员的报告报文,则在一定时间(缺省值为130秒)后,删除G2所对应的组播转发表项。
IGMPv2的工作机制与IGMPv1基本相同,最大的不同之处在于IGMPv2增加了离开组机制。成员主机离开组播组时,会主动发送成员离开报文通知IGMP查询器;IGMP查询器收到成员离开报文后,会连续发送特定组查询报文,询问该组播组是否还存在组成员。如果在一段时间内没有收到成员主机发送的报告报文,IGMP查询器将不再维护该组的组成员关系。IGMPv2可以使IGMP查询器及时了解到网段内哪些组播组已不存在成员,从而及时更新组成员关系,减少网络中冗余的组播流量。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cG9XZX4i-1638327953241)(media/b37236af7fee1112ea9d36ef5ba2b0cb.png)]
与IGMPv1相比,IGMPv2的变化如下:
除了普遍组查询报文和成员报告报文之外,IGMPv2新增了两种报文:
成员离开报文(Leave):成员离开组播组时主动向查询器发送的报文,用于宣告自己离开了某个组播组。
特定组查询报文(Group-Specific
Query):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。
IGMPv2对普遍组查询报文格式也做了改进,添加了最大响应时间(Max Response
Time)字段。此字段取值可以通过命令配置,用于控制成员对于查询报文的响应速度。
表IGMPv2报文字段说明
字段 | 说明 |
---|---|
Version | IGMP版本,值为1。 |
Type | 报文类型。该字段有以下四种取值: 0x11:表示查询报文。IGMPv2的查询报文包括普遍组查询报文和特定组查询报文两类。 0x12:表示IGMPv1成员报告报文。 0x16:表示IGMPv2成员报告报文。 0x17:表示成员离开报文。 |
Max Response Time | 最大响应时间。 成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。该字段仅在IGMP查询报文中有效。 |
Checksum | IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位检测,表示IGMP信息补码之和的补码。Checksum字段在进行校验计算时设为0。当发送报文时,必须计算校验和并插入到Checksum字段中去。当接收报文时,校验和必须在处理该报文之前进行检验。 |
Group Address | 组播组地址。 在普遍组查询报文中,该字段设为0.0.0.0。 在特定组查询报文中,该字段为要查询的组播组地址。 在成员报告报文和离开报文中,该字段为成员要加入或离开的组播组地址。 |
在工作机制上,与IGMPv1相比,IGMPv2增加了查询器选举和离开组机制。
IGMPv2使用独立的查询器选举机制,当共享网段上存在多个组播路由器时,IP地址最小的路由器成为查询器。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GgFVT4A0-1638327953242)(media/4789aaa5607f5022f9a64c0d7e7a3c4c.png)]
图:查询器选举机制
如上图所示,在IGMPv2中,查询器的选举过程如下:
最初,所有运行IGMPv2的组播路由器(RouterA和RouterB)都认为自己是查询器,向本网段内的所有主机和组播路由器发送普遍组查询报文。
RouterA和RouterB在收到对方发送的普遍组查询报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,IP地址最小的组播路由器将成为查询器,其他组播路由器成为非查询器(Non-Querier)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8lWMxA4P-1638327953242)(media/5bd4bb1c1420db7fc2609f6cabcb1d7f.png)]
图:V2查询报文示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l2ra1JRC-1638327953243)(media/39c052d8fa8e7be6ff06f7abea4ca40b.png)]
图:IGMPv2报告报文
此后,将由IGMP查询器(RouterA)向本网段内的所有主机和其他组播路由器发送普遍组查询报文,而非查询器(RouterB)则不再发送普遍组查询报文。
非查询器(RouterB)上都会启动一个定时器(即其他查询器存在时间定时器Other
Querier Present
Timer)。在该定时器超时前,如果收到了来自查询器的查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F1XJhJyg-1638327953245)(media/b365f3480224bb98daeeca1bcc0a0c93.png)]
图:离开组示意图
如上图所示,在IGMPv2中,主机HostA离开组播组G1的过程如下:
HostA向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送针对组G1的离开报文。
查询器收到离开报文,会发送针对组G1的特定组查询报文。发送间隔和发送次数可以通过命令配置,缺省情况下每隔1秒发送一次,共发送两次。同时查询器启动组成员关系定时器(Timer-Membership=发送间隔x发送次数)。
该网段内还存在组G1的其他成员,这些成员在收到查询器发送的特定组查询报文后,会立即发送针对组G1的报告报文。查询器收到针对组G1的报告报文后将继续维护该组成员关系。
如果该网段内不存在组G1的其他成员,查询器将不会收到针对组G1的报告报文。在Timer-Membership超时后,查询器将删除(*,G1)对应的IGMP组表项。当有组G1的组播数据到达查询器时,查询器将不会向下游转发。
GMPv3主要是为了配合SSM(Source-Specific
Multicast)模型发展起来的,提供了在报文中携带组播源信息的能力,即主机可以对组播源进行选择。
与IGMPv2相比,IGMPv3报文的变化如下:
IGMPv3报文包含两大类:查询报文和成员报告报文。IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
查询报文中不仅包含普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-and-Source-Specific
Query)。该报文由查询器向共享网段内特定组播组成员发送,用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。
成员报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系简单的表示为(G,INCLUDE,(S1、S2…)),表示只接收来自指定组播源S1、S2……发往组G的数据;或(G,EXCLUDE,(S1、S2…)),表示接收除了组播源S1、S2……之外的组播源发给组G的数据。当组播组与组播源列表的对应关系发生了变化,IGMPv3报告报文会将该关系变化存放于组记录(Group
Record)字段,发送给IGMP查询器。
在IGMPv3中一个成员报告报文可以携带多个组播组信息,而之前的版本一个成员报告只能携带一个组播组。这样在IGMPv3中报文数量大大减少。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TvGZiiBv-1638327953246)(media/20d7501d04098bc81f036d5ebbb8306d.png)]
图:IGMPv3查询报文
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W42lCGcf-1638327953247)(media/53b68615a07eb6be3ad043c64f0b6b75.png)]
图:IGMPv3查询报文格式
IGMPv3查询报文字段说明
字段 | 说明 |
---|---|
Type | 报文类型,取值为0x11。 |
Max Response Code | 最大响应时间。成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。 |
Checksum | IGMP报文的校验和。 |
Group Address | 组播组地址。在普遍组查询报文中,该字段设为0;在特定组查询报文和特定源组查询报文中,该字段为要查询的组播组地址。 |
Resv | 保留字段。发送报文时该字段设为0;接收报文时,对该字段不做处理。 |
S | 该比特位为1时,所有收到此查询报文的其他路由器不启动定时器刷新过程,但是此查询报文并不抑制查询器选举过程和路由器的主机侧处理过程。 |
QRV | 如果该字段非0,则表示查询器的健壮系数(Robustness Variable)。如果该字段为0,则表示查询器的健壮系数大于7。路由器接收到查询报文时,如果发现该字段非0,则将自己的健壮系数调整为该字段的值;如果发现该字段为0,则不做处理。 |
QQIC | IGMP查询器的查询间隔,单位为秒。非查询器收到查询报文时,如果发现该字段非0,则将自己的查询间隔参数调整为该字段的值;如果发现该字段为0,则不做处理。 |
Number of Sources | 报文中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定源组查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制。 |
Source Address | 组播源地址,其数量受到Number of Sources字段值大小的限制。 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nYzZwF9N-1638327953248)(media/7d9c03f531af6ce6fa54e951267a3fea.png)]
图:IGMPv3报告报文示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XFLUcb7t-1638327953248)(media/12ce86f386f2a9dfc633af7130717aaf.png)]
图:IGMPv3成员报告报文格式
IGMPv3成员报告报文字段解释信息
字段 | 说明 |
---|---|
Type | 报文类型,取值为0x22。 |
Reserved | 保留字段。 |
Checksum | IGMP报文的校验和。 |
Number of Group Records | 报文中包含的组记录的数量。 |
Group Record | 组记录。 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-154LpTjT-1638327953249)(media/cc1a5a28a1b71a5879d12bb401d85c63.png)]
图:Grounp Record字段格式
字段 | 说明 |
---|---|
Record Type | 组记录的类型。共分为三大类。 *****当前状态报告。用于对查询报文进行响应,通告自己目前的状态,共两种:一种是MODE_IS_INCLUDE,表示接收源地址列表包含的源发往该组的组播数据。如果指定源地址列表为空,该报文无效;另一种是MODE_IS_EXCLUDE,表示不接收源地址列表包含的源发往该组的组播数据。 *****过滤模式改变报告。当组和源的关系在INCLUDE和EXCLUDE之间切换时,会通告过滤模式发生变化,共两种:一种是CHANGE_TO_INCLUDE_MODE,表示过滤模式由EXCLUDE转换到INCLUDE,接收源地址列表包含的新组播源发往该组播组的数据。如果指定源地址列表为空,主机将离开组播组;另一种是CHANGE_TO_EXCLUDE_MODE,表示过滤模式由INCLUDE转换到EXCLUDE,拒绝源地址列表包含的新组播源发往该组的组播数据。 *****源列表改变报告。当指定源发生改变时,会通告源列表发生变化,共两种:一种是ALLOW_NEW_SOURCES,表示在现有的基础上,需要接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则向现有源列表中添加这些组播源;如果当前对应关系为EXCLUDE,则从现有阻塞源列表中删除这些组播源;另一种是BLOCK_OLD_SOURCES,表示在现有的基础上,不再接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则从现有源列表中删除这些组播源;如果当前对应关系为EXCLUDE,则向现有源列表中添加这些组播源。 |
Aux Data Len | 辅助数据长度。在IGMPv3的报告报文中,不存在辅助数据字段,该字段设为0。 |
Number of Sources | 本记录中包含的源地址数量。 |
Multicast Address | 组播组地址。 |
Sources Address | 组播源地址。 |
Auxiliary Data: | 辅助数据预留给IGMP后续扩展或后续版本。在IGMPv3的报告报文中,不存在辅助数据。 |
在工作机制上,与IGMPv2相比,IGMPv3增加了主机对组播源的选择能力。
IGMPv3的成员报告报文的目的地址为224.0.0.22(表示同一网段所有使能IGMPv3的路由器)。通过在报告报文中携带组记录,主机在加入组播组的同时,能够明确要求接收或不接收特定组播源发出的组播数据。
如果Host和组播路由器之间运行的是IGMPv1或IGMPv2,Host加入组播组G时无法对组播源进行选择,无论其是否需要,都会同时接收到来自组播源S1和S2的数据。如果采用IGMPv3,成员主机可以选择仅接收S1组播数据。
方法一:Host发送IGMPv3报告(G,INCLUDE,(S1)),仅接收源S1向组播组G发送的数据。
方法二:Host发送IGMPv3报告(G,EXCLUDE,(S2)),不接收指定源S2向组播组G发送的数据,从而仅有来自S1的组播数据才能传递到Host。
当接收到组成员发送的改变组播组与源列表的对应关系的报告时(比如CHANGE_TO_INCLUDE_MODE、CHANGE_TO_EXCLUDE_MODE),IGMP查询器会发送特定源组查询报文。
如果组成员希望接收其中任意一个源的组播数据,将反馈报告报文。IGMP查询器根据反馈的组成员报告更新该组对应的源列表。
GMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了查询器选举和组成员离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。三个版本在演进过程中对协议报文的处理是向前兼容的,因此尽管各个版本的协议报文格式不同,但是运行IGMP高版本的路由器可以识别低版本的IGMP报文。
所有IGMP版本都支持ASM(Any-Source
Multicast)模型。IGMPv3可以直接应用于SSM(Source-Specific
Multicast)模型,而IGMPv1和IGMPv2则需要IGMP SSM
Mapping技术的支持才可以应用于SSM模型。
项目 | IGMPv1 | IGMPv2 | IGMPv3 |
---|---|---|---|
查询器选举方式 | 依靠组播路由协议PIM选举 | 同网段组播路由器之间竞争选举 | 同网段组播路由器之间竞争选举 |
普遍组查询报文 | 支持 | 支持 | 支持 |
成员报告报文 | 支持 | 支持 | 支持 |
特定组查询报文 | 不支持 | 支持 | 支持 |
成员离开报文 | 不支持 | 支持 | 没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达 |
特定源组查询报文 | 不支持 | 不支持 | 支持 |
指定组播源 | 不支持 | 不支持 | 支持 |
可识别报文协议版本 | IGMPv1 | IGMPv1、IGMPv2 | IGMPv1、IGMPv2、IGMPv3 |
ASM模型 | 支持 | 支持 | 支持 |
SSM模型 | 需要IGMP SSM Mapping技术支持 | 需要IGMP SSM Mapping技术支持 | 支持 |
备注:
IGMP SSM Mapping
SSM(Source-Specific
Multicast)称为指定源组播,要求路由器能了解成员主机加入组播组时所指定的组播源。如果成员主机上运行IGMPv3,可以在IGMPv3报告报文中直接指定组播源地址。但是某些情况下,成员主机只能运行IGMPv1或IGMPv2,为了使其也能够使用SSM服务,路由器上需要提供IGMP
SSM Mapping功能。
IGMP SSM
Mapping的机制是:通过在路由器上静态配置SSM地址的映射规则,将IGMPv1和IGMPv2报告报文中的(*,
G)信息转化为对应的(G, INCLUDE, (S1, S2…))信息,以提供SSM组播服务。
如果G在ASM(Any-Source Multicast)范围内,则只提供ASM服务。
如果G在SSM组地址范围内(缺省情况下为232.0.0.0~232.255.255.255):
如果路由器上没有G对应的SSM Mapping规则,则无法提供SSM服务,丢弃该报文。
如果路由器上有G对应的SSM Mapping规则,则依据规则将报告报文中所包含的(*,
G)信息映射为(G, INCLUDE, (S1, S2…))信息,提供SSM服务。
IGMP Snooping是Internet Group Management Protocol
Snooping(互联网组管理协议窥探)的简称,它是运行在二层设备上的组播约束机制,用于管理和控制组播组。
当主机和上游三层设备之间传递的IGMP协议报文通过运行IGMP
Snooping的二层设备时,二层设备分析报文携带的信息,根据这些信息建立和维护二层组播转发表,然后通过转发表转发数据。
如下图所示,当RouterB作为二层设备时,
如果RouterB没有运行IGMP Snooping,组播数据在数据链路层被广播。
如果RouterB运行了IGMP
Snooping,如果某些用户需要接收组播组225.0.0.1的组播数据,组播数据就不会在数据链路层被广播,而会通过二层组播转发表从相应的端口Port1和Port2发给需要的接收者。
ROUTRB未使能igmp-snooping功能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ag2AQs3N-1638327953250)(media/89cae002f8f3204f5a6e60aba8594340.png)]
ROUTER B 使能igmp-snooping功能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kLUSjENy-1638327953251)(media/9253fa3074084de8c1bdcc51b9f01dca.png)]
2.1 igmp-snooping的相关端口
如下图所示,Router A连接组播源,在交换机 A和交换机 B上分别运行IGMP
Snooping,Host A和Host C为接收者主机(即组播组成员)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ltPwKVyw-1638327953251)(media/64c783b7dbcc688b15a7176a68577f8f.png)]
下面介绍一下IGMP Snooping相关的端口概念:
路由器端口(Router
Port):交换机上朝向三层组播设备(DR或IGMP查询器)一侧的端口,如交换机 A和交换机
B各自的Ethernet1/0/1端口。交换机将本设备上的所有路由器端口都记录在路由器端口列表中。
成员端口(Member
Port):又称组播组成员端口,表示交换机上朝向组播组成员一侧的端口,如交换机A的Ethernet1/0/2和Ethernet1/0/3端口,以及交换机
B的Ethernet1/0/2端口。交换机将本设备上的所有成员端口都记录在IGMP
Snooping转发表中。
注: 路由器端口都是指交换机上朝向组播路由器的端口,而不是指路由器上的端口
在运行了IGMP
Snooping的交换机上,所有收到源地址不为0.0.0.0的IGMP普遍组查询报文或PIM
He报文的端口都将被视为动态路由器端口
2.2IGMP Snooping动态端口老化定时器
定时器 | 说明 | 超时前应收到的报文 | 超时后交换机的动作 |
---|---|---|---|
动态路由器端口老化定时器 | 交换机为其每个动态路由器端口都启动一个定时器,其超时时间就是动态路由器端口老化时间 | 源地址不为0.0.0.0的IGMP普遍组查询报文或PIM Hello报文 | 将该端口从路由器端口列表中删除 |
动态成员端口老化定时器 | 当一个端口动态加入某组播组时,交换机为该端口启动一个定时器,其超时时间就是动态成员端口老化时间 | IGMP成员关系报告报文 | 将该端口从IGMP Snooping转发表中删除 |
注:IGMP Snooping端口老化机制只针对动态端口,静态端口永不老化。
1. 普遍组查询
IGMP查询器定期向本地网段内的所有主机与路由器(224.0.0.1)发送IGMP普遍组查询报文,以查询该网段有哪些组播组的成员。
在收到IGMP普遍组查询报文时,交换机将其通过VLAN内除接收端口以外的其它所有端口转发出去,并对该报文的接收端口做如下处理:
如果在路由器端口列表中已包含该动态路由器端口,则重置其老化定时器。
如果在路由器端口列表中尚未包含该动态路由器端口,则将其添加到路由器端口列表中,并启动其老化定时器。
2.报告成员关系
以下情况,主机会向IGMP查询器发送IGMP成员关系报告报文:
当组播组的成员主机收到IGMP查询报文后,会回复IGMP成员关系报告报文。
如果主机要加入某个组播组,它会主动向IGMP查询器发送IGMP成员关系报告报文以声明加入该组播组。
在收到IGMP成员关系报告报文时,交换机将其通过VLAN内的所有路由器端口转发出去,从该报文中解析出主机要加入的组播组地址,并对该报文的接收端口做如下处理:
如果不存在该组播组所对应的转发表项,则创建转发表项,将该端口作为动态成员端口添加到出端口列表中,并启动其老化定时器;
如果已存在该组播组所对应的转发表项,但其出端口列表中不包含该端口,则将该端口作为动态成员端口添加到出端口列表中,并启动其老化定时器;
如果已存在该组播组所对应的转发表项,且其出端口列表中已包含该动态成员端口,则重置其老化定时器。
注:交换机不会将IGMP成员关系报告报文通过非路由器端口转发出去,因为根据主机上的IGMP成员关系报告抑制机制,如果非路由器端口下还有该组播组的成员主机,则这些主机在收到该报告报文后便抑制了自身的报告,从而使交换机无法获知这些端口下还有该组播组的成员主机。
3.离开组播组
运行IGMPv1的主机离开组播组时不会发送IGMP离开组报文,因此交换机无法立即获知主机离开的信息。但是,由于主机离开组播组后不会再发送IGMP成员关系报告报文,因此当其对应的动态成员端口的老化定时器超时后,交换机就会将该端口对应的转发表项从转发表中删除。
运行IGMPv2或IGMPv3的主机离开组播组时,会通过发送IGMP离开组报文,以通知组播路由器自己离开了某个组播组。当交换机从某动态成员端口上收到IGMP离开组报文时,首先判断要离开的组播组所对应的转发表项是否存在,以及该组播组所对应转发表项的出端口列表中是否包含该接收端口:
如果不存在该组播组对应的转发表项,或者该组播组对应转发表项的出端口列表中不包含该端口,交换机不会向任何端口转发该报文,而将其直接丢弃;
如果存在该组播组对应的转发表项,且该组播组对应转发表项的出端口列表中包含该端口,交换机会将该报文通过VLAN内的所有路由器端口转发出去。同时,由于并不知道该接收端口下是否还有该组播组的其它成员,所以交换机不会立刻把该端口从该组播组所对应转发表项的出端口列表中删除,而是重置其老化定时器。
当IGMP查询器收到IGMP离开组报文后,从中解析出主机要离开的组播组的地址,并通过接收端口向该组播组发送IGMP特定组查询报文。交换机在收到IGMP特定组查询报文后,将其通过VLAN内的所有路由器端口和该组播组的所有成员端口转发出去。对于IGMP离开组报文的接收端口(假定为动态成员端口),交换机在其老化时间内:
如果从该端口收到了主机响应该特定组查询的IGMP成员关系报告报文,则表示该端口下还有该组播组的成员,于是重置其老化定时器;
如果没有从该端口收到主机响应特定组查询的IGMP成员关系报告报文,则表示该端口下已没有该组播组的成员,则在其老化时间超时后,将其从该组播组所对应转发表项的出端口列表中删除。
IGMP
Proxy,也称为IGMP代理,通常被部署在接入设备(RouterA)和成员主机之间的三层设备上,IGMP
Proxy设备可以收集下游成员主机的IGMP报告/离开报文,将报告/离开报文汇聚后代理下游成员主机统一上送给接入设备;另一方面,IGMP
Proxy设备也可以代理IGMP查询器向下游成员主机发送查询报文,维护组成员关系,基于组成员关系进行组播转发。在接入设备RouterA看来,RouterB就是一台主机;在下游成员主机看来,RouterB就是IGMP查询器。
上游接口:指IGMP代理设备上配置IGMP
Proxy功能的接口,该接口执行IGMP代理设备的主机行为,因此也称为主机接口(Host
Interface)。
下游接口:指IGMP代理设备上配置IGMP功能的接口,该接口执行IGMP代理设备的路由器行为,因此也称为路由器接口(Router
Interface)。
IGMP代理设备实现的功能主要分为两种:主机行为和路由器行为。
a主机行为
主机行为是指IGMP代理设备的上游接口收到查询报文时根据当前组播转发表的状态对查询报文做出响应,或者当组播转发表发生变化时上游接口主动向接入设备发送报告/离开报文。主机行为的工作机制如下:
IGMP代理设备上游接口收到查询报文时,会根据当前组播转发表的状态对查询报文做出响应。
IGMP代理设备收到某组播组的报告报文后,会在组播转发表中查找该组播组:
如果没有找到相应的组播组,IGMP代理设备会向接入设备发送针对该组播组的报告报文,并在组播转发表中添加该组播组;
如果找到相应的组播组,IGMP代理设备就不需要向接入设备发送报告报文。
IGMP代理设备收到某组播组G的离开报文后,会向接收到该离开报文的接口发送一个特定组查询报文,检查该接口下是否还存在组播组G的其他成员:
如果没有其他成员,IGMP代理设备会向接入设备发送针对该组播组的离开报文,并在组播转发表中将对应的接口删除;
如果有其他成员,IGMP代理设备会继续向该接口转发组播数据。
b路由器行为
路由器行为是指IGMP代理设备的下游接口通过成员主机加入/离开组播组的信息生成组播转发表项、接收接入设备下发的组播数据并根据组播转发表项的出接口信息向特定的接口转发组播数据。
为了提高链路的可靠性,IGMP代理设备的上游接口配置完IGMP
Proxy功能后,可以再在IGMP代理设备上配置一个IGMP
Proxy备份接口,作为上游接口的备份,如下图所示。这样,当上游接口所在链路发生故障时,备份链路会自动接管IGMP代理业务,使业务能够自动恢复。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hxnKpbDH-1638327953252)(media/c931c5c4d609104a3aa4d7d86de3b19d.png)]
图:IGMP Proxy备份机制
IGMP
Proxy本身并没有检测机制,如果组播链路发生了故障,无法保证及时进行主、备链路的切换,可能造成较长时间的组播业务中断。通过IGMP
Proxy与NQA联动可以解决此问题。IGMP
Proxy与NQA测试例联动是利用NQA测试例检测端到端的链路状态,并根据NQA测试例的检测结果,进行主、备链路的切换,从而避免通信长时间中断。
注:
NQA(Network Quality Analyzer)网络质量分析
是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络信息进行统计。NQA还提供了与Track和应用模块联动的功能,实时监控网络状态的变化。
NQA通过发送测试报文,对网络性能或服务质量进行分析,为用户提供网络性能参数,如时延抖动、HTTP的总时延、通过DHCP获取IP地址的时延、TCP连接时延、FTP连接时延和文件传输速率等。
igmp snooping | igmp proxy | |
---|---|---|
协议报文处理 | 侦听不处理 | 汇总处理 |
数据报文处理 | 广播 | 组播 |
优缺点 | 支持广泛 | 充当查询者 上游路由器压力小 |
IGMP
Snooping相对比较简单,它是通过监听客户端和路由器端之间的IGMP报文,从而在建立针对某个组播的组播表条目。包括了组播地址、物理端口和VLAN的映射关系。通过使用IGMP
Snooping可以在不支持IGMP的二层交换设备上建立组播表,从而达到节省带宽,控制组播报文转发方向的目的。
这里重点关注一下IGMP
Proxy,因为对于原来的交换设备,不支持Snooping几乎没有,但是对于Proxy的支持就不是了。
IGMP
Proxy是靠拦截用户和路由器之间的IGMP报文建立组播表,Proxy设备的上联端口执行主机的角色,下联端口执行路由器的角色。
1.下联端口执行路由器的角色,完全按照IGMP
V2中规定的机制执行,包括查询者选举机制,定期发送通用查询信息,收到离开包时发送特定查询等。
2.上联端口执行主机的角色,响应来自路由器的查询,当新增用户组或者某组最后一个用户退出时,主动发送成员报告包或者离开包。
IGMP
Proxy在两个端口分别实现不同的功能,工作量相对较大,其优点是当网络中没有路由器时,IGMP
Proxy设备可以起到查询者的作用,而且如果要扩展组播路由功能,Proxy比Snooping方便。
IGMP
Snooping只是监听IGMP报文来建立组播表,而IGMP报文的产生是通过上端的路由器和客户端来完成的。也就是说如果没有路由器存在,就不能实现组播表的建立,而只能采用广播的形式来实现数据的传输。而Proxy则更多的参与了进来,它直接和客户端和上端的路由器来进行对话,而不再是一个完全透明的角色。因为它做了更多的本地处理,减少了对于上端的路由器的依赖程度,但是也增加了本地的系统负担。但是,从另一方面来讲,使用IGMP
Proxy可以减轻上端路由器的负荷。正如上面提到的,Proxy会参与组播组的建立工作,当有一个用户请求提交上来,Proxy首先会检查本地的组播组,如果在本地已经有这个组播组存在,那么它就把该用户加入到这个组播组的成员中,而不需要向上端的路由器发送加入申请;反之,如果在本地没有找到相应的组播组,那么Proxy就会向上端的路由器发送申请,并在本地建立组播组。在组播成员退出的时候,Proxy也会检查该组播组中是否有其它的组播成员存在,如果有,那么它只是把组播组中申请退出的成员删去;反之,它才会通知上端的路由器,注销该组播组。
所以,上述的两种应用方案各有利弊,基于应用应视整体环境而定。
需要补充说明的是,上面介绍的是在局域网的环境中实施的组播功能,在DSLAM和xDSL环境中也是类似的原理和应用,其中DSLAM设备充当了局域网中支持IGMP
Snooping或者Proxy的交换机的角色,原理是一样的。
HMVR适用于使用VLAN对用户进行隔离的二层网络,解决在二层网络中多个VLAN组播流量多次复制问题,高效地用网络的带宽,
一般情况下,当二层网络中多个VLAN的用户都加入某个组播组时,这个组播组的流量在此网络中传送将有多份相同的组播流量,极大地浪费网络带宽,HMVR允许端口下的用户加入/退出组播VLAN中的组播流量,允许在不同VLAN里的用户共享一个组播VLAN,HMVR提供在MVLAN内不断发送组播流量的能力,但为了带宽与安全隔离来自用户的VLAN的流量,
HMVR假定用户端口通过IGMP
join/leave消息加入/离开这些组播流量,HMVR在IGMPsnooping的基础上操作,但这两个特性是相互独立的,一个激活/去激活不影响另一个的行为,如果IGMP
SNOOPING与HMVR同时激活,HMVR仅影响来自HMVR配置的组播组的加入/离开消息(配置一些组播组由HMVR来管理),从其他组播组来的加入/离开由IGMPsnooping管理,
启动HMVR功能,交换机执行标准的IGMP
snooping,IGMP的报文被送至CPU,但组播数据报文不送到CPU,交换机的CPU确定在转发表中的HMVR的IP组播流量和它们相关的MAC地址,截取IGMP消息,修改转发表以包含或去除作为组播流量接收者的用户HMVR,允许组播路由器正常操作因为交换机发送IGMP,加入消息给路由器仅当路由器从接口接收到一个加入组的消息时,路由器才转发特定组的组播流量到此接口对于HMVR的组播,控制和数据流量作为组播VLAN,的成员用户端口发送在HMVR组内的IGMP报告消息从组播VLAN发送,HMVR的处理流程
1: 首先在末端交换机上配置MVLAN,以及MVLAN内支持的组播组
2: 当接收者发送IGMP
join到交换机,并匹配交换机中MVLAN的组播组中的一个,则交换机的CPU修改硬件地址表,以包含这个接收者的端口和VLAN,作为组播流量的转发的出口,并向上级交换机从MVLAN发送此jion消息,而不是用户所在的Vlan,直到路由器为止
3: 当交换机从MVLAN接收到组播流量时,发送到相应的出口去
HMVR消除了在每个VLAN内复制组播流量的必要,组播流量仅在MVLAN传送一次
认证难(组播协议没有用户认证功能,用户可以随意加入和离开)
计费难(组播协议没有涉及计费部分,且组播源无法得知用户何时加入和离开,也无法统计某个时间到底有多少用户在收看组播节目,因此无法准确计费)
管理难(组播源缺乏有效的管理手段控制组播信息在网上传递的范围和方向)
当组播应用终端(如机顶盒)申请特定组播频道(例如,IP地址为XX.XX.XX.XX)业务时,它会向上行发送IGMP/MLD
Report报文。该Report报文进入ONU的以太网用户接口。对于SFU、HGU和SBU型的ONU,该ONU对应于一个用户。对于MDU和MTU型的ONU,一个以太网用户端口对应于一个用户。
ONU接收到上行的IGMP/MLD Report报文后,打上标识端口的VLAN tag。该VLAN
Tag的TPID值为0x8100,CFI值为0,Pri值为0,VID的值为接收到该IGMP控制报文的以太网UNI端口的端口号。如果IGMP/MLD
Report报文已经带有Vlan tag,则将其VID替换为标识用户端口的VLAN
Tag。例如,对于以太网端口1,ONU将对该端口接收到的上行IGMP控制报文打上VID=1的VLAN
Tag,然后向上转发;对于以太网端口10,ONU将对该端口接收到的上行IGMP控制报文打上VID=10的VLAN
Tag,然后向上转发;依此类推。如果进入到ONU的以太网端口前已经带有VLAN
Tag的IGMP/MLD控制报文(如以太网端口下挂家庭网关且家庭网关已为IGMP/MLD控制报文打上VLAN
Tag的情况),ONU将其VID替换为该以太网UNI端口的端口号。然后,ONU将IGMP/MLD
Report报文透传给OLT。
OLT接收到IGMP/MLD
Report报文后,根据端口(用户)标识、该Report报文的组播IP地址以及源IP地址(仅用于IGMP
V3/MLD
v2,可选)查询该端口(用户)对该频道的访问权限及其参数。根据用户不同的访问权限,可以将EPON系统的实现流程分为如下几种情况:
1)当该端口(用户)对该频道的访问权限为“允许”时,OLT通过一个扩展的组播控制OAM报文(该报文格式见6.5.4.4节)通知ONU增加一个组播转发表项。该表项表明该用户端口对该频道的访问权限为“允许”。
如果此时该频道的组播业务流尚未推送到OLT的上联口(也就是OLT下尚无用户观看该频道节目),则OLT以IGMP/MLD
Proxy或IGMP/MLD
Snooping的方式通过MVR(跨VLAN注册)机制将IGMP/MLD加入消息向组播VLAN的源端口转发以向组播路由器(或IP
MAN的边缘路由器)申请该组播业务流,并建立相应的组播转发表项。当该频道的组播业务流由组播路由器(或边缘路由器)发送到OLT的上联板后,OLT将其转发到该用户所在的PON接口(在这个过程中可能伴随着打组播VLAN
tag的操作或者组播VLAN转换),并将其映射到广播LLID发送给该PON接口上的所有ONU。
如果此时该频道的组播业务流已推送到OLT的上联口但尚未推送到该用户所在PON接口(也就是OLT下其他PON接口上有用户观看该频道节目),OLT则将该频道的组播业务流转发到该用户所在的PON接口,并将其映射到广播LLID发送给该PON接口上的所有ONU。
如果此时该频道的组播业务流已经推送到该用户所在的PON接口(也就是该PON接口上有用户观看该频道节目),OLT则保持直接将该频道组播业务流映射到广播LLID发送给该PON接口上的所有ONU即可。
ONU根据其接收到的组播控制OAM报文建立本地组播转发表,并根据这个表的表项将接收到该频道的组播数据业务流转发到相应的用户端口,并执行对组播数据报文的去tag操作(可能家庭网管需要接受带Tag的业务流,此时可不进行去tag操作,下面的“禁止”和“预览”两种情况下与此相同,不再赘述。对ONU是否剥除组播VLAN
TAG的配置通过MulticastTagStripe属性进行,参见6.5.4.4。实现流程如图12-1所示。
2)当OLT查表结果表明该用户对该频道的访问权限为“禁止”时,OLT不做任何其它操作,ONU也不做任何操作。当组播应用终端(如机顶盒)在一定时间内没有收到任何IGMP消息和组播业务流时,会结束对该频道的申请。其实现流程如图12-2所示。
3)当OLT查表表明该用户对该频道的访问权限为“预览”时,OLT通过一个扩展的组播控制OAM报文(该报文格式见6.5.4.3节)通知ONU增加一个(临时的)组播转发表项。与第一种情况相同,OLT或者通过MVR机制向组播服务器(或边缘路由器)申请该组播业务流(该频道的组播业务流尚未推送到OLT的上联口)并将该组播业务流映射到广播LLID传送到该用户所连接的ONU,或者直接将已经申请下来的组播业务流从OLT的上联口转发到该用户所在的PON接口(该频道的组播业务流已推送到OLT的上联口但尚未推送到该用户所在PON接口)并将该组播业务流映射到广播LLID传送到该用户所连接的ONU,或者直接将该频道的组播业务流映射到广播LLID传送到该用户所连接的ONU(该频道的组播业务流已经推送到该用户所在的PON接口)。同时OLT启动一个定时器和/或计数器,用于控制用户的预览时长、预览次数、预览间隔时长等参数。定时器的超时时间TPreview值和计数器的溢出值可配置。ONU按照OLT所下发的组播转发表项将从OLT推送来的组播业务流转发到相应的用户接口,并执行去tag操作。当OLT的预览定时器和/或计数器超时或超数后,OLT立即通过一个扩展的组播控制OAM报文通知ONU删除原组播转发表项并将定时器和/或计数器复位,同时根据是否有同一个PON内其他用户申请了该组播业务流判断是否停止向该PON接口转发该组播业务流,并执行相关操作。其流程如图12-3所示。
在组播业务流转发过程中,组播路由器、OLT、ONU、组播应用终端(如机顶盒)进行正常的IGMP/MLD
Query、Report等IGMP/MLD协议报文的交互。启用IGMP/MLD
Proxy功能的OLT应负责向PON接口下的ONU发送下行的IGMP/MLD
Query报文(包括通用查询报文和特定组查询报文两种)。OLT下发的IGMP/MLD通用/特定组查询报文带有组播VLAN
Tag。ONU将该IGMP/MLD通用/特定组查询报文广播到该组播VLAN/特定组的所有成员端口(ONU基于其组播转发表的表项判断每个UNI端口属于哪个组播VLAN/组播组)。当ONU接收到如下二种IGMP/MLD通用/特定组查询报文后,应将其丢弃:
IGMP/MLD通用/特定组查询报文无VLAN Tag;
IGMP/MLD通用/特定组查询报文带有VLAN Tag,但其VLAN
ID不属于该ONU被配置的组播VLAN
ID集合(例如:假设在该ONU上分别有一个或者多个UNI端口属于组播VLAN
ID为1000、1001、1002的三个组播VLAN;如果一个IGMP/MLD通用/特定组查询报文带有VID=1004的VLAN
Tag,无论1004在该EPON系统中是单播VID还是组播VID,ONU都应将该IGMP通用/特定组查询报文丢弃);
此外,ONU应按照OLT的控制(通过MulticastTagStripe OAM方式)剥除/保留IGMP/MLD
Query报文的组播VLAN tag。对于下行特定组查询报文(IGMP/MLD Group-Specific
Query),OLT应该按照该频道所属的组播VLAN打上组播VLAN
Tag(承载于广播LLID中)。对于通用查询报文(IGMP/MLD General
Query)则应该在该EPON系统中的所有组播VLAN中进行下发,即OLT将每个IGMP/MLD通用查询报文复制多份,并打上不同的组播VLAN
Tag在广播LLID中下发给所有的ONU。例如,在一个EPON系统中,存在1000、1001、1002、1003共4个组播VLAN,分别承载不同的IPTV频道组,那么每当Query
Interval
定时器(按照RFC2236的定义)超时时,OLT则产生一个通用查询报文并复制成4份,分别在这4个组播VLAN内下发(解释:随着这种方式对在PON接口和ONU的以太网UNI端口上产生多份IGMP/MLD通用查询报文,但由于在EPON系统中的组播VLAN数量较少,一般为1个或数个,且一般IGMP/MLD
Query
Interval缺省值为125秒,所以整体的开销可以忽略。多份Query报文也不会对组播应用终端和OLT的状态机产生不良影响)。
当用户要离开已经申请的特定频道时,组播应用终端(如机顶盒)会向ONU发送上行的IGMP
Leave/MLD Done报文。
如果ONU是Fast-leave Enabled的, 则ONU在接收到IGMP Leave/MLD
Done消息后立刻停止向该用户端口转发该组播组的业务流(即删除该ONU的组播权限控制表中的相应表项),同时ONU为该IGMP
Leave/MLD Done报文打上标识该Leave/Done报文接收端口的VLAN
tag(VID值为接收到该Leave/Done报文的UNI Port
ID),然后传送给OLT。OLT在接收到该IGMP Leaving/MLD
Done报文后,记录该ONU的该用户端口离开该组播组的事件(作为CDR的事件),并根据OLT本地的可控组播记录信息判断与该用户同一个PON接口内是否还有其他用户仍在申请该组播业务流,并根据结果执行相关操作(继续向该PON接口转发该组播业务流或者停止向该PON接口转发该组播业务流)。这里OLT无需配置ONU的Multicast
Control
属性(删除ONU的相应组播权限控制表项)。(这种方式主要适用于ONU的以太网端口下面仅连接一个组播应用终端的应用场合)。
如果ONU是Non-Fast-Leave模式,则ONU当在接收到IGMP Leave/MLD Done消息后启动Last
Member
Query机制,向接收到此Leave/Done消息的UNI端口发送特定组查询报文,然后启动响应定时器;当[Last
Member Query Count]个特定组查询报文指定的[Last Member Query
Interval]中,ONU未收到组播应用终端(Multicast Client)发来的IGMP/MLD
Report报文,则ONU认为该端口下没有该组播组的其它组成员存在,则将该端口从该组播组中删除(删除该ONU的组播权限控制表中的相应表项并停止向该端口转发相应的组播业务流),并为IGMP
Leave/MLD Done报文打上标识用户身份的VLAN tag(VID值也采用Port
ID),然后透传给OLT。如果ONU在特定组查询超时之前,从该端口收到了对应于该组播组的IGMP/MLD
Report消息,则ONU保持原来的组播转发表,继续向该端口转发该组播业务流,并丢弃该IGMP
Leave/MLD Done报文。这种情况下,OLT接收到IGMP Leave/MLD
Done报文后的行为与上面对ONU为Fast-Leave Enabled状态下OLT接收到IGMP Leave/MLD
Done报文后的行为完全相同。图38给出了ONU在Non Fast
Leave模式下对组播应用终端发来的IGMP Leave/MLD
Done消息的一个典型处理流程。(这种方式主要适用于ONU的以太网端口下面连接以太网交换机/家庭网关且该交换机/家庭网关带有多个组播应用终端的应用场合)。
对于一个已经成功申请了特定组播组的组播业务的ONU端口,如果OLT在一定时间内(超时时间应可设置,例如等于前面所提及的[Last
Member Query Count]×[Last Member Query
Interval])没有收到来自该端口针对该组播组的任何IGMP/MLD控制消息(Report和Leave/Done),则OLT可以判定该ONU端口所连接的家庭网关或者组播应用终端(机顶盒)或者ONU自身发生异常(如设备已掉线、设备的组播模块发生故障等),则OLT自动删除其本地组播权限控制表中的相应条目,并向该ONU发送一个扩展的组播控制OAM报文通知ONU也删除该组播转发表项(不管ONU的删除操作是否成功。如果ONU返回删除该组播控制条目操作成功的确认消息,则可判断ONU正常,可能是机顶盒或者家庭网关发生异常;如果ONU未返回操作成功确认消息,则可判断为ONU掉线)。
OLT以类似IGMP/MLD
Proxy方式拦截该组播路由器与该OLT下面的所有组播应用终端之间的所有IGMP/MLD
Report、Leave/Done报文,并在上联口上仿真一个组播主机(Host),向组播路由器发送必需的IGMP/MLD
Report、Leave/Done报文,以实现组播业务流的动态申请送抵和退订。同时,OLT根据该EPON系统内的组成员状态进行组播数据流的转发,即如果该OLT下某个PON接口上的没有主机属于某个特定组,则停止向该PON接口转发该组播组的组播业务流;如果整个OLT下均没有主机属于某个特定组,则向组播路由器发送该组播组的IGMP
Leave/MLD
Done报文,以停止该频道组播业务的传送(采用组播业务流静态送抵的EPON系统除外)。
如果某个用户正在点播某组播频道业务流(即权限为“允许”或者“预览”)的过程,网管将该用户的权限被改变为“禁止”(OLT应具有判断是否该用户正在接收该组播流的能力),则OLT应向ONU发送一个扩展的组播控制(MulticastControl)OAM报文通知ONU删除原组播转发表项,同时根据是否有同一个PON内其他用户申请了该组播业务流判断是否停止向该PON接口转发该组播业务流,并执行相关操作。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZWev01B-1638327953252)(media/81bfe0a6dab1fda7ba06e363316fa2da.emf)]
图12-1 用户的访问权限为“允许”时的典型组播业务实现流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6rTQ0q6X-1638327953253)(media/323028340665f309f124d4e0382e8844.emf)]
图12-2 用户的访问权限为“禁止”时的组播业务实现流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pPKwTOmR-1638327953253)(media/61ffc62a3bb3495dabb3d49fde07ff5a.emf)]
图12-3 用户的访问权限为“预览”时的典型组播业务实现流程
如前所述,在Proxy模式下,OLT截获所有上行得带有端口(用户)单播VLAN标签的IGMP/MLD控制报文(Report、Leave/Done)后经过对用户进行鉴权后判断是否需要向上层组播路由器发送IGMP/MLD报文。如果需要向组播路由器请求IGMP/MLD报文,OLT应为其发送的上行IGMP/MLD
Report报文打上特定VID的VLAN
tag(在OLT和上层组播路由器之间,一般采用特定的组播VLAN承载组播信令和数据)。
摘自《中国电信EPON设备技术要求V2.0》
将该用户的权限被改变为“禁止”(OLT应具有判断是否该用户正在接收该组播流的能力),则OLT应向ONU发送一个扩展的组播控制(MulticastControl)OAM报文通知ONU删除原组播转发表项,同时根据是否有同一个PON内其他用户申请了该组播业务流判断是否停止向该PON接口转发该组播业务流,并执行相关操作。
[外链图片转存中…(img-wZWev01B-1638327953252)]
图12-1 用户的访问权限为“允许”时的典型组播业务实现流程
[外链图片转存中…(img-6rTQ0q6X-1638327953253)]
图12-2 用户的访问权限为“禁止”时的组播业务实现流程
[外链图片转存中…(img-pPKwTOmR-1638327953253)]
图12-3 用户的访问权限为“预览”时的典型组播业务实现流程
如前所述,在Proxy模式下,OLT截获所有上行得带有端口(用户)单播VLAN标签的IGMP/MLD控制报文(Report、Leave/Done)后经过对用户进行鉴权后判断是否需要向上层组播路由器发送IGMP/MLD报文。如果需要向组播路由器请求IGMP/MLD报文,OLT应为其发送的上行IGMP/MLD
Report报文打上特定VID的VLAN
tag(在OLT和上层组播路由器之间,一般采用特定的组播VLAN承载组播信令和数据)。
摘自《中国电信EPON设备技术要求V2.0》