IPv6 位址

前往 GitHub 查看原始碼

我們來看看 Thread 如何找出網路中的每部裝置,以及這些位址用於彼此通訊的地址類型。

狙擊鏡

OT 範圍

Thread 網路有三個範圍,可用於 icast 位址處理:

  • Link-Local — 所有電台可透過單一無線電傳輸存取
  • Mesh-Local - 所有介面都可透過同一個 Thread 網路存取
  • 全域:可從 Thread 網路外存取所有介面

前兩個範圍會對應至由 Thread 網路指定的前置字串。Link-Local 的前置字串為 fe80::/16,而 Mesh-Local 的前置字串為 fd00::/8

Unicast

有多組 IPv6 單點位址可識別單一執行緒裝置。每個函式都會根據範圍和用途而有所不同。

在詳細說明每個類型之前,讓我們先進一步瞭解所謂的「定位定位器」(RLOC)。RLOC 會根據其在網路拓撲中的位置來識別 Thread 介面。

路由定位器的產生方式

系統會為所有裝置指派路由器 ID 和子 ID。每個路由器都會維護所有子項的資料表,其在組合中會明確識別裝置。例如,請考量下列拓撲中醒目顯示的節點,其中路由器 (pentagon) 中的數字是路由器 ID,而結束裝置 (圓形) 中的數字是子項 ID:

OT RLOC 拓撲

每個子項路由器的 ID 都會對應至其上層 (路由器)。由於路由器並非子項,因此路由器的子項 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-Local 前置字串,產生 RLOC。例如,使用 fde5:8dba:82e1:1::/64 的 Mesh-Local 前置字串,RLOC16 = 0x401 的節點的 RLOC 為:

OT RLOC

這個邏輯可用於判定上述範例拓撲中所有標明節點的 RLOC:

OT 拓撲 (含地址)

然而,由於 RLOC 是以拓撲中的節點位置為基礎,因此節點的 RLOC 可能會隨著拓撲改變而改變。

舉例來說,節點「0x400」可能已從執行緒網路中移除。節點 0x4010x402 會為不同的路由器建立新連結,因此每個節點都會獲得新的 RLOC16 與 RLOC:

變更 OT 拓撲

Unicast 地址類型

RLOC 只是 Thread 裝置可擁有的 IPv6 單個位址之一。另一個類別的地址稱為「端點 ID」(EID),可在 Thread 網路分區內識別出不重複的 Thread 介面。EID 與 Thread 網路拓撲無關。

以下詳細說明常見的 icast 類型。

這個 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 Locator (ALOC)

在沒有目的地的 RLOC 不明的情況下,透過 RLOC 查詢識別 Thread 介面。
範例fde5:8dba:82e1:1::ff:fe00:fc01
IID0000:00ff:fe00:fcXX
範圍網狀-本地
詳細資料
  • fcXX = ALOC 目的地,可查詢相應的 RLOC
  • 應用程式通常不會使用

全球 Unicast 地址 (GUA)

用來找出全域範圍中的 Thread 介面 (不包括執行緒網路) 的 EID。
範例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 定義了所有連結節點 (包括 SED) 的連結本機和運作範圍範圍單向的 IPv6 多播位址。這些多點位址會由 Thread 網路而有所不同,因為它是建構在單點 Mesh-Local 前置字串上 (如要進一步瞭解 iCloudcast 前置字串的 IPv6 多播位址,請參閱 RFC 3306)。

Thread 裝置也支援超出清單範圍的任意範圍。

Anycast

Anycast 用於在目的地的 RLOC 不明時,將流量轉送至 Thread 介面。Anycast Locator (ALOC) 可識別 Thread 分區內多個介面的位置。ALOC 的最後 16 位元稱為 ALOC16,其格式為 0xfcXX 的 ALOC 類型。

例如,0xfc010xfc0f 之間的 ALOC16 是保留給 DHCPv6 代理程式使用。如果特定的 DHCPv6 代理程式 RLOC 不明 (可能是因為網路拓撲改變),請傳送訊息到 DHCPv6 Agent ALOC,以取得 RLOC。

Thread 定義下列 ALOC16 值:

10 月 類型
0xfc00 領先者
0xfc01 - 0xfc0f DHCPv6 代理程式
0xfc10 - 0xfc2f 服務
0xfc30 - 0xfc37 主席
0xfc40 - 0xfc4e Neighbor Discovery 代理程式
0xfc38 - 0xfc3f
0xfc4f - 0xfcff
已保留

重點回顧

您學到了:

  • Thread 網路由三種不同範圍組成:Link-Local、 Mesh-Local 和 Global
  • Thread 裝置有多個 Unicast IPv6 位址
    • RLOC 代表裝置在 Thread 網路中的位置
    • 分區內的執行緒裝置有 ML-EID 專屬 ID,且應由應用程式使用
  • Thread 使用多播將資料轉送至節點和路由器群組
  • 執行緒的 RLOC 不明時,執行緒會使用 Anycast

如要進一步瞭解 Thread 和 IPv6 的位址,請參閱 Thread 規格的第 5.2 和 5.3 節。

隨堂測驗

在執行緒網路中,以下哪三個範圍可用於單離定位址?
私人
答錯了。
介面 - 本機
答錯了。
本地連結
答對。
網站 - 本地
答錯了。
網狀-本地
答對。
全球
答對。
裝置 ID 為 0 代表什麼意思?
裝置是兒童。
答錯了。
裝置是 REED。
關閉,但不正確。
裝置為路由器
正確。路由器的子 ID 一律為 0。
攝影機是 Thread 網路中的節點,會接收到新的 RLOC16 和 RLOC。下列哪些事件可能是造成這個問題的原因?
有人從相機遠端下載圖片。
答錯了。這個事件在 Thread 網路中不會有任何承受動作。
路由器從網路中斷。
正確。當路由器連上網路時,網路拓撲會變更,這可能會導致裝置升級為路由器,並取得新的 RLOC。
攝影機進入睡眠模式,因此改變了網路拓撲。
答錯了。進入休眠模式後,裝置不一定會接收新的網路位址。
Thread 網路中的裝置訂閱了 ff03::2 多播位址。針對裝置,我們可以提供什麼資訊?
裝置幾乎是小型裝置 (MED)。
答錯了。
此為完整裝置 (FED)。
答錯了。(提示:不一定是 FED)。
它是最小的執行緒裝置 (MTD)。
答錯了。
是全執行緒裝置 (FTD)。
正確。只有完整執行緒裝置才能訂閱 ff03::2 多播位址。他們可在 Mesh-Local 範圍內執行這項作業。
Thread 使用哪種類型的位址和轉送功能,可將資料轉送至節點和路由器群組?
Uniicast
答錯了。
Anycast
答錯了。
多播
答對。
廣播
答錯了。
Thread 裝置的 RLOC 不明時,Thread 裝置會使用哪種類型的位址與轉送功能?
Uniicast
答錯了。
Anycast
正確。Anycast 允許裝置透過處理裝置的 ALOC 來達到 RLOC 不明節點。
多播
答錯了。
廣播
答錯了。