Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

IPv6尋址

在GitHub上查看源代碼

讓我們看一下Thread如何識別網絡中的每個設備,以及它們用於相互通信的地址的類型。

範圍

OT範圍

線程網絡中的三個範圍用於單播尋址:

  • 本地鏈路—所有接口可通過一次無線電傳輸到達
  • Mesh-Local-所有接口都可以在同一線程網絡中訪問
  • 全局-線程網絡外部可訪問的所有接口

前兩個作用域對應於線程網絡指定的前綴。 Link-Local的前綴為fe80::/16 ,而Mesh-Local的前綴為fd00::/8

單播

有多個IPv6單播地址可標識單個線程設備。根據范圍和用例,每種功能都有不同的功能。

在詳細介紹每種類型之前,讓我們詳細了解一種常見的類型,稱為路由定位器(RLOC)。 RLOC根據其在網絡拓撲中的位置來標識線程接口。

如何生成路由定位器

為所有設備分配了一個路由器ID和一個子ID。每個路由器維護一個其所有子代的表,這些子代的組合唯一標識拓撲中的設備。例如,請考慮以下拓撲中的突出顯示的節點,其中路由器(五邊形)中的數字是路由器ID,最終設備(圓圈)中的數字是子代ID:

OT RLOC拓撲

每個子代的路由器ID對應於其父代(路由器)。因為路由器不是子代,所以路由器的子代ID始終為0。這些值對於線程網絡中的每個設備都是唯一的,並用於創建RLOC16,它表示RLOC的後16位。

例如,以下是左上節點(路由器ID = 1和子ID = 1)的RLOC16的計算方法:

OT RLOC16

RLOC16是接口標識符(IID)的一部分,它對應於IPv6地址的後64位。一些IID可用於標識某些類型的Thread接口。例如,RLOC的IID始終為0000:00ff:fe00: RLOC16

IID結合網格本地前綴會生成RLOC。例如,使用fde5:8dba:82e1:1::/64的Mesh-Local Prefix,對於RLOC16 = 0x401的節點的RLOC為:

OT RLOC

可以使用相同的邏輯來確定以上示例拓撲中所有突出顯示的節點的RLOC:

具有地址的OT拓撲

但是,由於RLOC基於節點在拓撲中的位置,因此節點的RLOC會隨著拓撲的變化而變化。

例如,也許節點0x400已從Thread網絡中刪除。節點0x4010x402建立到不同路由器的新鏈接,結果分別為它們分配了新的RLOC16和RLOC:

更改後的OT拓撲

單播地址類型

RLOC只是Thread設備可以擁有的許多IPv6單播地址之一。另一類地址稱為端點標識符(EID),用於標識線程網絡分區內唯一的線程接口。 EID獨立於線程網絡拓撲。

常見的單播類型在下面詳細介紹。

一個EID,用於標識單個無線電傳輸可到達的線程接口。
fe80::54db:881c:3845:57f4
IID基於802.15.4擴展地址
範圍本地鏈接
細節
  • 用於發現鄰居,配置鏈接和交換路由信息
  • 不是可路由的地址
  • 始終以fe80::/16為前綴

網格本地EID(ML-EID)

標識線程接口的EID,獨立於網絡拓撲。用於訪問同一Thread分區內的Thread接口。也稱為唯一本地地址(ULA)。
fde5:8dba:82e1:1:416:993c:8399:35ab
IID隨機,調試完成後選擇
範圍局部網格
細節
  • 不隨拓撲變化而變化
  • 應由應用程序使用
  • 始終具有前綴fd00::/8

路由定位器(RLOC)

根據線程接口在網絡拓撲中的位置來標識線程接口。
fde5:8dba:82e1:1::ff:fe00:1001
IID 0000:00ff:fe00: RLOC16
範圍局部網格
細節
  • 設備連接到網絡後生成
  • 用於在線程網絡中傳遞IPv6數據報
  • 隨著拓撲的變化而變化
  • 通常不被應用程序使用

任播定位器(ALOC)

當目標的RLOC未知時,通過RLOC查找標識線程接口。
fde5:8dba:82e1:1::ff:fe00:fc01
IID 0000:00ff:fe00:fc XX
範圍局部網格
細節
  • fc XX = ALOC目標,它查找適當的RLOC
  • 通常不被應用程序使用

全球單播地址(GUA)

一個EID,用於標識除線程網絡之外的全局範圍內的線程接口。
2000::54db:881c:3845:57f4
IID
  • SLAAC —由設備本身隨機分配
  • DHCP-由DHCPv6服務器分配
  • 手冊-由應用程序層分配
範圍全球
細節
  • 公用IPv6地址
  • 始終具有2000::/3的前綴

多播

組播用於一次將信息傳達給多個設備。在線程網絡中,根據范圍,將保留特定的地址以供不同組的設備多播使用。

IPv6地址範圍送到了(送去了
ff02::1本地鏈接所有FTD和MED
ff02::2本地鏈接所有FTD
ff03::1局部網格所有FTD和MED
ff03::2局部網格所有FTD

您可能會注意到,上面的多播表中沒有將“睡眠終端設備(SED)”作為收件人包括在內。相反,線程定義了用於所有線程節點(包括SED)的基於鏈接本地和領域本地範圍的單播基於前綴的IPv6多播地址。這些多播地址因線程網絡而異,因為它建立在單播Mesh-Local前綴上(有關基於單播前綴的IPv6多播地址的更多詳細信息,請參閱RFC 3306 )。

Thread設備還支持超出已列出範圍的任意範圍。

任播

當未知目的地的RLOC時,Anycast用於將流量路由到Thread接口。 Anycast Locator(ALOC)標識線程分區中多個接口的位置。 ALOC的後16位(稱為ALOC16)採用0xfc XX格式,表示ALOC的類型。

例如,之間的ALOC16 0xfc010xfc0f被保留以供的DHCPv6代理。如果特定的DHCPv6代理RLOC是未知的(可能是因為網絡拓撲已更改),則可以將消息發送到DHCPv6代理ALOC以獲取RLOC。

線程定義了以下ALOC16值:

ALOC16類型
0xfc00領導
0xfc010xfc0f DHCPv6代理
0xfc100xfc2f服務
0xfc300xfc37專員
0xfc400xfc4e鄰居發現代理
0xfc380xfc3f
0xfc4f0xfcff
已預留

回顧

您學到了什麼:

  • 線程網絡包括三個範圍:鏈接本地,網狀本地和全局
  • 線程設備具有多個單播IPv6地址
    • RLOC代表設備在Thread網絡中的位置
    • ML-EID對於分區中的線程設備是唯一的,應由應用程序使用
  • 線程使用多播將數據轉發到節點和路由器組
  • 當目標的RLOC未知時,線程使用任播

要了解有關Thread的IPv6尋址的更多信息,請參閱Thread Specification的5.2和5.3節。