组播侦听发现(MLDv1)协议详解_RFC2710

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2005-05-08 华为三康机密,未经许可不得扩散 第1页, 共21页
文档编号 Document ID
密级 Confidentiality level
内部公开 文档状态 Document Status
华为三康技术有限公司 Huawei-3Com Technologies
Co., Ltd.
共21页
Total 21pages
组播侦听发现(MLDv1) 协议详解_RFC2710
拟制
Prepared by 范 磊 Date 日期 2005-05-08 评审人 Reviewed by 吴频 Date 日期 yyyy-mm-dd 批准 Approved by
陈国华
Date 日期
yyyy-mm-dd
华为三康技术有限公司
Huawei-3Com Technologies Co., Ltd.
版权所有 侵权必究 All rights reserved
2005-05-08 华为三康机密,未经许可不得扩散 第2页, 共21页
修订记录Revision record
日期 Date
修订版本Revision version 修改描述
change Description
作者 Author
2005-05-08 1.00 初稿完成 initial transmittal
范 磊
目录Table of Contents
1MLDv1简介 (5)
2消息格式 (5)
2.1代码(Code) (6)
2.2校验和(Checksum) (7)
2.3最大响应延迟(Maximum Response Delay) (7)
2.4保留(Reserved) (7)
2.5组播地址(Multicast Address) (7)
2.6其他区域(Other fields) (7)
3协议描述 (8)
4节点状态转换图 (10)
5路由器状态转换图 (14)
6定时器及其缺省值列表 (19)
6.1健壮性变量(Robustness Variable) (19)
6.2查询间隔(Query Interval) (20)
6.3查询响应间隔(Query Response Interval) (20)
6.4组播侦听者间隔(Multicast Listener Interval) (20)
6.5其他查询器存在间隔(Other Querier Present Interval) (20)
6.6启动查询间隔(Startup Query Interval) (20)
6.7启动查询次数(Startup Query Count) (21)
6.8最后侦听者查询间隔(Last Listener Query Interval) (21)
6.9最后侦听者查询次数(Last Listener Query Count) (21)
6.10主动报告间隔(Unsolicited Report Interval) (21)
7消息目的地址 (21)
2005-05-08 华为三康机密,未经许可不得扩散第3页, 共21页
2005-05-08
华为三康机密,未经许可不得扩散 第4页, 共21页
文档标题
关键词Key words :IPv6、MLD 、IGMPv2 摘 要Abstract :
本文档介绍了IPv6路由器所使用的一种协议,用以发现在其直连网络上的组播侦听者(即希望接收组播数据的节点)的存在,并且能明确发现这些邻居节点所感兴趣的组播地址。

这个协议就是组播侦听发现(MLD ), MLD v1源于IPv4的IGMPv2。

二者之间一个比较重要的区别是:MLD 使用ICMPv6(IP 协议号58)消息类型,不同于IGMP (IP 协议号2)消息类型。

缩略语清单List of abbreviations : Abbreviations 缩略
语 Full spelling 英文全名 Chinese explanation 中文解释 IPv6 Internet Protocol version 6 IP 协议第6版 MLDv1 Multicast Listener Discovery version 1
组播侦听发现版本1 IGMPv2
Internet Group Management Protocol, Version 2 互联网组管理协议版本2
1MLDv1简介
MLD的目的是使能每个IPv6路由器发现在其直连网络上的组播侦听者(即希望接收组播数据的节点)的存在,并且能明确发现这些邻居节点所感兴趣的组播地址。

然后提供这些消息给路由器所使用的组播路由协议,以确保组播数据转发至存在接收者的所有链接。

MLD是非对称协议,明确了组播侦听者与路由器的不同行为。

对路由器本身正在侦听的组播地址来说,路由器扮演协议的两种角色,包括对自己的消息作出回应。

如果路由器有不止一个接口在同一网络上,它只需要在其中一个接口上运行此协议。

另一方面,对侦听者来说,则必须在所有接口运行此协议以便应用中或上层协议从接口接收所需要的组播数据。

2消息格式
MLD是ICMPv6的一个子协议,也就是说,MLD消息类型是一系列ICMPv6消息的子系列,在IPv6报文中MLD消息以置下一报头值58作识别。

