网络协议---MPL(1):draft-ietf-roll-trickle-mcast-12文档翻译

ROLL                                                              J. Hui
Internet-Draft                                                 Nest Labs
Intended status: Standards Track                               R. Kelsey
Expires: December 4, 2015                                   Silicon Labs
                                                            June 2, 2015

Multicast Protocol for Low power and Lossy Networks (MPL)
低功耗有损网络多播协议
draft-ietf-roll-trickle-mcast-12

摘要:
此文档详述了在受限网络中提供IPv6多播转发功能的低功耗有损网络多播协议(MPL)。MPL使得我们无需构建和维护多播转发拓扑,从而专注于向MPL域传播所有的MPL报文。

MPL有两种模式的操作。第一种模式使用流算法来管理控制和数据层报文传送,它适用于少数多播源的布署。另外一种模式使用经典的洪泛。通过提供两种模式和参数化的流算法,一个MPL程序可用于多种形式的多播部署,并可以保持传播延迟和传送效率之间的平衡。

1、介绍
Low power and Lossy Networks(低功耗有损网络LLNs, 总感觉应该翻译为低功耗低损网络)通常用于通信、计算、内存、能量等资源受限的情景下。资源受限有可能阻碍现有的IPv6多播路由和转发机制的使用。传统IP多播传送通常依赖于拓扑维护机制来使得一个多播组的所有订阅用户可以发现和维护路由(如 [ RFC3973 ] [ RFC4601 ])。尽管如此,在低功耗有损网络中维护此拓扑结构代价昂贵,甚至资源无法满足。

内存受限将导致设备仅能维护一个或少数邻居的链路和路由。为此,用于LLNs的路由协议(RPL)指定了存储模式和非存储模式 [RFC6550]。最新文档允许RPL路由仅维护一个或少数几个默认路由以通向一个边界路由(LLN Border Router--LBR)。基于同样原因,一个LLN设备在内存受限环境进行操作时将无法维护一个组播路由拓扑。

进而,无线网络的动态属性将使得维护一个组播路由拓扑变得异常昂贵。在无线环境下,拓扑结构的维护可能会包含在一个管理网域中选择一个连通支配集用于向所有节点转发多播信息。然而,现存机制经常需要2跳拓扑信息,并且在网络稠密环境下维护信息所需的花费将呈几何级数增长。

此文档详述低功耗有损网络多播协议(MPL),它给受限网络提供了IPv6多播转发功能。MPL使得我们无需构建和维护多播转发拓扑,从而专注于向MPL域传播所有的MPL报文。通过使用流算法 [RFC6206],MPL设备只需要少量的几个状态就能发起传播。流算法还使得MPL能够感知密度,允许通信速率跟随密度的对数按比例进行变化。

2、术语
MPL Forwarder (MPL传送者) : 一个运行MPL的路由器,一个MPL Forwarder至少配备一个MPL接口。
MPL Interface (MPL接口) :附着于一个通信介质的MPL传送者。它按规则发送和接收MPL数据报文和MPL控制报文。一个MPL接口被分配一个或多个单播地址,并被一个或多个MPL域地址订阅。
MPL Domain Address (MPL域地址):在一个MPL域中标识MPL接口集的一个多播地址。在一个MPL域中可以通过它的MPL域地址做为目标地址进行MPL数据报文传播。
MPL Domain (MPL域):一个区域范围,定义于 [RFC4007],此范围的MPL接口订阅相同的MPL域地址,并参与MPL数据报文传播。
MPL Data Message(MPL数据报文):一条多播报文,用于在一个MPL域的MPL传送者间传达一个多播负载。一个MPL数据报文在IPv6报文头部中包含一个MPL选项,还有一个跟MPL域相对应的MPL域地址作为其目标地址。
MPL Control Message(MPL控制报文):一个链路本地多播报文,用于传递最近收到的有关邻居MPL传送者的MPL数据报文。
MPL Seed(MPL种子):一个产生MPL数据报文的MPL传送者,它用于进入一个MPL域的入口点。
MPL Seed Identifier(MPL种子标识):一个无符号整数,作为一个MPL域的MPL种子的唯一标识符。
Node(节点):术语“节点”在本文档中特指MPL传送者。

