Thread地址(IPv6 and RLOC16)

Thread协议栈的设备支持在RFC4219((https://tools.ietf.org/html/rfc4291)中定义的IPv6地址构架。Thread地址包含了单播地址、多播地址、任播地址、RLOC16。了解Thread地址之前一定要先了解IPv6的地址。

IPv6地址分为三种类型:
单播:单个接口的标识符。发送一个数据包到单播地址也就是发送数据包到这个地址所标识的接口。
任播:一组接口的标识符(通常属于不同的节点)。发送到一个数据包到任播地址也就是发送数据包到这个地址所标识的接口集中的任意一个接口(根据到路由协议的距离度量程序计算出的最近的接口)。当目的地的路由地址未知时,可以使用任播将数据路由到 Thread 接口。ALOC(Anycast Locator)标识 Thread 分区内多个接口的位置。
多播:一组接口的标识符(通常属于不同的节点)。一个数据包发送到组播地址也就是数据包下发给由该地址所标识的接口集的所有接口。
IPv6 中没有广播地址,广播地址的作用是由多播地址取代。

地址的文本表示方法:
一、冒分十六进制表示法
格式为X:X:X:X:X:X:X:X,其中每个X是1-4个16进制数字。例如:
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
2001:DB8:0:0:8:800:200C:417A
这种表示法中,每个X的前导0是可以省略的,但是每个字段中必须至少有一个数字。
二、0位压缩表示法
在某些情况下,一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:
FF01:0:0:0:0:0:0:1101 → FF01::1101 多播地址
0:0:0:0:0:0:0:1 → ::1 回环地址
0:0:0:0:0:0:0:0 → :: 未指定地址
三、内嵌IPv4地址表示法
为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d,前96bit采用冒分十六进制表示,而最后32bit地址则使用IPv4的点分十进制表示,例如::192.168.0.1与::FFFF:192.168.0.1就是两个典型的例子,在前96bit中,压缩0位的方法依旧适用

地址前缀文本表示法:
IPv6地址前缀文本表示类似于IPv4中的CDIR标记法,IPv6用前缀用下面的标记法来表示:
ipv6-address/prefix-length
ipv6-address:可以是上节中任何表示法所列出的 IPv6 地址
prefix-length:是一个十进制值,指定地址中有多少个最左边的连续位构成前缀。
例如:下面是60位的前缀"20010DB80000CD3"(16进制)的合法表示法
2001:0DB8:0000:CD30:0000:0000:0000:0000/60
2001:0DB8::CD30:0:0:0:0/60
2001:0DB8:0:CD30::/60
同时书写节点地址和该节点的地址前缀时(例如,节点的子网前缀),两者可以组合书写:
节点地址 2001:0DB8:0:CD30:123:4567:89AB:CDEF
及其子网号 2001:0DB8:0:CD30::/60
可以简写为 2001:0DB8:0:CD30:123:4567:89AB:CDEF/60
RLOC16:
按照IEEE802.15.4的规范,加入Thread网络的每个设备都分配了一个16位短地址。在 Thread 中,这称为RLOC16。 对于路由器,这个地址使用地址字段中的高位分配,低位设置为 0,表示路由器地址。 子节点直接使用父节点的高位并分配合适的低位组成16位的短地址。 这允许Thread 网络中的任何其它设备,只需使用其地址字段的高位就能理解子节点的路由位置。
Thread地址(IPv6 and RLOC16)_第1张图片
生成ROCL16:
所有设备都获得一个 Router ID 和一个 Child ID。每个 Router 维护一个包含其所有子节点的表,两个 ID 的组合唯一地标识拓扑中的设备。
Thread地址(IPv6 and RLOC16)_第2张图片
RLOC16 是 IID(Interface Identifier)的一部分,IID 对应的是 IPv6 地址的后 64 位。一些 IID 可用于标识某些类型的 Thread 接口。例如,RLOC 的 IID 始终为 0000:00ff:fe00:RLOC16 的形式。
Thread地址(IPv6 and RLOC16)_第3张图片
RLOC 由 Mesh-Local Prefix 和 IID 组成。例如,如果 Mesh-Local Prefix 是 fde5:8dba:82e1:1::/64,RLOC16 = 0x401,那么该节点的 RLOC 就是:
Thread地址(IPv6 and RLOC16)_第4张图片

参考资料:
https://datatracker.ietf.org/doc/html/rfc4291
https://openthread.google.cn/guides/thread-primer/ipv6-addressing

CSDN博客仅作为本人工作学习之余的笔记使用,无任何商业目的,如果侵犯了你的隐私或权益,请随时联系作者,本人将及时删除相关内容

你可能感兴趣的:(matter,物联网,zigbee)