RPL(8):RFC6550翻译(8)---下行路由

9、下行路由
本节讲述RPL发现和下行路由的维护。RPL通过目的地公告对象(DAO)消息来构造和维护下行路由。下行路由支持P2MP流,从DODAG根流向叶子。下行路由也支持P2P流:P2P信息可以通过上行路由流向DODAG根(或公共祖先),然后离开DODAG根通过下行路由流向目的地。

本规范描述RPL实例在维护下行路由时可选择的两种模式。第一种模式叫“存储式”,节点为它们的子DODAG保存下行路由表。存储式网络中的下行路由的每一跳都会检查它的路由表以决定下一跳。第二种模式中“非存储式”,节点不保存下行路由表。通过DODAG根所提供的源路由进行下行数据包的路由 [ RFC6554 ]

对于存储式和非存储式网络,RPL都允许简单的一跳P2P优化。节点可向一跳邻居节点直接发送P2P数据包。

9.1  目的地公告双亲
为建议下行路由,RPL节点需延上行发送DAO报文。这些DAO报文的下一跳目的地称为“DAO双亲”。节点的DAO双亲的集合称为“DAO双亲集”。
  1. 节点可以使用所有RPL节点多播地址来发送DAO报文,它提供一跳路由的优化。如果发送多播DAO,‘K’标志位必须置0。
  2. 节点的DAO双亲集必须是其DODAG双亲集的子集。
  3. 在存储式运行状态下,节点禁止向非DAO双亲发送单播DAO报文。
  4. 在存储式运行状态下,DAO报文的IPv6源和目的地址必须为链路本地地址。
  5. 在非存储式运行状态下,节点禁止向非DODAG根发送单播DAO报文。
  6. 在非存储式运行状态下,DAO报文的IPv6源和目的地址必须为单播本地或全局地址。
DAO双亲的选择由实现和目标函数指定。

9.2  下行路由发现和维护
目的地公告可配置为完全不可用,或在存储式或非存储式下运行,这些可在DIO报文中的MOP进行报告。
  1. 所有加入DODAG的节点必须遵守来自根的MOP设置。没有能力作为路由器全面参与的节点,例如,不匹配公告MOP的节点,可以作为叶子节点加入DODAG。
  2. 如果MOP为0,表明无下行路由,此时节点禁止发送DAO报文并且可以忽略DAO报文。
  3. 在非存储模式下,DODAG根应当为取自DAO的目的地存储源路由表条目。而DODAG根必须有能力为那些已存储的取自DAO的目的地产生源路由。
  4. 在存储模式下,所有非根、非叶节点必须为取自DAO的目的地存储路由表条目。

DODAG可以运行于MOP字段所定义的几种可能的运行模式中的一种。其中的任何一种都不支持下行路由,而是通过来自DODAG根的源路由来支持下行路由的,或通过网内路由表来支持下行路由。

当下行路由是通过来自DODAG根的源路由支持时,为构造源路由,通常期望DODAG根保存取自DAO的源路由信息。如果DODAG根存储信息失败,则目的地可能无法到达。

当下行路由是通过网内路由表支持时,本规范所定义的多播操作是否被支持,也将在MOP字段中指示。

当下行路由是通过网内路由表支持时,如本规范所述,将认为充当路由器的节点已经被充分配置,能够保持要求的路由表状态。如果作为路由器的节点无法保持完整的路由表状态,那么路由状态是不完整的,结果可能导致丢弃信息,错误被记录(18.5节)。将来的RPL扩展可能会详细说明管理这种情况的更精确的动作/行为。

在本规范撰写之际,RPL还不支持混合模式运行,即一些节点采用源路由,另一些节点存储路由表。将来的RPL扩展或许会支持这种运行模式。

9.2.1  路径序列维护
对于与节点关联(属于)的每个Target,节点有责任发射DAO消息以提供下行路由。在这些DAO消息中包含的Target + Transit信息随后沿DODAG上行传播。Transit信息选项中的路径序列计数器用于指示新鲜度及更新旧的下行路由信息,如第7章所述。