3、适用性声明
MPL是一个IPv6多播转发协议,它的设计符合资源受限的低功耗有损网络的通信特性。它通过使用流算法来实现多播信息的传送。MPL被设计用于在网络中那些使用低功耗有损链路之间的通信,它适用于各种不同空间和时间规模的拓扑结构。

虽然是按照低功耗有损网络进行设计的,但MPL并不仅限于此。MPL可适用于那些无多播路由状态需求的任何网络,MPL还可用于那些在一个链路子集中被认为是低功耗有损链路的环境下。

主机无需关心多播是否支持MPL,只要它的连接路由在MPL域和主机之间转发多播信息即可。尽管如此,一个主机仍可选择实现MPL,从而它就可以利用很多低功耗有损网络中固有的优势来直接接收MPL中携带多播信息。

MPL是参数化的,用以支持不同的传播技术。其中一个参数值可以使得MPL利用传统的洪范方法让每个设备只接收一次重播的广播信息。另一个参数值可以使得MPL利用流算法中的“polite gossip”方法以实现传送抑制和自适应同步技术。 [Clausen2013]中
指出了流算法的 "polite gossip" 机制在某些广播情境下的效率问题,所以在运用MPL时包含了传统洪泛模式从而在多种情况下都能获得满意的执行效率。

为支持在拥有很多资源溃泛链路的网络中更有效率地传递信息,MPL支持 被动 式转发( reactive forwarding ),即利用MPL控制报文来总结出当前多播状态。MPL控制消息的尺寸随着MPL域中MPL种子(每个MPL种子占4字节)同时存在数量而线性增加。当反应转发不能使用时,MPL控制消息将不会传输,之前所述也不会发生。

此文档并不论述MPL的密码安全机制,MPL消息确保不会被任何访问LLN的人欺骗。通常情况下,无论使用何种转发协议,在低功耗有损网络中注入消息都会被当成拒绝服务攻击。由此,低功耗有损网络通常利用链路层安全机制来减少一个攻击者注入信息的能力。例如,IEEE 802.15.4 [IEEE802154]标准中提出在框架安全机制中使用AES-128来支持访问控制、信息完整性、信息保密性和重播保护。无论如何,一旦攻击向量包括攻击者访问LLN,MPL将不会被使用。

4、MPL协议概览
MPL的目标是向所有接口传递多播信息,从而在一个MPL域中订阅目标地址的多播信息。

4.1  MPL域
一个MPL域是一个区域范围,它定义于 [RFC4007],MPL接口订阅相同的MPL域地址并共同协助完成MPL数据报文的传播。

当协助仅发生在一个MPL域时,MPL域地址是域本地作用域的ALL_MPL_FORWARDERS多播地址(scop值为3) [RFC7346]

当一个MPL传送者的协助是在多个MPL域同时完成的情况下,最多只能有一个MPL域地址可以赋予ALL_MPL_FORWARDERS多播地址。其它每个MPL域必须赋予一个唯一的MPL域地址,从而使得MPL传送者可以标识每个MPL域。MPL域将基于一些基础拓扑进行自动配置。例如当使用RPL [RFC6550]时,MPL域将基于RPL实例进行配置。

当MPL被用于调度时,会使用管理者来定义它所覆盖的范围。例如,多个基于不同底层网络技术的子网中,管理本地域(scop值为4)或站点本地域(scop值为5)将被使用。

一个MPL传送者可能会参与其它多播地址进行MPL域确认。一个MPL接口必须订阅它所参与的MPL域的MPL域地址。其它多播地址的分配是超出本地域范围的。

在使用被动式转发( reactive forwarding)时,对于订阅的每一个MPL域地址 ,MPL接口必须同时订阅和此域地址相对应的链路本地域(scop值为2)(当传输MPL控制报文时)。     

4.2  信息库概述
一个节点需要记录必要的协议状态,包含以下信息集:
  • 本地接口集记录本地MPL接口集合和MPL接口所对应的单播地址。
  • 域集记录MPL域地址集合和订阅这些域地址的本地MPL接口。
  • 种子集记录在一个MPL域内从一个MPL种子接收到的MPL数据报文相关信息。每一个MPL域会拥有一个相关的种子集。一个种子集维护和一个MPL种子相关的MPL传送者愿意接收或已经在消息集缓冲(Buffered Message Set)进行缓冲的MPL数据报文的最小序列号。MPL通过使用种子集和消息集缓冲来决定何时接收一个MPL数据报文、处理有效载荷和进行转发。
  • 一个消息集缓冲(Buffered Message Set)记录最近从一个MPL域中的MPL种子那收到的MPL数据报文。每个MPL域都拥有与之关联的消息集缓冲。MPL数据报文常驻于一个消息集缓冲内,并拥有一个序列号,此序列号大于等于由相应种子集所维护的最小阈值。MPL通过消息集缓冲来存储将要由MPL传送者转发的MPL数据报文。

