技术介绍 IP组播 目 录 目 录 MLD...........................................................................................................................................1 MLDv1原理简介.........................................................................................................................1 查询器选举机制...................................................................................................................1 加入IPv6组播组机制...........................................................................................................2 离开IPv6组播组机制...........................................................................................................3 MLDv2原理简介.........................................................................................................................3 对IPv6组播源的过滤...........................................................................................................3 MLD状态..............................................................................................................................4 接收者主机的状态侦听........................................................................................................4 MLD报文类型..............................................................................................................................5 MLD查询报文......................................................................................................................5 MLD报告报文......................................................................................................................6 i
技术介绍 IP组播 MLD MLD MLD是Multicast Listener Discovery Protocol(组播侦听者发现协议)的简称,它用于IPv6路由器在其直连网段上发现组播侦听者。组播侦听者(Multicast Listener)是那些希望接收组播数据的主机节点。 路由器通过MLD协议,可以了解自己的直连网段上是否有IPv6组播组的侦听者,并在数据库里做相应记录。同时,路由器还维护与这些IPv6组播地址相关的定时器信息。 MLD路由器使用IPv6单播链路本地地址作为源地址发送MLD报文。MLD使用ICMPv6(Internet Control Message Protocol for IPv6,针对IPv6的互联网控制报文协议)报文类型。所有的MLD报文被限制在本地链路上,跳数为1。 到目前为止,MLD有两个版本: z MLDv1(由RFC 2710定义),源自IGMPv2 z MLDv2(由RFC 3810定义),源自IGMPv3 MLDv1原理简介 MLDv1主要基于查询和响应机制完成对IPv6组播组成员的管理。 查询器选举机制 当一个网段内有多台IPv6组播路由器时,由于它们都能从主机那里收到MLD成员关系报告报文(Multicast Listener Report Message),因此只需要其中一台路由器发送MLD查询报文(Query Message)就足够了。这就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为MLD查询器,其选举过程如下: (1) 所有MLD路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送MLD普遍组查询(General Query)报文(目的地址为FF02::1); (2) 本地网段中的其它MLD路由器在收到该报文后,将报文的源IPv6地址与自己的接口地址作比较。通过比较,IPv6地址最小的路由器将成为查询器,其它路由器成为非查询器(Non-Querier); (3) 所有非查询器上都会启动一个定时器(即非查询器存在时间定时器Other Querier Present Timer)。在定时器超时前,如果收到了来自查询器的MLD查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。 1
技术介绍 IP组播 MLD 加入IPv6组播组机制 图1 MLD加入IPv6组播组示意图 如图1所示,假设Host B与Host C想要收到发往IPv6组播组G1的IPv6组播数据,而Host A想要收到发往IPv6组播组G2的IPv6组播数据,则主机加入IPv6组播组的基本过程如下: (1) MLD查询器(Router B)周期性地以组播方式向本地网段内的所有主机和路由器发送普遍组查询报文(目的地址为FF02::1); (2) 在收到该查询报文后,希望加入IPv6组播组G1的主机Host B与Host C的其中之一(这取决于谁的延迟定时器Delay Timer先超时),譬如Host B会首先以组播方式发送MLD成员关系报告报文(目的地址为G1的IPv6组地址),以宣告自己要加入G1; (3) 由于本地网段中的所有主机都能收到Host B发往G1的报告报文,因此当Host C收到该报告报文后,将不再发送同样针对相同IPv6组播组G1的报告报文,因为MLD路由器(Router A和Router B)已知道本地网段中有对G1感兴趣的主机了。这个机制称为MLD成员关系报告抑制机制,该机制有助于减少本地网段的信息流量; (4) 与此同时,由于Host A关注的是G2,所以它仍将以组播方式发送报告报文(目的地址为G2的IPv6组地址),以宣告自己要加入G2; (5) 经过以上的查询和响应过程,MLD路由器了解到本地网段中有IPv6组播组G1和G2的成员,于是由IPv6组播路由协议(如IPv6 PIM)生成(*,G1)2
技术介绍 IP组播 MLD 和(*,G2)组播转发项作为IPv6组播数据的转发依据,其中的“*”代表任意IPv6组播源; (6) 当由IPv6组播源发往G1或G2的IPv6组播数据经过组播路由到达MLD路由器时,由于MLD路由器上存在(*,G1)和(*,G2)组播转发项,于是将该IPv6组播数据转发到本地网段,接收者主机便能收到该IPv6组播数据了。 离开IPv6组播组机制 当一个主机离开某IPv6组播组时: (1) 该主机向本地网段内的所有IPv6组播路由器(目的地址为FF02::2)发送离开组(Done)报文; (2) 当查询器收到该报文后,向该主机所声明要离开的那个IPv6组播组发送特定组查询(Multicast-Address-Specific Query)报文(目的地址字段和组地址字段均填充为所要查询的IPv6组播组地址); (3) 如果该网段内还有该IPv6组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间(Maximum Response Delay)内发送成员关系报告报文; (4) 如果在最大响应时间内收到了该IPv6组播组其它成员发送的成员关系报告报文,查询器就会继续维护该IPv6组播组的成员关系;否则,查询器将认为该网段内已无该IPv6组播组的成员,于是不再维护这个IPv6组播组的成员关系。 MLDv2原理简介 MLDv2的原理与MLDv1基本相同,并新增了以下特性: 对IPv6组播源的过滤 MLDv2在特定组查询的基础上增加了针对IPv6组播源的过滤模式(Include/Exclude),使主机在加入某IPv6组播组G的同时,能够明确要求接收或拒绝来自某特定IPv6组播源S的IPv6组播信息。当主机加入IPv6组播组时: z 若要求只接收来自指定IPv6组播源如S1、S2、……发来的IPv6组播信息,则其报告报文中可以标记为Include Sources(S1,S2,……); z 若拒绝接收来自指定IPv6组播源如S1、S2、……发来的IPv6组播信息,则其报告报文中可以标记为Exclude Sources(S1,S2,……)。 3
技术介绍 IP组播 MLD 如图2所示,网络中存在Source 1(S1)和Source 2(S2)两个IPv6组播源,均向IPv6组播组G发送IPv6组播报文。Host B仅对从Source 1发往G的信息感兴趣,而对来自Source 2的信息没有兴趣。 图2 指定源组的IPv6组播流路经 如果主机与路由器之间运行的是MLDv1,Host B加入IPv6组播组G时无法对IPv6组播源进行选择,因此无论Host B是否需要,来自Source 1和Source 2的IPv6组播信息都将传递给Host B。 当主机与路由器之间运行了MLDv2之后,Host B就可以要求只接收来自Source 1、发往G的IPv6组播信息(S1,G),或要求拒绝来自Source 2、发往G的IPv6组播信息(S2,G),这样就只有来自Source 1的IPv6组播信息才能传递给Host B了。 MLD状态 运行MLDv2的组播路由器按每条直连链路上的组播地址(per multicast address per attached link)来保持IPv6组播组的状态。IPv6组播组的状态包括: z 过滤模式:保持对Include或Exclude的状态跟踪。 z 源列表:保持对新增或删除IPv6组播源的跟踪。 z 定时器:表示IPv6组播地址超时后切换到Include模式的过滤定时器、关于源记录的源定时器等。 接收者主机的状态侦听 运行MLDv2的组播路由器通过侦听接收者主机的状态,记录和维护网段上加入到源组的主机的信息。 4
技术介绍 IP组播 MLD MLD报文类型 下面以MLDv2为例对MLD的报文类型进行介绍: MLD查询报文 MLD查询器通过发送MLD查询报文来了解相邻接口的组播侦听状态。MLD查询报文的格式如图3所示,图中深蓝色部分为MLDv1的报文格式,各字段的含义如图3表1所示。 03471531Type=130CodeChecksumMaximum Response DelayReservedMulticast Address (128 bits)ReservedSQRVQQICNumber of Sources (n)Source Address [1] (128 bits)…Source Address [n] (128 bits) 图3 MLDv2查询报文格式 表1 MLDv2查询报文各字段含义 字段 描述 Type=130 报文类型,130代表查询报文 Code 初始化为0 Checksum 标准的IPv6校验和 Maximum Response Delay主机发送报告报文前允许的最大响应时间 5
技术介绍 IP组播 MLD 字段 描述 Reserved 保留字段,初始化为0 z 普遍组查询中,此字段设置为0 Multicast Address z 特定组或特定源组查询中,此字段设置为待查询的IPv6组播组地址 标识位,表示路由器接收到查询报文后是否对定时器更新进行抑S 制 QRV 查询器的健壮性变量(Querier’s Robustness Variable) 查询器发送普遍组查询报文的查询间隔(Querier’s Query QQIC Interval Code) z 普遍组查询或特定组查询中,此字段设置为0 Number of Sources z 特定源组查询中,此字段表示查询报文中包含的源地址个数特定源组查询中的IPv6组播源地址(i=1, 2, …, n,其中n表示Source Address( i ) 源地址的个数) MLD报告报文 主机通过发送MLD报告报文来汇报当前的组播侦听状态。MLD报告报文的格式如图4所示,各字段的含义如图4表2所示。 图4 MLDv2报告报文格式 6
技术介绍 IP组播 MLD 表2 MLDv2报告报文各字段含义 字段 描述 Type=143 报文类型,143代表报告报文 Reserved 保留字段,发送时设置为0,接收时忽略此值 Checksum 标准的IPv6校验和 Number of Multicast Address RecordsIPv6组播地址记录的个数 组播地址记录,表示主机在接口上侦听到的每个IPv6组播地址信息,包括记录类型、IPv6组播地址、IPv6Multicast Address Record( i ) 源地址等(i=1, 2, …, m,其中m表示IPv6组播地址记录的个数) 7