RPL(5):RFC6550翻译(5)---ICMPv6 RPL控制报文

一直以来,困扰我的是packet的翻译,可以是数据包,也可以是分组。但这两个中文意思相差较大,翻译成“数据包”或“包”更接地气、更容易理解些,但有些专来术语又必须使用“分组”。头痛啊!个人理解,分组是相对于链路层而言的,因为IP层向下发的数据包有可能尺寸过大,在链路层要分成数块来传送,所以又叫分组。我个人倾向于packet在单独使用时翻译为数据包,在联合其它单词形成专业术语时,根据需要,有时翻译成分组。反正大家以后看到“分组”和“数据包”,知道是一个意思就行了。
6、ICMPv6 RPL控制报文
本文定义了一种新的ICMPv6报文 [RFC4443]:RPL控制报文 。RPL控制报文 由Code字段标识,并由取决于Code的Base字段以及一系列选项组成。

大多数RPL控制报文 有链路范围,唯一例外的是非存储模式下的DAO/DAO-ACK报文 ,使用单播地址通过多跳进行交换,因而无论源还是目的地都使用全局或唯一本地地址。对于所有其它RPL控制报文 来说,源地址是链路本地地址,目的地址不是所有RPL节点多播地址就是目的地的链路本地单播地址。所有RPL多播地址是一种为ff02::1a的新地址。

[RFC4443]一致,RPL控制报文由ICMPv6首部和随后的消息体组成。消息体包含一个消息基(Base),还可能包含多个选项(Option(s)),如图6所示:


 RPL控制报文是一种Type值为155的ICMPv6信息报文。

Code字段标识RPL控制报文的类型。本文为以下RPL控制报文类型定义了code(见20.2节):

  •   0x00:DODAG信息请求(6.2节)
  •   0x01:DODAG信息对象(6.3节)
  •   0x02:目的地公告对象(6.4节)
  •   0x03:目的地公告对象确认(6.5节)
  •   0x80:安全DODAG信息请求(6.2.2节)
  •   0x81:安全DODAG信息对象(6.3.2节)
  •   0x82:安全目的地公告对象(6.4.2节)
  •   0x83:安全目的地公告对象确认(6.5.2节)
  •   0x8A:一致性校验(6.6节)

如果节点收到携带未知Code字段的RPL控制报文,必须不做任何进一步处理地丢弃该消息,可以发出管理警报,但决不能发送任何响应信息。

Checksum字段的计算在[RFC4443]有描述。为保下面所描述的RPL的安全运行,它先被设置为0。一旦RPL报文中的其余部分(包括安全字段)全部设置完毕,再进行计算。

Code的最高位(0x80)批示RPL报文是否启用安全选项。安全的RPL报文拥有支持保密性和完整性的格式,如图7所示。

本章剩余部分所描述的是Base的格式,以及紧跟其后的Option(s)。

6.1 RPL安全字段
每个RPL报文都有安全变量,安全变量提供完整性和重播保护,以及可选的保密性和延时保护。因为安全措施覆盖Base和Option字段,所以承载安全信息的Security字段被放置在Checksum和Base字段之间,如图7所示。

安全级别和使用的算法在协议报文中有所指示,如下图所示:

消息认证码(Message Authentication Codes:MACs)和签名为整个非安全ICMPv6 RPL控制报文提供了认证,包括Security在内的所有字段定义,但ICMPv6的Checksum字段需要临时设置为0。加密为安全RPL ICMPv6报文提供了保密性,加密从Security字段之后的第一个字节开始,直到数据包的最后一个字节结束。这种安全改造产生了一个带加密字段(MAC,签名等等)的安全ICMPv6 RPL报文。换句话说,安全改造(如使用签名和/或算法)自身将详细说明如何将加密字段整合进安全的数据包。Security字段自身并无显式地携带这些加密字段。有关Security字段的进一步使用请参阅第19和10章。

T:Counter是否是时间
如果T标志位为1,则Counter字段存放的是时间戳。如果T标志位为0,那么Counter是一个递增的计数器。10.5节详细描述了“T”标志位和Counter字段。
Reserved:
7bit未使用字段。必须被发送者初始化为0,且接收者必须忽略它。
Algorithm:安全算法
Algorithm字段指定加密、MAC以及网络使用的签名模式。此字段支持如下值:

10.9节更为详细地描述了些算法。

KTM:Key Identifier Mode 密钥标识符模式
密钥标识符模式是一个2bit字段,指示了用于分组保护的密钥是显式确定还是隐式确定,并指出Key Identifier字段的具体表示。KTM取值为下表所列值之一:

图10:密钥标识符模式(KIM)编码

在模式3中(KIM=11),Key Index和Key Source的存在与否依赖于安全等级(LVL)。如果安全等级指示为加密,那么它们存在;如果安全等级为不加密,那么它们不存在。