对于一个关联(属于)节点的Target,当发生以下情况时,节点必须增加路径序列计数器,并生成一个新的DAO消息:
  1. 路径生命周期更新(例如,恢复或无路径)。
  2. DODAG双亲地址子字段列表改变。
对于与节点关联(属于)的每个Target,在刷新下行路由信息的时候,节点可能增加路径序列计数器,并生成新的DAO消息。在存储模式中,节点为它们的每个DAO双亲生成这样的DAO,从而可以使用多重路径。所有同一时间为同一Target生成的DAO必须在发送信息中使用相同的路径序列。

9.2.2  DAO报文的生成
当收到DAO报文时,作为它的DAO双亲集改变的结果或回应其它诸如相关前缀生命到期事件时,节点会发送DAO报文。在收到DAO的情况下,它关心DAO信息是否为新信息或包含新信息。在非存储模式下,节点收到的每个DAO报文都是“新”的。在存储模式下,如果DAO报文满足以下任一有关Target的准则,则它是新的:
  1. 它拥有更新的路径序列号。
  2. 它拥有额外的路径控制位,或
  3. DAO报文是删除通信前缀的最后一条下行路由的无路径DAO报文。

9.3  DAO基本规则
  1. 如果节点发送的DAO报文比之前的更新或有不同信息,它必须至少将DAOSequence字段加1。发送的DAO报文和之前的相同时,也可以增加DAOSequence字段。
  2. DAO报文中的RPLInstanceID和DODAGID字段必须与节点双亲集成员和所发送的DIO有相同的值。
  3. 节点可通过在单播DAO报文中将“K”标志位置1,来请求一个单播DAO-ACK回应,从而确认尝试。
  4. 节点在收到“K”标志位为1的单播DAO报文时,应当回应一个DAO-ACK。节点收到“K”标志位为0的DAO报文时,可以用DAO-ACK回应,特别是用来报告出错条件。
  5. 节点在发送“K”标志位为1的单播DAO报文但没有收到DAO-ACK回应,可以安排再一次DAO报文发送,直到达到规定的重试次数。
  6. 节点应当忽略无更新序列号的DAO,并禁止对它们做进一步处理。

DAOSequence值和DIO的Version字段不同,Version仅可由DODAG根增加其值,其它节点无法改变,DAOSequence值对于每个节点是唯一的。单播和多播DAO报文的序列值空间即可相同也可不同。推荐使用相同的序列值空间。

9.4  DAO报文结构
DAO在存储式和非存储式网络中采用通用结构。在最常见结构中,DAO报文可以包括数个选项组,每个组由一个或多个Target选项组成,而Target选项包含一个或多个传送信息选项。整个传送信息选项组适用于整个Target选项组。后面章节将对每种运行模式作进一步讲解。
  1. RPL节点必须在它们发送的每个DAO报文中包含一个或多个RPL Target选项。如果节点需要DODAG提供到自己的下行路由,那么RPL Target选项必须有包含节点IPv6地址的前缀。RPL Target选项后面可紧跟限定它的不透明RPL Target Descriptor选项。
  2. 当节点针对覆盖其地址之一的Target选项更新传送信息选项中的信息时,它必须增加传送信息选项中的路径序列号。可偶尔增加路径序列号来引发下行路由的刷新。
  3. 在单播DAO报文中,一个或多个RPL Target选项后面必须跟随一个或多个传送信息选项。所有传送选项用于所有紧挨在它们关面的所有Target选项。
  4. 多播DAO禁止在传送信息选项中包含DODAG双亲地址子字段。
  5. 节点在收到并处理包含具体Target信息且带有Target之前信息的DAO报文时,必须在与此Target相关的发送信息选项中使用路径序列号,以便决定是否在DAO报文中包含第7章所述的更新信息。
  6. 如果节点收到的DAO报文并不遵循以上规则,它必须丢弃DAO报文且不作进一步处理。

