一、SSM模型带来的挑战
出于安全考虑,组播组成员可以只选择接收从特定组播源发来的组播数据。组成员需要告知组播网络,接收来自哪些特定组播源的组播流量。
IGMPv1与IGMPv2的报文中均无法携带组播源的信息,因此无法配合SSM使用(可使用SSM Mapping功能解决这个问题)。
回顾我们学习过的IGMPv1和IGMPv2,组播组成员通过成员关系报告在组播网络中告诉查询器自己要加入组G1,查询器生成对应的IGMP表项,但是在一个组播网络中是可以有多个组播源的,V1和V2无法指定在一个组播网络中指定接收特定组播源的报文数据。
IGMPv3主要是为了配合SSM(Source-Specific Multicast)模型发展起来的,提供了在报文中携带组播源信息的能力,即主机可以对组播源进行选择。
SSM模型的组播地址范围:232.0.0.0~232.255.255.255。SSM Mapping功能将在IGMP特性章节介绍。
二、IGMPv3工作原理
2.1 IGMPv3简介
IGMPv3大部分工作机制与IGMPv2类似:
-
查询器选举机制一致:IP地址小的为查询器。 -
使用普遍组查询报文查询组成员加组信息。 -
使用特定组查询报文查询特定组播的成员存活情况。
IGMPv3需要支持上报组播源信息,与IGMPv2相比IGMPv3的变化如下:
-
IGMPv3查询报文除了包含普遍组查询报文和特定组查询报文,还新增了 特定源组查询报文(Group-and-Source-Specific Query)。 -
IGMPv3成员关系报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。 -
由于同个组播组的不同成员可能希望接收来自不同源的组播,因此IGMPv3无需成员关系报告报文抑制机制。 -
IGMPv3 没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
2.2 IGMPv3报文
IGMPv3报文有查询报文和成员关系报告报文。
IGMPv3的查询报文共有三类:
-
普遍组查询报文(General Query)。该报文作用与IGMPv1,IGMPv2中的普遍组查询报文作用一致。 -
特定组查询报文(Group-Specific Query) 。该报文作用与IGMPv2中的特定组查询报文作用一致。 -
特定源组查询报文(Group-and-Source-Specific Query)。该报文用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。
IGMPv3查询报文重要字段说明:
-
Type:报文类型,取值为0x11。 -
Max Response Code:最大响应时间。成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。 -
Group Address:组播组地址。在普遍组查询报文中,该字段设为0;在特定组查询报文和特定源组查询报文中,该字段为要查询的组播组地址。 -
Number of Sources:报文中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定源组查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制。 -
Source Address:组播源地址,其数量受到Number of Sources字段值大小的限制。
IGMPv3成员关系报告报文:
IGMPv3成员关系报告报文除了通告组成员的加组信息外,还能通告组成员希望接收的组播源信息。通告组播源主要有两种模式:
-
INCLUDE:希望接收来自特定组播源的组播流量 -
EXCLUDE:希望过滤来自特定组播源的组播流量
成员关系报告报文中的组播组信息和组播源信息的关系会记录在组记录(Group Record)字段,发送给IGMP查询器。IGMPv3成员关系报告报文的目的地址为224.0.0.22,报文格式如下:
在IGMPv3中一个成员关系报告报文可以携带多个组播组信息,而之前的版本一个成员关系报告只能携带一个组播组。这样在IGMPv3中报文数量大大减少。
IGMPv3成员关系报告报文重要字段说明:
-
Type:报文类型,取值为0x22。 -
Number of Group Records:报文中包含的组记录的数量。 -
Group Record:组记录。
Group Record重要字段说明:
-
Record Type -
Number of Sources:本记录中包含的源地址数量。 -
Multicast Address:组播组地址。 -
Sources Address:组播源地址。
2.3 IGMPv3加组机制
IGMPv3组成员加组机制与IGMPv2类似,但有以下不同:
-
IGMPv3的成员关系报告报文能够携带组播源信息。 -
IGMPv3成员关系报告报文没有成员关系报告报文抑制机制。
IGMPv3组成员加组流程如下:
1、查询器发送普遍组查询报文。
2、组播组成员回复成员关系报告报文,发往224.0.0.22,这样查询器接能够知道哪个组播组成员需要加入的组播组以及特定的组播源服务器,形成IGMP表项。
2.4 IGMPv3组成员离组机制
IGMPv3没有专门的成员离开报文,成员离开需要借助组成员关系报告实现。
IGMP查询器在收到改变源组对应关系的成员关系报告后,会发送特定源组查询报文,确认是否还有组成员存在。
-
组成员发送改变源组关系的成员关系报告 -
IGMP查询器收到特定的成员关系报告 -
IGMP查询器返回特定源组查询报文,询问是否还有成员接收特定源组的组播流量 -
如果特定源组还有成员会发送关系报告报文则保留IGMP表项,如果没有成员则定时器过期删除IGMP表项
总结:IGMPv3的特点是主机可以对组播源进行选择。IGMPv3报文有查询报文和成员关系报告报文。IGMPv3没有专门的成员离开报文,成员关系报告报文组播目的地址224.0.0.22。
IGMP各版本差异:
机制 | IGMPv1 | IGMPv2 | IGMPv3 |
---|---|---|---|
查询器选举 | 依靠其他协议 | 自己选举 | 自己选举 |
成员离开方式 | 静默离开 | 主动离开 | 主动离开 |
特定组查询 | 不支持 | 支持 | 支持 |
指定源、组 | 不支持 | 不支持 | 支持 |
版本兼容性 | IGMPv1 | IGMPv1、IGMPv2 |
如果对文章感兴趣欢迎微信搜索公众号:不喜欢热闹的孩子
本文由 mdnice 多平台发布