Endereçamento IPv6

Ver código-fonte no GitHub

Vamos ver como o Thread identifica cada dispositivo na rede e quais tipos de endereços eles usam para se comunicar entre si.

Escopos

Escopos do OT

Há três escopos em uma rede Thread para endereçamento unicast:

  • Link-local: todas as interfaces acessíveis por uma única transmissão de rádio.
  • Mesh-Local: todas as interfaces acessíveis na mesma rede Thread.
  • Global: todas as interfaces acessíveis de fora de uma rede Thread

Os dois primeiros escopos correspondem a prefixos designados por uma rede Thread. Os links locais têm prefixos fe80::/16, enquanto os locais de malha têm prefixos fd00::/8.

Unicast

Há vários endereços unicast IPv6 que identificam um único dispositivo Thread. Cada uma tem uma função diferente com base no escopo e no caso de uso.

Antes de detalhar cada tipo, vamos saber mais sobre um comum, chamado de localizador de roteamento (RLOC, na sigla em inglês). O RLOC identifica uma interface do Thread com base na localização dela na topologia de rede.

Como um localizador de rotas é gerado

Todos os dispositivos recebem um ID de roteador e um ID filho. Cada elemento principal mantém uma tabela de todos os elementos filhos, cuja combinação identifica de forma exclusiva um dispositivo na topologia. Por exemplo, considere os nós destacados na seguinte topologia, em que o número em um extensor de malha (pentágono) é o ID do roteador, e o número em um dispositivo final (círculo) é o ID filho:

Topologia RLOC de OT

O ID do roteador de cada dispositivo filho corresponde ao dispositivo principal (extensor de malha). Como um extensor de rede mesh não é uma criança, o ID da criança para um extensor de rede mesh é sempre 0. Juntos, esses valores são exclusivos para cada dispositivo na rede Thread e são usados para criar o RLOC16, que representa os últimos 16 bits do RLOC.

Por exemplo, veja como o RLOC16 é calculado para o nó superior esquerdo (ID do roteador = 1 e ID da criança = 1):

OT RLOC16

O RLOC16 faz parte do identificador de interface (IID), que corresponde aos últimos 64 bits do endereço IPv6. Alguns IIDs podem ser usados para identificar alguns tipos de interfaces de encadeamento. Por exemplo, o IID para RLOCs está sempre neste formato:

0000:00ff:fe00:RLOC16

O IID, combinado com um prefixo local da malha, resulta no RLOC. Por exemplo, usando um prefixo local da malha de fde5:8dba:82e1:1::/64, o RLOC de um nó em que RLOC16 = 0x401 é:

OT RLOC

A mesma lógica pode ser usada para determinar o RLOC de todos os nós destacados na topologia de exemplo acima:

Topologia de OT com endereço

No entanto, como o RLOC é baseado na localização do nó na topologia, ele pode mudar conforme a topologia muda.

Por exemplo, talvez o nó 0x400 seja removido da rede Thread. Os nós 0x401 e 0x402 estabelecem novos links para diferentes extensores de malha e, como resultado, recebem um novo RLOC16 e RLOC:

Topologia de OT após a mudança

Tipos de endereços unicast

O RLOC é apenas um dos muitos endereços unicast IPv6 que um dispositivo Thread pode ter. Outra categoria de endereços são os identificadores de endpoint (EIDs, na sigla em inglês), que identificam uma interface Thread exclusiva em uma partição de rede Thread. Os EIDs são independentes da topologia da rede Thread.

Os tipos comuns de unicast são detalhados abaixo.

Um EID que identifica uma interface Thread acessível por uma única transmissão de rádio.
Exemplofe80::54db:881c:3845:57f4
IIDCom base no endereço estendido 802.15.4
EscopoLink-local
Detalhes
  • Usado para descobrir vizinhos, configurar links e trocar informações de roteamento.
  • Não é um endereço roteável
  • Sempre tem um prefixo fe80::/16

EID local da malha (ML-EID)

Um EID que identifica uma interface Thread, independente da topologia de rede. Usado para alcançar uma interface de conversa na mesma partição de conversa. Também chamado de endereço local exclusivo (ULA).
Exemplofde5:8dba:82e1:1:416:993c:8399:35ab
IIDAleatório, escolhido após a conclusão do comissionamento
EscopoMesh-Local
Detalhes
  • Não muda conforme a topologia muda
  • Deve ser usado por aplicativos
  • Sempre tem um prefixo fd00::/8

Localizador de roteamento (RLOC)

Identifica uma interface de encadeamento com base na localização dela na topologia de rede.
Exemplofde5:8dba:82e1:1::ff:fe00:1001
IID0000:00ff:fe00:RLOC16
EscopoMesh-Local
Detalhes
  • Gerado quando um dispositivo se conecta a uma rede
  • Para entregar datagramas IPv6 em uma rede Thread
  • Mudanças conforme a topologia muda
  • Geralmente não usado por aplicativos

Localizador Anycast (ALOC)

Identifica uma interface de Thread por pesquisa de RLOC quando o RLOC de um destino não é conhecido.
Exemplofde5:8dba:82e1:1::ff:fe00:fc01
IID0000:00ff:fe00:fcXX
EscopoMesh-Local
Detalhes
  • fcXX = destino ALOC, que pesquisa o RLOC adequado
  • Geralmente não usado por aplicativos

Endereço unicast global (GUA)

Um EID que identifica uma interface Thread em um escopo global, além de uma rede Thread.
Exemplo2000::54db:881c:3845:57f4
IID
  • SLAAC: atribuído aleatoriamente pelo próprio dispositivo.
  • DHCP: atribuído por um servidor DHCPv6
  • Manual: atribuído pela camada de aplicativo