Resvd:
3bit未使用字段。必须被发送者初始化为0,且接收者必须忽略它。
LVL:Security Level(安全等级)
安全等级是一个3bit字段,指示所提供的分组保护。此值可在每个分组基础上进行调整,允许使用不同的数据认证等级,并且作为可选项,可用于数据保密。KIM字段指示是否使用签名以及LVL字段的含义。注意,安全等级值的分配并无排序---更高的LVL值并不意味着更高的安全性。安全等级取值为下表所示值之一:

上表中的MAC属性指示报文拥有指定长度的MAC。ENC属性指示报文是加密的。Sign属性指示报文拥有指定长度的签名。

Flags:
8bit未全用字段,保留用于标志位。必须被发送者初始化为0,且接收者必须忽略它。
Counter:
Counter字段为非重复4字节值,用于构造 加密机制以实现分组保护,而且可用于提供主义安全。见10.9.1节。
Key Identifier:
Key Identifier字段指示使用何种密钥来保护分组。此字段提供不同粒度级别的分组保护,包括对等密钥(peer-to-peer)、组密钥(group keys)和签名密钥(signature keys)。此字段呈现的内容跟KIM字段所指相对应,格式如下图所示:

Key Source:

Key Source字段存在时,表示一个组密钥发起人的逻辑标识符。如果存在,占用8字节长度。
Key Index:
Key Index字段存在时,允许相同发起者的不同密钥拥有各自的唯一标识。密钥发起者有责任确保它所分配的频繁使用的密钥拥有不同的密钥索引,且所有密钥索引的值不等于0x00。值0x00保留用于预装的、分享的密钥。如果存在,此字段占用1字节长度。

Security字段中未分配部分保留, 必须被发送者初始化为0,且接收者必须忽略它。

6.2  DODAG信息请求(DIS)
DODAG信息请求(DIS)报文可用于从RPL节点处请求DODAG信息对象。它的使用和IPv6的邻居发现中的路由请求(RS)类似。节点可使用DIS为附近的DODAG探测邻居。8.3节描述了节点如何响应DIS。

6.2.1 DIS的Base对象格式

Flags:
8bit未使用字段,保留用于标志位。 必须被发送者初始化为0,且接收者必须忽略它。
Reserved:
8bit未使用字段。 必须被发送者初始化为0,且接收者必须忽略它。

未分配的DIS Base用于保留, 必须被发送者初始化为0,且接收者必须忽略它。
(注意,这段并未明确指出DIS是放哪的。个人估计这节所指的DIS Base就是本日志第一张图---图6的Base字段所存放的内容。所以这里的Base并未翻译为基础,是为了让大家更清晰地知道,它是图中的Base字段)

6.2.2  安全DIS
安全的DIS报文遵循图7所示的格式,base字段格式是如图13所示的DIS报文。

6.2.3  DIS Options
DIS报文可携带校验选项。

本规范允许DIS报文携带以下options:
0x00   Pad1
0x01   PadN
0x07   请求信息

6.3  DODAG信息对象(DIO)
DODAG信息对象携带的信息可使得点节可以发现RPL实例,并学习它的参数 配置 ,选择DODAG双亲集,以及维护DODAG。

6.3.1  DIO Base对象格式

G:Grounded(接地的)
“G”标志位指示DODAG所公告的是否可以满足应用定义目标。如果标志位置1,表示DODAG是接地的,否则DODAG是浮动的。
MOP:Mode of Operation运行模式
MOP字段指出RPL实例的运行模式在管理上由DODAG根提供和分发。所有加入DODAG的节点必须能够遵循MOP,以便作为路由器充分参与,或仅作为叶子节点加入。MOP编码如下图所示:

图15:MOP编码
(上图第一行改为:“没有由RPL维护的下行路由”。图画完就删了,懒得再画)
0值表示目的地公告报文不可用,DODAG仅维护上行路由。
Prf: DODAGPreference(DODAG优先级)
3bit无符号整数,定义了实例中此DODAG的根相比其它DODAG根有多优先。 DODAGPreference范围从0(最低优先级)到0x07(最高优先级)。默认为0(最低优先级)。8.2节描述了 DODAGPreference是如何影响DIO进程的。
Version Number: (版本号)
8bit无符号整数,由DODAG根设置的DODAGVersionNumber。8.2节描述了 DODAGVersionNumber规则以及它是如何影响DIO进程的。
Rank:
16bit无符号整数,指示发送DIO消息节点的DODAG Rank。8.2节描述了Rank是如何设置以及它对DIO进程的影响。
RPLInstanceID:
一个由DODAG根设置的8bit字段,指示DODAG属于哪个RPL实例。
DTSN:Destination Advertisement Trigger Sequence Number目的地公告引发序号
由节点发布的DIO报文设置的8bit无符号整数。DTSN标志位作为维护下行路由流程的一部分使用。详尽的处理见第9章。
Flags:
8bit未使用字段,保留用于标志位。 必须被发送者初始化为0,且接收者必须忽略它。
Reserved:
8bit未使用字段。 必须被发送者初始化为0,且接收者必须忽略它。
DODAGID:
128bit IPv6地址,由DODAG根设置,且唯一标识一个DODAG。DODAGID必须是属于DODAG根的可路由IPv6地址。