本文档描述的所有MLD消息发送时使用IPv6本地链路源地址,跳数限制值为1,并且在逐跳选项头中存在IPv6路由器告警选项(RTR-ALERT)(路由器要鉴别其本身不感兴趣的组播地址的MLD消息,必须使用路由器告警选项)。

2005-05-08 华为三康机密,未经许可不得扩散第5页, 共21页
MLD消息的格式如图1下:
图1
类型(Type)
MLD消息共有三种:
组播侦听查询(类型值=130)
可分为两种子类型:
普遍查询:用于获得在所连网络上具有侦听者的组播地址。

特定组播地址查询:用于获得在所连网络上对一特定组播地址是否存在侦听者。

组播侦听报告(类型值=131)
组播侦听离开(Multicast Listener Done)(类型值=132)
在本文档的剩余部分中,以上消息类型分别简称为“查询(Query)”、“报告(Report)”、“离开(Done)”。

2.1代码(Code)
发送时设置为1;接收时忽略。

2005-05-08 华为三康机密,未经许可不得扩散第6页, 共21页
2.2校验和(Checksum)
标准的ICMPv6校验和,覆盖所有MLD消息以及IPv6首部区域中的伪首部。

2.3最大响应延迟(Maximum Response Delay)
最大响应延迟值只在查询报文消息中有意义,它指定了发送响应报文的最大允许时间延迟,单位为毫秒。

在其他报文消息中,发送时设置为零,接收时忽略。

改变其值大小可以调整离开潜伏期(leave latency)(即从链路上最后一个节点停止侦听某一特定组播地址开始,到路由协议发现不存在该地址的侦听者为止的时间),在6.8章节会讨论。

它也可以用来调整一个链路上MLD协议报文流量的大量发送,讨论见章节6.3。

2.4保留(Reserved)
发送者设为零;接收者忽略。

2.5组播地址(Multicast Address)
在查询报文中,当发送普遍查询时,组播地址值设为零;当发送特定组查询时,设为特定的IPv6组播地址。

在报告或离开报文中,组播地址值分别设为报文发送者要侦听或者停止侦听的特定IPv6组播地址。

2.6其他区域(Other fields)
接收到的MLD报文长度是这样计算的:用IPv6负载长度值减去位于IPv6首部与MLD报文之间的任何存在的IPv6扩展头的长度值。

如果此长度值大于24字节,表明还有超出上面所描述的区域存在,可能属于将来用来向后兼容的MLD版本。

在本文档所描述MLD版本的实现不允许发送长度超过24字节的MLD报文,在接收MLD报文时,必须忽略任何超过前24字节的报文部分。

在所有情况中,MLD校验和的计算必须包含所有的MLD消息,而不仅仅是2005-05-08 华为三康机密,未经许可不得扩散第7页, 共21页
前24字节。

3协议描述
本文档中,定时器的缺省值将在后面描述,定时器与计数器的名字出现在方括号中。

路由器使用MLD学习在其每个相连链路上有侦听者的组播地址。

每个路由器保存着一系列在每个相连链路上的具有侦听者的组播地址以及与组播地址相联系的定时器。

注意:路由器需要知道的仅仅是在某一相连链路上某个组播地址存在侦听者;它不需要了解侦听者的标识(如单播地址)或者存在多少侦听者。

对每一个相连链路,路由器选择这个链接上的一个本地链路单播地址,用作在这个链路上发送的MLD报文的IPv6源地址。

对路由器上每一个运行MLD协议的接口,路由器必须配置此接口侦听所有IPv6组播产生的链路层组播地址。

例如:一个以太网连接的路由器必须设置它的以太网地址过滤接收所有以3333[IPv6-ETHER]开始的以太网组播地址;如果以太网接口不支持组播范围地址的过滤,那么它必须配置接收所有以太网组播地址,以满足MLD的需要。

对于每一个相连的链路,路由器可以充当两种角色的一个:查询器或非查询器。

每一个链路上通常只有一个查询器。

在每一个相连链路上,路由器都以查询器的角色开始。

如果一个路由器在某个链路上收到查询消息,并且查询消息的IPv6源地址小于此链路上选择的地址,那么在这个链路上,路由器就成为非查询器。

