当前位置:   article > 正文

网络协议---MPL(2):RFC 7731文档翻译_mpl2协议

mpl2协议
7、信息库
7.1  本地接口集
本地接口集记录MPL传送者的本地接口。本地接口集由本地接口多元组组成,每个MPL接口对应一个AddressSet。
AddressSet --- 一系列分配给MPL接口的单播地址。

7.2  域集
域集记录了订阅了每个MPL域地址的MPL接口。域集由MPL域多元组组成。每个MPL域对应一个MPLInterfaceSet。
MPLInterfaceSet --- 一系列订阅了标识MPL域的MPL域地址的MPL接口。

7.3   种子集
一个种子集记录了一个滑动窗口,用以决定一个MPL传送者愿意接收的,由MPL种子产生的MPL数据报文的序列号。一个MPL传送者为每个其参与的MPL域维护一个种子集。一个种子集由MPL种子多元组组成:(SeedID,MinSequence,Lifetime)。
SeedID  ---  MPL种子的标识符。
MinSequence  ---  一组序列号的下界,指示MPL传送者愿意接收和传送和最老的MPL数据报文的序列号。一个MPL传送者必须忽略任何序号值小于MinSequence的MPL数据报文。
Lifetime  ---  指示种子集条目的最小剩余生存时间。一个MPL传送者在种子集条目生存期未到期的情况下不能释放它。

7.4  消息集缓冲
一个消息集缓冲记录在MPL域内最近从MPL种子那收到的MPL数据报文。当MPL传送者转发MPL数据报文时,它使用消息集缓冲来缓存MPL数据报文。MPL传送者为每个其参与的MPL域维护一个消息集缓冲。一个消息集缓冲由缓冲消息元组组成:(SeedID,SequenceNumber,DataMessage)。
SeedID  ---  生成MPL数据报文的MPL种子的标识。
SequenceNumber  ---  MPL数据报文的序列号。
DataMessage  ---  MPL数据报文。

消息集缓冲中的所有MPL数据报文的序列号必须大于等于相应SeedID的MinSequence。当增加MPL种子的MinSequence值时,MPL传送者会从相应的消息集缓冲中删除那些序列号小于MinSequence的MPL数据报文。

8、MPL种子序列号
每个MPL种子都为它所服务的MPL域维护一个序列号。序列号包含在由MPL种子生成的MPL数据报文之中。MPL种子必须为每个新生成的MPL数据报文增加其序列号。增加一个序号值或对比两个序号值必须使用序列号算法(定义于 [RFC1982])。此序列号用于为MPL域的种子所生成的数据报文建立一个总序。

9、MPL数据报文
9.1  MPL数据报文的生成
MPL数据报文是在这些报文进入到MPL域时由MPL种子生成的。所有MPL数据报文有如下特性:
  • IPv6源地址必须取自相应MPL接口的AddressSet中,而且它在MPL域中必须是合法的。
  • IPv6目的地址必须设置为相应MPL域的域地址。
  • 一个MPL数据报文必须在IPv6首部中包含一个MPL Option以标识MPL种子,以便生成报文并和此种子生成的其它报文进行排序。
当目的地址是一个MPL域地址并且源地址取自该域地址所属MPL接口的Address列表时,申请报文和MPL数据报文相同。就是说,MPL数据报文包含一个IPv6首部和里面的MPL Option。

否则,为了满足 [RFC2473]中的MPL数据报文需求,必须使用IPv6-in-IPv6封装。需求如下:MPL数据报文中的完整的IPv6-in-IPv6信息;出口IPv6首部符合之前所述MPL数据报文需求;包裹着IPv6报文编码的多播数据报文朝着MPL域进行发送。

9.2  MPL数据报文传送
一个MPL传送者使用流算法 [RFC6206]来管理它的消息集缓冲中的MPL数据报文的发送。MPL传送者必须给每个活跃的MPL数据报文分配不同的流计时器。依照 [RFC6206]第5节,本文做如下定义:
  • 本文针对以下情况定义了“consistent”传送:MPL数据报文由流计时器管理且收到的MPL数据报文拥有相同的MPL域地址、seed-id和序列号。
  • 本文针对以下情况定义了“inconsistent”传送:收到的MPL数据报文拥有相同的MPL域地址、seed-id值和M位标志,但序列号小于由流计时器管理的MPL数据报文。
  • 本文不定义任何外部“事件”。
  • 本文定义的MPL数据报文是流消息。
  • MPL在流算法之外的动作包括管理MPL域种子集和消息集缓冲。