4.3  协议概览
MPL通过实现一种控制洪泛机制来实现在一个MPL域内向所有接口广播数据信息。MPL通过执行以下任务来广播信息:
  • 当需要向特定MPL域广播一个信息时,MPL种子生成一个MPL数据报文,该报文包含一个MPL域地址作为其IPv6目的地址。还包含一个MPL种子标识,一个新生成的序列号,和多播信息。如果多播目的地址不是MPL域地址,将会使用IP-in-IP[RFC2473]来将一个多播信息封装进MPL数据报文中,以保存原始的IPv6目标地址。
  • 当收到一个MPL数据报文时,MPL传送者解析出MPL种子和序列号,并通过MPL域的种子集和消息集缓冲判断此MPL数据报文之前是否曾经收到过。
         --如果序列号小于种子集序列的下界,或者该序列号在消息集缓冲已经存在,MPL传送者将把此MPL数据报文标记为旧报文。
         --否则MPL传送者将把此报文标记为新报文。
  • 对于每个新MPL数据报文,MPL传送者会更新种子集,把MPL数据报文加进消息集缓冲,处理它的有效载荷,并在一定时间后广播MPL数据报文给所有相同MPL域内的MPL接口以继续转发信息。
  • 每个MPL传送者会周期性地对MPL控制报文进行链路本地多播,以向MPL接口传送包含一个MPL域种子集和消息集缓冲的信息。
  • 当收到一个MPL控制报文后,MPL传送者判定它是否属于新发送者的报文,以广播它们的MPL数据报文。

MPL通过配置参数来使用两种转发策略,以实现通过MPL接口传播MPL数据报文。
  • 主动式转发(Proactive Forwarding):在主动式转发中,MPL传送者通过流算法(Trickle algorithm)来安排MPL数据报文的传送,无需理会邻居是否已收到过此信息。在传送报文之后的一段指定时间之内,MPL传送者会停止此报文的主动式转发。
  • 被动式转发(Reactive Forwarding):在被动式转发中,MPL传送者使用流算法对MPL控制报文进行链路本地广播。所有MPL传送者通过MPL控制报文来发现还未接收过的新MPL数据报文。当发现一个相邻的MPL发送者还未收到MPL数据报文,MPL发送者则安排使用流算法来传送那些数据报文。

注意,在同一个MPL域内使用主动和被动转发策略并不互斥,可以同时使用。例如,当收到一个新MPL数据报文时,在同时使用主动和被动转发技术的情况下,MPL转发者将主动地在一个限定时间后转发此报文,并在收到MPL控制报文时安排进一步地传输。

4.4  信号概览
MPL生成并处理以下报文:
MPL数据报文:由MPL种子生成,用于在一个MPL域中发送多播信息。MPL数据报文源地址是由MPL种子所对应的本地接口集生成的,它在MPL域中是合法的。MPL数据报文目的地址是MPL域所对应的MPL域地址。一个MPL数据报文包含以下内容:
  • 生成MPL数据报文的MPL种子所对应的种子标识。
  • 生成MPL数据报文的MPL种子的序列号。
  • 原始多播信息。

MPL控制报文:由MPL传送者生成,用于传递包含在MPL域的种子集中的信息和到邻居传送者的消息集缓冲。一个MPL控制报文包含对应于种子集每个条目的元组列表。每个元组包含:
  • MPL种子的种子集所维护的最小序列号。
  • 一个位向量,指示常驻于消息集缓冲的MPL种子所对应的MPL数据报文序列号。最高位指示序列号是否等于种子集所维护最小阈值。

  • 位向量的长度。

5、MPL参数和常量
本节描述用于MPL的各种程序、网络参数和常量。

5.1  MPL多播地址
MPL利用MPL域地址来识别一个MPL域的MPL接口。默认情况下,MPL传送者为域本地作用域(scop值为3)订阅ALL_MPL_FORWARDERS多播地址。

