Neste post, você aprenderá sobre os diferentes tipos de mensagens usados no LoRaWAN 1.0.x e 1.1. Esses tipos de mensagens são usados para transportar comandos MAC e dados de aplicativos. O exame de certificação Things Fundamentals espera que você tenha conhecimento básico sobre os seguintes tópicos em relação aos tipos de mensagens:
- Mensagens de uplink e downlink;
- Tipos de mensagens MAC e seus usos;
- Envio de comandos MAC no campo FOpts;
- Envio de comandos MAC e dados de aplicação no campo FRMPayload;
- Chaves usadas para criptografar cada campo que carrega comandos MAC e dados de aplicativos;
- Chaves usadas para calcular o Código de Integridade da Mensagem (MIC) de cada mensagem.
Mensagens de uplink e downlink
As mensagens LoRa podem ser divididas em mensagens de uplink e downlink com base na direção em que viajam.
Mensagens de uplink
As mensagens de uplink são enviadas por dispositivos finais para o Network Server retransmitidas por um ou mais gateways. Se a mensagem de uplink pertencer ao Application Server ou ao Join Server, o servidor da rede a encaminhará para o receptor correto.
Mensagens de downlink
Cada mensagem de downlink é enviada pelo Network Server para apenas um dispositivo final e retransmitida por um único gateway. Isso inclui algumas mensagens iniciadas pelo Application Server e pelo Join Server também.
Tipos de mensagens MAC
LoRaWAN define vários tipos de mensagens MAC. A tabela a seguir apresenta os tipos de mensagens MAC que podem ser encontrados no LoRaWAN 1.0.x e 1.1.
LoRaWAN 1.0.x | LoRaWAN 1.1 | Description |
Join-request | Join-request | An uplink message, used by the over-the-air activation (OTAA) procedure |
Join-accept | Join-accept | A downlink message, used by the over-the-air activation (OTAA) procedure |
Unconfirmed Data Up | Unconfirmed Data Up | An uplink data frame, confirmation is not required |
Unconfirmed Data Down | Unconfirmed Data Down | A downlink data frame, confirmation is not required |
Confirmed Data Up | Confirmed Data Up | An uplink data frame, confirmation is requested |
Confirmed Data Down | Confirmed Data Down | A downlink data frame, confirmation is requested |
RFU | Rejoin-request | 1.0.x – Reserved for Future Usage1.1 – Uplink over-the-air activation (OTAA) Rejoin-request |
Proprietary | Proprietary | Used to implement non-standard message formats |
Mensagens de solicitação de adesão, solicitação de reingresso e aceitação de adesão
No LoRaWAN 1.0.x, dois tipos de mensagens MAC são usados pelo procedimento Over-The-Air-Activation (OTAA):
- Solicitação de adesão Join-request
- Aceite Join-accept
No LoRaWAN 1.1, três tipos de mensagens MAC são usados pelo procedimento Over-The-Air-Activation (OTAA) e para fins de roaming:
- Solicitação de adesão Join-request
- Aceite Join-accept
- Solicitação de reingresso Rejoin-request
Solicitação de adesão
A mensagem de solicitação de adesão é sempre iniciada por um dispositivo final e enviada ao Network Server. Nas versões LoRaWAN anteriores a 1.0.4, a mensagem de solicitação de adesão é encaminhada pelo Network Server para o Application Server. No LoRaWAN 1.1 e 1.0.4+, o Network Server encaminha a mensagem de solicitação de ingresso para o servidor de ingresso do dispositivo. A mensagem de solicitação de adesão não é criptografada.
Aceite de adesão
Nas versões LoRaWAN anteriores a 1.0.4, a mensagem Join-accept é gerada pelo Application Server. No LoRaWAN 1.1 e 1.0.4+ a mensagem Join-accept é gerada pelo Join Server. Em ambos os casos a mensagem passa pelo Network Server. Em seguida, o Network Server encaminha a mensagem Join-accept para o dispositivo final correto. A mensagem Join-accept é criptografada da seguinte maneira.
- No LoRaWAN 1.0, a mensagem Join-accept é criptografada com AppKey.
- No LoRaWAN 1.1, a mensagem Join-accept é criptografada com chaves diferentes, conforme mostrado na tabela abaixo.
If triggered by | Encryption Key |
Join-request | NwkKey |
Rejoin-request type 0, 1, and 2 | JSEncKey |
Solicitação de reingresso
A mensagem de solicitação de reingresso é sempre iniciada por um dispositivo final e enviada ao Network Server. Existem três tipos de mensagens de solicitação de reingresso: Tipo 0, 1 e 2. Esses tipos de mensagens são usados para inicializar o novo contexto de sessão para o dispositivo final. Para a mensagem de solicitação de reingresso, a rede responde com uma mensagem de aceitação de ingresso.
Mensagens de dados
Existem 4 tipos de mensagens de dados usados no LoRaWAN 1.0.x e 1.1. Esses tipos de mensagens de dados são usados para transportar comandos MAC e dados de aplicativos que podem ser combinados em uma única mensagem. As mensagens de dados podem ser confirmadas ou não confirmadas. As mensagens de dados confirmadas devem ser reconhecidas pelo receptor, enquanto as mensagens de dados não confirmadas não precisam ser reconhecidas pelo receptor.
Uma mensagem de dados é construída conforme mostrado abaixo:
A carga útil MAC das mensagens de dados consiste em um cabeçalho (FHDR) seguido por um campo opcional de porta (FPort) e uma carga útil de opcional (FRMPayload).
7 to 22 bytes | 0 to 1 byte | 0 to N bytes |
FHDR | FPort | FRMPayload |
O cabeçalho (FHDR) da carga útil MAC consiste dos seguintes campos:
4 bytes | 1 byte | 2 bytes | 0 to 15 bytes |
DevAddr | FCtrl | FCnt | FOpts |
O comprimento máximo do campo MAC Payload é específico da região e da taxa de dados e pode ser encontrado no post sobre Parâmetros Regionais.
Envio de comandos MAC e dados específicos do aplicativo
Uma mensagem de dados pode conter qualquer sequência de comandos MAC. Uma mensagem de dados pode transportar comandos MAC e dados de aplicação simultaneamente em campos separados. Os comandos MAC podem ser enviados no campo (FOpts) ou no campo de carga útil (FRMPayload) de uma mensagem de dados, mas não ambos simultaneamente. Os dados do aplicativo podem ser enviados no campo de carga útil (FRMPayload) de uma mensagem de dados. O campo FRMPayload NÃO PODE conter comandos MAC e dados de aplicativos simultaneamente.
Enviando comandos MAC no campo FOpts
Os comandos MAC podem ser incluídos no campo FOpts de uma mensagem de dados para envio. O comprimento total dos comandos MAC NÃO DEVE exceder 15 bytes.
- No LoRaWAN 1.0.x, esses comandos MAC acoplados são sempre enviados sem criptografia;
- No LoRaWAN 1.1, esses comandos MAC acoplados são sempre enviados criptografados usando o NwkSEncKey.
Envio de comandos MAC e dados específicos do aplicativo no campo FRMPayload
O campo FRMPayload pode conter comandos MAC ou dados de aplicativos. Se o campo FRMPayload não estiver vazio, o campo FPort deverá estar presente. Se o campo FPort estiver presente, então:
- O valor FPort=0 indica que o campo FRMPayload contém apenas comandos MAC. O comprimento total dos comandos MAC NÃO DEVE exceder o comprimento máximo do FRMPayload (específico da região);
- O valor FPort=1 a 223 indica que o campo FRMPayload contém dados do aplicativo.
A tabela a seguir mostra os valores possíveis para o campo FPort dependendo do que ele carrega.
FPort Value | Description |
0 | MAC commands only |
1 to 223 | Application-specific data |
224 | LoRaWAN MAC layer test protocol |
255 | Reserved for Future Use (RFU) |
Se o campo FRMPaylod contiver comandos MAC ou dados de aplicativo, o campo FRMPayload deverá ser criptografado antes que o Código de Integridade da Mensagem (MIC) seja calculado. Isso garante a confidencialidade da mensagem. A tabela a seguir mostra qual chave é usada para criptografar o campo FRMPayload em diferentes versões LoRaWAN.
FRMPayload | Direction | FPort | 1.0.x | 1.1 |
MAC Commands | Uplink/Downlink | 0 | NwkSKey | NwkSEncKey |
Application-specific data | Uplink/Downlink | 1 to 223 | AppSKey | AppSKey |
Calculando o Código de Integridade da Mensagem (MIC)
O Código de Integridade da Mensagem (MIC) garante a integridade e autenticidade de uma mensagem. O código de integridade da mensagem é calculado em todos os campos da mensagem e depois adicionado à própria mensagem. A lista a seguir mostra quais campos são usados para calcular o MIC para cada tipo de mensagem no LoRaWAN 1.0.x e 1.1.
LoRaWAN version | Message Type | Fields |
1.0.x | Join-request | MHDR | AppEUI | DevEUI | DevNonce |
1.0.x | Join-accept | MHDR | AppNonce | NetID | DevAddr | DLSettings | RxDelay | CFList |
1.0.x | Data messages (up and down) | MHDR | FHDR | FPort | FRMPayload |
1.1 | Join-request | MHDR | JoinEUI | DevEUI | DevNonce |
1.1 | Join-accept | MHDR | JoinNonce | NetID | DevAddr | DLSettings | RxDelay | CFList |
1.1 | Rejoin-request Type 0 and 2 | MHDR | Rejoin Type | NetID | DevEUI | RJcount0 |
1.1 | Rejoin-request Type 1 | MHDR | Rejoin Type | JoinEUI | DevEUI | RJcount1 |
1.1 | Data messages (up and down) | MHDR | FHDR | FPort | FRMPayload |
A tabela a seguir apresenta qual chave é usada para calcular o MIC de cada tipo de mensagem no LoRaWAN 1.0.x e 1.1.
LoRaWAN version | Message Type | Key |
1.0.x | Join-request | AppKey |
1.0.x | Join-accept | AppKey |
1.0.x | Uplink data message | NwkSKey |
1.0.x | Downlink data messages | NwkSKey |
1.1 | Join-request | NwkKey |
1.1 | Join-accept | JSIntKey |
1.1 | Rejoin-request Type 0 and 2 | SNwkSIntKey |
1.1 | Rejoin-request Type 1 | JSIntKey |
1.1 | Uplink data messages | FNwkSIntKey and SNwkSIntKey |
1.1 | Downlink data message | SNwkSIntKey |
Quando um dispositivo LoRaWAN 1.1 é provisionado com um servidor de rede LoRaWAN 1.0.x, o MIC de cada mensagem é calculado conforme mostrado na tabela a seguir.
Message Type | Key |
Join-request | NwkKey |
Join-accept | NwkKey |
Uplink data messages | FNwkSIntKey |
Downlink data messages | FNwkSIntKey |
Artigo original: https://www.thethingsnetwork.org/docs/lorawan/message-types/
Deixe uma resposta
Want to join the discussion?Feel free to contribute!