From a67fa9b5e7bce35f26fdac11822d70efc7a6a260 Mon Sep 17 00:00:00 2001 From: Yaoxing Shan Date: Thu, 16 Jul 2020 23:44:02 +0800 Subject: [PATCH] [docs] add Chinese translation for Thread Primer (#5106) --- doc/site/zh-cn/guides/thread-primer/index.md | 25 ++ .../guides/thread-primer/ipv6-addressing.md | 231 ++++++++++++++++ .../guides/thread-primer/network-discovery.md | 254 ++++++++++++++++++ .../thread-primer/node-roles-and-types.md | 125 +++++++++ .../guides/thread-primer/router-selection.md | 145 ++++++++++ 5 files changed, 780 insertions(+) create mode 100644 doc/site/zh-cn/guides/thread-primer/index.md create mode 100644 doc/site/zh-cn/guides/thread-primer/ipv6-addressing.md create mode 100644 doc/site/zh-cn/guides/thread-primer/network-discovery.md create mode 100644 doc/site/zh-cn/guides/thread-primer/node-roles-and-types.md create mode 100644 doc/site/zh-cn/guides/thread-primer/router-selection.md diff --git a/doc/site/zh-cn/guides/thread-primer/index.md b/doc/site/zh-cn/guides/thread-primer/index.md new file mode 100644 index 000000000..6b861f915 --- /dev/null +++ b/doc/site/zh-cn/guides/thread-primer/index.md @@ -0,0 +1,25 @@ +# 什么是 Thread? + +
+Thread +
+ +Thread® 是一个为低功耗物联网(IEEE 802.15.4-2006 WPAN)设备设计的基于 IPv6 的网络协议。Thread 是一个新的网状网络协议,它并不依赖其它的 802.15 网状网络协议(如 ZigBee、Z-Wave 和 Bluetooth LE)。 + +Thread 的主要特性包括: + +* 易于部署和维护 — 安装、启动和操作相对简单 +* 通信安全 — Thread 网络中的设备都必须通过身份验证,并且所有的通信都经过了加密 +* 稳定可靠 — 具有自愈能力的网状网络,无单点故障,并且采用扩频技术以提高抗干扰能力 +* 低功耗 — Thread 低功耗设备可以进入休眠并使用电池供电,通常使用一块电池便能工作数年 +* 规模可扩展 — Thread 网络的规模可以扩展达数百个设备 + +如果你不熟悉 Thread,那么了解基本的 Thread 知识对于你在应用中使用 OpenThread 是至关重要的。本入门教程的目的是解释 Thread 的基本概念和工作原理,并为你提供了 OpenThread 开发的起点。 + +本教程假定读者已具备如下的基本知识: + +* IEEE 802.15.4 +* 网络及路由概念 +* IPv6 + +本入门教程基于 Thread Specification V1.1.1。Thread Specification 可以在 [threadgroup.org](http://threadgroup.org/ThreadSpec) 中获取。 diff --git a/doc/site/zh-cn/guides/thread-primer/ipv6-addressing.md b/doc/site/zh-cn/guides/thread-primer/ipv6-addressing.md new file mode 100644 index 000000000..56321b4b3 --- /dev/null +++ b/doc/site/zh-cn/guides/thread-primer/ipv6-addressing.md @@ -0,0 +1,231 @@ +# IPv6 寻址 + +让我们来看一下 Thread 如何识别网络中的每个设备,以及设备间用何种类型的地址进行相互通信。 + +Key Term: 在本入门教程中,术语“接口(interface)”用于标识网络内 Thread 设备的端点。通常,单个 Thread 设备具有单个 Thread 接口。 + +## 域 + +
+OT Scopes +
+ +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: + +
+OT RLOC Topology +
+ +每个子节点的 Router ID 对应于它的父节点(Router)。因为 Router 不会是子节点,所以 Router 的 Child ID 始终为 0。这些值对于 Thread 网络中的每个设备都是唯一的,并用于创建 RLOC16(代表 RLOC 的后 16 位)。 + +例如,以下是左上节点(Router ID = 1,Child ID = 1)的 RLOC16 的计算方法: + +
+OT 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 就是: + +
+OT RLOC +
+ +可以使用相同的逻辑来确定以上示例拓扑中所有高亮的节点的 RLOC: + +
+OT Topology w/ Address +
+ +但是,因为 RLOC 是基于节点在拓扑中的位置的,所以节点的 RLOC 会随着拓扑的变化而改变。 + +例如,如果 Thread 网络中的 `0x400` 节点离开了网络,那么它的子节点 `0x401` 和 `0x402` 会与其它的 Router 建立新连接,从而获得新的 RLOC16 和 RLOC: + +
+OT Topology after Change +
+ +## 单播地址类型 + +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
IID
  • SLAAC — 由设备自身随机分配
  • DHCP — 由 DHCPv6 服务器分配
  • Manual — 由应用层分配
Global
详情
  • 一个公开的 IPv6 地址
  • 总是带 2000::/3 Prefix
+ +## 多播 + +多播用于一次将信息传达给多个设备。Thread 网络中保留了特定的地址,以提供给不同分组的设备在多播时使用。 + +| IPv6 地址 | 域 | 传递给 | +| --------- | ---------- | --------------- | +| `ff02::1` | Link-Local | 所有 FTD 和 MED | +| `ff02::2` | Link-Local | 所有 FTD | +| `ff03::1` | Mesh-Local | 所有 FTD 和 MED | +| `ff03::2` | Mesh-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](https://tools.ietf.org/html/rfc3306))。 + +Thread 设备还支持除表中所列举域之外的任意域。 + +## 任播 + +当目的地的 RLOC 未知时,可以使用任播将流量路由到 Thread 接口。ALOC(Anycast Locator)标识 Thread 分区内多个接口的位置。ALOC 的后 16 位,称为 ALOC16,其格式为 0xfcXX,表示 ALOC 的类型。 + +例如,`0xfc01` 和 `0xfc0f` 之间的 ALOC16 保留给了 DHCPv6 Agent。如果特定的 DHCPv6 Agent RLOC 是未知的(可能是因为网络拓扑已更改),则可以将消息发送到 DHCPv6 Agent ALOC 以获取 RLOC。 + +Thread 定义了以下 ALOC16 值: + +| ALOC16 | 类型 | +| ------------------------------------------ | ------------------------ | +| `0xfc00` | Leader | +| `0xfc01` – `0xfc0f` | DHCPv6 Agent | +| `0xfc10` – `0xfc2f` | Service | +| `0xfc30` – `0xfc37` | Commissioner | +| `0xfc40` – `0xfc4e` | Neighbor Discovery Agent | +| `0xfc38` – `0xfc3f`
`0xfc4f` – `0xfcff` | Reserved | + +## 回顾 + +你应该学到了: + +* Thread 网络包含三个域:Link-Local、Mesh-Local 和 Global +* Thread 设备具有多种单播 IPv6 地址 +* RLOC 表示设备在 Thread 网络中的位置 +* ML-EID 对于分区内的 Thread 设备是唯一的,并且应由应用程序使用 +* Thread 使用多播将数据转发到节点组和 Router 组 +* 当目的地的 RLOC 未知时,Thread 可以使用任播 + +要了解有关 Thread 的 IPv6 寻址的更多信息,请参阅 [Thread Specification](http://threadgroup.org/ThreadSpec) 的 5.2 和 5.3 节。 diff --git a/doc/site/zh-cn/guides/thread-primer/network-discovery.md b/doc/site/zh-cn/guides/thread-primer/network-discovery.md new file mode 100644 index 000000000..479dc9dec --- /dev/null +++ b/doc/site/zh-cn/guides/thread-primer/network-discovery.md @@ -0,0 +1,254 @@ +# 网络发现与形成 + +## Thread 网络 + +Thread 网络由三个唯一的标识符标识: + +* 2 字节的 PAN ID(Personal Area Network ID,个域网标识符) +* 8 字节的 XPAN ID(Extended Personal Area Network ID,扩展个域网标识符) +* 方便人类阅读的 Network Name(网络名称) + +例如,一个 Thread 网络可能具有以下标识符: + +| 标识符 | 值 | +| ------------ | -------------------- | +| PAN ID | `0xBEEF` | +| XPAN ID | `0xBEEF1111CAFE2222` | +| Network Name | `yourThreadCafe` | + +
+OT Active Scan +
+ +在创建新的 Thread 网络或搜索现有的网络时,Thread 设备会主动扫描射频范围内的 802.15.4 网络: + +1. 设备在特定 Channel 上广播 802.15.4 信标请求(Beacon Request)。 +2. 范围内的所有 Router 或 REED 都会广播包含其 Thread 网络 PAN ID、XPAN ID 和 Network Name 的信标(Beacon),以作为回应。 +3. 设备为每个 Channel 重复前两个步骤。 + +Thread 设备发现范围内的所有网络后,可以选择连接到现有的网络,也可以在未发现任何网络的情况下创建新的网络。 + +

Mesh Link Establishment

+ +Thread 使用 MLE(Mesh Link Establishment)协议来配置链路并将网络的相关信息传播到 Thread 设备。 + +在链路配置中,MLE 用于: + +* 发现相邻设备的链路 +* 确认到相邻设备的链路质量 +* 建立到相邻设备的链路 +* 与对端协商链路参数(设备类型、帧计数器、超时) + +MLE 将以下类型的信息传播给希望建立链路的设备: + +* Leader data(Leader RLOC, Partition ID(分区标识符), Partition weight(分区权重)) +* Network data(on-mesh prefixes, address autoconfiguration(地址自动配置), more-specific routes(具体路由)) +* Route propagation(路由传播) + +Thread 中路由传播的工作原理类似于 RIP(Routing Information Protocol,路由信息协议),RIP 是一种距离矢量路由协议。 + +Note: 仅当 Thread 设备通过 Thread Commissioning 获得 Thread 网络凭据后,才会继续进行 MLE 过程。Commissioning 和安全性将在本教程的后续部分中深入介绍。目前,假定设备已通过 Commissioning。 + +## 创建新网络 + +如果设备选择创建新网络,它将选择最不繁忙的 Channel 和其他网络未使用的 PAN ID,然后成为 Router 并选举自己为 Leader。该设备将 MLE Advertisement 消息发送到其他 802.15.4 设备,以通知其链路状态,并响应其他执行主动扫描的 Thread 设备所发出的信标请求。 + +## 加入现有网络 + +如果设备选择加入到现有的网络,则会通过 Thread Commissioning 将其 Channel、PAN ID、XPAN ID 和 Network Name 配置为与目标网络相同,然后进行 MLE Attach 过程以作为子节点(End Device)进行加入。此过程用于“父子链路(Child-Parent link)”。 + +Key Point: 每个设备(无论是否具有充当 Router 的能力),最初都作为子设备(End Device)连接到 Thread 网络。 + +1. 子节点向目标网络中的所有相邻的 Router 和 REED 发送多播 [Parent Request](#1-Parent-Request)。 +2. 所有相邻的 Router 和 REED(如果 Parent Request Scan Mask(父节点请求扫描掩码)包括了 REED)都应发送 [Parent Response](#2-Parent-Response) 以将其自身的信息告诉给子节点。 +3. 子节点选择一个父节点,并向其发送 [Child ID Request](#3-Child-ID-Request)。 +4. 父节点发送 [Child ID Response](#4-Child-ID-Response) 以确认链路建立。 + +### 1. Parent Request + +Parent Request 是来自待连接设备的多播请求,用于发现目标网络中的相邻的 Router 和 REED。 + +
+OT MLE Attach Parent Request +
+ + + + + + + + + + + + + + + + + + + +
Parent Request Message Contents
Mode描述待连接设备
Challenge测试 Parent Response 的时效性,以防止重放攻击
Scan Mask将请求限制为仅 Router 或 Router 和 REED
+ +### 2. Parent Response + +Parent Response 是对 Parent Request 的单播响应,它向待连接设备提供有关 Router 或 REED 的信息。 + +
+OT MLE Attach Parent Response +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parent Response Message Contents
VersionThread 协议版本
ResponseParent Request Challenge 的副本
Link Frame + CounterRouter/REED 上的 802.15.4 帧计数器
MLE Frame + CounterRouter/REED 上的 MLE 帧计数器
Source + AddressRouter/REED 的 RLOC16
Link + MarginRouter/REED 的接收信号质量
Connectivity描述 Router/REED 的连通性
Leader + Data有关 Router/REED 的 Leader 的信息
Challenge测试 Child ID Request 的时效性,以防止重放攻击
+ +### 3. Child ID Request + +Child ID Request 是来自待连接设备(子)的单播请求,该单播请求被发送到 Router(父)或 REED(父),目的是建立父子链路。如果将请求发送到 REED,则 REED 会在接受请求之前将自身升级为 Router。 + +
+OT MLE Attach Child ID Request +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Child ID Request Message Contents
VersionThread 协议版本
ResponseParent Response Challenge 的副本
Link Frame + CounterChild 上的 802.15.4 帧计数器
MLE Frame + CounterChild 上的 MLE 帧计数器
Mode描述子节点
Timeout父节点移除子节点之前的闲置时间
Address + Registration (MEDs and SEDs only)注册 IPv6 地址
+ +### 4. Child ID Response + +Child ID Response 是父节点对 Child ID Request 的单播响应,该响应发送给对应的子节点以确认父子链路的建立。 + +
+OT MLE Attach Child ID Response +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Child ID Response Message Contents
Source + Address父节点的 RLOC16
Address16子节点的 RLOC16
Leader + Data父节点的 Leader 的相关信息(RLOC, Partition ID, Partition weight)
Network + DataThread 网络的相关信息(on-mesh prefixes, address autoconfiguration, more-specific routes)
Route + (REED only)路由传播
Timeout父节点移除子节点之前的闲置时间
Address + Registration (MEDs and SEDs only)确认已注册地址
+ +## 回顾 + +你应该学到了: + +* Thread 设备通过主动扫描发现现有网络 +* Thread 使用 MLE 来配置链路并分发有关网络设备的信息 +* MLE Advertisement 消息通知其他 Thread 设备有关设备的网络和链路状态 +* MLE Attach 过程建立了父子链路 diff --git a/doc/site/zh-cn/guides/thread-primer/node-roles-and-types.md b/doc/site/zh-cn/guides/thread-primer/node-roles-and-types.md new file mode 100644 index 000000000..e1f07ae17 --- /dev/null +++ b/doc/site/zh-cn/guides/thread-primer/node-roles-and-types.md @@ -0,0 +1,125 @@ +# 节点角色和类型 + +## 转发角色 + +
+OT Node Roles +
+ +在 Thread 网络中,节点分成两种转发角色:Router 和 End Device。 + +### Router + +Router 节点的行为如下: + +* 为网络设备转发数据包 +* 为尝试加入网络的设备提供安全的 commissioning 服务 +* 始终打开它的收发器 + +### End Device + +End Device 节点的行为如下: + +* 主要与单个 Router 进行通信 +* 不会为其他网络设备转发数据包 +* 可以关闭它的收发器来降低功耗 + +Key Point: Router 和 End Device 之间的关系称为父子关系。End Device 正确地依附到一个 Router 上,其中 Router 始终作为父节点,End Device 则始终是子节点。 + +## 设备类型 + +此外,节点有许多种类型。 + +
+OT Device Taxonomy +
+ +### Full Thread Device + +一个 FTD(Full Thread Device)总是打开它的射频收发器,它订阅所有 Router 的多播地址,并维护 IPv6 地址映射。FTD 有三种类型: + +* Router +* REED(Router Eligible End Device)— 可以升级为 Router +* FED(Full End Device)— 无法升级为 Router + +FTD 可以作为 Router(父)或 End Device(子)。 + +### Minimal Thread Device + +MTD(Minimal Thread Device)不会订阅 all-routers 多播地址,并且它会将它的所有消息发送给它的父节点。MTD 有两种类型: + +* MED(Minimal End Device)— 始终打开自身的收发器,无需从父节点中轮询消息 +* SED(Sleepy End Device)— 通常会关闭自身的收发器(睡眠),偶然会打开收发器(唤醒)以从父节点中轮询消息 + +MTD 只能作为 End Device(子)。 + +### 升级和降级 + +当待加入设备仅能与某个 REED 通信时, 则该 REED 可以升级成为 Router: + +
+OT End Device to Router +
+ +相反,当一个 Router 没有子节点时,它可以降级成 End Device: + +
+OT Router to End Device +
+ +## 其他角色和类型 + +### Thread Leader + +
+OT Leader and Border Router +
+ +Thread Leader 是一个 Router,它负责管理 Thread 网络中的 Router。Thread Leader 是动态自选的(提高容错率),它负责汇总和分发全网络的配置信息。 + +Note: 每个 Thread 网络[分区](#分区)中总是只有一个 Leader。 + +### Border Router + +Border Router 是一种可以在 Thread 网络和其他网络(如 Wi-Fi)之间转发信息的设备。它还为外部连接配置 Thread 网络。 + +任何设备都可以充当 Border Router。 + +Note: 一个 Thread 网络中可以有多个 Border Router。 + +## 分区 + +
+OT Partitions +
+ +一个 Thread 网络可能由多个分区组成。当一组 Thread 设备不能再与另一组 Thread 设备通信时,会发生这种情况。每个分区在逻辑上均作为独立的 Thread 网络来运行,它们具有各自的 Leader、Router ID 分配和网络数据,同时分区前相同的安全凭证都将被保留下来。 + +当分区之间可以连通时,它们会自动合并。 + +Key Point: 安全凭证(security credentials)定义了 Thread 网络。物理无线电的连通性定义了该 Thread 网络中的分区。 + +请注意,在本入门教程中一般将 Thread 网络假定成单个分区。在必要时,将使用“分区”一词来阐明关键概念和示例。本教程稍后将详细介绍分区。 + +## 设备限制 + +单个 Thread 网络所支持的设备类型数量是有限制的。 + +| 角色 | 限制 | +| ---------- | ------------------ | +| Leader | 1 | +| Router | 32 | +| End Device | 511(每个 Router) | + +Thread 会尝试将 Router 的数量保持在 16 ~ 23 之间。如果一个 REED 作为 End Device 加入,并且网络中的 Router 数量低于 16,那么它将自动升级为 Router。 + +## 回顾 + +你应该学到了: + +* Thread 设备可以是 Router(父)或 End Device(子) +* Thread 设备可以是 FTD(维护 IPv6 地址映射),也可以是 MTD(将所有消息发送给其父节点) +* REED 可以升级为 Router,Router 也可以降级为 REED +* 每个 Thread 网络分区都有一个 Leader 来管理 Router +* Border Router 用于连接 Thread 和其他网络 +* 一个 Thread 网络可能由多个分区组成 diff --git a/doc/site/zh-cn/guides/thread-primer/router-selection.md b/doc/site/zh-cn/guides/thread-primer/router-selection.md new file mode 100644 index 000000000..da60f0f23 --- /dev/null +++ b/doc/site/zh-cn/guides/thread-primer/router-selection.md @@ -0,0 +1,145 @@ +# Router 选择 + +## Connected Dominating Set + +
+OT Connected Dominating Set
Example of a Connected Dominating Set
+
+ +Router 必须形成一个 CDS(Connected Dominating Set,连接支配集),这意味着: + +1. 在任何两个 Router 之间都有一个 Router-only 的路径。 +2. Thread 网络中的任何一个 Router 都可以通过完全位于 Router 集中而到达其他任何 Router。 +3. Thread 网络中的每个 End Device 都直接连接到 Router。 + +Thread 使用分布式算法维护 CDS,从而确保最低程度的冗余。每个设备最初都作为 End Device(子)连接到网络。随着 Thread 网络状态的更改,算法会增添或移除 Router 以维护 CDS。 + +Thread 在下列情况下将会增添 Router: + +* 如果网络低于 Router 阈值(16) —— 为了增加覆盖范围 +* 增加路径多样性 +* 保持最低程度的冗余 +* 扩展连接并支持更多子节点 + +Thread 在下列情况下将会移除 Router: + +* 将路由状态减少到最多 32 个 Router 以下 +* 必要时允许在网络的其他部分使用新 Router + +## 升级成 Router + +子设备连接到 Thread 网络后,可以选择成为 Router。在开始 MLE Link Request 过程之前,子设备会向 Leader 发送 Address Solicit 消息,以请求一个 Router ID。如果 Leader 同意该请求,则它将响应一个 Router ID 给子设备,并且子设备会将自身升级为 Router。 + +然后,MLE Link Request 过程用于与相邻的 Router 建立双向 Router-Router 链路。 + +1. 新 Router 将发送一个多播 [Link Request](#1-Link-Request) 到相邻的 Router。 +2. Router 使用 [Link Accept and Request](#2-Link-Accept-and-Request) 消息进行响应。 +3. 新 Router 使用单播的 [Link Accept](#3-Link-Accept) 响应每个 Router,以建立 Router-Router 链路。 + +### 1. Link Request + +Link Request 是从 Router 到 Thread 网络中所有其他 Router 的请求。首次成为 Router 时,设备会发送一个多播 Link Request 到 `ff02::2`。稍后,在通过 MLE Advertisement 发现其他 Router 后,设备将发送单播的 Link Request。 + +
+OT MLE Link Request +
+ + + + + + + + + + + + + + + + + + + + + + + +
Link Request Message Contents
VersionThread 协议版本
Challenge测试 Link Response 的及时性,以防止重放攻击
Source + Address发送者的 RLOC16
Leader + DataRouter 的 Leader 的相关信息(RLOC, Partition ID, Partition weight)
+ +### 2. Link Accept and Request + +Link Accept and Request 是 Link Accept 和 Link Request 消息的组合。Thread 在 MLE Link Request 过程中使用此优化将消息的数量从四减少到三。 + +
+OT MLE Link Accept and Request +
+ +### 3. Link Accept + +Link Accept 是对来自相邻 Router 的 Link Request 的单播响应,该响应提供有关自身的信息并接受到相邻 Router 的链路。 + +
+OT MLE Link Accept +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Link Accept Message Contents
VersionThread 协议版本
Response测试 Link Response 的及时性,以防止重放攻击
Link Frame + Counter发送者上的 802.15.4 帧计数器
MLE Frame + Counter发送者上的 MLE 帧计数器
Source + Address发送者的 RLOC16
Leader + DataRouter 的 Leader 的相关信息(RLOC, Partition ID, Partition weight)
+ +## 降级成 REED + +当 Router 降级成 REED 时,其 Router-Router 链路断开,并且设备开始 MLE Attach 过程以建立父子链路。 + +有关 MLE Attach 过程的更多信息,请参阅 [加入现有网络](/guides/thread-primer/network-discovery#加入现有网络)。 + +## 单向接收链路 + +在某些情况下,建立单向接收链路是有必要的。 + +在 Router 重置后,相邻 Router 可能仍具有与重置的 Router 的有效接收链路。在这种情况下,重置的 Router 发送 Link Request 消息以重新建立 Router-Router 链路。 + +End Device 也可能希望与相邻的 Router(非父节点)建立接收链路,以提高多播可靠性。当我们进入多播路由时,我们将学习更多与此相关的内容。 + +## 回顾 + +你应该学到了: + +* Thread 网络中的 Router 必须形成 CDS +* Thread 设备将升级成 Router 或降级成 REED 以维护 CDS +* MLE Link Request 过程用于建立 Router-Router 链路