在非存储模式中,根建立精确的源路由首部,逐跳、递归地寻找将Target(地址或前缀)和传送地址联系在一起的单跳信息。有时,当孩子地址源于某双亲拥有并公告的前缀时,为构造源路由首部,可通过根节点推断其父子关系。在所有其它情况下,有必要通过可达目标向根通知transit-Target关系,以便稍后可递归构建路由首部。DAO报文中作为Target进行公告的地址必须由相同的路由器配置,或此地址对于相关传送信息所指示路由器在on-link状态下是可达的。以下附加规则用于确保端到端源路由路径的连续性。
  1. 传送选项中所使用的双亲地址必须取自“R”标志位为1的双亲的PIO。PIO中的“R”标志位指示prefix字段实际上包含整个双亲地址,但孩子不应当假设双亲地址处于on-link状态。
  2. PIO中的“A”标志位置1表示RPL孩子节点可使用前缀自动配置地址。公告前缀时将PIO中“A”标志位置1的双亲必须确保地址或整个PIO中的前缀从根出发通过将其作为DAO target公告可达。如果双亲也将“L”标志位置1则指示前缀是on-link的,那么它必须将整个前缀作为DAO报文中的Target进行公告。如果“L”标志清0且“R”标志置1,指示双亲在PIO中提供它自己的地址,那么双亲必须将地址作为DAO target进行公告。
  3. 在DAO报文中作为Target进行公告的地址必须使用相同的路由器进行配置,或此地址对于相关传送信息所指示路由器在on-link状态下是可达的。
  4. 为了尽量压缩路由首部,双亲应当在所有“A”标志为1的PIO中将“R”标志置1,并将“L”标志清0,而孩子在转发中优先使用的双亲地址应当是那些PIO中可找到的、曾经自动配置的、在DAO报文中作为Target公告的地址。
  5. 路由器或许有一些没有被双亲认成on-link的target,要么这些地址位于替代接口,要么它们属于RPL外部节点,但通过实例连接主机。为了在RPL网络中注入这样的Target,路由器必须为那个Target在Transit Information选项中的DODAG Parent Address子字段中公告自己,所使用的地址为那个节点的处于on-link状态的DAO双亲的地址。如果Target属于外部节点,那么路由器必须在Transit Information中将“E”标志(External)置1。

通过“L”标志为1的双亲的PIO自动配置地址的孩子节点不需要将那个地址作为DAO Target进行公告,因为双亲已经确保整个前缀从根开始是可达的。然而,如果“L”标志位不为1,那么在非存储模式中,为了可以递归构造路由首部,孩子节点必须使用双亲的可达地址向根通知双亲-孩子关系。这是将作为中转的父代地址与DAO报文中作为Target的子代地址关联实现的。

9.5  DAO发送调度
因为DAO沿上行流动,收到一个单播DAO可触发向DAO双亲发送一个单播DAO。
  1. 在收到一个带更新信息的单播DAO报文时,例如包含带新路径序列的传送信息选项,节点将发送一个DAO。它不会立即发送此DAO报文,而是延迟发送,以便聚合从其它DAO双亲节点传送过来的DAO信息。
  2. 节点通过使用计时器(DelayDAO)来延迟发送DAO报文。接收到DAO报文会启动DelayDAO计时器。当DelayDAO计时器处于启动状态时收到DAO报文不会重启计时器。当DelayDAO计时器到期,节点发送一个DAO。
  3. 当节点将另一节点加进其DAO双亲集,它将安排一个DAO报文传送。
DelayDAO的值和计算依赖于实现。其默认值DEFAULT_DAG_DELAY将在本规范定义。

9.6  触发DAO报文
节点可触发它们的子DODAG来发送DAO报文。每个节点都维护一个DAO Trigger Sequence Number(DTSN DAO触发序列号),它通过DIO报文进行传播。
  1. 如果节点监听到它的DAO双亲之一增加了DTSN,那么它必须安排一个9.3节和9.5节所述规则的DAO报文发送。
  2. 在非存储模式中,如果节点监听到它的DAO双亲之一增加了DTSN,那么它必须增加自己的DTSN。