未分配的DIO Base位用于保留。 必须被发送者初始化为0,且接收者必须忽略它。

6.3.2  安全DIO
安全DIO报文 遵循图7所示的格式, base字段格式是如图14所示的DIO报文。

6.3.3  DIO Options
DIO报文可携带校验选项。

本规范允许DIO报文携带如下选项:
0x00   Pad1
0x01   PadN
0x02   DAG Metric Container(DAG度量容器)
0x03   Routing Information(路由信息)
0x04   DODAG Configuration(DODAG配置)
0x08   Prefix Information(前缀信息)

6.4  目的地公告对象(DAO)
目的地公告对象(DAO)用于延DODAG上行散播目的地信息。在存储模式下,DAO报文由孩子向选定双亲单播。在非存储模式下,DAO报文单播至DODAG根。DAO报文是可选的,当有显式请求或出错时,目的地将返回一个目的地公告确认(DAO-ACK)报文给DAO发送者以进行确认。

6.4.1  DAO Base对象格式

图16  DAO Base对象
“*”号表示DODAGID并不总是存在。

RPLInstanceID:
8bit字段,指示从DIO获知的,跟DODAG相关联的拓扑实例。
K:
“K”标志位指示接收者是否应该返回一个DAO-ACK,见9.3节。
D:
“D”标志位指示DODAGID字段是否存在。当使用本地RPLInstanceID时,此标志位必须被设置。
Flags:
Flags字段中保留用于标志位的6bit未使用位。 必须被发送者初始化为0,且接收者必须忽略它。
Reserved:
8bit未使用字段。 必须被发送者初始化为0,且接收者必须忽略它。
DAOSequence:
随着每个来自节点的唯一DAO报文递增,并回应DAO-ACK报文。
DODAGID(可选项):
128bit无符号整数,由DODAG根设置,并唯一标识一个DODAG。此字段只有在“D”标志位置1时存在。为了标识DODAGID,它和RPLInstanceID是关联的。当使用全局RPLInstanceID时,此字段无需存在。

DAO Base中的未赋值位用于保留,它们必须在发送时置0,接收时忽略。

6.4.2  安全DAO
安全的DAO报文遵循图7所示格式,base格式如图16所示的DAO报文。

6.4.3  DAO Options
DAO报文可携带校验选项。

