接著來看看 Thread 如何識別網路中的每個裝置,以及裝置之間通訊時使用的位址類型。
範圍
在 Thread 網路中,單點播送位址有三種範圍:
- 本機連結:單一無線電傳輸可連線的所有介面
- 網格區域網路:同一 Thread 網路內的所有介面都可連線
- 全域:可從 Thread 網路外部連線的所有介面
前兩個範圍對應至 Thread 網路指定的字首。連結本機的前置字串為 fe80::/16,網狀網路本機的前置字串為 fd00::/8。
單點傳播
有多個 IPv6 單點傳播位址可識別單一 Thread 裝置。並會依據範圍和用途提供不同功能。
在詳細說明各類型之前,我們先來瞭解一種常見的類型,也就是「路徑定位器」(RLOC)。RLOC 會根據 Thread 介面在網路拓撲中的位置識別該介面。
路由定位器產生方式
所有裝置都會獲派路由器 ID 和子項 ID。每個父項都會維護所有子項的表格,這些子項的組合可明確識別拓撲中的裝置。舉例來說,請看以下拓撲中醒目顯示的節點,其中網狀網路擴充器 (五邊形) 中的數字是路由器 ID,而終端裝置 (圓形) 中的數字是子項 ID:
每個子路由器 ID 都會對應至其父路由器 (網狀網路擴充器)。由於 Mesh Extender 不是子裝置,Mesh Extender 的子裝置 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 加上 Mesh 本機前置字串,就會產生 RLOC。舉例來說,如果使用 fde5:8dba:82e1:1::/64 的網狀網路本機前置字元,且節點的 RLOC16 為 0x401,則該節點的 RLOC 為:
同樣的邏輯可用於判斷上述範例拓撲中所有醒目顯示節點的 RLOC:
不過,由於 RLOC 是以拓撲中節點的位置為準,因此節點的 RLOC 可能會隨著拓撲變更而改變。
舉例來說,節點 0x400 可能會從 Thread 網路中移除。節點 0x401 和 0x402 會建立與不同 Mesh Extender 的新連結,因此系統會為每個節點指派新的 RLOC16 和 RLOC:
單點播送位址類型
RLOC 只是 Thread 裝置可擁有的眾多 IPv6 單點播送位址之一。 另一類位址稱為端點 ID (EID),可識別 Thread 網路分割區內的專屬 Thread 介面。EID 與 Thread 網路拓撲無關。
以下將詳細說明常見的單點播送類型。
連結本機位址 (LLA) |
|
|---|---|
| EID,用於識別可透過單一無線電傳輸連線的 Thread 介面。 | |
| 範例 | fe80::54db:881c:3845:57f4 |
| IID | 根據 802.15.4 擴充位址 |
| 範圍 | 連結至本機 |
| 詳細資料 |
|
網格本機 EID (ML-EID) |
|
|---|---|
| 用來識別 Thread 介面的 EID,與網路拓撲無關。用於在同一個 Thread 分區中存取 Thread 介面。又稱為專屬本機地址 (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 定位器 (ALOC) |
|
|---|---|
| 在不知道目的地的 RLOC 時,透過 RLOC 查閱識別 Thread 介面。 | |
| 範例 | fde5:8dba:82e1:1::ff:fe00:fc01 |
| IID | 0000:00ff:fe00:fcXX |
| 範圍 | 網格本機 |
| 詳細資料 |
|
全域單點傳播位址 (GUA) |
|
|---|---|
| EID 可在 Thread 網路以外的全球範圍內,識別 Thread 介面。 | |
| 範例 | 2000::54db:881c:3845:57f4 |
| IID |
|
| 範圍 | 全球 |
| 詳細資料 |
|
多點傳播
多點傳播可用於一次向多部裝置傳送資訊。在 Thread 網路中,系統會根據範圍,為不同裝置群組預留特定位址,以供多播使用。
| IPv6 位址 | 範圍 | 運送地址: |
|---|---|---|
ff02::1 |
連結至本機 | 所有 FTD 和 MED |
ff02::2 |
連結至本機 | 所有 FTD |
ff03::1 |
網格本機 | 所有 FTD 和 MED |
ff03::2 |
網格本機 | 所有 FTD |
您可能會發現,上述多播表格中未將休眠終端裝置 (SED) 列為收件者。Thread 會改為定義連結本機和領域本機範圍以單點傳播前置字元為基礎的 IPv6 多點傳播位址,用於所有 Thread 節點,包括 SED。這些多點傳播位址會因 Thread 網路而異,因為這是以單點傳播網狀區域網路前置字元為基礎建構而成 (如要進一步瞭解以單點傳播前置字元為基礎的 IPv6 多點傳播位址,請參閱 RFC 3306)。
Thread 裝置也支援超出已列範圍的任意範圍。
Anycast
如果不知道目的地的 RLOC,系統會使用任播將流量轉送至 Thread 介面。任播定位器 (ALOC) 可識別 Thread 分區內多個介面的位置。ALOC 的最後 16 位元稱為 ALOC16,格式為 0xfcXX,代表 ALOC 的類型。
舉例來說,0xfc01 和 0xfc0f 之間的 ALOC16 會保留給 DHCPv6 代理程式。如果特定 DHCPv6 代理程式 RLOC 不明 (可能是因為網路拓撲已變更),可以將訊息傳送至 DHCPv6 代理程式 ALOC,以取得 RLOC。
Thread 定義下列 ALOC16 值:
| ALOC16 | 類型 |
|---|---|
0xfc00 |
領先 |
0xfc01 - 0xfc0f |
DHCPv6 代理程式 |
0xfc10 - 0xfc2f |
服務 |
0xfc30 - 0xfc37 |
主席 |
0xfc40 - 0xfc4e |
鄰居探索代理 |
0xfc38 – 0xfc3f0xfc4f – 0xfcff |
已預留 |
重點回顧
學到的內容:
- Thread 網路包含三種範圍:連結本機、網狀本機和全域
- Thread 裝置有多個單點傳播 IPv6 位址
- RLOC 代表裝置在 Thread 網路中的位置
- ML-EID 是分割區內 Thread 裝置的專屬 ID,應用程式應使用這個 ID
- Thread 會使用多點傳播,將資料轉送至節點群組
- 如果目的地的 RLOC 不明,Thread 會使用任播
如要進一步瞭解 Thread 的 IPv6 位址,請參閱「Thread Specification」的 5.2 和 5.3 節。
隨堂測驗
ff03::2
多點傳播位址。這對裝置有什麼意義?ff03::2 多點傳播位址。他們會在 Mesh-Local 範圍內執行這項操作。