在存储式运行模式下,作为路由表例行更新和维护的一部分,存储式节点可以增加其DTSN,以便通过它的直接孩子可靠触发一系列DAO更新。

在存储式运行模式下,没有必要通过整个子DODAG触发DAO更新,因为那些状态信息将逐跳延DODAG向上传播。

在非存储式运行模式下,DTSN的增加会导致直接孩子节点相应地增加其DTSN,并从整个子DODAG触发一系列DAO更新。在非存储式运行模式下,如果需要刷新DAO而不希望全局修复(诸如通过增加DODAGVersionNumber),通常只需根单独增加其DTSN。所有非根节点仅在发现它们的双亲增加DTSN时才会相应地增加DTSN。

通常情况下,节点可以按照实现指定的逻辑来触发DAO的更新,如以下行路由的不一致检测为依据或基于一个内部计时器。

在存储式网络,为触发DAO选择一个适当的DelayDAO可以极大地减少DAO发送次数。触发沿DODAG向下流动,在最理想的情况下,DAO延DODAG向上流动使得叶子节点首先发送DAO,随后每个节点仅发送一次DAO信息。通过设置DelayDAO与Rank成反比可近似做这样的安排。注意,这个建议试图作为一种优化以实现高效聚合(它不是一般情况下正确运行所需要 的)。

9.7  非存储模式
在非存储模式中,RPL路由信息使用IP源路由下行传播。以下规则适用于非存储模式中的节点。存储模式有一套独立的规则,在9.8节中讲解。
  1. 传送信息选项中的DODAG Parent Address子字段必须包含一个或多个地址。所有这些地址必须为发送者的DAO双亲地址。
  2. DAO会延着一个默认路由直接发送到根,此默认路由作为双亲选择的一部分进行设置。
  3. 当节点在DAO双亲集中移除某一节点时,它可能会产生一个包含传送信息选项更新的新DAO报文。

在非存储模式下,节点使用DAO向DODAG根报告它的DAO双亲。使用来自该路由中每个节点的DAO双亲集,DODAG根能够拼成到节点的下行路由。路径序列信息可用于检测旧的DAO信息。这样去计算每跳路由的目的是:当DAO双亲改变时使传输流量最小化。如果节点报告完整的源路由,那么在一个DAO双亲改变时,整个子DODAG将不得不向DODAG根发送新的DAO。因此,在非存储模式下,节点可以发送单条DAO,虽然节点也可以选择向每一个多播DAO双亲发送不止一条DAO信息。

节点通过发送携带多个RPL Target选项的单个DAO报文来组合DAOs,每个RPL Target选项拥有它自己的、紧跟其后的传送信息选项。