如果在【其他查询器存在间隔(Other Querier Present Interval】的时间期间,非查询器在这个链路上没有收到更小地址的路由器查询,那么在这个链路上路由器又恢复为查询器角色。

在某个链路上,查询器周期性【查询间隔(Query Interval)】发送普遍查询,以主动请求在此链路上所有感兴趣的组播地址的报告。

在启动时,一个路由器应该在所有相连链路上发送【启动查询计数(Startup Query Count)】普遍查询,时间间隔为【启动查询间隔(Startup Query Interval)】,以便快速可靠的发现在这些链路上组播侦听者的存在。

普遍查询发送至链路范围所有节点组播地址(FF02::1),组播地址域值为零,最大响应延迟置为【查询响应间隔(Query Response Interval)】。

2005-05-08 华为三康机密,未经许可不得扩散第8页, 共21页
当一个节点收到一个普遍查询时,它为在这个收到查询的接口所要侦听的每个组播地址,设置一个延迟定时器,链路范围所有节点组播地址与范围0(保留)或者1(本地节点)的组播地址除外。

每一个定时器设为不同的随机值,选择范围是【0,最大响应延迟(Maximum Response Delay)】,其中,最大响应延迟为在查询报文中指定。

如果对应某一组播地址的定时器正在运行,那么当所要求的最大响应延迟小于正在运行的定时器的剩余值时,此定时器才会重置为一个新的随机值。

如果查询报文设定最大响应延迟值为零,那么每一个定时器的值也设为零,定时器超时所要进行的动作就会立即执行。

当一个节点收到一个特定组查询,如果在收到查询的接口上它正在侦听所查询的组播地址,那么此节点就会为此组播地址的定时器设为一个随机值,选择范围是【0,最大响应延迟(Maximum Response Delay)】,就像上面描述的那样。

如果此组播地址的定时器正在运行,那么当所要求的最大响应延迟小于正在运行的定时器的剩余值时,此定时器才会重置为一个新的随机值。

如果查询报文设定最大响应延迟值为零,那么此定时器的值也设为零,定时器超时所要进行的动作就会立即执行。

如果一个节点在某一特定接口的对应一特定组播地址的定时器超时,节点通过此接口发送一个报告;在报告报文的IPv6目的地址域与MLD组播地址域中,都携带要报告的组播地址。

IPv6的调数限制为1用来防止报文传输到超越所报告接口连接的链路的范围。

当一个节点从一个接口收到另一个节点的对应某一组播地址的报告时,如果此时此节点在同样的接口上也在运行对应相同组播地址的定时器,那么它就会停止此定时器,不会发送对应这个组播地址的报告,这样可以防止在一个链路上收到多份多份相同的报告。

如果一个路由器从某一链路上收到一个报告,如果报告的组播地址不在路由器的此链路具有侦听者的组播地址列表中,那么报告地址就会加入这个列表,对应组播地址的定时器设置为【Multicast Listener Interval】。

如果报告的组播地址已经在路由器的此链路具有侦听者的组播地址列表中,那么对应此组播地址的定时器重置为【Multicast Listener Interval】。

如果某一路由器上对应某一组播地址的定时器超时,就会认为在此链路上不再有此组播地址的侦听者存在,此组播地址就会从列表中删除。

当一个节点在某一接口上启动侦听某一组播地址时,它应该在此接口上立即主动发送此2005-05-08 华为三康机密,未经许可不得扩散第9页, 共21页
组播地址的报告,以免它是此链路上的第一个侦听者。

为了防备初始报告可能丢失或损坏,建议重复发送一至两次,每次时间间隔为【Unsolicited Report Interval】。

当一个节点在某一接口上停止侦听某一组播地址时,它应该发送离开消息给链路范围所有路由器组播地址(FF02::2),并且在其组播地址域携带要停止侦听的地址。

如果一个节点在发送报告消息前收到另外一个同样组播组的报告消息,它就会受到抑制而可以不发送此报告。

如果为优化起见,报告发送必须不受抑制,但缺省是受到抑制的。

当处于查询器状态的路由器从链路上收到离开消息时,如果要离开的组播报文地址在此链路上查询器的侦听者地址列表中,查询器就会发送【Last Listener Query Count】次数组播地址特定查询,每次间隔时间【Last Listener Query Interval】。

组播地址特定查询一般将【Last Listener Query Interval】设定为【Maximum Response Delay】,如果最后查询的响应延迟时间过后,没有此组播地址的报告在此链路上发送给查询器,因此此地址就从侦听者列表中删除,并且此地址的消失要通知给组播路由组件。

这个过程会持续直到完成(也是就直到收到一个报告或者最后特定组查询没有响应),在此过程中此链路上会忽略从查询器到非查询器的转变。

处于非查询器状态的路由器必须忽略离开消息。

当非查询器收到一个组播特定查询时,如果待查询组播地址定时器值大于【Last Listener Query Count】x 【Maximum Response Delay】,那么它就将此定时器值置为后者的值。

4节点状态转换图
节点的行为可以下面的状态转换图更加正式地描述。

一个节点可以处于以下三种状态之一:
"Non-Listener" 状态
当在此接口上节点不在侦听组播地址(也就是没有上层协议或程序要求接收此组播地址的报文)。

这是所有接口对所有组播地址的初始状态。

节点不需要保存此状态。

"Delaying Listener" 状态
当节点在此接口上准备侦听此组播地址,同时运行此组播地址的报告延迟定时器。

2005-05-08 华为三康机密,未经许可不得扩散第10页, 共21页
"Idle Listener" 状态
当节点在此接口上侦听此组播地址,不在运行此组播地址的报告延迟定时器。

有五个重要事件能触发MLD状态的变化:
-"start listening"
发生在节点开始侦听接口上的组播地址时,它只发生在Non-Listener状态。

-"stop listening"
发生在节点停止侦听接口上的组播地址时,它只发生在Delaying Listener与Idle Listener 状态。

-"query received"
发生在节点接收到一个有效的普遍查询或者一个有效的特定组播地址查询。

查询报文要想有效,必须来自本地链路IPv6源地址,长度至少24字节,并且有一个正确的MLD校验和。

MLD消息中的组播地址域内容必须是零(普遍查询)或者一个有效的组播地址(组播地址特定查询)。

普遍查询应用于收到查询的接口上的所有组播地址。

特定组播地址查询应用于收到查询的接口上单个组播地址。

处于Non-Listener状态的节点忽略查询。

—"report received"
发生在节点收到一个有效的MLD报告消息。

报告报文要想有效,必须来自本地链路IPv6源地址,长度至少24字节,并且有一个正确的MLD校验和。

在收到报文的接口上,报告报文只适用于报文中组播地址域中标识的组播地址。

在Non-Listener 或者Idle Listener 状态,报告报文被忽略。

-"timer expired"
发生在接口上某组播地址的报告延迟定时器超时时,它只发生在Delaying Listener状态。

所有其他事件,例如接收到无效的MLD消息或者非查询或报告报文的消息类型,在所有状态下都被忽略。

基于以上事件,有七种可能的行为:
-"send report"
向接口上的组发送报告,报告消息发送给被报告的组
2005-05-08 华为三康机密,未经许可不得扩散第11页, 共21页
-"send done"
向接口上的组发送离开报文,如果表明我们是最后发送报告节点的标志被清除,则不会发送组离开报文。

-"set flag"
若节点是此组最后一个发送报告的节点,则设置标志。

-"clear flag"
若节点不是此组最后一个发送报告的节点,则清除标志。

-"start timer"
接口上的组按从【0, Maximum Response Delay】中随机选出的延迟时间值启动一个定时器,其中Maximum Response Delay在查询消息中指定。

若这是一个主动的组报告消息,则定时器将被置为一个范围在【0, Unsolicited Report Interval】之间随机的延迟值。

-"reset timer"
重置组定时器,将定时器置为一个由start timer中指定的,在【0, Maximum Response Delay】范围内的统一值
-"stop timer"
接口上的组停止定时器。

在下面的状态转换图(图2)中,每个状态转换弧上标明了触发状态转换的事件,括号中则标明了状态转换时将要采取的行为。

要注意状态转换总是由事件触发,即使行为在一定条件下才发生,也会进行状态转换。

2005-05-08 华为三康机密,未经许可不得扩散第12页, 共21页
图2
链路范围所有节点地址(FF02::1)被作为特殊情况来处理。

在每个接口上主机初启时时处于状态,且不会变至其他状态,也不会为该组地址发送报告或离开消息。

MLD消息从不会发送给范围0(保留)或1(本地节点)的组播地址。

MLD消息发送给范围2(本地链路)的组播地址,包括请求节点组播地址[ADDR- ARCH],但链路范围所有节点地址(FF02::1)除外。

2005-05-08 华为三康机密,未经许可不得扩散第13页, 共21页
5路由器状态转换图
路由器的行为通过下面的状态转换图(图3)更加正式的表示出来。

路由器可能处于以下两种状态之一:
"Querier"
当此路由器在此链路上被指定为发送MLD查询报文。

"Non-Querier"
当此链路上其他路由器被指定为发送MLD查询报文。

下面的三种事件能触发路由器状态发生变化:
-"query timer expired"
发生在所设置的查询定时器超时,只有对处于查询器状态的路由器才有意义。

-"query received from a router with a lower IP address"
发生在收到从相同链路上具有更小IPv6源地址的路由器发送的有效查询。

查询消息要想有效,必须来自本地链路IPv6源地址,长度至少24字节,并且有一个正确的MLD校验和。

-"other querier present timer expired"
发生在链路上用来记录具有更小IP地址查询器的定时器超时。

只有对处于非查询器状态的路由器才有意义。

基于以上事件,有三种可能的行为:
-"start general query timer"
在相连的链路上启动普遍查询定时器。

-"start other querier present timer"
在相连的链路上每隔【Other Querier Present Interval】时间启动其他查询器存在定时器。

-"send general query"
在所连接的链路上发送普遍查询,普遍查询向链路范围所有节点地址(FF02::1)发送,
且最大响应延迟间隔为【Query Response Interval】。

2005-05-08 华为三康机密,未经许可不得扩散第14页, 共21页
图3
在所有连接的链路上路由器开始处于初始状态,并迅速转换为查询器状态。

另外,为了跟踪哪些组有侦听者,在任何单一相连链路上,对应于任意一个IPv6组播地址,路由器可以处于以下三种状态之一:
-"No Listeners Present" state
当链路上不存在发送报告侦听组播地址的节点时。

这是路由器上对应所有组播地址的初始状态。

路由器上不需要特意保存。

-"Listeners Present" state
链路上有节点发送报告侦听此组播地址。

-"Checking Listeners" state
2005-05-08 华为三康机密,未经许可不得扩散第15页, 共21页
当路由器收到一个离开消息但未收到此组播地址的报告。

有五种重要事件将触发路由器状态变化:
-"report received"
发生在当路由器从此链路上收到某一组播地址的报告。

报告消息要想有效,必须来自本地链路IPv6源地址,长度至少24字节,并且有一个正确的MLD校验和。

-"done received"
发生在当路由器从此链路上收到某一组播地址的离开消息。

离开消息要想有效,必须来自本地链路IPv6源地址,长度至少24字节,并且有一个正确的MLD校验和。

此事件只有当路由器是查询器且处于"Listerners Present" 状态下才有意义。

-"multicast-address-specific query received"
发生在当路由器从此链路上收到特定组播地址查询消息。

查询消息要想有效,必须来自本地链路IPv6源地址,长度至少24字节,并且有一个正确的MLD校验和。

此事件只有当路由器是非查询器且处于"Listerners Present" 状态下才有意义。

-"timer expired"
发生在当为组播地址所设置的定时器超时,此事件只有当路由器处于"Listerners Present" 或"Checking Listeners"状态下才有意义。

-"retransmit timer expired"
发生在为重传特定组播地址查询而设置的定时器超时时。

此事件只有当路由器处于"Checking Listeners"状态下才有意义。

基于以上的事件,有七种可能的行为:
-"start timer"
在此链路上上启动某组播地址的定时器。

如果定时器已在运行,则重置定时器的初始值为【Multicast Listener Interval】。

-"start timer*"
2005-05-08 华为三康机密,未经许可不得扩散第16页, 共21页
在此链路上上启动某组播地址的定时器。

如果此路由器为查询器,则置定时器值为当前定时器值与【Last Listener Query Interval】*【Last Listener Query Count】二者中的小者。

如果路由器为非查询器,则置定时器值为查询消息中的【Maximum Response Delay】*【Last Listener Query Count】。

-"start retransmit timer"
在此链路上为此组播地址启动重传定时器,时间间隔为【Last Listener Query Interval】。

-"clear retransmit timer"
清除此链路上某组播地址的重传定时器。

-"send multicast-address-specific query"
在此链路上为某组播地址发送特定组播地址查询。

特定组播地址查询发送给待查询的组播地址,且有【Last Listener Query Interval】间隔的最大响应延迟时间。

-"notify routing +"
通知组播路由协议在此链路上有此组播地址的侦听者存在。

-"notify routing -"
通知组播路由协议在此链路上不再有此组播地址的侦听者存在。

以下状态图应用于每个链路上的每个组播组。

共有两个状态图,一个对应处于查询器状态的路由器,另一个对应处于非查询器状态的路由器。

查询器与非查询器状态之间的转换被特殊处理。

当查询器/非查询器状态转换发生时,在此链路上处于"No Listeners Present" or "Listeners Present"所有组播组会相应改变状态状态转换图。

然而,处于"Checking Listeners"状态的组播组会保持原有的状态转换图直到"Checking Listeners"状态离开。

例如:一个路由器作为一个查询器启动,收到一个组播组离开消息同时从较低地址的路由器收到一个查询消息(将导致查询器向非查询器状态改变)。

它会继续发送此组播组的特定查询报文直到它收到此组报告或者它的定时器超时,这时它才会开始为此组播组执行非查询器的操作。

2005-05-08 华为三康机密,未经许可不得扩散第17页, 共21页
处于查询器状态的路由器状态转换图,见图4:
图4
处于非查询器状态的路由器状态转换图类似,见图5,但是非查询器不发送任何消息,只是被接收到的消息驱动。

2005-05-08 华为三康机密,未经许可不得扩散第18页, 共21页
图5
6定时器及其缺省值列表
大部分的定时器都是可以配置的。

如果使用了非缺省设置,它们在某一链路上的所有路由器上必须一致。

为了使公式表达清晰,使用了圆括号。

6.1健壮性变量(Robustness Variable)
健壮性变量允许根据链路上预期报文丢失情况进行调整。

如果预期报文丢失情况加重,那么健壮性变量值也可以增加。

MLD允许至多丢失(Robustness Variable – 1)报文而不受影响。

健壮性变量取值不可以为0、1。

2005-05-08 华为三康机密,未经许可不得扩散第19页, 共21页
6.2查询间隔(Query Interval)
查询间隔是查询器发送普遍查询之间的时间间隔。

缺省值:125 秒。

通过改变【Query Interval】,管理员可以调整此链路上MLD消息的数量;值越大,MLD 查询报文发送频率越小。

6.3查询响应间隔(Query Response Interval)
插入在周期性普遍查询的最大响应延迟。

缺省值:10000 (10 秒)
通过改变【Query Response Interval】,管理者可以调整MLD消息的流量拥塞。

取值越大,越可以减少流量的集中爆发,因为节点可以在更长的时间间隔内作出响应。

【Query Response Interval】所表示的时间值必须小于【Query Interval】。

6.4组播侦听者间隔(Multicast Listener Interval)
组播侦听者间隔是在链路上一个路由器判定不再有对应组播地址的侦听者存在而必须经过的时间。

其值必须为【the Robustness Variable】*【the Query Interval】+【one Query Response Interval】。

6.5其他查询器存在间隔(Other Querier Present Interval)
其他查询器存在间隔是在链路上一个路由器判定不再有另一个查询器存在而必须经过的时间。

其值必须为【the Robustness Variable)】* 【the Query Interval】+【one half of one Query Response Interval】。

6.6启动查询间隔(Startup Query Interval)
启动查询间隔是查询器启动时发送普遍查询之间的间隔。

缺省值:1/4 查询间隔。

2005-05-08 华为三康机密,未经许可不得扩散第20页, 共21页。

相关文档
最新文档