讓我們看看 Thread 如何識別網路中的每部裝置,以及用於彼此通訊的地址類型。
範圍
在 Thread 網路中,有三個單點範圍可用於單向定址:
- Link-Local — 可透過單一無線電傳輸方式存取的所有介面
- Mesh-Local:可在同一個 Thread 網路中存取所有介面
- 全域 - 可從 Thread 網路外存取所有介面
前兩個範圍會對應至由 Thread 網路指定的前置字串。Link-Local 的前置字串是 fe80::/16
,而 Mesh-Local 的前置字串則是 fd00::/8
。
Unicast
有多個 IPv6 單播位址可識別單一執行緒裝置。並會根據範圍與用途提供不同的函式。
在詳細說明每種類型之前,我們來進一步瞭解常見的路徑,稱為轉送定位器 (RLOC)。RLOC 會根據其在網路拓撲中的位置,識別一個執行緒介面。
轉送定位器的產生方式
所有裝置都會獲派路由器 ID 和子 ID。每個路由器都會維護其所有子項的表格,其組合可明確識別拓撲中的裝置。例如,假設在以下拓撲中醒目顯示的節點,其中路由器 (五邊形) 中的編號是路由器 ID,而最終裝置 (圓形) 中的數字是子項 ID:
每個子項的路由器 ID 都會對應至其父項 (路由器)。由於路由器不是子項,因此路由器的子項 ID 一律為 0。這些執行緒在 Thread 網路中的每部裝置都是唯一的,用於建立 RLOC16,代表 RLOC 的最後 16 位元。
舉例來說,以下是左上方節點 (Router ID = 1,Child ID = 1) 的 RLOC16 計算方式:
RLOC16 是介面 ID (IID) 的一部分,該介面對應至 IPv6 位址的最後 64 位元。部分 IID 可用來識別某些類型的執行緒介面。例如,RLOC 的 IID 一律為以下格式:
0000:00ff:fe00:RLOC16
IID 搭配網格本機前置字串,因此 RLOC 會產生結果。例如,使用 fde5:8dba:82e1:1::/64
的網格本機前置字串,RLOC16 = 0x401
的節點的 RLOC 為:
相同的邏輯可用於決定上述範例拓撲中所有醒目顯示節點的 RLOC:
不過,由於 RLOC 是以拓撲中的節點位置為準,因此節點的 RLOC 可能會隨著拓撲改變而改變。
例如,節點 0x400
可能會從 Thread 網路中移除。節點 0x401
和 0x402
會為不同的路由器建立新連結,因此每個節點都會指派一個新的 RLOC16 和 RLOC:
單播地址類型
RLOC 只是 Thread 裝置可擁有的 IPv6 單聲道位址之一。另一種類別位址稱為「端點識別碼」(EID),可用於識別執行緒網路分區內專屬的 Thread 介面。EID 與 Thread 網路拓撲無關。
常見的 icast 類型如下。
連結本機位址 (LLA) |
|
---|---|
這個 EID 可識別可由單一無線電傳輸項目觸及的 Thread 介面。 | |
示例 | fe80::54db:881c:3845:57f4 |
ID | 基在 802.15.4 加強地址 |
範圍 | 連結當地 |
詳細資料 |
|
網格-本機 EID (ML-EID) |
|
---|---|
EID 用於識別 Thread 介面的 EID,與網路拓撲無關。用於到達同一個執行緒分區中的執行緒介面。又稱為「專屬當地地址」(ULA)。 | |
示例 | fde5:8dba:82e1:1:416:993c:8399:35ab |
ID | 隨機決定,在稽核完成後選擇 |
範圍 | 網格-本地 |
詳細資料 |
|
轉送定位器 (RLOC) |
|
---|---|
根據其在網路拓撲中的位置,識別一個執行緒介面。 | |
示例 | fde5:8dba:82e1:1::ff:fe00:1001 |
ID | 0000:00ff:fe00:RLOC16 |
範圍 | 網格-本地 |
詳細資料 |
|
Anycast Locator (ALOC) |
|
---|---|
在不明目的地的 RLOC 不明的情況下,透過 RLOC 查詢識別 Thread 介面。 | |
示例 | fde5:8dba:82e1:1::ff:fe00:fc01 |
ID | 0000:00ff:fe00:fcXX |
範圍 | 網格-本地 |
詳細資料 |
|
全球單播位址 (GUA) |
|
---|---|
這個 EID 可用於識別全域範圍中的 Thread 介面,而非 Thread 網路。 | |
示例 | 2000::54db:881c:3845:57f4 |
ID |
|
範圍 | 全域 |
詳細資料 |
|
多播
使用多播功能,可將資訊一次傳送到多個裝置上。在 Thread 網路中,特定位址會預留給多部裝置,供不同裝置群組使用 (視範圍而定)。
IPv6 位址 | 範圍 | 運送地址: |
---|---|---|
ff02::1 |
連結當地 | 所有 FTD 和 MED |
ff02::2 |
連結當地 | 所有 FTD |
ff03::1 |
網格-本地 | 所有 FTD 和 MED |
ff03::2 |
網格-本地 | 所有 FTD |
您可能會注意到,上述多播資料表中的休眠裝置 (SED) 並不包含收件者。相反地,Thread 會定義所有執行緒節點 (包括 SED) 使用的 link-local 和 Realm-local 範圍單向前置字串 IPv6 多播位址。這些多播位址會因 Thread 網路而異,因為此版本是以 Uniicast 的 Mesh-Local 前置字串建構而成 (如要進一步瞭解 iuncast 前置字串式 IPv6 多播位址,請參閱 RFC 3306)。
執行緒裝置也支援任意範圍以外的範圍。
Anycast
如果不知道目的地的 RLOC,則會使用 Anycast 將流量轉送至 Thread 介面。Anycast Locator (ALOC) 可識別執行緒分區中多個介面的位置。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 |
Neighbor Discovery 代理程式 |
0xfc38 - 0xfc3f 0xfc4f – 0xfcff |
預留 |
複習內容
涵蓋內容:
- 執行緒網路由三個範圍組成:連結本機、網格-本機和全域
- Thread 裝置有多個單點 IPv6 位址
- RLOC 代表裝置在 Thread 網路中的位置
- 分區內的 Thread 裝置獨有的 ML-EID,且應由應用程式使用
- Thread 使用多播將資料轉送到節點群組和路由器群組
- 目的地的 RLOC 不明時,執行緒使用 Anycast
如要進一步瞭解 Thread 的 IPv6 位址,請參閱 Thread 規格第 5.2 和 5.3 節。
測驗您的理解程度
ff03::2
多播位址。這對裝置有什麼看法?ff03::2
多播位址。這些元件可在網格-本機範圍內執行。