Visualizza il codice sorgente su GitHub
Vediamo in che modo Thread identifica ogni dispositivo nella rete e quali tipi di indirizzi utilizza per comunicare tra loro.
Ambiti
In una rete Thread esistono tre ambiti per l'indirizzamento unicast:
- Link-Local: tutte le interfacce raggiungibili con 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 designati da una rete Thread.
I prefissi di Link-Local sono fe80::/16, mentre quelli di Mesh-Local sono
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 in dettaglio ogni tipo, scopriamo di più su uno comune, chiamato Routing Locator (RLOC). RLOC identifica un'interfaccia Thread in base alla sua posizione nella topologia di rete.
Come viene generato un localizzatore di routing
A tutti i dispositivi vengono assegnati un ID router e un ID bambino. Ogni genitore mantiene una tabella di tutti i suoi figli, la cui combinazione identifica in modo univoco un dispositivo all'interno della topologia. Ad esempio, considera i nodi evidenziati nella seguente topologia, in cui il numero in un Mesh Extender (pentagono) è l'ID router e il numero in un dispositivo finale (cerchio) è l'ID figlio:
L'ID router di ogni dispositivo secondario corrisponde al suo dispositivo principale (extender mesh). Poiché un Mesh Extender non è un dispositivo secondario, il relativo ID è sempre 0. Insieme, questi valori sono univoci per ogni dispositivo nella rete Thread e vengono utilizzati per creare l'RLOC16, che rappresenta gli ultimi 16 bit dell'RLOC.
Ad esempio, ecco come viene calcolato RLOC16 per il nodo in alto a sinistra (ID router = 1 e ID secondario = 1):
RLOC16 fa parte dell'identificatore di interfaccia (IID), che corrisponde agli ultimi 64 bit dell'indirizzo IPv6. Alcuni IID possono essere utilizzati per identificare alcuni tipi di interfacce Thread. Ad esempio, l'IID per gli RLOC è sempre nel seguente formato:
0000:00ff:fe00:RLOC16
L'IID, combinato con un prefisso locale mesh, genera l'RLOC. Ad esempio,
utilizzando un prefisso locale mesh fde5:8dba:82e1:1::/64, l'RLOC per un nodo in cui
RLOC16 = 0x401 è:
La stessa logica può essere utilizzata per determinare l'RLOC per tutti i nodi evidenziati nella topologia di esempio riportata sopra:
Tuttavia, poiché l'RLOC si basa sulla posizione del nodo nella topologia, l'RLOC di un nodo può cambiare man mano che la topologia cambia.
Ad esempio, il nodo 0x400 viene rimosso dalla rete Thread. I nodi 0x401 e 0x402 stabiliscono nuovi collegamenti a diversi
Mesh Extender e, di conseguenza, a ciascuno viene assegnato un nuovo RLOC16
e RLOC:
Tipi di indirizzi unicast
L'RLOC è solo uno dei tanti indirizzi unicast IPv6 che un dispositivo Thread può avere. Un'altra categoria di indirizzi è costituita dagli identificatori di endpoint (EID), che identificano un'interfaccia Thread univoca all'interno di una partizione di rete Thread. Gli EID sono indipendenti dalla topologia della rete Thread.
Di seguito sono descritti i tipi di unicast comuni.
Indirizzo locale rispetto al collegamento (LLA) |
|
|---|---|
| Un EID che identifica un'interfaccia Thread raggiungibile con una singola trasmissione radio. | |
| Esempio | fe80::54db:881c:3845:57f4 |
| IID | In base all'indirizzo esteso 802.15.4 |
| Ambito | Locale rispetto al collegamento |
| Dettagli |
|
Mesh-Local EID (ML-EID) |
|
|---|---|
| Un EID che identifica un'interfaccia Thread, indipendentemente 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-Local |
| Dettagli |
|
Localizzatore di routing (RLOC) |
|
|---|---|
| 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-Local |
| 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-Local |
| Dettagli |
|
Indirizzo Global Unicast (GUA) |
|
|---|---|
| Un EID che identifica un'interfaccia Thread a livello globale, oltre 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 una rete Thread, indirizzi specifici sono riservati all'utilizzo multicast con diversi gruppi di dispositivi, a seconda dell'ambito.
| Indirizzo IPv6 | Ambito | Consegnato a |
|---|---|---|
ff02::1 |
Locale rispetto al collegamento | Tutti i FTD e i MED |
ff02::2 |
Locale rispetto al collegamento | Tutte le FTD |
ff03::1 |
Mesh-Local | Tutti i FTD e i MED |
ff03::2 |
Mesh-Local | Tutte le FTD |
Potresti notare che i dispositivi finali inattivi (SED) non sono inclusi come destinatari nella tabella di multicast riportata sopra. Thread definisce invece l'indirizzo multicast IPv6 basato sul prefisso unicast con ambito link-local e realm-local utilizzato per tutti i nodi Thread, inclusi i SED. Questi indirizzi multicast variano in base alla rete Thread, perché si basano sul prefisso Mesh-Local unicast (per maggiori dettagli sugli indirizzi multicast IPv6 basati sul prefisso unicast, consulta l'RFC 3306).
Per i dispositivi Thread sono supportati anche ambiti arbitrari oltre a quelli già elencati.
Anycast
Anycast viene utilizzato per indirizzare il traffico a un'interfaccia Thread quando l'RLOC di una destinazione non è noto. Un Anycast Locator (ALOC) identifica la posizione di
più interfacce all'interno di una partizione Thread. Gli ultimi 16 bit di un ALOC, denominati ALOC16, sono nel formato 0xfcXX, che rappresenta il tipo di ALOC.
Ad esempio, un ALOC16 tra 0xfc01 e 0xfc0f è riservato agli agenti DHCPv6. Se l'RLOC dell'agente DHCPv6 specifico non è noto (ad esempio perché la
topologia di rete è cambiata), è possibile inviare un messaggio a un ALOC dell'agente DHCPv6 per
ottenere l'RLOC.
Il thread definisce i seguenti valori ALOC16:
| ALOC16 | Tipo |
|---|---|
0xfc00 |
Leader |
0xfc01 – 0xfc0f |
Agente DHCPv6 |
0xfc10 – 0xfc2f |
Servizio |
0xfc30 – 0xfc37 |
Commissario |
0xfc40 – 0xfc4e |
Agente di rilevamento dei vicini |
0xfc38 – 0xfc3f0xfc4f – 0xfcff |
Prenotate |
Riepilogo
Cosa hai imparato:
- Una rete Thread è composta da tre ambiti: Link-Local, Mesh-Local e Global.
- 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 deve essere utilizzato dalle applicazioni
- Thread utilizza il multicast per inoltrare i dati a gruppi di nodi
- Thread utilizza anycast quando l'RLOC di una destinazione è sconosciuto
Per saperne di più sull'indirizzamento IPv6 di Thread, consulta le sezioni 5.2 e 5.3 della specifica Thread.
Mettiti alla prova
ff03::2. Cosa ci dice questo sul dispositivo?ff03::2. Lo fanno nell'ambito di Mesh-Local.