IPv6 位址

在 GitHub 上查看來源

接著來看看 Thread 如何識別網路中的每個裝置,以及裝置之間通訊時使用的位址類型。

範圍

OT 範圍

在 Thread 網路中,單點播送位址有三種範圍:

  • 本機連結:單一無線電傳輸可連線的所有介面
  • 網格區域網路:同一 Thread 網路內的所有介面都可連線
  • 全域:可從 Thread 網路外部連線的所有介面

前兩個範圍對應至 Thread 網路指定的字首。連結本機的前置字串為 fe80::/16,網狀網路本機的前置字串為 fd00::/8

單點傳播

有多個 IPv6 單點傳播位址可識別單一 Thread 裝置。並會依據範圍和用途提供不同功能。

在詳細說明各類型之前,我們先來瞭解一種常見的類型,也就是「路徑定位器」(RLOC)。RLOC 會根據 Thread 介面在網路拓撲中的位置識別該介面。

路由定位器產生方式

所有裝置都會獲派路由器 ID 和子項 ID。每個父項都會維護所有子項的表格,這些子項的組合可明確識別拓撲中的裝置。舉例來說,請看以下拓撲中醒目顯示的節點,其中網狀網路擴充器 (五邊形) 中的數字是路由器 ID,而終端裝置 (圓形) 中的數字是子項 ID:

OT RLOC 拓撲

每個子路由器 ID 都會對應至其父路由器 (網狀網路擴充器)。由於 Mesh Extender 不是子裝置,Mesh Extender 的子裝置 ID 一律為 0。這些值加總起來是 Thread 網路中每個裝置的專屬值,可用於建立 RLOC16,代表 RLOC 的最後 16 位元。

舉例來說,左上節點 (路由器 ID = 1,子項 ID = 1) 的 RLOC16 計算方式如下:

OT 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 為:

OT RLOC

同樣的邏輯可用於判斷上述範例拓撲中所有醒目顯示節點的 RLOC:

OT Topology w/ Address

不過,由於 RLOC 是以拓撲中節點的位置為準,因此節點的 RLOC 可能會隨著拓撲變更而改變。

舉例來說,節點 0x400 可能會從 Thread 網路中移除。節點 0x4010x402 會建立與不同 Mesh Extender 的新連結,因此系統會為每個節點指派新的 RLOC16 和 RLOC:

變更後的 OT 拓撲

單點播送位址類型

RLOC 只是 Thread 裝置可擁有的眾多 IPv6 單點播送位址之一。 另一類位址稱為端點 ID (EID),可識別 Thread 網路分割區內的專屬 Thread 介面。EID 與 Thread 網路拓撲無關。

以下將詳細說明常見的單點播送類型。

EID,用於識別可透過單一無線電傳輸連線的 Thread 介面。
範例fe80::54db:881c:3845:57f4
IID根據 802.15.4 擴充位址
範圍連結至本機
詳細資料
  • 用於探索鄰近裝置、設定連結及交換轉送資訊
  • 不可路由的位址
  • 一律以 fe80::/16 為前置碼

網格本機 EID (ML-EID)

用來識別 Thread 介面的 EID,與網路拓撲無關。用於在同一個 Thread 分區中存取 Thread 介面。又稱為專屬本機地址 (ULA)。
範例fde5:8dba:82e1:1:416:993c:8399:35ab
IID隨機,委任完成後選擇
範圍網格本機
詳細資料
  • 不會隨著拓撲變更而改變
  • 應用程式應使用
  • 一律有前置碼 fd00::/8

轉送定位器 (RLOC)

根據 Thread 介面在網路拓撲中的位置識別介面。
範例fde5:8dba:82e1:1::ff:fe00:1001
IID0000:00ff:fe00:RLOC16
範圍網格本機
詳細資料
  • 裝置連上網路後產生
  • 在 Thread 網路中傳送 IPv6 資料包
  • 隨著拓撲變更而變更
  • 應用程式通常不會使用

Anycast 定位器 (ALOC)

在不知道目的地的 RLOC 時,透過 RLOC 查閱識別 Thread 介面。
範例fde5:8dba:82e1:1::ff:fe00:fc01
IID0000:00ff:fe00:fcXX
範圍網格本機
詳細資料
  • fcXX = ALOC 目的地,會查詢適當的 RLOC
  • 應用程式通常不會使用