[RFC6206] 中的指出,一个流计时器有三个变量:当前时间间隔 I,一个当前时间间隔之内的时间t,和一个计数器c。MPL定义了第四个变量e,计算流计时器最近重启后的到期次数。

在触发DATA_MESSAGE_TIMER_EXPIRATIONS流计时器事件后,MPL传送者必须禁用流计时器。当一个MPL数据报文缓冲没有相关联的流计时器时,MPL传送者会从消息集缓冲中删除报文以增加相应的种子集中的MPL种子的MinSequence。当MPL传送者不再缓冲任何MPL种子的信息,就不需要为一个MPL种子增加其MinSequence了。

当传输一个MPL数据报文时,MPL传送者要不设置M标志位为0;要不设置为1,以指示报文的序列号是否是从MPL种子处收到的最大值。

9.3  MPL数据报文处理
当收到一个MPL数据报文时,MPL传送者首先处理MPL Option,如果报文有关联的流计时器则更新它。

当收到一个MPL数据报文时,MPL传送者必须执行以下动作:
  • 处理信息并将MPL数据报文放入MPL域的消息集缓冲。
  • 处理信息并将MPL域种子集相应的MinSequence值设为报文序列号值加1。
  • 丢弃那些MPL信息库中无变化的报文。

如果一个种子的种子集条目存在,MPL传送者必须丢弃那些序列号小于MinSequence或小于现存消息集缓冲中报文的MPL数据报文。

如果一个种子的种子集条目不存在,MPL传送者必须在接收MPL数据报文前为MPL种子创建一个新条目。

如果内存受限,MPL传送者将通过以下方式开拓内存资源:
  • 在种子集中增加MinSequence值,并删除消息集缓冲中所有小于MinSequence的MPL数据报文。
  • 删除其它种子集中的到期条目,和消息集缓冲中相应的MPL数据报文。

如果MPL传送者处理MPL数据报文时,必须执行以下动作:
  • 重置相应种子集条目生命周期为SEED_SET_ENTRY_LIFETIME。
  • 如果PROACTIVE_FORWARDING为真,MPL传送者必须为此MPL数据报文初始化并开始一个流计时器。
  • 如果MPL控制报文流计时器不在运行中,且CONTROL_MESSAGE_TIMER_EXPIRATIONS为非0,MPL传送者必须初始化并开始一个MPL控制报文计时器。
  • 如果MPl控制报文流计时器正在运行中,MPL传送者必须重置它的计时器。

10、MPL控制报文
10.1  MPL控制报文的生成
MPL传送者生成MPL控制报文以向相邻的MPL传送者发送一个MPL域种子集和消息集缓冲。每个MPL控制报文都是按照6.2节所述来生成的,它为MPL域种子集的每个条目产生一个MPL种子信息。MPL种子信息条目包含如下内容:
  • S设置MPL种子信息条目的seed-id字段的大小。
  • min-seqno设置MPL种子的MinSequence。
  • bm-len设置buffered-mpl-messages的大小,单位为字节。
  • seed-id设置MPL种子的标识。
  • buffered-mpl-messages中的每个比特指示MPL数据报文所对应的序列号是否在消息集缓冲中。第i个比特表现的是值为min-seqno+i的序列号。“0”表示相应的MPL数据报文不在消息集缓冲中,“1”表示报文存在于消息集缓冲中。

10.2  MPL控制报文的传送
MPL传送者使用流算法来传送MPL控制报文。MPL传送者为每个MPL域维护单独的流计时器。当 CONTROL_MESSAGE_TIMER_EXPIRATIONS为0时,MPL传送者不执行流算法且不传送MPL控制报文。依照 [RFC6206]的第5节,本文定义如下:
  • 本文定义了“consistent”传输用于收到一个MPL控制报文时决定既不接收也不为传输节点提供任何新的MPL数据报文。
  • 本文定义了“inconsistent”传输用于收到一个MPL控制报文时决定既接收又为传输节点提供一个新的MPL数据报文。
  • 为了响应外部事件,流计时器将被重置。本文定义了一个“事件”用于种子集所对应的条目增加MinSequence值或者相应的消息集缓冲添加一个报文。
  • 本文所定义的MPL控制报文是一个流消息。
