1. Introdução
O que são o Thread e o OTNS
O Thread é um protocolo de rede mesh sem fio de baixo consumo energético baseado em IP que permite comunicações seguras entre dispositivos e entre dispositivos e a nuvem. As redes Thread podem se adaptar a mudanças de topologia para evitar um único ponto de falha.
O OpenThread lançado pelo Google é uma implementação de código aberto do Thread. Apesar do pequeno tamanho do código e do espaço de armazenamento em memória, o OpenThread oferece suporte a todos os recursos definidos na especificação de linha de execução.
O OpenThread Network Simulator (OTNS) pode ser usado para simular redes Thread executando nós OpenThread simulados em plataformas POSIX. O OTNS oferece uma interface da Web fácil de usar (OTNS-Web) para visualizar e operar redes Thread simuladas. Também é possível fazer simulações com script (com Python).
O que você vai aprender
- Instalar o OTNS e as dependências
- Conheça os conceitos básicos da OTNS-CLI
- Como adicionar/mover/excluir nós do OpenThread no OTNS-Web
- Use outros recursos úteis do OTNS-Web para controlar a simulação de rede.
- Verificar se o OpenThread não tem ponto único de falha
- Conferir o tráfego de dados entre nós do OpenThread no Wireshark
Este codelab se concentra no OTNS-CLI e no OTNS-Web para uso interativo. Outros recursos do OTNS, como o script Python, não são abordados.
O que é necessário
- De preferência, Linux x86_64 ou Mac OS com Homebrew. O Ubuntu 22/24 no WSL2 do Windows também funciona, mas pode exigir algumas alterações manuais nas configurações.
- Git.
- Navegador da Web. O OTNS-Web usa um navegador da Web para mostrar simulações.
- Introdução à linha de execução. Você precisa conhecer os conceitos básicos de thread para entender o que é ensinado neste codelab.
Terminologia
O termo "roteador" é usado como o termo técnico para o extensor de malha Thread, que inicialmente era chamado de roteador Thread. "Node" se refere a qualquer dispositivo OpenThread simulado em uma simulação de OTNS.
2. Instalação
Receber o código OTNS
$ git clone https://github.com/openthread/ot-ns.git ./otns $ cd otns
Todos os comandos de console subsequentes neste codelab são executados no diretório otns
.
Inicialização e instalação
O script bootstrap
vai instalar dependências (incluindo Python3 e Go/Golang, se necessário) e o OTNS. Ele também cria os vários tipos de nó de OT que podem ser usados diretamente em uma simulação e realiza alguns testes básicos. Devido aos builds de nó, isso pode levar vários minutos.
$ ./script/bootstrap .... .... OTNS installed - use 'otns' to start it. $
Talvez seja necessário inserir uma senha para sudo
.
Se o otns
não estiver instalado corretamente
O script pode informar um erro como:
.... OTNS installed - please add ~/go/bin to your PATH variable first, to use it. $
Nesse caso, você precisa adicionar $(go env GOPATH)/bin
ao $PATH.
.
No caso de outros erros, é possível criar um problema no GitHub.
3. Executar o OTNS pela primeira vez
Execute otns
:
$ otns >_ ← OTNS-CLI prompt
Quando iniciado, o OTNS entra em um console da CLI (OTNS-CLI
) e inicia um navegador da Web para visualização e gerenciamento de rede (OTNS-Web
):
Se você só conseguir acessar uma página em branco para o OTNS-Web, provavelmente a WebGL não está ativada no navegador. Consulte https://superuser.com/a/836833 para saber como ativar o WebGL.
Nas próximas seções, você vai aprender a gerenciar simulações de OTNS usando OTNS-CLI
e OTNS-Web
.
4. Conheça o OTNS-CLI e o OTNS-Web
OTNS-CLI
OTNS-CLI
é a interface de linha de comando (CLI) para gerenciar simulações de OTNS.
$ otns >_ ← OTNS-CLI prompt
Você pode digitar comandos usando OTNS-CLI
. Consulte a referência da CLI do OTNS para conferir uma lista completa de comandos. Não se preocupe, você vai usar apenas alguns desses comandos neste codelab.
Digite o comando help
para conferir uma visão geral dos comandos da CLI. Essa lista é idêntica à referência da CLI.
> help add Add a node to the simulation and get the node ID. .... .... Done >
Para receber mais ajuda sobre um comando específico, use o nome dele, por exemplo:
> help add add Add a node to the simulation and get the node ID. Definition: .... .... >
OTNS-Web
OTNS-Web
é a ferramenta de visualização e gerenciamento de rede do OTNS. Ele fornece uma representação visual dos nós, mensagens e links da rede Thread simulada. Observe os vários elementos de OTNS-Web
:
5. Adicionar nós
Adicionar nós pelo OTNS-CLI
Adicione um roteador Thread à simulação:
> add router 1 Done
Um nó será criado em OTNS-Web
. O nó começa como um roteador e se torna um líder em alguns segundos:
Para facilitar o início das simulações de forma interativa, cada novo nó do OpenThread é comissionado por padrão com um conjunto padrão de parâmetros de rede.
Adicionar mais nós por OTNS-CLI
Agora vamos adicionar alguns nós de tipos diferentes.
> add fed 2 Done > add med 3 Done > add sed 4 Done
Aguarde alguns segundos para que os nós sejam mesclados em uma partição. Os nós em OTNS-Web
vão aparecer:
Também em OTNS-Web
, é possível selecionar qualquer um dos nós para acessar um painel com mais informações sobre ele. Por exemplo, na figura abaixo, o nó 1 está selecionado. A entrada "Função" no painel confirma que é um líder.
Adicionar nós por OTNS-Web
Também é possível adicionar nós usando OTNS-Web
. Clique no botão New Router
do Action Bar
. Um nó será criado à direita do nó selecionado. O novo roteador precisa se juntar à partição Thread existente:
Clique também nos botões FED, MED, SSED e BR na barra de ação para criar outros tipos de nós. Agora, há 9 nós no total. Se quiser, arraste alguns nós para outras posições para criar uma topologia de rede física diferente.
Agora você criou uma rede Thread de uma partição que contém muitos nós. Na próxima seção, vamos ajustar a velocidade da simulação para que ela seja executada mais rapidamente.
6. Ajustar velocidade
No momento, a simulação precisa estar sendo executada na velocidade 1X
, o que significa que o tempo decorrido até agora é o mesmo que o tempo real desde que o primeiro nó foi criado.
Ajustar a velocidade usando OTNS-CLI
É possível ajustar a velocidade de simulação usando OTNS-CLI
.
Definir a velocidade de simulação como 100X
> speed 100 Done
Os nós vão enviar mensagens com muito mais frequência do que antes.
Definir a velocidade de simulação como MAX
> speed max Done
A OTNS está tentando simular o mais rápido possível. Por isso, você vai notar que os nós estão enviando um grande número de mensagens.
Pausar simulação
> speed 0 Done
Definir a velocidade de simulação como 0
pausa a simulação.
Restaurar a simulação na velocidade normal
> speed 1 Done
Definir a velocidade de simulação como um valor maior que 0
retoma a simulação.
Ajustar a velocidade usando OTNS-Web
Botões de controle de velocidade
Encontre os botões de controle de velocidade no
Action Bar
. Os botões mostram a velocidade atual da simulação e podem ser usados para ajustar a velocidade da simulação e pausar/retomar a simulação.
Acelerar a simulação
Para acelerar a simulação, clique no botão até que a velocidade atinja
MAX
: .
Simulação lenta
Para desacelerar a simulação, clique no botão .
Pausar simulação
Clique no botão para pausar a simulação quando ela estiver em execução. O botão será alterado para
.
Retomar simulação
Clique no botão para retomar a simulação quando ela estiver pausada. O botão será alterado de volta para
.
Definir a velocidade de simulação como 10X
Para economizar tempo, use
OTNS-CLI
para ajustar a velocidade de simulação para
10X
para que possamos observar as mudanças de topologia na rede muito mais rapidamente.
> speed 10 Done
7. Ativar/desativar o rádio
Agora, a simulação precisa conter pelo menos dois roteadores (forma hexagonal), possivelmente um roteador de borda (forma quadrada) e muitos filhos, e ser executada a 10 vezes a velocidade.
Encontre o líder atual (borda vermelha) dos dois roteadores e clique uma vez para selecioná-lo:
Desativar o rádio
Clique no botão na barra de ações para desativar o rádio do nó líder. O líder não poderá enviar nem receber mensagens com o rádio desligado.
Aguarde cerca de 12 segundos (120 segundos no tempo de simulação) para que o outro roteador ou roteador de borda se torne o novo líder:
A rede Thread se recupera automaticamente da falha do líder formando uma nova partição com um novo líder. A nova partição também tem uma cor diferente.
Ativar o rádio
Selecione o líder que desativou o rádio. Clique no botão em
Action Bar
para restaurar a conectividade do rádio:
O líder precisa se conectar novamente à rede depois que a conectividade de rádio for restaurada.
8. Mover nós
O OTNS permite que os usuários movam os nós facilmente usando OTNS-CLI
ou OTNS-Web
.
Mover o nó por OTNS-CLI
Mova o nó do roteador de borda 9 para um novo local:
> move 9 50 50 Done
Mover o nó pelo OTNS-Web
Arraste o nó 5 para o canto inferior direito. Como o nó 5 está fora da cobertura de rádio dos outros roteadores, ele forma a própria partição com um novo ID. Os IDs de partição podem ser verificados no painel de informações do nó clicando nos nós.
Uma única linha verde ainda é desenhada entre os nós 5 e 9. Isso geralmente ocorre devido a informações desatualizadas sobre uma criança, que ainda são mantidas na tabela filha de um ex-pai. Ou pode ser informação desatualizada sobre a antiga conexão entre os roteadores 9 e 5. Ou, neste caso, talvez até um bug de renderização. Eventualmente, as informações antigas são limpas nos nós após o tempo limite adequado.
9. Excluir nós
Excluir nós com OTNS-CLI
Exclua o nó 5:
> del 5 Done
O nó 5 vai desaparecer da simulação:
Excluir nós com OTNS-Web
Selecione o nó do roteador de borda 9 e clique no botão no
Action Bar
para excluir o nó 9:
O Node 1
precisa se tornar o líder de uma nova partição, e todos os nós restantes serão anexados como filhos ao nó 1.
10. Contexto do nó OTNS-CLI
OTNS-CLI
fornece o modo de contexto do nó para facilitar a interação com os nós e ajudar os desenvolvedores a diagnosticar o status de um nó. Além disso, as ações de nó podem ser iniciadas nesse modo.
Entrar no modo de contexto do nó
Insira o contexto do nó 1:
> node 1 Done node 1>
O prompt da CLI mudou para node 1>
, indicando o contexto do nó atual. É possível digitar comandos da CLI do OpenThread para serem executados no nó como se você estivesse interagindo com ele diretamente.
Executar comandos no contexto do nó
node 1> state leader Done node 1> channel 11 Done node 1> panid 0xface Done node 1> networkname otns Done node 1> ipaddr fdde:ad00:beef:0:0:ff:fe00:fc00 fdde:ad00:beef:0:0:ff:fe00:b400 fd00:f00d:cafe:0:2505:8719:3685:ebfb fdde:ad00:beef:0:4fd9:b9ba:44e0:96cb fe80:0:0:0:e86a:e07:ec97:777 Done
Mudar para outro contexto de nó
node 1> node 2 Done node 2>
Sair do contexto do nó
node 1> exit Done >
Uma maneira alternativa de sair do contexto do nó é o comando node 0
.
11. Como visualizar registros de nó e capturas de pacotes
Registros do nó do OpenThread
Por padrão, o OTNS gera arquivos de registro detalhados para todos os nós OpenThread simulados. Eles podem ser visualizados no diretório ./tmp
. O nome do arquivo é 0_
. Por exemplo, um trecho de arquivo de registro é mostrado abaixo:
7616488 00:00:06.326 [I] MeshForwarder-: Received IPv6 UDP msg, len:90, chksum:5915, ecn:no, from:ca72650db7b856af, sec:no, prio:net, rss:-58.0
7616488 00:00:06.326 [I] MeshForwarder-: src:[fe80:0:0:0:c872:650d:b7b8:56af]:19788
7616488 00:00:06.326 [I] MeshForwarder-: dst:[ff02:0:0:0:0:0:0:1]:19788
7616488 00:00:06.326 [D] Mle-----------: Receive MLE message
7616488 00:00:06.326 [D] Mac-----------: Idle mode: Radio receiving on channel 11
7657544 00:00:06.367 [D] Mac-----------: ==============================[RX len=063]==============================
7657544 00:00:06.367 [D] Mac-----------: | 41 D8 7F CE FA FF FF 46 | 74 5A 33 9E 76 51 4E 7F | A......FtZ3.vQN. |
7657544 00:00:06.367 [D] Mac-----------: | 3B 02 F0 4D 4C 4D 4C 81 | E6 00 15 03 00 00 00 00 | ;..MLML......... |
7657544 00:00:06.367 [D] Mac-----------: | 00 00 00 01 46 86 7D FE | 06 CC DB 94 86 9C 88 0B | ....F.}......... |
7657544 00:00:06.367 [D] Mac-----------: | 1C 1E 26 9B 8D 21 2E 65 | 53 5A 43 4E A2 59 D6 | ..&..!.eSZCN.Y. |
7657544 00:00:06.367 [D] Mac-----------: ------------------------------------------------------------------------
7657544 00:00:06.367 [I] MeshForwarder-: Received IPv6 UDP msg, len:84, chksum:81e6, ecn:no, from:4e51769e335a7446, sec:no, prio:net, rss:-48.0
7657544 00:00:06.367 [I] MeshForwarder-: src:[fe80:0:0:0:4c51:769e:335a:7446]:19788
7657544 00:00:06.367 [I] MeshForwarder-: dst:[ff02:0:0:0:0:0:0:2]:19788
7657544 00:00:06.367 [D] Mac-----------: Idle mode: Radio receiving on channel 11
7833912 00:00:06.543 [I] Mle-----------: AttachState ParentReq -> Idle
7833912 00:00:06.543 [N] RouterTable---: Allocate router id 12
7833912 00:00:06.543 [N] Mle-----------: RLOC16 fffe -> 3000
7833912 set node RLOC16: fffe -> 3000
7833912 00:00:06.543 [D] SubMac--------: RadioShortAddress: 0x3000
7833912 00:00:06.543 [N] Mle-----------: Role detached -> leader
7833912 00:00:06.543 [N] Mle-----------: Partition ID 0x24c35f10
7833912 00:00:06.543 [I] RouterTable---: Route table
7833912 00:00:06.543 [I] RouterTable---: 12 0x3000 - me - leader
O tempo absoluto da simulação em microssegundos é mostrado à esquerda. O carimbo de data/hora hh:mm:ss
mostra o carimbo de data/hora do registro do próprio nó do OpenThread, que pode ser diferente do tempo de simulação absoluto.
Capturas de pacotes do Wireshark
Por padrão, todos os frames IEEE 802.15.4 transmitidos são capturados no arquivo PCAP current.pcap
. Esse arquivo pode ser lido pelo Wireshark durante ou após a simulação. Devido à criptografia de camada de link do Thread, uma ação de configuração única no Wireshark é necessária para definir a chave de descriptografia para OTNS corretamente. Por padrão, uma chave de rede conhecida é usada para facilitar a descriptografia de frames pelo Wireshark.
Confira um exemplo de inspeção de pacotes do OpenThread no Wireshark na captura de tela abaixo.
Para configurar a chave de descriptografia, selecione no menu Edit -> Preferences. Em seguida, na janela de preferências, selecione Protocols -> IEEE 802.15.4. Clique no botão Editar... ao lado de "Chaves de descriptografia". Clique em + para criar uma nova entrada e digite a chave 00112233445566778899aabbccddeeff
(32 caracteres) e selecione "Hash de thread" no campo "Hash de chave". O "índice da chave de descriptografia" pode ser deixado como 0
. Em seguida, clique em OK e OK novamente. Agora, o arquivo PCAP do OTNS será descriptografado corretamente quando carregado.
Os carimbos de data/hora mostrados na coluna "Tempo" (em segundos) correspondem aos valores absolutos do tempo de simulação mostrados nos registros do nó do OpenThread. Isso facilita a correlação das mensagens de registro com os frames de rádio transmitidos ou recebidos. No entanto, os valores normalmente não são idênticos até a precisão de um microssegundo: o hardware de rádio IEEE 802.15.4 simulado pode adicionar um atraso adicional depois que um frame de rádio é solicitado para ser enviado pela pilha OpenThread.
12. Parabéns
Parabéns, você executou sua primeira simulação de OTNS.
Você aprendeu a instalar o OTNS e as dependências dele. Você iniciou uma simulação de OTNS com nós simulados do OpenThread. Você aprendeu a manipular a simulação de várias maneiras usando OTNS-CLI
e OTNS-Web
.
Agora você sabe o que é o OTNS e como usá-lo para simular redes OpenThread.
A seguir
Confira alguns destes codelabs:
- Como simular uma rede Thread com o OpenThread
- Como simular uma rede Thread usando o OpenThread no Docker
- Criar uma rede Thread com placas nRF52840 e o OpenThread