IPv6 位址

前往 GitHub 查看原始碼

讓我們看看 Thread 如何識別網路中的每部裝置,以及用於彼此通訊的地址類型。

範圍

OT 範圍

在 Thread 網路中,有三個單點範圍可用於單向定址:

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

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

Unicast

有多個 IPv6 單播位址可識別單一執行緒裝置。並會根據範圍與用途提供不同的函式。

在詳細說明每種類型之前,我們來進一步瞭解常見的路徑,稱為轉送定位器 (RLOC)。RLOC 會根據其在網路拓撲中的位置,識別一個執行緒介面。

轉送定位器的產生方式

所有裝置都會獲派路由器 ID 和子 ID。每個路由器都會維護其所有子項的表格,其組合可明確識別拓撲中的裝置。例如,假設在以下拓撲中醒目顯示的節點,其中路由器 (五邊形) 中的編號是路由器 ID,而最終裝置 (圓形) 中的數字是子項 ID:

OT RLOC 拓撲

每個子項的路由器 ID 都會對應至其父項 (路由器)。由於路由器不是子項,因此路由器的子項 ID 一律為 0。這些執行緒在 Thread 網路中的每部裝置都是唯一的,用於建立 RLOC16,代表 RLOC 的最後 16 位元。

舉例來說,以下是左上方節點 (Router ID = 1,Child ID = 1) 的 RLOC16 計算方式:

OT RLOC16

RLOC16 是介面 ID (IID) 的一部分,該介面對應至 IPv6 位址的最後 64 位元。部分 IID 可用來識別某些類型的執行緒介面。例如,RLOC 的 IID 一律為以下格式:

0000:00ff:fe00:RLOC16

IID 搭配網格本機前置字串,因此 RLOC 會產生結果。例如,使用 fde5:8dba:82e1:1::/64 的網格本機前置字串,RLOC16 = 0x401 的節點的 RLOC 為:

OT RLOC

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

OT 拓撲 (含位址)

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

例如,節點 0x400 可能會從 Thread 網路中移除。節點 0x4010x402 會為不同的路由器建立新連結,因此每個節點都會指派一個新的 RLOC16 和 RLOC:

變更後的 OT 拓撲

單播地址類型

RLOC 只是 Thread 裝置可擁有的 IPv6 單聲道位址之一。另一種類別位址稱為「端點識別碼」(EID),可用於識別執行緒網路分區內專屬的 Thread 介面。EID 與 Thread 網路拓撲無關。

常見的 icast 類型如下。

這個 EID 可識別可由單一無線電傳輸項目觸及的 Thread 介面。
示例fe80::54db:881c:3845:57f4
ID基在 802.15.4 加強地址
範圍連結當地
詳細資料
  • 用來探索鄰居、設定連結,以及交換路線資訊
  • 不是可路由傳送的地址
  • 一律為 fe80::/16 前置字串

網格-本機 EID (ML-EID)

EID 用於識別 Thread 介面的 EID,與網路拓撲無關。用於到達同一個執行緒分區中的執行緒介面。又稱為「專屬當地地址」(ULA)。
示例fde5:8dba:82e1:1:416:993c:8399:35ab
ID隨機決定,在稽核完成後選擇
範圍網格-本地
詳細資料
  • 未隨著拓撲變更而改變
  • 應用於應用程式
  • 一律為前置字串 fd00::/8

轉送定位器 (RLOC)

根據其在網路拓撲中的位置,識別一個執行緒介面。
示例fde5:8dba:82e1:1::ff:fe00:1001
ID0000:00ff:fe00:RLOC16
範圍網格-本地
詳細資料
  • 裝置連接至網路時產生
  • 用於在 Thread 網路中提供 IPv6 資料圖表
  • 拓撲改變
  • 應用程式通常未使用

Anycast Locator (ALOC)

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

全球單播位址 (GUA)

這個 EID 可用於識別全域範圍中的 Thread 介面,而非 Thread 網路。
示例2000::54db:881c:3845:57f4
ID
  • 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) 使用的 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 的類型。

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

Thread 會定義下列 ALOC16 值:

ALOC16 類型
0xfc00 領導者
0xfc01 - 0xfc0f DHCPv6 代理程式
0xfc10 - 0xfc2f 服務
0xfc30 - 0xfc37 主席
0xfc40 - 0xfc4e Neighbor Discovery 代理程式
0xfc38 - 0xfc3f
0xfc4f0xfcff
預留

複習內容

涵蓋內容:

  • 執行緒網路由三個範圍組成:連結本機、網格-本機和全域
  • Thread 裝置有多個單點 IPv6 位址
    • RLOC 代表裝置在 Thread 網路中的位置
    • 分區內的 Thread 裝置獨有的 ML-EID,且應由應用程式使用
  • Thread 使用多播將資料轉送到節點群組和路由器群組
  • 目的地的 RLOC 不明時,執行緒使用 Anycast

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

測驗您的理解程度

三個網路範圍用於 Thread 網路中的單聲道定址?
私人
答錯了。
介面-本機
答錯了。
連結當地
正確。
網站本地
答錯了。
網格-本地
正確。
全域
正確。
裝置 ID 為 0 代表什麼意思?
這部裝置是兒童。
答錯了。
裝置是 REED。
很接近,但不正確。
這部裝置是路由器。
答對了,路由器的子項 ID 一律為 0。
攝影機是 Thread 網路中的節點,會接收新的 RLOC16 和 RLOC。下列哪些事件可能是造成這個問題的原因?
有人從相機遠端下載圖片。
不正確。這個事件在 Thread 網路上不會產生任何承受。
路由器中斷網路。
答對了,當路由器捨棄網路時,網路拓撲將會發生變化,因此可能導致裝置自行升級為路由器並取得新的 RLOC。
攝影機進入睡眠模式,進而改變了網路拓撲。
不正確。進入睡眠模式不代表裝置一定會收到新的網路位址。
執行緒網路中的裝置會訂閱 ff03::2 多播位址。這對裝置有什麼看法?
是極端的終端裝置 (MED)。
答錯了。
它是完整的裝置 (FED)。
不正確。(提示:不一定是 FED)。
這是一種最小的執行緒裝置 (MTD)。
答錯了。
是全執行緒裝置 (FTD)。
答對了,只有完整執行緒裝置才能訂閱 ff03::2 多播位址。這些元件可在網格-本機範圍內執行。
Thread 使用哪種位址和轉送功能,將資料轉送到節點和路由器群組?
單播
答錯了。
Anycast
答錯了。
多播
正確。
廣播訊息
答錯了。
如果 Thread 裝置的指定訊息接收者 RLOC 不明,則裝置使用哪種位址處理與轉送類型?
單播
答錯了。
Anycast
答對了,Anycast 可讓裝置透過處理裝置的 ALOC,到達沒有已知 RLOC 的節點。
多播
答錯了。
廣播訊息
答錯了。