RPL(10):RFC6550翻译(10)---分组转发和环路避免/检测

11、分组转发和环路避免/检测

11.1  分组转发的建议
本文详述了一个路由协议。提供这些非规范建议是为了通过举例说明这样的实现如何与RPL一起工作,为转发实现设计提供帮助。

当转发数据包到目的地是,按如下原则优先选择下一跳继任者:
  1. 本规范仅涉及如何根据DODAG Version选择继任者,该继任者匹配正在转发的数据包中IPv6首部的RPLInstanceID标记。只要附加规则落实到位,如严格的实例排序以及防止产生环路的路由协议,则实例的外部路由就可以使用。这些规则可能在单独的文档中定义。
  2. 如果本地管理优先支持从不同的路由协议而不是RPL来感知路由,则使用那个继任者。
  3. 如果包首部通过包含[RFC6554]中定义的RH4首部来指定一个源路由,则使用那个路由。如果节点使用指定源路由转发数据包失败,那么此包应被丢弃,节点应当将错误记入日志。节点应当在Source Routing Header中发送一个ICMPv6错误信息给数据包的源(见20.18节)。
  4. 如果路由表中存在匹配目的地的地址,此地址在多播目的地公告中获知(例如,目的地为一跳邻居),那么使用这个继任者。
  5. 如果路由表中存在匹配目的地的地址,此地址在单播目的地公告中获知(例如,目的地位于向下的sub-DODAG),那么使用这个继任者。如果有多个继任者与DAO Path Control标志位关联,那么查询这些Path Control位,以便选择时按优先权排序这些继任者。对于给定的DAO Path Control位,如果记录了多个继任者要求拥有它,则应优先将它给予最近要求该位的继任者。
  6. 如果某DODAG Version提供了与目的地匹配前缀的路由,则依照OF和路由度量选择这些DODAG双亲之一作为继任者。
  7. 如果没有更好的匹配,可选择任何未经尝试的DODAG双亲作为转发单播数据包的下一目标。
  8. 最后,丢弃数据包。可以调用ICMP Destination Unreachable(检测到不一致)。
每转发一次,依照 [ RFC2460 ],Hop Limit必须递减。

注意,被选中的继任者不能为数据包前任的邻居(水平分割),除非是根据作出改变节点的路由表决定,数据包试图从上行转化为下行方向,如当接近目的地时,将DIO路由切换为DAO路由以继续向目的地行进。

11.2  环路避免和检测
RPL环路避免机制保持简单,它设计用于尽量减少变动和状态数量。形成环路的原因很多,例如控制包丢失。RPL包括避免崩盘和触发受损路径修复的反应式环路检测技术。

RPL环路检测使用数据包内所传送的RPL Packet Information,它依赖于诸如 [RFC6553]那样的外部机制,该外部机制存放于IPv6逐跳选项首部的RPL Packet Information之中。

RPL Packet Information内容定义如下:
Down '0':1bit标志位,指示数据包准备向上还是向下传输。路由器在数据包准备向下传输时(使用DAO路由)将此标志设置为0,向DODAG根转发时(朝更低Rank的节点)将此标志清0。主机或RPL叶子节点必须将‘0’标志位置0。
Rank-Error 'R':1bit标志位,指示是否检测到Rank错误。当‘0’标志位所指示的方向与相关Ranks不匹配时会出现Rank错误。主机或RPL叶子节点必须将‘R’标志位设置为0。
Forwarding-Error 'F':1bit标志位,指示此节点无法继续再向目的地转发数据包。‘F’标志位可能由孩子节点设置,该孩子节点没有通往目的地的路由且Down '0'标志位置1的数据包。主机或RPL叶子节点必须将‘F’标志位清0。
RPLInstanceID:8bit字段,指示数据包所发送的DODAG实例。
SenderRank:16bit字段,由源设置为0,并由在RPL网络内负责转发的路由器设置为DAGRank(rank)。

11.2.1  源节点操作
如果源意识到RPLInstanceID是数据包的首选,那么它必须设置与数据包所关联的RPLInstanceID字段;否则它必须将其设置为RPL_DEFAULT_INSTANCE。

11.2.2  路由操作

