IPv6 位址

在 GitHub 中查看來源

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

狙擊鏡

OT 範圍

在 Thread 網路中,共有三種用途可用於進行廣播作業:

  • Link-Local — 可透過單一無線電傳輸存取所有介面
  • 網狀本機 — 在同一個執行緒中可連線至所有介面
  • 全球:可透過執行緒以外的網路存取所有介面

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

Unicast

有多部 IPv6 聯播位址可用於識別單一 Thread 裝置。 兩者的功能和用途不盡相同。

在進一步瞭解每種類型前,讓我們先瞭解常見類別,也就是路由定位器 (RLOC)。RLOC 根據執行緒在網路拓撲中的位置,識別 Thread 介面。

轉送定位器的產生方式

系統會為所有裝置指派路由器 ID 和子 ID。每個路由器都有一份所有子項的表格,這些資料表的組合可在拓撲中識別裝置。 舉例來說,假設下列拓撲中有醒目顯示的節點,其中路由器 (pentagon) 中的數字是路由器 ID,結束裝置 (圓形) 中的數字則是子項 ID:

OT RLO 拓撲

每個子項的路由器 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 會與網狀本機前置字元結合,因此會產生 RLOC。例如,使用 fde5:8dba:82e1:1::/64 的 Me-Local 前置字串,RLOC16 = 0x401 的節點的 RLOC 則是:

OTRC

上述邏輯可用來確定上方範例拓撲中所有醒目顯示節點的 RLOC:

支援地址的 OT Topology

但是,因為 RLOC 是以節點在拓撲中的位置為依據,因此節點的 RLOC 會隨著拓撲改變而改變。

舉例來說,系統可能會從執行緒網路中移除節點 0x400。節點 0x4010x402 會建立連至不同路由器的新連結,因此每個連結都會指派新的 RLOC16 和 RLOC:

變更後的 OT Topology

Unicast 位址類型

RLOC 只是 Thread 裝置支援的許多 IPv6 單一傳送位址之一。另一個地址類型稱為端點 ID (EID),識別 Thread 網路分區中專屬的 Thread 介面。EID 不取決於執行緒網路拓撲。

常見的廣播類型如下。

一種 EID,可用來識別單一無線電傳輸功能連上的執行緒介面。
範例fe80::54db:881c:3845:57f4
IID根據 802.15.4 Extended Address
範圍本地連結
詳細資料
  • 用於尋找鄰近地區、設定連結以及交換路徑資訊
  • 並非常用路徑
  • 一律使用 fe80::/16 前置字元

網狀本機 EID (ML-EID)

可識別執行緒介面的 EID,與網路拓撲無關。用於存取同一個執行緒分區中的執行緒介面。又稱為不重複地址 (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
範圍網狀本機
詳細資料
  • 裝置連接網路時會產生
  • 用於在執行緒網路中提供 IPv6 資料圖表
  • 拓撲的更動
  • 通常不會用於應用程式

Anycast Locator (ALOC)

識別目的地中的 RLOC,藉此透過 RLOC 查詢識別執行緒介面。
範例fde5:8dba:82e1:1::ff:fe00:fc01
IID0000:00ff:fe00:fcXX
範圍網狀本機
詳細資料
  • fcXX = ALOC 目的地,用於查詢適當的 RLOC
  • 通常不會用於應用程式

全球廣播地址 (GUA)

這個 ID 可用於識別全域範圍中的執行緒介面,而非執行緒本身。
範例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) 的 link-local 和 Real-local 範圍通用 IPv6 多端位址。這些多點傳送位址是以 Thread 網路為基礎,因為該位址是以單點 Mesh-Local 前置字串為基礎 (請參閱 RFC 3306 一節,進一步瞭解採用單播前置字串的 IPv6 多播)位址)。

請注意,除了討論串清單之外的任意範圍也適用於 Thread 裝置。

Anycast

如果不知道目的地的 RLOC,則會使用 Anycast 將流量轉送至 Thread 介面。Anycast Locator (ALOC) 會識別執行緒分區中多個介面的位置。ALOC 的最後 16 位元 (稱為 ALOC16) 是 0xfcXX 的格式,代表 ALOC 的類型。

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

執行緒定義了以下 ALOC16 值:

ALOC16 類型
0xfc00 領先者
0xfc01 - 0xfc0f DHCPv6 代理程式
0xfc10 - 0xfc2f 服務
0xfc30 - 0xfc37 主席
0xfc40 - 0xfc4e 鄰居探索代理程式
0xfc38 - 0xfc3f
0xfc4f - 0xfcff
預留

比賽回顧

課程內容:

  • 執行緒網路包含三個範圍:Link-Local、Mesh-Local 和 Global
  • 執行緒裝置具有多個 播 IPv6 位址
    • RLOC 代表裝置在討論串網路中的位置
    • ML-EID 是分區中的 Thread 裝置專屬,僅供應用程式使用
  • 執行緒使用多播功能將資料轉送至節點和路由器群組
  • 目的地的 RLOC 不明時,執行緒會使用 Anycast

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

隨堂測驗

哪 3 個範圍可在討論串網路中使用單點傳播位址?
私人
答錯了。
本機介面
答錯了。
本地連結
答對了!
網站本機
答錯了。
網狀本機
答對了!
全球
答對了!
如果裝置的子 ID 為 0,代表什麼意思?
裝置為下層。
答錯了。
裝置是 REED。
很接近了,但是不正確。
裝置是路由器。
答對了,路由器的子 ID 一律為 0。
相機是 Thread 網路中的節點,會接收新的 RLOC16 和 RLOC。以下哪一項事件可能造成這個問題?
有人從遠端從相機下載圖片,
不正確。這個事件在執行緒上沒有任何影響。
路由器中斷網路連線。
答對了,路由器中斷網路時,網路拓撲會改變,進而導致裝置本身升級為路由器,並取得新的 RLOC。
攝影機進入休眠模式,改變了網路拓撲。
不正確。進入休眠模式後,裝置不一定會收到新的網路位址。
執行緒網路中的裝置會訂閱 ff03::2 多點傳送位址。我們可以從這項資訊得知裝置嗎?
是迷你裝置 (MED)。
答錯了。
是完整裝置 (FED)。
不正確。(提示:不一定是 FED)。
是迷你執行緒裝置 (MTD)。
答錯了。
這是完整執行緒裝置 (FTD)。
答對了,只有完整執行緒裝置訂閱 ff03::2 多播地址。方法會在 Me-Local 範圍內執行。
Thread 使用何種類型的位址和轉送功能,將資料轉送至節點和路由器群組?
單播
答錯了。
Anycast
答錯了。
多播
答對了!
廣播
答錯了。
如果 Thread 裝置的指定訊息 RRC 不明,這類裝置會使用哪種地址和轉送類型?
單播
答錯了。
Anycast
答對了,Anycast 可處理裝置的 ALOC,藉此接觸未知的 RLOC 節點。
多播
答錯了。
廣播
答錯了。