接著,我們來看看 Thread 如何辨識網路中的每部裝置,以及用來彼此通訊的地址類型。
狙擊鏡

在 Thread 網路中,共有三種用途可用於進行廣播作業:
- Link-Local — 可透過單一無線電傳輸存取所有介面
- 網狀本機 — 在同一個執行緒中可連線至所有介面
- 全球:可透過執行緒以外的網路存取所有介面
前兩個範圍會對應到 Thread 網路指定的前置字串。Link-Local 的前置字串是 fe80::/16
,而 Mesh-Local 的前置字串則為 fd00::/8
。
Unicast
有多部 IPv6 聯播位址可用於識別單一 Thread 裝置。 兩者的功能和用途不盡相同。
在進一步瞭解每種類型前,讓我們先瞭解常見類別,也就是路由定位器 (RLOC)。RLOC 根據執行緒在網路拓撲中的位置,識別 Thread 介面。
轉送定位器的產生方式
系統會為所有裝置指派路由器 ID 和子 ID。每個路由器都有一份所有子項的表格,這些資料表的組合可在拓撲中識別裝置。 舉例來說,假設下列拓撲中有醒目顯示的節點,其中路由器 (pentagon) 中的數字是路由器 ID,結束裝置 (圓形) 中的數字則是子項 ID:

每個子項的路由器 ID 會對應到其父項 (路由器)。由於路由器並非下層,因此路由器的子項 ID 一律為 0。這些值在 Thread 網路中,每部裝置的值都不得重複,且會用來建立 RLOC16,其代表 RLOC 的末 16 位元。
例如,以下是左上方節點 (路由器 ID = 1 和子項 ID = 1) 的 RLOC16 計算方式:

RLOC16 是介面 ID (IID) 的一部分,可對應到 IPv6 位址的末 64 位元。有些 IID 可用於識別某些類型的 Thread 介面。舉例來說,RLOC 的 IID 一律使用以下格式:
0000:00ff:fe00:RLOC16
IID 會與網狀本機前置字元結合,因此會產生 RLOC。例如,使用 fde5:8dba:82e1:1::/64
的 Me-Local 前置字串,RLOC16 = 0x401
的節點的 RLOC 則是:

上述邏輯可用來確定上方範例拓撲中所有醒目顯示節點的 RLOC:

但是,因為 RLOC 是以節點在拓撲中的位置為依據,因此節點的 RLOC 會隨著拓撲改變而改變。
舉例來說,系統可能會從執行緒網路中移除節點 0x400
。節點 0x401
和 0x402
會建立連至不同路由器的新連結,因此每個連結都會指派新的 RLOC16 和 RLOC:

Unicast 位址類型
RLOC 只是 Thread 裝置支援的許多 IPv6 單一傳送位址之一。另一個地址類型稱為端點 ID (EID),識別 Thread 網路分區中專屬的 Thread 介面。EID 不取決於執行緒網路拓撲。
常見的廣播類型如下。
連結-本機位址 (LLA) |
|
---|---|
一種 EID,可用來識別單一無線電傳輸功能連上的執行緒介面。 | |
範例 | fe80::54db:881c:3845:57f4 |
IID | 根據 802.15.4 Extended Address |
範圍 | 本地連結 |
詳細資料 |
|
網狀本機 EID (ML-EID) |
|
---|---|
可識別執行緒介面的 EID,與網路拓撲無關。用於存取同一個執行緒分區中的執行緒介面。又稱為不重複地址 (ULA)。 | |
範例 | fde5:8dba:82e1:1:416:993c:8399:35ab |
IID | 佣金完成後,隨機選擇 |
範圍 | 網狀本機 |
詳細資料 |
|
路徑定位器 (RLOC) |
|
---|---|
識別 Thread 介面 (根據其網路拓撲中的位置)。 | |
範例 | fde5:8dba:82e1:1::ff:fe00:1001 |
IID | 0000:00ff:fe00:RLOC16 |
範圍 | 網狀本機 |
詳細資料 |
|
Anycast Locator (ALOC) |
|
---|---|
識別目的地中的 RLOC,藉此透過 RLOC 查詢識別執行緒介面。 | |
範例 | fde5:8dba:82e1:1::ff:fe00:fc01 |
IID | 0000:00ff:fe00:fcXX |
範圍 | 網狀本機 |
詳細資料 |
|
全球廣播地址 (GUA) |
|
---|---|
這個 ID 可用於識別全域範圍中的執行緒介面,而非執行緒本身。 | |
範例 | 2000::54db:881c:3845:57f4 |
IID |
|
範圍 | 全球 |
詳細資料 |
|
多播
多播功能可一次將資訊傳送到多部裝置。在 Thread 網路中,系統會根據範圍,將特定位址保留給使用不同裝置群組的多點傳送。
IPv6 位址 | 範圍 | 運送地址: |
---|---|---|
ff02::1 |
本地連結 | 所有 FTD 和 MED |
ff02::2 |
本地連結 | 所有 FTD |
ff03::1 |
網狀本機 | 所有 FTD 和 MED |
ff03::2 |
網狀本機 | 所有 FTD |
您可能會注意到上述的多點播放表格中並未包含「睡眠端裝置」(SED) 這個收件者。而 Thread 則定義用於所有執行緒節點 (包括 SED) 的 link-local 和 Real-local 範圍通用 IPv6 多端位址。這些多點傳送位址是以 Thread 網路為基礎,因為該位址是以單點 Mesh-Local 前置字串為基礎 (請參閱 RFC 3306 一節,進一步瞭解採用單播前置字串的 IPv6 多播)位址)。
請注意,除了討論串清單之外的任意範圍也適用於 Thread 裝置。
Anycast
如果不知道目的地的 RLOC,則會使用 Anycast 將流量轉送至 Thread 介面。Anycast Locator (ALOC) 會識別執行緒分區中多個介面的位置。ALOC 的最後 16 位元 (稱為 ALOC16) 是 0xfcXX
的格式,代表 ALOC 的類型。
舉例來說,0xfc01
和 0xfc0f
之間的 ALOC16 已預留給 DHCPv6 代理程式使用。如果特定的 DHCPv6 代理程式 RLOC 不明 (可能是網路拓撲已變更),則訊息會傳送至 DHCPv6 代理程式 ALOC 來取得 RLOC。
執行緒定義了以下 ALOC16 值:
ALOC16 | 類型 |
---|---|
0xfc00 |
領先者 |
0xfc01 - 0xfc0f |
DHCPv6 代理程式 |
0xfc10 - 0xfc2f |
服務 |
0xfc30 - 0xfc37 |
主席 |
0xfc40 - 0xfc4e |
鄰居探索代理程式 |
0xfc38 - 0xfc3f 0xfc4f - 0xfcff |
預留 |
比賽回顧
課程內容:
- 執行緒網路包含三個範圍:Link-Local、Mesh-Local 和 Global
- 執行緒裝置具有多個 播 IPv6 位址
- RLOC 代表裝置在討論串網路中的位置
- ML-EID 是分區中的 Thread 裝置專屬,僅供應用程式使用
- 執行緒使用多播功能將資料轉送至節點和路由器群組
- 目的地的 RLOC 不明時,執行緒會使用 Anycast
如要進一步瞭解 Thread IPv6 位址,請參閱 Thread 規格的第 5.2 和 5.3 節。
隨堂測驗
ff03::2
多點傳送位址。我們可以從這項資訊得知裝置嗎?ff03::2
多播地址。方法會在 Me-Local 範圍內執行。