IPv6 寻址

在这里插入图片描述

Thread 网络中有三种域用于单播寻址:

  • Link-Local — 所有通过单次射频传输可访问的接口
  • Mesh-Local — 所有在同一 Thread 网络中可访问的接口
  • Global — 所有从 Thread 网络外部可以访问的接口

前两个域与 Thread 网络指定的 Prefix(前缀)相对应。Link-Local 的 Prefix 为 fe80::/16,Mesh-Local 的 Prefix 为 fd00::/8

单播

单个 Thread 设备可以通过多种 IPv6 单播地址来进行标识。每种地址都有不同的功能(基于域和用例)。

在介绍每种类型之前,让我们先了解一个共同的概念,它叫作 RLOC(Routing Locator)。RLOC 根据 Thread 接口在网络拓扑中的位置来对其进行标识。

如何生成 RLOC

所有设备都获得一个 Router ID 和一个 Child ID。每个 Router 维护一个包含其所有子节点的表,两个 ID 的组合唯一地标识拓扑中的设备。例如,请参考以下拓扑中高亮的节点,其中 Router(五边形)中的数字是 Router ID,End Device(圆形)中的数字是 Child ID:

在这里插入图片描述

每个子节点的 Router ID 对应于它的父节点(Router)。因为 Router 不会是子节点,所以 Router 的 Child ID 始终为 0。这些值对于 Thread 网络中的每个设备都是唯一的,并用于创建 RLOC16(代表 RLOC 的后 16 位)。

例如,以下是左上节点(Router ID = 1,Child ID = 1)的 RLOC16 的计算方法:

在这里插入图片描述

RLOC16 是 IID(Interface Identifier)的一部分,IID 对应的是 IPv6 地址的后 64 位。一些 IID 可用于标识某些类型的 Thread 接口。例如,RLOC 的 IID 始终为 0000:00ff:fe00:RLOC16 的形式。

RLOC 由 Mesh-Local Prefix 和 IID 组成。例如,如果 Mesh-Local Prefix 是 fde5:8dba:82e1:1::/64,RLOC16 = 0x401,那么该节点的 RLOC 就是:
在这里插入图片描述

可以使用相同的逻辑来确定以上示例拓扑中所有高亮的节点的 RLOC:

在这里插入图片描述

但是,因为 RLOC 是基于节点在拓扑中的位置的,所以节点的 RLOC 会随着拓扑的变化而改变。

例如,如果 Thread 网络中的 0x400 节点离开了网络,那么它的子节点 0x4010x402 会与其它的 Router 建立新连接,从而获得新的 RLOC16 和 RLOC:

在这里插入图片描述

单播地址类型

RLOC 只是 Thread 设备可以获得的多种 IPv6 单播地址之一。另一类用于在 Thread 网络分区内标识唯一的 Thread 接口的地址称为 EID(Endpoint Identifier)。EID 与 Thread 网络拓扑无关。

常见的单播类型如下。

Link-Local Address (LLA)
一种用于标识单次射频传输可访问的 Thread 接口的 EID。
示例fe80::54db:881c:3845:57f4
IID基于 802.15.4 Extended Address
Link-Local
详情用于发现邻居、配置链路和交换路由信息非可路由地址总是带 fe80::/16 Prefix
Mesh-Local EID (ML-EID)
一种用于标识 Thread 接口的 EID,其与网络拓扑无关。用于访问同一 Thread 分区内的 Thread 接口。也称为 ULA(Unique Local Address)。
示例fde5:8dba:82e1:1:416:993c:8399:35ab
IID在 commissioning 完成后随机生成
Mesh-Local
详情不会随拓扑变化而变化应由应用程序使用总是带 fd00::/8 Prefix
Routing Locator (RLOC)
根据 Thread 接口在网络拓扑中的位置来对其进行标识。
示例fde5:8dba:82e1:1::ff:fe00:1001
IID0000:00ff:fe00:RLOC16
Mesh-Local
详情在设备连接到网络后生成用于在 Thread 网络中传递 IPv6 数据报随拓扑变化而变化通常不会由应用程序使用
Anycast Locator (ALOC)
用于标识 Thread 网络分区中一个或多个 Thread 接口的位置。如果始发者不知道目的地的 RLOC,则使用 ALOC 进行查找。
示例fde5:8dba:82e1:1::ff:fe00:fc01
IID0000:00ff:fe00:fcXX
Mesh-Local
详情fcXX = ALOC 目的地址,用于查询对应的 RLOC通常不会由应用程序使用
Global Unicast Address (GUA)
一个EID,用于标识除 Thread 网络外的全局范围内的 Thread 接口。
示例2000::54db:881c:3845:57f4
IIDSLAAC — 由设备自身随机分配DHCP — 由 DHCPv6 服务器分配Manual — 由应用层分配
Global
详情一个公开的 IPv6 地址总是带 2000::/3 Prefix

多播

多播用于一次将信息传达给多个设备。Thread 网络中保留了特定的地址,以提供给不同分组的设备在多播时使用。

IPv6 地址传递给
ff02::1Link-Local所有 FTD 和 MED
ff02::2Link-Local所有 FTD
ff03::1Mesh-Local所有 FTD 和 MED
ff03::2Mesh-Local所有 FTD

Key Point: FTD 和 MTD 之间的主要区别在于 FTD 订阅了 ff03::2 多播地址。而 MTD 没有订阅。

你可能会注意到,上面的多播表中没有将 SED 作为接收者包括在内。Thread 为所有 Thread 节点(包括 SED)定义了(link-local 和 realm-local 域)基于单播 prefix 的 IPv6 多播地址。这些多播地址基于单播 Mesh-Local prefix 构成,因 Thread 网络而异。(有关基于单播 prefix 的 IPv6 多播地址的详情,请参阅 RFC 3306)。

Thread 设备还支持除表中所列举域之外的任意域。

任播

当目的地的 RLOC 未知时,可以使用任播将流量路由到 Thread 接口。ALOC(Anycast Locator)标识 Thread 分区内多个接口的位置。ALOC 的后 16 位,称为 ALOC16,其格式为 0xfcXX,表示 ALOC 的类型。

例如,0xfc010xfc0f 之间的 ALOC16 保留给了 DHCPv6 Agent。如果特定的 DHCPv6 Agent RLOC 是未知的(可能是因为网络拓扑已更改),则可以将消息发送到 DHCPv6 Agent ALOC 以获取 RLOC。

Thread 定义了以下 ALOC16 值:

ALOC16类型
0xfc00Leader
0xfc010xfc0fDHCPv6 Agent
0xfc100xfc2fService
0xfc300xfc37Commissioner
0xfc400xfc4eNeighbor Discovery Agent
7`Commissioner
0xfc400xfc4eNeighbor Discovery Agent
0xfc380xfc3f 0xfc4f0xfcffReserved
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值