[RFC6206]中指出,一个流计时器有三个变量:当前时间间隔 I,当前时间间隔内的一段时间t,和一个计数器c。MPL定义了第4个变量e,计算流计时器最后一次被重置后的到期次数。在计时器的 CONTROL_MESSAGE_TIMER_EXPIRATIONS事件之后,MPL传送者必须禁用流计时器。

10.3  MPL控制报文处理
一个MPL传送者处理每个个收到的MPL控制报文以决定是否接收或提供新MPL数据报文。
一个MPL传送者是否接收从相邻节点传送送来的新MPL数据报文由以下几个条件之一决定:
  • MPL控制报文包含一个不存在于MPL域种子集的MPL种子。
  • MPL控制报文指示邻居拥有一个存在于消息集缓冲的MPL数据报文的序列号大于MinSequence(如第i个比特值设为1且min-seqno+i>MinSequence),并且它不包含在MPL域的消息集缓冲中。
当一个MPL传送者决定不从邻居设备那接收MPL数据报文缓冲,MPL传送者必须重置它的跟MPL控制报文传输相关的流计时器。如果MPL控制报文流计时器并不在运行中,MPL传送者必须初始化并开始一个新的流计时器。

一个MPL传送者是否让相邻MPL传送者接收消息集缓冲中的MPL数据报文由以下条件之一决定:
  • MPL控制报文不包含MPL数据报文的MPL种子
  • MPL数据报文序列号大于或等于min-seqno且不在邻居的相应的消息集缓冲中(如MPL数据报文的序列号在buffered-mpl-messages中相应的比特未置为1)。
当一个MPL传送者至少有一条其消息集缓冲中的MPL数据报文没有被邻居所接收时,它必须重置MPL控制报文流计时器。另外对于消息集缓冲中的每一个这样的条目,MPL传送者都必须重置其流计时器并把e置为0。如果一个流计时器没有跟MPL数据报文关联,MPL传送者必须初始化并开始一个新的流计时器。

11、致谢
感谢Robert Cragie, Esko Dijk, Ralph Droms, Paul Duffy, Adrian Farrel, Ulrich Herberg, Owen Kirby, Philip Levis, Kerry Lynn, Joseph Reddy, Michael Richardson, Ines Robles, Don Sturek, Dario Tedeschi, and Peter van der Stok,它们意见对文档的改进提供了很大的帮助。

12、IANA的意见
此文档定义了一个IPv6 Option,一个必须由 [RFC2780]文档中的IPv6的“Destination Option and Hop-by-Hop Options”来分配的类型。

此文档定义了一个ICMPv6报文,它的type必须来自 [RFC4443]中的ICMPv6的type值。

此文档登记了一个来自于可变范围多播地址的众知的多播地址。

12.1  MPL Option类型

IANA为本协议分配了一个IPv6 Option类型,它来自[RFC2780]中登记的IPv6的“Destination Option and Hop-by-Hop Options”,特性如下表所示:


12.2  MPL ICMPv6类型
IANA为本协议分配了一个ICMPv6类型,它来自 [RFC4443]的ICMPv6类型值,见下表:

本文中的MPL_ICMP_TYPE就是上文中的TBD。

12.3  众知多播地址
IANA为本协议分配了一个多播地址,组ID在范围[0x01,0xFF]间,用于6LoWPAN压缩 [RFC6282],它来自可变范围多播地址(IPv6多播地址空间的子项,登记于 [RFC3307])中的ALL_MPL_FORWARDERS。如下表所示:

终于完工,完工后才发现此草案已经成为正式文档RFC7731,二月份发布的,开始翻译时没有注意到,太坑爹了。不过这是最后一版草稿,应该差别不大。将就一下吧。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/448073
推荐阅读
相关标签
  

闽ICP备14008679号