全域單點傳播位址 (GUA)

EID 可在 Thread 網路以外的全球範圍內,識別 Thread 介面。
範例2000::54db:881c:3845:57f4
IID
  • SLAAC - 由裝置本身隨機指派
  • DHCP - 由 DHCPv6 伺服器指派
  • 手動 - 由應用程式層指派
範圍全球
詳細資料
  • 公開 IPv6 位址
  • 一律以 2000::/3 為前置碼

多點傳播

多點傳播可用於一次向多部裝置傳送資訊。在 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 的類型。

舉例來說,0xfc010xfc0f 之間的 ALOC16 會保留給 DHCPv6 代理程式。如果特定 DHCPv6 代理程式 RLOC 不明 (可能是因為網路拓撲已變更),可以將訊息傳送至 DHCPv6 代理程式 ALOC,以取得 RLOC。

Thread 定義下列 ALOC16 值:

ALOC16 類型
0xfc00 領先
0xfc01 - 0xfc0f DHCPv6 代理程式
0xfc10 - 0xfc2f 服務
0xfc30 - 0xfc37 主席
0xfc40 - 0xfc4e 鄰居探索代理
0xfc380xfc3f
0xfc4f0xfcff
已預留

重點回顧

學到的內容:

  • Thread 網路包含三種範圍:連結本機、網狀本機和全域
  • Thread 裝置有多個單點傳播 IPv6 位址
    • RLOC 代表裝置在 Thread 網路中的位置
    • ML-EID 是分割區內 Thread 裝置的專屬 ID,應用程式應使用這個 ID
  • Thread 會使用多點傳播,將資料轉送至節點群組
  • 如果目的地的 RLOC 不明,Thread 會使用任播

如要進一步瞭解 Thread 的 IPv6 位址,請參閱「Thread Specification」的 5.2 和 5.3 節。

隨堂測驗

在 Thread 網路中,單點播送位址使用哪三個範圍?
私人
答錯了。
介面本機
答錯了。
連結至本機
答對了。
網站本機
答錯了。
網格本機
答對了。
全球
答對了。
裝置的 Child ID 為 0 代表什麼意思?
裝置類型為 Child。
答錯了。
裝置是可做為擴充器的裝置。
很接近了,但還是答錯了。
裝置為 Mesh 擴充器。
答對了。網狀延伸器一律具有子項 ID 0。
攝影機 (Thread 網路上的節點) 會收到新的 RLOC16 和 RLOC。下列哪些事件可能導致這種情況?
有人從遠端下載攝影機中的影像。
答錯了。這項事件不會影響 Thread 網路。
Mesh 擴充器已從網路上移除。
答對了。當 Mesh Extender 脫離網路時,網路拓撲會變更,這可能會導致裝置將自己升級為 Mesh Extender,並取得新的 RLOC。
攝影機進入休眠模式,導致網路拓撲變更。
答錯了。進入休眠模式不一定會導致裝置收到新的網路位址。
Thread 網路上的裝置會訂閱ff03::2 多點傳播位址。這對裝置有什麼意義?
這是最小型終端裝置 (MED)。
答錯了。
這是完整終端裝置 (FED)。
答錯了。(提示:這可能是 FED,也可能不是。)
這是最簡單的 Thread 裝置 (MTD)。
答錯了。
這是完整 Thread 裝置 (FTD)。
答對了。只有完整 Thread 裝置會訂閱 ff03::2 多點傳播位址。他們會在 Mesh-Local 範圍內執行這項操作。
Thread 使用哪種定址和路徑傳送資料給節點群組?
單點傳播
答錯了。
任意播送
答錯了。
多點傳播
答對了。
廣播訊息
答錯了。
當 Thread 裝置不知道預期訊息接收者的 RLOC 時,會使用哪種定址和路徑?
單點傳播
答錯了。
任意播送
答對了。Anycast 可讓裝置透過裝置的 ALOC 定位節點,即使 RLOC 未知也沒問題。
多點傳播
答錯了。
廣播訊息
答錯了。