Visualizza il codice sorgente su GitHub
Vediamo in che modo Thread identifica ogni dispositivo nella rete e tipi di indirizzi che utilizzano per comunicare tra loro.
Ambiti
In una rete Thread sono presenti tre ambiti per l'indirizzamento unicast:
- Link-Local: tutte le interfacce raggiungibili da una singola trasmissione radio.
- Mesh-Local: tutte le interfacce raggiungibili all'interno della stessa rete Thread
- Globale: tutte le interfacce raggiungibili dall'esterno di una rete Thread
I primi due ambiti corrispondono ai prefissi indicati da una rete Thread.
Il campo Link-Local ha un prefisso di fe80::/16
, mentre il mesh-Local ha un prefisso di
fd00::/8
.
Unicast
Esistono più indirizzi unicast IPv6 che identificano un singolo dispositivo Thread. Ognuno ha una funzione diversa in base all'ambito e al caso d'uso.
Prima di descrivere ogni tipo, scopriamo di più su quello comune, chiamato RLOC (Routing Locator). Il RLOC identifica un'interfaccia Thread, in base al suo più elevata nella topologia di rete.
Come viene generato un localizzatore di routing
A tutti i dispositivi vengono assegnati un ID router e un ID secondario. Ogni router mantiene di tutti i figli, la cui combinazione identifica in modo univoco dispositivo all'interno della topologia. Ad esempio, considera i nodi evidenziati nella la seguente topologia, dove il numero in un router (pentagono) è l'ID router, e il numero in un dispositivo finale (cerchio) è l'ID secondario:
L'ID router di ogni publisher secondario corrisponde al rispettivo router principale (router). Poiché un router è non secondario, l'ID secondario di un router è sempre 0. Insieme, questi valori univoci per ogni dispositivo nella rete Thread, e vengono usati per creare il RLOC16, che rappresenta gli ultimi 16 bit dell'RLOC.
Ad esempio, ecco come viene calcolato RLOC16 per il nodo in alto a sinistra (Router ID = 1 e ID figlio = 1):
Il RLOC16 fa parte dell’interfaccia Identifier (IID), che corrisponde gli ultimi 64 bit dell'indirizzo IPv6. Alcuni IID possono essere usati per identificare tipi delle interfacce Thread. Ad esempio, l'IID per i RLOC è sempre nel seguente formato:
0000:00ff:fe00:RLOC16
L'IID, combinato con un prefisso locale mesh, genera il RLOC. Ad esempio:
utilizzando un prefisso mesh-locale di fde5:8dba:82e1:1::/64
, l'RLOC per un nodo in cui
RLOC16 = 0x401
è:
Questa stessa logica può essere utilizzata per determinare l'RLOC per tutti i nodi evidenziati nella topologia di esempio sopra:
Tuttavia, poiché il RLOC si basa sulla posizione del nodo nella topologia, il RLOC di un nodo può cambiare man mano che la topologia cambia.
Ad esempio, forse il nodo 0x400
è stato rimosso dalla rete Thread. Nodi
0x401
e 0x402
stabiliscono nuovi collegamenti a router diversi, di conseguenza
a ciascuno di essi viene assegnato un nuovo RLOC16 e un RLOC:
Tipi di indirizzi Unicast
Il RLOC è solo uno dei tanti indirizzi unicast IPv6 che un dispositivo Thread può avere. Un'altra categoria di indirizzi è chiamata Endpoint Identifier (EID), Identificare un'interfaccia Thread univoca all'interno di una partizione di rete Thread. Gli EID sono indipendenti dalla topologia della rete Thread.
I tipi unicast più comuni sono descritti di seguito.
Indirizzo locale del collegamento (LLA) |
|
---|---|
Un EID che identifica un'interfaccia Thread raggiungibile da una singola trasmissione radio. | |
Esempio | fe80::54db:881c:3845:57f4 |
IID | Basata sulla norma 802.15.4 per gli indirizzi estesi |
Ambito | Locale del link |
Dettagli |
|
EID locale mesh (ML-EID) |
|
---|---|
Un EID che identifica un'interfaccia Thread, indipendente dalla topologia di rete. Utilizzato per raggiungere un'interfaccia Thread all'interno della stessa partizione Thread. Chiamato anche indirizzo locale univoco (ULA). | |
Esempio | fde5:8dba:82e1:1:416:993c:8399:35ab |
IID | Casuale, scelto al termine della messa in servizio |
Ambito | Mesh locale |
Dettagli |
|
RLOC (Routing Locator) |
|
---|---|
Identifica un'interfaccia Thread, in base alla sua posizione nella topologia di rete. | |
Esempio | fde5:8dba:82e1:1::ff:fe00:1001 |
IID | 0000:00ff:fe00:RLOC16 |
Ambito | Mesh locale |
Dettagli |
|
Anycast Locator (ALOC) |
|
---|---|
Identifica un'interfaccia Thread tramite la ricerca RLOC, quando l'RLOC di una destinazione non è noto. | |
Esempio | fde5:8dba:82e1:1::ff:fe00:fc01 |
IID | 0000:00ff:fe00:fcXX |
Ambito | Mesh locale |
Dettagli |
|
Indirizzo Unicast globale (GUA) |
|
---|---|
Un EID che identifica un'interfaccia Thread in un ambito globale, al di fuori di una rete Thread. | |
Esempio | 2000::54db:881c:3845:57f4 |
IID |
|
Ambito | Globale |
Dettagli |
|
Multicast
Il multicast viene utilizzato per comunicare informazioni a più dispositivi contemporaneamente. In un Rete Thread, indirizzi specifici sono riservati per l'uso multicast con gruppi di dispositivi, a seconda dell'ambito.
Indirizzo IPv6 | Ambito | Consegnato a |
---|---|---|
ff02::1 |
Locale del link | Tutti gli FTD e i MED |
ff02::2 |
Locale del link | Tutti i FTD |
ff03::1 |
Mesh locale | Tutti gli FTD e i MED |
ff03::2 |
Mesh locale | Tutti i FTD |
Potresti notare che i dispositivi finali per dormire (SED) non sono inclusi come nella tabella multicast riportata sopra. Thread definisce invece multicast IPv6 basato su prefisso unicast con ambito unicast e ambito locale e link utilizzato per tutti i nodi Thread, inclusi i SED. Questi multicast gli indirizzi variano a seconda della rete Thread, perché è basata sulla tecnologia Prefisso locale mesh (vedi RFC 3306 per maggiori dettagli sugli indirizzi multicast IPv6 basati su prefisso unicast).
Per Thread sono supportati anche gli ambiti arbitrari oltre a quelli già elencati dispositivi mobili.
Anycast
Anycast viene utilizzato per instradare il traffico a un'interfaccia Thread quando l'RLOC di un
destinazione sconosciuta. Un Anycast Locator (ALOC) identifica la posizione
più interfacce all'interno di una partizione Thread. Gli ultimi 16 bit di un ALOC,
chiamato ALOC16, è nel formato 0xfcXX
, che
rappresenta il tipo di ALOC.
Ad esempio, un ALOC16 tra 0xfc01
e 0xfc0f
è riservato per DHCPv6
Agenti. Se il RLOC dell'agente DHCPv6 specifico è sconosciuto (forse perché
la topologia di rete è cambiata), un messaggio può essere inviato a un ALOC dell'agente DHCPv6
per ottenere il RLOC.
Thread definisce i seguenti valori ALOC16:
ALOC16 | Tipo |
---|---|
0xfc00 |
Leader |
0xfc01 – 0xfc0f |
Agente DHCPv6 |
0xfc10 – 0xfc2f |
Servizio |
0xfc30 – 0xfc37 |
Commissario |
0xfc40 – 0xfc4e |
Agente Discovery Nearby |
0xfc38 - 0xfc3f 0xfc4f - 0xfcff |
Prenotato |
Riepilogo
Cosa hai imparato:
- Una rete Thread è composta da tre ambiti: Link-Local, Mesh-Local e Globale
- Un dispositivo Thread ha più indirizzi IPv6 unicast
- Un RLOC rappresenta la posizione di un dispositivo nella rete Thread
- Un ML-EID è univoco per un dispositivo Thread all'interno di una partizione e dovrebbe essere utilizzato dalle applicazioni
- Thread utilizza il multicast per inoltrare i dati a gruppi di nodi e router
- Thread utilizza anycast quando il RLOC di una destinazione è sconosciuto
Per ulteriori informazioni sull'indirizzamento IPv6 di Thread, vedere le sezioni 5.2 e 5.3 del Specifiche del thread.
Verifica le tue conoscenze
ff03::2
un indirizzo multicast. Che cosa ci dice sul dispositivo?ff03::2
. Per farlo, utilizzano mesh-local
l'ambito di attività.