9.8  存储模式
在存储模式中,RPL路由信息通过IPv6目的地地址下行传播。以下规则适用于存储模式中的节点:
  1. 传送信息选项中的DODAG Parent Address子字段必须为空。
  2. 在收到单播DAO后,节点必须计算DAO是否会改变节点自身公告的前缀集合。计算中应当考虑与该DAO关联的传送信息选项中的路径序列信息,是决定是否DAO报文中使用较新的信息取代已经存储于节点中的信息。如果这样,节点必须依据9.5节中的规则产生新的DAO报文并发送它。这样的改变包括接收无路径DAO。
  3. 当节点产生新的DAO,它将向它的每一个DAO双亲进行单播,禁止向非DAO双亲广播DAO报文。
  4. 当节点从它的DAO双亲集移除一个节点时,它将向被删除DAO双亲发送一个无路径DAO报文(6.4.3节以废除现有路由。
  5. 如果到下行地址的公告信息遭遇到传送错误、邻居不可达检测(NUD)、或类似的错误,节点可以将此地址标记为不可达并产生一个适当的无路径DAO。

DAOs用于公告节点已经路由到了哪个目的地址和前缀。和非存储模式不同,这些DAOs并不传播路由自身的信息:这些信息存储于网络中,并隐含于IPv6源地址。当存储节点产生DAO时,会使用它所收到的DAO存储状态来产生一系列RPL Target选项和与之相关的传送信息选项。

因为这些信息存储于每个节点的路由表,在存储模式中,存储这类信息的DAOs会直接传递给DAO双亲。

9.9  路径控制
来自节点的DAO报文包含一个或多个Target选项,每个Target选项即指定了节点公告的前缀、LLN外部可达地址前缀、节点子DODAG内目的地的地址,也指定了节点在子DODAG中正在监听的多播组。传送信息选项中的Path Control字段使节点能够请求或提供多个下行路由。节点使用如下方案去构造传送信息选项中的Path Control字段:
  1. Path Control字段的位宽必须等于(PCS+1)的值,PCS由DODAG Configuration选项中的control字段指定。大于或等于(PCS+1)的位必须在发送端被清除,在接收端被忽略。小于那个值的位被认为是“有效”位。
  2. 节点必须依照逻辑构建它们的DAO双亲分组,并填充Path Control字段,每个分组由优先权相同的DAO双亲组成。然后,这些分组必需按照优先权排序,这提供DAO双亲到Path Control子字段的逻辑映射(见图27)。分组可重复,以便扩展至整个patch control字段所有位宽,但排序(包括重复分组)必须保留,以便优先权正确传达。
  3. 对于描述节点自身地址或LLN外部前缀的RPL Target选项来说,至少应当将Path Control字段中的一个有效位置1,也可以将Path Control字段中的更多有效位置1。
  4. 如果节点收到携带相同RPL Target选项的多播DAOs,它必须将所接收到的Path Control字段按位或。此聚合的按位或表示前缀所要求的下行路由的数目。
  5. 当节点向它的DAO双亲之一发送DAO报文时,它必须选取子字段中的一个或多个位进行激活,从而使得子字段可映射至来自聚合Path Control字段的DAO双亲所组成的集合。一个给定位仅代表一个双亲的有效与否。传送到双亲的DAO报文必须将这些有效位置1,所有其它有产位清0。
  6. 对于RPL Target选项和DAOSequence号,节点所发送至不同DAO双亲的DAOs中的有效Path Control位必须为不相交集。决不允许为两个不同DAO双亲的DAOs设置相同的有效位。
  7. Path Control位应当按照映射DAO父代到Path Control子字段的优先级分配,如此,属于特定Path Control子字段的有效Path Control位或位组,被分配给DAO双亲,这些DAO双亲位于被映射到那个子字段的组中。
  8. 在非存储运行模式中,节点可以在未对Path Control字段作进一步处理的情况下放过DAOs。
  9. 在Path Control字段没有将相应有效位置1的情况下,节点禁止发送单播DAO报文。这是可能发生的,对于给定的Target选项,当节点无法没有足够的Path Control位以在发送DAO报文时囊括Target所对应所有DAO双亲时,那些最低优先级的DAO双亲可能无法获得那个Target的DAO报文。

Path Control字段允许节点限定产生到它的下行路由的数量。节点在Path Control字段设置等同于它建议的下行路由最大数量的位数。大多数情况下,每个位对应一个DAO双亲。一组位可发送至单个DAO双亲,以便在节点自己的DAO双亲间分配。

节点为附着Path Control字段的Target提供DAO路由时,应当通过使用Path Control字段的内容来决定Target的多个替代DAO路由之间的优先级。Path Control字段的赋值取自DAO双亲的优先级,它的取值由节点所知的在下行方向根据目标函数,基于“端到端”聚合度量所确定。在非存储模式中,根可通过聚集每个所收到的DAO中的信息来决定下行路由,这些DAO包含指示首选DAO双亲的Path Control。

9.9.1  Path Control示例
假设有一个运行于存储模式的LLN,包含一个节点N和四个双亲:P1、P2、P3和P4。设N的sub-DODAG下有三个孩子:C1、C2和C3。设PCS值为7,那么在Path Control字段中将会存在8个有效位:11111111b。考虑以下示例:

Path Control字段分成四个子字段:PC1(11000000b),PC2(00110000b),PC3(00001100b)和PC4(00000011b),
那么,这四个子字段所表现的如图27所示的四个等级的优先级。在本例的节点N实现中,组{P1,P2}两个节点的优先级相同,并且整体上为最高优先级组。{P3}的优先级小于{P1,P2},大于{P4}。让节点N执行它的Path Control映射,结果如下:
{P1,P2}  ->  Path Control字段中的PC1(11000000b)
{P3}          ->  Path Control字段中的PC2(00110000b)
{P4}          ->  Path Control字段中的PC3(00001100b)
{P4}          ->  Path Control字段中的PC4(00000011b)
注意{P4}的重复实现是为了对Path Control字段的完整覆盖。

  1. 让C1发送一个DAO,DAO所包含的Target携带的Path Control为10000000b。节点N存储一个条目,将10000000b与C1的Path Control字段和Target T进行关联。
  2. 让C2发送一个DAO,DAO所包含的Target携带的Path Control为00010000b。节点N存储一个条目,将00010000b与C1的Path Control字段和Target T进行关联。
  3. 让C3发送一个DAO,DAO所包含的Target携带的Path Control为00001100b。节点N存储一个条目,将00001100b与C1的Path Control字段和Target T进行关联。(第2、3点的“C1”应分别为“C2”和“C3”,此处原文使用C1,应为错误)
  4. 稍后,节点N为Target T产生一个DAO。节点N将所有对Target T有给定DAO的孩子,集中起来进行或运算,构造一个聚合的Path Control字段。因此聚合Path Control字段的有效位为:10011100b。
  5. 接下来,节点N将聚合Path Control字段分发给它的双亲P1、P2、P3和P4,以便准备DAO消息。
  6. P1和P2适合从最优先子字段(11000000b)接收有效位。在聚合Path Control字段中这些位为10000000b(这里的意思是最优先位为最高两个位,而最高两位的值为10)。节点N只能为两个双亲中的一个设置标志位。在此例中,节点P1被分配标志位,为其DAO的Path Control字段获取10000000b。没有标志位分配给节点P2。因此节点P2的Path Control字段为00000000b,无法产生DAO,因为不存在有效位。
  7. 第二优先子字段(00110000b)的有效位为00010000b。节点N已将P3映射到此子字段。节点N可以为P3分配有效位,为P3构造一个DAO,DAO所包含Target T的Path Control值为00010000b。
  8. 第三优先子字段(00001100b)的有效位为00001100b。节点N已将P1映射到此子字段。节点N可将两个位分配给P4,为P4构造一个DAO,DAO所包含Target T的Path Control值为00001100b。
  9. 最低优先级子字段(00000011b)无有效位。如果存在有效位,这些有效位将添加至为P4构造的DAO的Path Control字段中。
  10. 按照为这些Target收集的聚合Path Control字段,为P1、P2、P3、P4填充到其它Target(除T外)的DAO报文。

9.10  多播目的地公告消息
不同于单播DAO运行,一种特殊情况是多播DAO运行,它可用于填充“单跳”路由表条目。
  1. 节点可将DAO报文广播至链路本地范围所有RPL节点多播地址。
  2. 多播DAO报文仅可以用于公告节点自身的信息,也就是属于或直接连接节点的前缀,诸如节点订阅的多播组或属于节点的全局地址。
  3. 多播DAO报文禁止用于从其它节点获知的(如通过单播DAO)中继连接信息。
  4. 节点禁止对收到的多播DAO报文执行任何其它DAO相关处理;尤其,节点禁止根据收到的多播DAO来执行DAO双亲的动作。
  • 多播DAO可用于开启直接P2P通信,不需要中继分组的DODAG。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值