12、多播运行
本章讲述IPv6 RPL网络中的多播路由运行,特别是单播DAOs如何用于中继组注册。相同的DODAG结构可用于转发单播和多播流量。本章仅限于介绍组注册如何交换,以及转发的基础设施是如何运行的。并不提供对LLN中的多播完整描述,尤其未提供在多播中的指定目标的DODAGs是如何生成的,也未描述有关多播中的RPL运行---它们是将来规范的任务。
多播组注册使用与单播相同的DAO消息,除了所传输的地址类型。主要不同之处为:多播流量向下拷贝到所有已经注册至多播组的孩子,而单播流量仅传递给一个孩子。
那些支持RPL存储模式操作的节点也支持下面介绍的多播DAO运行。而仅支持非存储模式运行的节点不支持本节内容。
多播运行由DIO中的MOP字段控制。
- 如果MOP字段需要多播支持,那么作为路由器加入RPL网络的节点,必须依照本节所描述的RPL网络的多播信令和转发那样运行。不支持由MOP字段所要求的多播运行的节点仅能以叶子节点加入。
- 如果MOP字段不需要多播支持,则多播通过其它方式进行处理,这超出本规范范围。(具体例子可能包括一系列单播复制或有限范围洪泛)。
因此,多播路由器状态被放置在从侦听者到DODAG根路径上的每个路由器中,这使得根可以将多播数据包复制到它的所有孩子路由器中,这些孩子路由器为此多播组发布了一个包含Target选项的DAO消息。
对于源自DODAG内部的多播数据包来说,数据包传递给首选双亲,如果失败,则传递给DODAG中的替代双亲。数据包还会拷贝到除了传递数据包的孩子以外的所有已注册孩子。最终,如果在外部基础设施中存在侦听者,DODAG根将不得不将数据包传播至外部基础设施中。
因此,DODAG根在RPL网络中充中自动代理汇聚点,并作为所有起始于RPL域并流向非RPL域的多播流的源头。所以,无论根是否实际附着到非RPL域,亦或DODAG是接地或悬浮的,根都能够在任何时间分发内部多播流。
13、维护路由邻接
继任者的选择,沿着默认路径在
DODAG
上行,或沿着从目的地公告获知的路径在
DODAG
下行,所导致的路由邻接的形成,需要维护。
在IGPs中,诸如
OSPF[RFC4915]或IS-IS[RFC5120],路由邻接的维护涉及到keepalive机制(Hellos)的或其他协议的使用,诸如Bidirectional Forwarding Detection (BFD双向转发侦测)
[RFC5881]、MANET Neighborhood Discovery Protocol (NHDP MANET邻居发现协议)
[RFC6130]。不幸的是,这类积极主动的方法在受限环境中往往不可取,相对于数据流量,它会导致过多的控制流量,从而对链路负载及节点资源造成负面影响。
相比那些路由协议,RPL未定义任何keepalive机制来检测路由邻接失败:这是因为在大多数情况下,这类机制会消耗过多的带宽,更为重要的是能量(一个电池驱动设备无法承担发送周期性keepalives)。但是RPL仍然需要一个外部机制来检测邻居是否不再可达。这样的机制最好是反应式流量,从而以最小开销维护路由邻接,并专注于实际使用的链路。
反应式机制的例子有:
Neighbor Unreachability Detection(邻居不可达检测 [RFC4861] )机制
基于事件的Layer 2触发 [RFC5184] ,如关联状态和L2确认。