本规范允许DAO报文携带如下选项:
0x00   Pad1
0x01   PadN
0x05   RPL Target(RPL目标)
0x06   Transit Information(发送信息)
0x09   RPL Target Descriptor(RPL目标描述符

一种特殊情况下的DAO报文,被称为No-Path(无路径),用于在存储模式下通过DAO操作提供以清除下行路由状态。No-Path携带一个Target选项和一个相关的Transit Information选项,其生命周期为0x00000000,表示到那个Target的有损可达性。

6.5  目的地公告对象确认(DAO-ACK)
DAO-ACK报文是DAO接收者(DAO双亲或DODAG根)回应一个单播DAO报文所发送的单播数据包。

6.5.1  DAO-ACK Base对象格式

图16:DAO Base对象
“*”号表示DODAGID并不一定存在。

RPLInstanceID:
8bit字段,指示从DIO获知的,跟DODAG相关联的拓扑实例。
D:
“D”标志位指示DODAGID字段是否存在。通常仅在使用本地RPLInstanceID时被设置。
Reserved:
7bit字段。 保留用于标志位。
DAOSequence:
随着每个来自节点的DAO报文递增,并由接收者回应DAO-ACK报文。DAOSequence用于使DAO报文和DAO-ACK报文一一对应,它不会以DODAG下沿的给定目标的Transit Information选项路径顺序相混淆。
Status:
指示完成情况。此规范中,状态0表示无条件接受。剩余状态值保留用于拒绝代码。本规范未定义拒绝码,但在将来的规范中状态码应依照以下指导原则进行分配。
0:无条件接受(也就是node不会拒绝接受DAO-ACK)。
1-127:非完全拒绝。发送DAO-ACK的节点愿意充当双亲,但建议接收节点寻找和使用替代双亲。
127-255:拒绝。 发送DAO-ACK的节点不愿意充当双亲。
DODAGID(可选项):
128bit无符号整数,由DODAG根设置,并唯一标识一个DODAG。此字段只有在“D”标志位置1时存在。通常仅当本地
RPLInstanceID在用,为标识与之关联的DODAGID时才会使用此字段。 当使用全局RPLInstanceID时,此字段无需存在。

未赋值的DAO-ACK Base位用于保留,它们必须在发送时置0,接收时忽略。

6.5.2  安全DAO-ACK
安全的DAO-ACK报文遵循图7所示格式,base格式如图17所示的DAO-ACK报文。

6.5.3  DAO-ACK Options
本规范未定义任何被DAO-ACK报文所携带的options。

6.6 一致性校验(CC)
CC报文用于检验安全报文计数器,并发布质询-响应。CC报文必须作为安全RPL报文发送。

6.6.1  CC Base对象格式

RPLInstanceID:
8bit字段,指示从DIO获知的,跟DODAG相关联的拓扑实例。
R:
“R”标志指示CC报文是否为响应报文。一个“R”标志位清0的报文为请求;“R”标志位置1的报文为响应。
Flags:
Flags字段中剩余7bit未用位保留用于标志位。 它们必须在发送时置0,接收时忽略。
CC Nonce:
16bit无符号整数,由CC请求设置。CC请求与其所对应的CC响应间的 CC nonce值 相同。
DODAGID:
128bit字段,包含DODAG根的标识符。
Destination Counter:(目的地计数器)
32bit无符号整数,指示发送者对目的地的当前安全计数器数值的评估值。如果发送者未评估,则将Destination Counter字段设为0。

未赋值的CC Base位用于保留,它们必须在发送时置0,接收时忽略。

Destination Counter值允许新的或恢复的节点通过CC报文交换进行再同步。这很重要,即使设备从丢失计数器状态的故障中恢复,它也能确保给定安全密钥的Counter值不会重复。例如,当收到CC请求或其它RPL报文,报文中的Security部分是一个已经初始化的计数器。回发消息后,CC响应报文所提供的接收计数器使得请求节点可以重设它的发送计数器,将值设为比响应节点收到的最后一个值大的值。接收计数器也可根据收到的CC响应更新。

6.6.2  CC Options
本规范允许CC报文携带如下选项:
0x00   Pad1
0x01   PadN


6.7  RPL控制报文选项

6.7.1  RPL控制报文选项通用格式
(这里所说的选项,其实是本日志第一张图,图6中的报文格式的Option(s)部分)
所有RPL控制报文选项都遵循以下格式:

Option Type:
8bit的选项类型标识符。选项类型值由IANA分配(见20.4节)。
Option Length:
8bit无符号整数,表示以字节为单位选项长度,不包含Option Type和Option Length所占用的空间。
Option Data:
一个可变长字段,包含具体的选项数据。

当处理一个包含选项的RPL报文,但接收者并不识别该选项类型值时,接收者必须静默地忽略此未识别选项,继续处理下一个选项,并正确处理报文中的任意剩余选项。

RPL报文选项可能有对齐要求。遵循IPv6规范,有对齐要求的选项必须在数据包中排列整齐,以使每个选项的Option Data字段中的多个8位字节落于自然边界(也就是说,宽度为n个字节的字段应该放置于自首部开始的n个字节的整数倍处,这里n=1,2,4或8)。

6.7.2  Pad1
Pad1选项可能存在于DIS、DIO、DAO、DAO-ACK以及CC报文中,它的格式如下图所示:

 图20:Pad1选项格式
Pad1选项用于向报文中插入单个字节填充块,以使选项对齐。如果需要超过一个字节的填充块,则使用PadN选项,而不是多个Pad1选项。

注意!Pad1选项的格式属特殊情况----它既不是选项长度,也不是选项数据字段。

6.7.3  PadN
PadN选项可能存在于DIS、DIO、DAO、DAO-ACK以及CC报文中,它的格式如下图所示:

PadN选项用于在报文中插入2个或更多字节的填充块,以使选项对齐。PadN的Option data必须被接收者忽略。

Option Type:0x01
Option Length:对于N字节的填充块,其中2 <= N <= 7,Option Length字段所包含的值为N-2。Option Length值为0表示整个填充块为2字节。Option Length值为5表示整个填充块长度为7,这是采用PadN选项所允许的最大填充尺寸。
Option Data:对于N字节填充块(N>1),Option Data由N-2个0值字节组成。

6.7.4  DAG度量容器
DAG度量容器选项可能存在于DIO和DAO报文中,它的格式如下:

DAG度量容器用于报告延DODAG前进所使用的度量。根据实施者的选择,DAG度量容器包含数个 [RFC6551 ]中规定的离散的节点,链路、聚合路径度量和约束。

DAG度量容器在相同的RPL控制报文中可出现多次,例如,为了适应使用大于256字节的度量数据的情况。更多信息请参阅 [ RFC6551 ]

DAG度量容器的处理和传播受实施的特定策略功能支配。

Option Type:0x02
Option Length:Option Length字段包含用字节表示的度量数据长度。
Metric Data:DAG度量容器数据的顺序、内容和编码,在 [ RFC6551 ]中指定。

6.7.5  路由信息
Route Information Option(RIO:路由信息选项)存在于DIO报文之中,它携带的信息和IPv6邻居发现(ND)的RIO相同(定义于 [RFC4191])。此信息由DODAG根权威设置,并无变更地向下传播至DODAG。RPL路由可简单地将它转换为ND选项,并使用自己的RA进行公告,因此附着于RPL路由的节点将最终使用那些根到数据包中目的地的最优选DODAG。除现存的ND语义之外,目标函数可能更青睐于使用这些信息去选出从根到指定目的地的最优选DODAG。为了携带RPL选项,选项格式如下图所示稍微做了修改(Type,Length,Prefix):

RIO用于指示从DODAG根到指定目的地前缀连接是可用的。


如果RPL控制报文需要指定连接的目的地超过一个,可重复使用RIO。

就RIO而言,应该查询作为权威参考文献的 [RFC4191]标准。这里为了方便,转录该字段相关描述如下:

Option Type:0x03
Option Length:
可变的,以字节为单位的选项长度(除去Type和Length字段)。注意,此长度以单个字节为单位来表示,不同于IPv6 ND。
Prefix Length: 前缀长度
8bit无符号整数。有效前缀中的前导位数目,值范围为0到128。Prefix字段的长度由Option Length字段推导而出,最短也要等于Prefix Length。注意在RPL中,这意味着前缀字段可以有除了0、8或16以外的长度。
Prf:Route Preference
2bit无符号整数。Route Preference指示当收到多个相同前缀(分属于不同路由器)时,是否关联此前缀的路由器更优于其它路由器。如果收到的值为保留值10,RIO必需忽略它。依照[RFC4191]规定,保留值10不能被发送。[RFC4191]限制Preference只能使用三个值,以便强调它不是度量。
Resvd:
长度为3bit的两个未使用字段。必须被发送者初始化为0,并被接收者忽略。
Route Lifetime:
32bit无符号整数。以秒为单位的时间长度,表示从数据包发送开始计时的路由测定的前缀有效期。所有位置1(0xFFFFFFFF)表示无穷大。
Prefix:
可变长度字段,包含一个IP地址或IPv6地址的前缀。Prefix Length字段包含前缀有效前导位的数目。Prefix字段中的前缀之后的位用于保留,必须由发送者初始化为0,并被接收者忽略。注意,在RPL中,此字段可能有除0、8或16以外的长度。

RIO中未分配的位用于保留,必须在发送时置0,接收时忽略。

6.7.6  DODAG配置
DODAG配置选项可出现在DIO报文中,格式如下图所示:

DODAG配置选项用于 通过DODAG 分发DODAG运行(DODAG Operation)配置信息。

在这个选项中传达的信息通常是静态的,并且在DODAG中不变,因此,没有必要在每个DIO中都包含它。此信息由DODAG根配置,并用DODAG配置选项分发至整个DODAG。在传播 DODAG配置选项时,除DODAG根外的其它节点不能对它更改。DODAG根偶尔会包含此选项(由DODAG根决定),在响应单播请求时必须包含此选项,如单播DODAG信息请求(DIS)报文。

Option Type:0x04
Option Length:14
Flags:
Flags字段中的未使用的4bit位,保留用于标志位。 必须被发送者初始化为0,并被接收者忽略。
A:Authentication Enabled(启用认证)
1bit标志位,描述网络的安全模式。此位指示当一个节点作为路由器加入网络时,是否必须使用密钥进行认证。如果DIO不是安全的DIO,则“A”位必须置0。
PCS:Path Control Size
3bit无符号整数,用于配置可能分配给Path Control字段(见9.9节)的位数。注意,当查询PCS以确定Path Control字段宽度时,结果值加1。也就是说PCS值为0的结果是Path Control字段中有1个激活位。PCS的默认值是
DEFAULT_PATH_CONTROL_SIZE。
DIOIntervalDoublings:
8bit无符号整数, 用于配置DIO涓流计时器的Imax(见8.3.1节)。DIOIntervalDoublings的默认值为 DEFAULT_DIO_INTERVAL_DOUBLINGS。
DIOIntervalMin:
8-bit未使用整数,用于配置DIO涓流计时器的Imin(见8.3.1节)。DIOIntervalMin的默认值为DEFAULT_DIO_INTERVAL_MIN。
DIORedundancyConstant:
8bit无符号整数,用于配置DIO涓流计时器的k值(见8.3.1节)。DIORedundancyConstant的默认值为DEFAULT_DIO_REDUNDANCY_CONSTANT。
MaxRankIncrease:
16bit无符号整数,用于配置DAGMaxRankIncrease,为支持本地修复而允许的Rank增量。如果DAGMaxRankIncrease为0,则表示此机制不可用。
MinHopRankIncrease:
16bit无符号整数,用于配置3.5.1节所描述的MinHopRankIncrease。MinHopRankInc的默认值为DEFAULT_MIN_HOP_RANK_INCREASE。
OCP:Objective Code Point
16bit无符号整数。OCP字段标识OF,它由IANA管理。
Reserved:
7bit未使用字段,此字段必须被发送者初始化为0,且接收者忽略。
Default Lifetime:
8bit无符号整数。这是所有RPL路由器所使用的生命周期默认值。它以Lifetime Units为单位表示,举例来说,以秒表示默认生命周期为(Default Lifetime) * (Lifetime Unit)。
Lifetime Unit:
16bit无符号整数。提供以秒计的单位,用于表达RPL中的路由生命周期。对于非常稳定的网络来说,它可能是数小时或数天。

6.7.7 RPL目标
RPL目标选项可出现于DAO消息中,它的格式如下图所示:

RPL目标选项用于表示目标IPv6地址、前缀、可达的或沿DODAG查询的多播组。在DAO中,RPL目标选项指示可达性。

RPL目标选项可选择与符合目标的RPL目标描述符选项(图30)配对。

在DAO报文中,一组的一个或多个传送信息选项(Transit Information options,见6.7.8节)可直接跟在一组的一个或多个目标选项后面(上面所讲的每个目标选项可以RPL目标描述符选项配对)。DAO报文结构,目标选项与传送信息选项的联合使用的细节设计在9.4节中有详细描述。

RPL目标选项在必要时可重复使用以指示多个目标。

Option Type:0x05
Option Length:
可变的,以字节计的除去Type和Length字段的选项长度。
Flags:
8bit未使用字段,保留用于标志位。此字段必须被发送者初始化为0,且接收者忽略。
Prefix Length:(前缀长度)
8bit无符号整数。IPv6前缀中有效前导位的数目。
Target Prefix:
可变长度字段,标识IPv6目的地地址、前缀或多播组。Prefix Length字段包含前缀有效前导位数目。prefix中前缀长度之后的位(如果有)保留,必须在发送时置0且在接收时忽略。

6.7.8  Transit Information(传送信息)
传送信息选项(Transit Information option)可存在于DAO报文中,格式如下图所示:

图26:传送信息选项格式

“*”号表示DODAG双亲地址子字段并非总是存在,下面有描述。

传送信息选项用于节点,指示到一个或多个目的地的路径属性。目的地由一个或多个紧靠传送信息选项之前的目标选项指出。

传送信息选项可用于指导节点的DODAG双亲们如何到达某个正在收集DODAG路由信息的祖先,通常这样做的目的是构造源路由。在非存储运行模式中,这个祖先应该是DODAG根,且此选项由DAO报文携带。在存储运行模式中,因为DAO报文直接发送给双亲,所以不需要使用DODAG双亲地址子字段。选项长度用于确定DODAG双亲地址子字段是否存在。

作为非存储目的地公告操作的一部分,多DAO双亲的非存储节点可以包含对应于每个DAO双亲的传送信息选项。节点可以在不同的DAO双亲组中分发Path Control字段中的位,从而通告双亲间的优先权。当轮流在双亲/路径间选择以构造下行路由时,此优先权可能影响根路由的决定。

一个或多个RPL目标选项必须位于一个或多个传送信息选项之前。照这样,RPL目标选项指示孩子节点,传送信息选项列出DODAG双亲。DAO报文结构,以及更详细的如何联合使用目标选项和传送信息选项将在9.4节详尽描述。

一个典型的非存储节点会使用多重传送信息选项,并向根直接发送这样形成的DAO消息。一个典型的存储节点将仅使用一个无parent字段的传送信息选项,发送如此形成的带额外调整的DAO消息到Path Control(稍后详细讨论),或到一个或多个双亲。

例如,在非存储运行模式中,让Tgt(T)代表目标T的Target选项。让Trnst(P)指示包含一个双亲的地址P的传送信息选项。考虑以下情况:一个非存储节点N宣告自有目标为N1和N2,双亲为P1、P2、P3,此时DAO报文将会顺序包含Tgt(N1)、Tgt(N2)、Trnst(P1)、Trnst(P2)、Trnst(P3),Target选项组{N1,N2}将被传播信息选项描述为拥有双亲{P1,P2,P3}。接下来,非存储节点将给此DAO报文写上直接到DODAG根的地址,并通过DODAG双亲P1、P2、P3的其中之一发送DAO报文。

Option Type:0x06
Option Length:可变的,依赖于DODAG Parent Address子字段是否存在。
E:External
1bit标志位。“E”标志位置1表示双亲路由器将外部目标重新分配到RPL网络。外部目标是通过备用协议获知的Target。外部目标列于紧靠在传送信息选项之前的Target选项中。不要期望外部目标支持RPL报文和选项。
Flags:
Flags字段中的7bit剩余的未使用位,用于保留。必须由发送者初始化为0,接收者忽略。
Path Control:
8bit字段。Path Control字段限制一个DAO报文公告到特定目的地的连通性时,可能使用到的双亲的数量,它还提供一些相对优先级的指示。此限制还对LLN内的整个DAO报文输出端提出了某种界限。Path Control中位的分配和排序也服务于优先级的沟通。依照DODAG Configuration中的PCS字段,并非所有的位都需要激活。Path Control字段被划分为四个子字段,每字段包含两个bit,分别为图27所示的:PC1、PC2、PC3和PC4。子字段按优先级排序,PC1的优先级最高,PC4的优先级最低。子字段内无优先级。通过对双亲进行分组和排序(如ECMP那样),双亲可以和Path Control字段中的指定位进行关联,从而可以进行优先级的沟通。

图27:Path Control优先级子字段编码

Path Sequence:
8bit无符号整数。当一个RPL目标选项由属于目标前缀的节点发布(也就是DAO报文内),那个节点将设置Path Sequence,并且每次发布携带更新信息的RPL目标选项时都会递增Path Sequence。
Path Lifetime:
8bit无符号整数。以Lifetime Units为单位的时间长度(Lifetime Units为6.7.6节Configuration Option中的字段),指示路由测定中的前缀有效期。时间段从新的Path Sequence出现开始。所有值置1(0xFF)表示无穷大,所有值置0(0x00)表示不可达。本文档中,一个包含传送信息选项的DAO消息中,如果某Target所对应的Path Lifetime为0x00,则视此Target为No-Path状态。
Parent Address:(可选的)
Transit Information选项发起者节点的DODAG双亲的IPv6地址。此字段有可能不存在,它由DODAG运行模式决定(存储式或非存储式),并通过Transit Information选项长度指出。

Transit Information选项的未分配位用于保留。它们必须在发送时置0,接收时忽略。

6.7.9  Solicited Information(请求信息)
请求信息选项可以出现在DIS报文中,格式如下图所示:

请求信息选项用于节点从邻居节点子集中请求DIO消息。请求信息可以指定一系列匹配接收节点的断言规则( predicate criteria)。它可被请求者用于限制来自不感兴趣节点的响应数目。这些断言会影响一个节点是否重启它的DIO涓流计时器,相关描述请参阅8.3节。 (在网上查了一下predicate的翻译,贴一条比较靠谱的上来供参考:在计算机科学中,predicate的定义与语言学中的解释略有不同,虽然从字面的翻译来看,大多网上的资料仍然将其称之为谓词,但我觉得这种翻译并不准确。 从维基百科的解释可知,predicate一词来自数理逻辑(Mathematical Logic)中的定义,可以被认为是一种布尔函数或者叫布尔逻辑。从布尔函数的角度来看,predicate就是一个函数映射,这个映射把一组变量映射为true或者false。 所以可把predicate翻译为“断言”。)

请求信息选项包含一些标志位以指示:当节点决定是否重启它的涓流计时器时,将检查哪个断言。节点会在所有断言为true的情况下重启它的涓流计时器。当一个标志位置1时,RPL节点必须检查相关断言。当标志位清0时,则RPL节点禁止检查相关断言。(如果标志位清0,RPL节点假定相关断言为true)

Option Type:0x07
Option Length:19
V:
“V”标志表示版本断言。如果接收者和请求者的DODAGVersionNumber相匹配,则版本断言为true。如果“V”标志位清0,则Version字段无效,且Version字段必须在发送时清0,接收时忽略。( 这里所说的Version字段应该是上图的Version Number字段
I:
“I”标志表示InstanceID断言。当RPL节点的当前RPLInstanceID和请求 RPLInstanceID相匹配时, InstanceID断言为true。当“I”标志位为0时,RPLInstanceID字段无效,且 RPLInstanceID字段必须在发送时置0,接收时忽略。
D:
“D”标志表示DODAGID断言。如果RPL节点的双亲集拥有和DODAGID字段中一样的DODAGID,则DODAGID断言为true。如果“D”标志位为0,那么DODAGID字段无效,且DODAGID必须在发送时置0,接收时忽略。
Flags:
Flags字段中未使用的5bit位保留用于标志位。它们必须被发送者初始化为0,且接收者忽略。
Version Number:
8bit无符号整数,当有效时,包含被请求的 DODAGVersionNumber值。
RPLInstanceID:
8bit无符号整数,当有效时,包含被请求的 RPLInstanceID。
DODAGID:
128bit无符号整数, 当有效时,包含被请求的DODAGID。

请求信息选项中的未使用位保留,它们必须在发送时置0,接收时忽略。

6.7.10  Prefix Information(前缀信息)
前缀信息选项(PIO)可存在于DIO报文之中,携带定义于 [RFC4861]、[RFC4862]和[RFC6275] 中的IPv6 ND前缀信息选项,被RPL节点及IPv6主机使用。尤其,RPL节点可根据 [RFC4862] 中定义的双亲通告的前缀,将此选项用于无状态地址自动配置(Stateless Address Autoconfiguration :SLAAC )中,并如 [RFC6275] 中指定的那样公告自己的地址。DODAG根是设备此信息的权威机构。信息延DODAG向下无变化传播,除非“R”标志位置1,指示PIO中使用的是完整地址,此时RPL路由可以重写接口ID。此选项格式做了修改(Type,Length,Prefix),从而可作为如下所述RPL选项使用:

如果DIO中所接收的PIO的预期作用仅仅是为双亲节点提供到达接收节点全局地址,那么,发送者重置“A”和“L”位为1,并将“R”位置1。一旦收到信息,RPL将不会通过前缀自动配置地址或连接路由 [ RFC4862 ]。在所有情形中,当“L”位置0,RPL节点可以在发送到孩子的PIO中包含前缀。

PIO可用于分发在DODAG内部使用的前缀,例如,地址自动配置。
关于PIO,应该参阅权威参考文献[ RFC4861 ] 和 [ RFC6275 ]。这里为了方便,转录字段说明如下:

Option Type:0x08
Option Length:30
注意,此长度不同于IPv6 ND,它以字节为单位。
Prefix Length:
8bit无符号整数。指示Prefix字段中有效前导位数目,值范围从0至128。Prefix Length字段为on-link测定提供必要信息(当与PIO中的“L”标记联合使用)。它还可以如 [RFC4862] 中所述那样协助地址的自动配置,但那会对地址长度有更多的限制。
L:
1bit On-link标志。置1时指示前缀可用于on-link测定。置0时,公告没有关于前缀on-link或off-link属性的声明。换句话说,如果“L”标志位为0,RPL节点无法断定从前缀推导出的地址为off-link状态。更确切地说,禁止更新一个先前指定为on-link的地址。作为路由器的RPL节点禁止传播“L”标志位为1的PIO,但可以传播 “L”标志位为0的PIO。
A:
1bit自主地址配置标志。设置为1表示前缀可用于如 [RFC4862] 所述的无状态地址配置。当两个协议(ND RAs和RPL DIOs)都用于在相同链路携带的PIO时,有可能 RPL节点 将其中任何一个用于SLAAC( 无状态地址自动配置 )。也有可能强制使协议所携带PIO中的“A”标志置0而导致的,任一协议都对SLAAC操作无效。
R:
1bit路由地址标志。置1时指示前缀字段所包含的是完整的IPv6地址,此地址由 在target选项中作为双亲使用的 发送路由分配。指示的前缀由Prefix字段中前面Prefix Length个位所组成。该路由的IPv6地址拥有和公告前缀相同的范围和生命周期值。Prefix字段在此处的应用与其自身的公告前缀相兼容,因为前缀公告仅使用前导位。对于此标志位的解释不依赖于on-link(L)和自主地址配置(A)标志位的处理需求。
Reserved1:
5bit未使用字段。它必须被发送者初始化为0,接收者忽略。
Valid Lifetime:
32bit无符号整数。以秒为单位的时间长度(相对于数据包发送时刻),表示前缀用于on-link测定的有效时间。所有位置1(0xFFFFFFFF)表示无穷大。[RFC4862]也使用此Valid Lifetime。
Preferred Lifetime:
32bit无符号整数。以秒为单位的时间长度(相对于数据包发送时刻),表示前缀经由无状态地址自动配置所生成的地址可保持首选的时间(请参阅[RFC4862])。所有位置1(0xFFFFFFFF)表示无穷大。注意,此字段值不能大于Valid Lifetime字段值,以避免首选地址不再有效。
Reserved2:
此字段未使用,必须由发送者初始化为0,接收者忽略。
Prefix:
一个IPv6地址或一个IPv6地址前缀。Prefix Length字段包含着前缀的有效前导位的数目。前缀中前缀长度之后位保留,必须被发送者初始化为0,接收者忽略。路由器不应当发送使用链路本地前缀的prefix选项,主机应当忽略这样的prefix选项。非存储节点应该抵制公告前缀,直到它拥有属于那个前缀的地址,这样,就可以在字段中将“R”标志置1,并公告它的完整地址。节点的孩子也这样公告“R”标志位为1的完整地址,然后可以使用此地址决定Transit Information选项的子字段DODAG双亲地址的内容。

PIO中的未分配字段保留,它们必须在发送时置0,接收时忽略。 

6.7.11  RPL Target Descriptor(RPL目标描述符)

RPL Target选项之后可以紧跟一个可以证明特定Target有效的不透明描述符。

RPL目标描述符选项用于证明一个target的有效性,有时把这称为“tagging”。

每个target最多只能有一个描述符。在RPL网络中,描述符由添加该Target的节点进行设置。在DAO报文中,它只能由沿DODAG向上传播此Target的路由器拷贝,而不能更改。

Option Type:0x09
Option Length:4
Descriptor:32bit无符号整数,不透明。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值