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

線程網絡中的三個範圍用於單播尋址:
- 本地鏈路—所有接口可通過一次無線電傳輸到達
- Mesh-Local-所有接口都可以在同一線程網絡中訪問
- 全局-線程網絡外部可訪問的所有接口
前兩個作用域對應於線程網絡指定的前綴。 Link-Local的前綴為fe80::/16
,而Mesh-Local的前綴為fd00::/8
。
單播
有多個IPv6單播地址可標識單個線程設備。根據范圍和用例,每種功能都有不同的功能。
在詳細介紹每種類型之前,讓我們詳細了解一種常見的類型,稱為路由定位器(RLOC)。 RLOC根據其在網絡拓撲中的位置來標識線程接口。
如何生成路由定位器
為所有設備分配了一個路由器ID和一個子ID。每個路由器維護一個其所有子代的表,這些子代的組合唯一標識拓撲中的設備。例如,請考慮以下拓撲中的突出顯示的節點,其中路由器(五邊形)中的數字是路由器ID,最終設備(圓圈)中的數字是子代ID:

每個子代的路由器ID對應於其父代(路由器)。因為路由器不是子代,所以路由器的子代ID始終為0。這些值對於線程網絡中的每個設備都是唯一的,並用於創建RLOC16,它表示RLOC的後16位。
例如,以下是左上節點(路由器ID = 1和子ID = 1)的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為:

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

但是,由於RLOC基於節點在拓撲中的位置,因此節點的RLOC會隨著拓撲的變化而變化。
例如,也許節點0x400
已從Thread網絡中刪除。節點0x401
和0x402
建立到不同路由器的新鏈接,結果分別為它們分配了新的RLOC16和RLOC:

單播地址類型
RLOC只是Thread設備可以擁有的許多IPv6單播地址之一。另一類地址稱為端點標識符(EID),用於標識線程網絡分區內唯一的線程接口。 EID獨立於線程網絡拓撲。
常見的單播類型在下面詳細介紹。
鏈接本地地址(LLA) | |
---|---|
一個EID,用於標識單個無線電傳輸可到達的線程接口。 | |
例 | fe80::54db:881c:3845:57f4 |
IID | 基於802.15.4擴展地址 |
範圍 | 本地鏈接 |
細節 |
|
網格本地EID(ML-EID) | |
---|---|
標識線程接口的EID,獨立於網絡拓撲。用於訪問同一Thread分區內的Thread接口。也稱為唯一本地地址(ULA)。 | |
例 | fde5:8dba:82e1:1:416:993c:8399:35ab |
IID | 隨機,調試完成後選擇 |
範圍 | 局部網格 |
細節 |
|
路由定位器(RLOC) | |
---|---|
根據線程接口在網絡拓撲中的位置來標識線程接口。 | |
例 | fde5:8dba:82e1:1::ff:fe00:1001 |
IID | 0000:00ff:fe00: RLOC16 |
範圍 | 局部網格 |
細節 |
|
任播定位器(ALOC) | |
---|---|
當目標的RLOC未知時,通過RLOC查找標識線程接口。 | |
例 | fde5:8dba:82e1:1::ff:fe00:fc01 |
IID | 0000:00ff:fe00:fc XX |
範圍 | 局部網格 |
細節 |
|
全球單播地址(GUA) | |
---|---|
一個EID,用於標識除線程網絡之外的全局範圍內的線程接口。 | |
例 | 2000::54db:881c:3845:57f4 |
IID |
|
範圍 | 全球 |
細節 |
|
多播
組播用於一次將信息傳達給多個設備。在線程網絡中,根據范圍,將保留特定的地址以供不同組的設備多播使用。
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 0xfc01
和0xfc0f
被保留以供的DHCPv6代理。如果特定的DHCPv6代理RLOC是未知的(可能是因為網絡拓撲已更改),則可以將消息發送到DHCPv6代理ALOC以獲取RLOC。
線程定義了以下ALOC16值:
ALOC16 | 類型 |
---|---|
0xfc00 | 領導 |
0xfc01 – 0xfc0f | DHCPv6代理 |
0xfc10 – 0xfc2f | 服務 |
0xfc30 – 0xfc37 | 專員 |
0xfc40 – 0xfc4e | 鄰居發現代理 |
0xfc38 – 0xfc3f 0xfc4f – 0xfcff | 已預留 |
回顧
您學到了什麼:
- 線程網絡包括三個範圍:鏈接本地,網狀本地和全局
- 線程設備具有多個單播IPv6地址
- RLOC代表設備在Thread網絡中的位置
- ML-EID對於分區中的線程設備是唯一的,應由應用程序使用
- 線程使用多播將數據轉發到節點和路由器組
- 當目標的RLOC未知時,線程使用任播
要了解有關Thread的IPv6尋址的更多信息,請參閱Thread Specification的5.2和5.3節。