11.2.2.1  实例转发
RPLInstanceID与拥有数据包的源关联。这个RPLInstanceID必须与放置在任意节点上数据包的RPL实例相匹配,该节点可为主机或路由器。RPLInstanceID是RPL Packet Information的一部分。

RPL网络中转发数据包的RPL路由必须检查数据包是否包含RPL Packet Information。如果没有,则RPL路由必须插入RPL Packet Information。如果路由器是将数据包注入RPL网络的入口路由器,路由器必须设置RPL Packet Information中的RPLInstanceID字段。关于路由器如何映射RPLInstanceID超出本规范范围,留待将来规范解决。

路由器在将数据包转发至RPL网络之外时必须移除RPL Packet Information。

当路由器接收了一个特定RPLInstanceID的数据包,并且节点可延那个实例所关联的DODAG转发数据包时,路由器必须这么做,并且保留RPLInstanceID值不变。

任何节点如果不能沿RPLInstanceID所关联的DODAG转发数据包,则丢弃数据包并发送一个ICMP错误消息。

11.2.2.2  DAG不一致回路检测
如果数据包的方向与Rank关系不一致,则会出现DODAG不一致。接收者在收到以下任一种数据包都会检测到不一致:
从更高层级Rank的节点收到‘0’标志位为1(向下)的数据包。
从更低层级Rank的节点收到‘0’标志位为0(向上)的数据包。
当DODAG根增加其DODAGVersionNumber,可能在下一个DODAG Version和前一个DODAG Version之间形成临时的Rank不连续,尤其是,如果节点正在调整它们在下一个DODAG Version中的Rank,以及正在推迟它们到下一个DODAG Version的迁移时。仍为前一DODAG Version成员的路由器可能选择将数据包转发到下一 DODAG Version中的(将来的)双亲。在某些情况下,这些可能导致双亲检测到不一致,因为前一 DODAG Version的Rank排序不一定和下一 DODAG Version的一样,分组可能被判断为不能向前转发。如果正在发送的路由器意识到所选择的继任者已经加入下一个 DODAG Version,为避免出现Rank不一致的错误,它必须在转发数据包至下一 DODAG Version而跨越不连续时, 更新SenderRank为INFINITE_RANK。

延路径的一个不一致并非重大错误,数据包可以继续。然而,相同数据包延路径的第二次不一致则不应发生,此时数据包必须被丢弃。

此流程由数据包所关联的Rank-Error标志位所控制。当数据包检测到不一致,如果Rank-Error标志位没有设置,那么将Rank-Error标志位置1。如果已经设置,数据包必须被丢弃,涓流计时器必须重置。

11.2.2.3  DAO不一致检测和恢复
DAO不一致环路恢复是一种仅适合于存储运行模式的机制。

在非存储模式中,数据包由源路由至目的地,DAO不一致不在本地校正,而是将带有“Error in Source Routing Header”的ICMP错误发送回根。“Error in Source Routing”报文和“Destination Unreachable Message”报文的格式相同,如 [RFC4443]所述。发回ICMP消息所调用的数据包部分至少应当记录到路由首部,而此节点应当消费此路由首部,从而使IPv6首部中的目的地成为此节点无法到达的下一跳。

当路由器之前通过孩子的DAO报文获知一个下行路由,但此下行路由对于孩子不再有效,如孩子的相关状态已经被清除的原因,此时会发生一个DAO不一致。使用DAO环路不一致,数据包可以递归探测并延子DODAG清除废弃的DAO状态。

通常情况下,下行的数据包永远不会再上行。但如果使用了不一致环路恢复,那么路由器将把数据包返回给双亲,并将Forwarding-Error标志位置1,‘0’标志位原封不动地传回。否则,路由器必须静默丢弃该数据包。

一旦接收到Forwarding-Error标志位置1的数据包,节点必须移除那些导致转发给邻居的路由状态,清除Forwarding-Error标志位,并试图再次发送数据包。在用户可配置特定功能定时器到期后,数据包可以发送给一个替代邻居。如果替代邻居通过此节点还是出现不一致DAO状态,将重复此过程,节点将Forwarding-Error ‘F’标志位置1,替代邻居中的路由状态也将清零。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值