EscopoGlobal
Detalhes
  • Um endereço IPv6 público
  • Sempre tem um prefixo de 2000::/3

Multicast

O multicast é usado para comunicar informações a vários dispositivos de uma só vez. Em uma rede Thread, endereços específicos são reservados para uso de multicast com diferentes grupos de dispositivos, dependendo do escopo.

Endereço IPv6 Escopo Entregue para
ff02::1 Link-local Todas as FTDs e MEDs
ff02::2 Link-local Todas as FTDs
ff03::1 Mesh-Local Todas as FTDs e MEDs
ff03::2 Mesh-Local Todas as FTDs

Você pode notar que os dispositivos finais em modo de espera (SEDs, na sigla em inglês) não estão incluídos como destinatários na tabela de multicast acima. Em vez disso, o Thread define o endereço unicast IPv6 multicast baseado em prefixo de escopo local de link e local de domínio usado para todos os nós do Thread, incluindo SEDs. Esses endereços multicast variam de acordo com a rede Thread, porque são criados com base no prefixo unicast Mesh-Local. Consulte a RFC 3306 para mais detalhes sobre endereços multicast IPv6 baseados em prefixo unicast.

Escopos arbitrários além dos já listados também são compatíveis com dispositivos Thread.

Anycast

O Anycast é usado para rotear o tráfego para uma interface Thread quando o RLOC de um destino não é conhecido. Um localizador Anycast (ALOC) identifica a localização de várias interfaces em uma partição do Thread. Os últimos 16 bits de um ALOC, chamado de ALOC16, estão no formato 0xfcXX, que representa o tipo de ALOC.

Por exemplo, um ALOC16 entre 0xfc01 e 0xfc0f é reservado para agentes DHCPv6. Se o RLOC do agente DHCPv6 específico for desconhecido (talvez porque a topologia de rede mudou), uma mensagem poderá ser enviada a um ALOC do agente DHCPv6 para obter o RLOC.

A linha de execução define os seguintes valores ALOC16:

ALOC16 Tipo
0xfc00 Líder
0xfc01 a 0xfc0f Agente DHCPv6
0xfc10 a 0xfc2f Serviço
0xfc30 a 0xfc37 Comissionário
0xfc40 a 0xfc4e Agente de descoberta de vizinhos
0xfc380xfc3f
0xfc4f0xfcff
Reservado

Recapitulação

O que você aprendeu:

  • Uma rede Thread consiste em três escopos: Link-Local, Mesh-Local e Global.
  • Um dispositivo Thread tem vários endereços IPv6 unicast.
    • Um RLOC representa a localização de um dispositivo na rede Thread.
    • Um ML-EID é exclusivo de um dispositivo Thread em uma partição e deve ser usado por aplicativos.
  • O Thread usa multicast para encaminhar dados a grupos de nós.
  • O Thread usa anycast quando o RLOC de um destino é desconhecido

Para saber mais sobre o endereçamento IPv6 do Thread, consulte as seções 5.2 e 5.3 da especificação do Thread (em inglês).

Teste seu conhecimento

Quais três escopos são usados para endereçamento unicast em uma rede Thread?
Particular
Incorreto.
Interface-Local
Incorreto.
Link-local
Correto.
Site-Local
Incorreto.
Mesh-Local
Correto.
Global
Correto.
O que significa quando um dispositivo tem um ID da criança igual a 0?
O dispositivo é de uma criança.
Incorreto.
O dispositivo é compatível com extensores.
Quase, mas não.
O dispositivo é um extensor de rede mesh.
Correto. Um extensor de rede mesh sempre tem um ID filho de 0.
Uma câmera, que é um nó em uma rede Thread, recebe um novo RLOC16 e RLOC. Qual dos eventos a seguir pode ter causado isso?
Alguém baixou imagens da câmera remotamente.
Incorreto. Esse evento não teria relação com a rede Thread.
Um extensor de rede Mesh foi desconectado da rede.
Correto. Quando um extensor de malha sai de uma rede, a topologia da rede muda, o que pode fazer com que o dispositivo se promova a um extensor de malha e obtenha um novo RLOC.
A câmera entrou no modo de dormir, o que mudou a topologia da rede.
Incorreto. Entrar no modo de espera não faz com que um dispositivo receba um novo endereço de rede.
Um dispositivo em uma rede Thread se inscreve no endereço multicast ff03::2. O que isso nos diz sobre o dispositivo?
É um dispositivo final mínimo (MED, na sigla em inglês).
Incorreto.
É um dispositivo final completo (FED, na sigla em inglês).
Incorreto. (Dica: pode ser ou não um FED.)
É um dispositivo de thread mínimo (MTD, na sigla em inglês).
Incorreto.
É um dispositivo Thread completo (FTD, na sigla em inglês).
Correto. Apenas dispositivos Thread completos se inscrevem no endereço multicast ff03::2. Eles fazem isso no escopo Mesh-Local.
Que tipo de endereçamento e roteamento o Thread usa para encaminhar dados a grupos de nós?
unicast
Incorreto.
anycast
Incorreto.
multicast
Correto.
transmissão
Incorreto.
Que tipo de endereçamento e roteamento um dispositivo Thread usa quando o RLOC do destinatário da mensagem pretendida é desconhecido?
unicast
Incorreto.
anycast
Correto. O Anycast permite que um dispositivo alcance um nó cujo RLOC não é conhecido, endereçando o ALOC do dispositivo.
multicast
Incorreto.
transmissão
Incorreto.