对于每个订阅了MPL域地址的MPL接口来说,在使用被动式转发时,它还必须订阅该地址的链路本地域(scop值为2)。MPL传送者使用MPL链路域地址来向邻居传送MPL控制报文。

5.2  MPL报文类型
MPL定义了一个IPv6选项来携带一个MPL种子标识和一个MPL数据报文中的序列号。IPv6选项类型值为ox6D。

MPL定义了一个ICMPv6消息(MPL控制报文),用以向邻居传送包含一个MPL域种子集和消息集缓冲的信息。MPL控制报文的ICMPv6类型为MPL_ICMP_TYPE。

5.3  MPL种子标识
MPL使用种子标识来唯一确定一个MPL域的MPL种子。对于每个MPL域来说,MPL传送者使用MPL种子时,必须拥有与之相关的MPL种子标识。一个MPL传送者在多个MPL域中可以使用相同的MPL种子标识,但种子标识对于每一个域来说,必须是唯一的。MPL种子标识唯一性的分配和验证机制在本文不进行讨论。

5.4  MPL参数
PROACTIVE_FORWARDING:
一个布尔值,默认值为TRUE。指示在第一次收到MPL数据报文后,MPL传送者是否继续传送它。同一链路的所有MPL接口将配置相同的PROACTIVE_FORWARDING值。当在同一链路中同时使用被动式转发时,程序可以选择改变接口的PROACTIVE_FORWARDING的值。设置PROACTIVE_FORWARDING的机制在本文中不做介绍。

SEED_SET_ENTRY_LIFETIME:
种子集中一个条目的最小生存周期。SEED_SET_ENTRY_LIFETIME默认值为30分钟,在同一MPL域中所有的MPL传送者推荐使用相同的30分钟值。SEED_SET_ENTRY_LIFETIME太小会使得重复检测机制失效,从而导致MPL传送者重复接收同一MPL数据报文。本文并不描述SEED_SET_ENTRY_LIFETIME的设置机制。

[RFC6206]中描述流计时器定义的时间间隔有三种配置参数:最小间隔时间Imin,最大间隔时间Imax和冗余常量 k。本文定义了第四种流配置参数:TimerExpirations,它指示了在给定的MPL数据报文和MPL控制报文中在结束流算法前,流计时器触发到期事件的次数。

在MPL数据报文和MPL控制报文传输时,每个MPL接口使用如下流参数:
DATA_MESSAGE_IMIN:
最小流计时器时间间隔,定义于 [ RFC6206 ],用于MPL数据报文传送。DATA_MESSAGE_IMIN的默认值为10乘以链路层预期延迟时间。
DATA_MESSAGE_IMAX:
最大流计时器时间间隔,定义于 [ RFC6206 ],用于MPL数据报文传送。DATA_MESSAGE_IMAX的默认值等于DATA_MESSAGE_IMIN。
DATA_MESSAGE_K:
冗余常量,定义于 [ RFC6206 ],用于MPL数据报文传送。DATA_MESSAGE_K的默认值为1。
DATA_MESSAGE_TIMER_EXPIRATIONS:
在给定MPL数据报文的流算法结束前,流计时器所触发的到期事件次数。默认值为3。
CONTROL_MESSAGE_IMIN:
最小流计时器时间间隔,定义于 [ RFC6206 ],用于MPL控制报文传送。CONTROL_MESSAGE_IMIN的默认值为10乘以最长链路层延迟时间。
CONTROL_MESSAGE_IMAX:
最大流计时器时间间隔,定义于 [ RFC6206 ],用于MPL控制报文传送。CONTROL_MESSAGE_IMAX默认值为5分钟。
CONTROL_MESSAGE_K:
冗余常量,定义于 [ RFC6206 ],用于MPL控制报文传送。默认值为1。
CONTROL_MESSAGE_TIMER_EXPIRATIONS:
在给定MPL控制报文的流算法结束前,流计时器所触发的到期事件次数。默认值为10。

[ RFC6206 ]中指出,如果不同节点配置了不同的参数,流算法可能会出现意想不到的行为。因此,在给定MPL域中的所有MPL接口使用相同的流参数。本文不讨论流参数的设置。

