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,二月份发布的,开始翻译时没有注意到,太坑爹了。不过这是最后一版草稿,应该差别不大。将就一下吧。

网络协议---MPL(2):RFC 7731文档翻译相关推荐

  1. 网络协议MPL(3):RFC2606--The Trickle Algorithm文档翻译

    The Trickle Algorithm 摘要: 涓流算法使得有损共享介质(如低功耗有损网络)中的节点在进行信息交换时具有:高鲁棒性.高效能,简单且可扩展等特性.传输窗口的动态调整特性使得涓流算法在 ...

  2. Wireshark网络抓包(三)——网络协议

    一.ARP协议 ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址. IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信: 在通 ...

  3. nbns协议_网络协议详解1 - NBNS

    NetBIOS 简介 NetBIOS,Network Basic Input/Output System的缩写,一般指用于局域网通信的一套API,相关RFC文档包括 RFC 1001, RFC 100 ...

  4. 如何学习网络协议(学习笔记)

    引: 抓包软件---tcp状态转换..构造包--->2011-12-31 15:51:26 一个前辈写的网络协议学习方法 分类: Linux开发c/c++2008-10-02 00:35 257 ...

  5. 网络协议基础:“工作中模模糊糊的概念,这次终于理顺了!”

    如何毁掉一个婴儿? 断了他的奶. 如何毁掉一个年轻人? 断了他的网. "网络之于年轻人,正如同奶水之于婴儿" 什么是网?什么是域名?什么是IP.Mac地址,端口号?什么是UDP?什 ...

  6. 网络协议之:一定要大写的SOCKS

    文章目录 简介 SOCKS的故事 SOCKS的历史 SOCKS协议的具体内容 SOCKS4 SOCKS4a SOCKS5 总结 简介 很久很久以前,人们还穿的是草鞋,草鞋虽然穿着舒服,但是不够美观.然 ...

  7. 【转】Wireshark网络抓包(三)——网络协议

    转自:https://www.cnblogs.com/strick/p/6262284.html 一.ARP协议 ARP(Address Resolution Protocol)地址解析协议,将IP地 ...

  8. dhcp是哪一层的协议_随手记(3)常见的网络协议有哪些

    网络中不同的工作站,服务器之间能传输数据,源于协议的存在.随着网络的发展,不同的开发商开发了不同的通信方式.为了使通信成功可靠,网络中的所有主机都必须使用同一语言,不能带有方言.因而必须开发严格的标准 ...

  9. java 协议这个概念_java网络协议概念是什么?

    网络协议 对于需要从事网络编程的程序员来说,网络协议是一个需要深刻理解的概念.那么什么是网络协议呢? 网络协议是指对于网络中传输的数据格式的规定.对于网络编程初学者来说,没有必要深入了解TCP/IP协 ...

最新文章

  1. 前端学习笔记系列一:14 vue3.X中alias的配置
  2. Redis+分布式+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档
  3. mdcsoft服务器网络安全解决方案-SQL注入解决
  4. “Java是编译执行的语言”这句话对吗?
  5. ad软件侵权律师函_Aspen Plus 9 软件安装教程
  6. 基于java的程序启动出错Could not create the Java virtual machine
  7. html中依次展开的搜索框,jQuery+CSS3动画展开收缩搜索框特效
  8. java B2B2C springmvc mybatis电子商务平台源码-------zuul网关实现
  9. 【信息系统项目管理师】第8章-项目质量管理 知识点详细整理
  10. c语言+Easy X图形库实现飞机大战,源码加素材
  11. 熊猫烧香源码分析_学习大熊猫分析
  12. Django url() 函数详解
  13. word页码怎么从指定页开始设置?
  14. C#时间格式转换时间戳
  15. DOTA 104个英雄416个技能、104首情诗
  16. 青龙面板--花花阅读
  17. 毕业论文的前言写什么?
  18. 百度绿萝2.0上线后,新站该如何做SEO?
  19. 计算机操作系统学习之FCFS、SJF和HRRN调度算法
  20. Docker 快速入门(一文上手 Docker)

热门文章

  1. 平阳万全综合高中计算机单招上线率,喜报!平阳各学校一段上线人数出炉!太厉害了...
  2. python bytes转换为string_python3中bytes和string之间的互相转换
  3. XML和SQL的互相操作
  4. 【C语言初学必看】之多组输入的玄机
  5. linux qmi接口,高通9X07模块QMI架构使用入门
  6. python的scatter函数_python scatter函数用法实例详解
  7. 1125. 牛的旅行
  8. STM32CubeMX AI尝尝鲜
  9. linux服务器怎么开启远程,Linux配置SSH服务以便实现远程连接
  10. “老赖”罗永浩被群嘲:莫欺少年穷,莫笑中年败,莫嘲梦想狂