默认MPL参数指定一个转发策略使用了主动和被动技术。使用这些默认值,一个MPL传送者主动传送任何它收到的新MPL数据报文,多于当发现未收消息时使用MPL控制报文触发额外MPL数据报文重传。在此情景下设置DATA_MESSAGE_IMAX的值和DATA_MESSSAGE_IMIN值相同是可以接受的,因为当 DATA_MESSAGE_IMAX大于 DATA_MESSSAGE_IMIN时, 随后的MPL数据报文重传将会被MPL控制报文所触发。

6、协议报文格式
本节描述由MPL传送者所产生和处理的报文。

6.1  MPL Option
MPL选项由MPL数据报文携带,存在于IPv6逐跳选项报头之中,紧邻IPv6首部 (实际上就是IPv6扩展首部)。MPL选项格式如下:

Option Type:0x6D
Opt Data Len:选项数据域的长度,单位为字节
S                 :2比特无符号整数。标识种子ID的长度。0指示种子ID是IPv6源地址,并不包含MPL选项;1指示种子ID是16比特无符号整数;2指示种子ID是64比特无符号整数;3指示种子ID是128比特无符号整数。
               :1比特标志。为1时表示从MPL种处收到的序列值小于最大序列号。
                :1比特标志。为0时表示MPL选项符合本格式。为1时表示必须丢包。
rsv              :4比特保留字段。在传输中必须置为0,并在接收时忽略。
sequence    :8比特无符号整数。标识MPL数据报文对于MPL种子ID的相对排序。
seed-id       :发起MPL数据报文的MPL种子的唯一标识,seed-id的尺寸由S字段指示。

MPL选项中的数据(特别是M标志)由MPL传送者在MPL数据报文转发时进行更新。那些不知道MPL选项的节点必须要丢弃MPL数据报文。因此按照 [RFC2460]所述,Option Type的最高三个位被设置为“011”。Option Data Length是可变的。

seed-id是一个MPL种子的唯一标识。当seed-id是128比特时(S=3),MPL种子可能会使用一个IPv6地址,此地址是它的接口地址,从而在MPL域中保持唯一。本文不讨论如何管理MPL种子标识。

sequence字段给为每个MPL种子的MPL数据报文建立一个总排序。MPL种子必须为MPL域产生的新的MPL数据报文增加其序列值。序列号算法定义于 [RFC1982]。

将来可以通过在seed-id之后定义额外字段来扩充此格式。

6.2  MPL控制报文
MPL传送者使用ICMPv6报文向相邻MPL传送者传送包含MPL域种子集和消息集缓冲的信息。MPL控制报文格式如下:

IP字段:
Source Address       :一个MPL接口的地址集中的地址,在MPL域中必须有效的。
Destination Address :MPL域所对应的链路MPL域地址。
Hop Limit                 :255

ICMPv6字段:
Type               :MPL_ICMP_TYPE
Code              :0
Checksum       :ICMP校验和,见 [RFC4443]
MPL Seed Info[0..n] :0到多个MPL种子信息条目列表。

MPL控制报文指示存在于MPL域的消息集缓冲中的MPL数据报文序列号。MPL控制报文还指示一个MPL传送者将要接收的MPL数据报文序列号。MPL控制报文还允许相邻MPL传送者来决定交换一些新MPL数据报文。

6.3 MPL种子信息(上图中的MPL Seed Info)
MPL种子信息对由MPL域种子集维护的MPL种子的最小序列号进行编码。MPL种子信息还指示存储于MPL域消息集缓冲中的MPL种子序列号。MPL种子信息格式如下:

min-seqno          :8比特无符号整数。MPL种子序列号下界
bm-len               :6比特无符号整数。buffered-mpl-messages尺寸,单位为字节
S                       :2比特无符号整数。标识seed-id的长度。0表示seed-id值为IPv6源地址,且此地址不在MPL种子信息中;1表示seed-id值是一个16比特无符号整数;2指示seed-id值是一个64比特无符号整数;3指示seed-id是一个128比特无符号整数。
seed-id              :可变长度的无符号整数。指示和MPL种子信息相关联的MPL种子。
buffered-mpl-messages  :可变长度位向量。由MPL种子所对应的消息集缓冲所维护的MPL数据报文的序列号进行标识。第i个比特表示min-seqno+i的序列号。0指示相应的MPL数据报文并不在消息集缓冲中。1指示相应的MPL数据报文存在于消息集缓冲中。

MPL种子信息无字节对齐要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值