CoAP

Constrained Application Protocol

Breno Valente Manhães, Guilherme Oliveira Rolim e Frederico Rocha Boller


Introdução


O CoAP é um protocolo de aplicação projetado para ser utilizado em dispositivos com recursos limitados, como os encontrados em redes de IoT. Ele é baseado em UDP, sendo leve e eficiente em termos de consumo de energia e largura de banda. O CoAP segue o paradigma de comunicação cliente-servidor e utiliza uma estrutura RESTful, semelhante ao HTTP, mas otimizada para ambientes com restrições.

Este protocolo foi desenvolvido pelo grupo de trabalho CoRE da IETF para atender às necessidades específicas de comunicação em redes de sensores, dispositivos embarcados e outras aplicações de IoT. Ele foi formalizado na RFC 7252 em 2014, em um momento em que o crescimento da IoT demandava protocolos que fossem mais eficientes do que os tradicionais, como o HTTP, em termos de consumo de energia, capacidade de processamento e largura de banda.

A criação do CoAP foi impulsionada pela necessidade de fornecer um protocolo que pudesse funcionar bem em redes com alta latência, baixa largura de banda e dispositivos com recursos limitados, algo que o não conseguia oferecer de forma eficiente. O objetivo era permitir que dispositivos finais na rede pudessem comunicar-se de maneira confiável com servidores centrais ou uns com os outros, sem exigir o overhead que os protocolos convencionais traziam.

Arquitetura do CoAP
Figura 1: Arquitetura básica do CoAP
Obtido de researchgate.net

A principal diferença entre os dois protocolos está no fato do HTTP funcionar sobre TCP, que, embora ofereça entrega confiável e orientada a conexão, aumenta o overhead devido ao controle de conexão e retransmissão de pacotes. Já o CoAP opera sobre o UDP, o que reduz o overhead e o torna mais leve e rápido em redes com restrições de recursos. Além disso, o CoAP suporta operações assíncronas nativamente, enquanto o HTTP depende de extensões como WebSocket para comportamento semelhante. Finalmente, o HTTP tem um cabeçalho de tamanho variável enquanto o cabeçalho do CoAP é limitado e pequeno. Em resumo, o CoAP é otimizado para eficiência em energia e largura de banda, enquanto o HTTP foi projetado de forma mais generalista para redes robustas.

Como este é um trabalho de Redes de Computadores, muitas siglas serão usadas para descrever protocolos e modelos ao longo do trabalho. Pensando em facilitar o entendimento do leitor, criamos uma pequena lista de termos relevantes com seus significados, que serão referenciados por meio de hiperlinks ao longo do texto. Esta lista pode ser acessada na seção de Glossário.

Arquitetura e Funcionamento do CoAP


Modelo de Comunicação (Cliente-Servidor, Assíncrono)

O CoAP segue o modelo tradicional de comunicação cliente-servidor, no qual o cliente faz requisições a um servidor, e o servidor responde com os dados solicitados ou uma confirmação de que a operação foi realizada. No entanto, o CoAP também permite interações assíncronas, possibilitando que clientes e servidores troquem mensagens sem a necessidade de manter uma conexão ativa durante toda a comunicação, o que é ideal para economizar banda e poder de processamento.

Como o CoAP utiliza UDP em vez de TCP, ele implementa um mecanismo próprio para garantir a confiabilidade das mensagens por meio de confirmações e retransmissões, se necessário. A comunicação pode ser confirmável (com a garantia de entrega) ou não confirmável (sem garantia de entrega, útil para economizar recursos em algumas situações).

Estrutura de Mensagens CoAP

O protocolo CoAP usa mensagens compactas, formadas por campos que permitem uma comunicação eficiente em redes de baixa largura de banda. As mensagens possuem os seguintes campos principais:

Cabeçalho do CoAP
Figura 2: Cabeçalho do CoAP
Obtido de researchgate.net

Operações e Métodos do CoAP

O protocolo CoAP utiliza métodos semelhantes ao HTTP para realizar operações em recursos, que são identificados por uma URI (Identificador Uniforme de Recurso). Os métodos principais do CoAP são:

Outras Informações

Recursos e Características do CoAP


Gerenciamento de Recursos

O CoAP (Constrained Application Protocol) é um protocolo projetado para dispositivos com recursos limitados, como os usados em IoT (Internet das Coisas). Cada recurso em um servidor CoAP é identificado por uma URI (Identificador Uniforme de Recurso), similar ao HTTP, mas o CoAP foi otimizado para redes com baixa largura de banda e alta latência, minimizando o tráfego de comunicação. Ele também permite o uso de cache para que os clientes armazenem respostas e reduzam a necessidade de novas requisições, economizando recursos.

Observação de Recursos

O CoAP permite que clientes observem recursos, ou seja, que sejam notificados quando o estado de um recurso mudar. Isso elimina a necessidade de requisições repetidas para verificar atualizações. Esse mecanismo é útil em aplicações IoT, como sensores que enviam notificações apenas quando detectam alterações. O servidor envia notificações ao cliente de forma assíncrona, reduzindo o consumo de largura de banda e de energia dos dispositivos.

Tipos de Mensagens e Confirmabilidade

O CoAP utiliza UDP, que não garante entrega, mas ele oferece seu próprio mecanismo para maior confiabilidade, com quatro tipos de mensagens:

  • Confirmáveis (CON): Essas mensagens requerem uma confirmação (ACK) do destinatário. Se a confirmação não for recebida, o remetente retransmite a mensagem até atingir o limite de tentativas. Esse tipo é usado para dados importantes, onde a entrega precisa ser garantida.
  • Não Confirmáveis (NON): Não exigem confirmação, sendo ideais para dados que não requerem garantia de entrega, como leituras periódicas de sensores.
  • Acknowledgments (ACK): Confirmações enviadas em resposta a mensagens confirmáveis, informando que a mensagem foi recebida.
  • Reset (RST): Usado quando uma mensagem recebida não pôde ser processada, indicando que o destinatário não entendeu ou não conseguiu lidar com a mensagem.

Segurança no CoAP


Implementação de DTLS (Datagram Transport Layer Security)

O CoAP utiliza o protocolo DTLS (Datagram Transport Layer Security) para garantir a segurança das comunicações. O DTLS é a versão do TLS adaptada para funcionar sobre o UDP, garantindo a integridade, confidencialidade e autenticação das mensagens trocadas no CoAP. O DTLS usa algoritmos de criptografia para proteger o conteúdo das mensagens, garantindo que apenas os destinatários autorizados possam acessá-lo. Após a negociação de uma sessão segura, o cliente e o servidor compartilham uma chave de sessão, usada para criptografar e descriptografar os dados transmitidos. Isso impede que qualquer interceptador possa ler o conteúdo das mensagens.

Para verificar que as mensagens não foram alteradas durante a transmissão, o DTLS utiliza funções de hash (como SHA-256) em conjunto com um código de autenticação de mensagem (MAC, Message Authentication Code). Cada mensagem inclui um MAC que o destinatário pode verificar, comparando-o com o valor calculado para a mensagem recebida. Isso garante que, se a mensagem foi alterada, a verificação falhará, detectando a adulteração.

O DTLS usa certificados digitais para autenticar os participantes da comunicação, garantindo que tanto o cliente quanto o servidor são quem dizem ser. No início da conexão, ocorre o processo de handshake, onde são trocadas informações para autenticação mútua.

Como o UDP não garante ordem ou entrega dos pacotes, o DTLS introduz números de sequência e retransmissão de pacotes perdidos. Cada mensagem é numerada, e o destinatário verifica a sequência ao receber, descartando pacotes duplicados e solicitando retransmissões quando necessário. Isso impede ataques de repetição (replay attacks), nos quais um invasor tenta retransmitir mensagens antigas para manipular a comunicação

O DTLS adapta o handshake do TLS, possibilitando a troca inicial de chaves e a autenticação. Durante o handshake, o DTLS lida com a possível perda de pacotes, incluindo retransmissões automáticas e controles para evitar inconsistências. Uma vez estabelecida a conexão, a chave de sessão resultante do handshake é usada para criptografar e autenticar as mensagens subsequentes.

Cabeçalho do CoAP
Figura 3: Visualização do procedimento de Handshake no DTLS
learn.microsoft.com

Modos de Segurança do CoAP

O CoAP oferece diferentes modos de segurança para proteger a comunicação entre dispositivos. Cada modo tem características próprias, e diz respeito principalmente aos metódos de autenticação que serão usados pelo DTLS:

  • Nosec: Sem segurança - Comunicação sem criptografia ou autenticação. Usado para cenários onde a segurança não é necessária ou já é implementada em uma camada mais baixa. No caso do CoAP Multicast, esta opção está sempre ligada pois o DTLS não suporta multicast.
  • PSK (Pre-Shared Key): Chave pré-compartilhada - Utiliza uma chave secreta compartilhada previamente entre as partes para autenticação e criptografia simples. Adequado para dispositivos com recursos limitados.
  • Raw Public Key: Chave pública bruta - Baseado em chaves públicas sem a necessidade de certificados. Utiliza a criptografia assimétrica para autenticação, mas sem a infraestrutura de uma autoridade certificadora.
  • Certificates: Certificados X.509 - Utiliza certificados digitais para autenticação de ambos os lados e criptografia. Ideal para cenários mais complexos, onde a segurança é essencial e há infraestrutura de PKI (Public Key Infrastructure) disponível.

Aplicações e Casos de Uso do CoAP


Internet das Coisas (IoT)

O CoAP é amplamente adotado em soluções de IoT, principalmente devido à sua capacidade de operar eficientemente em redes com recursos limitados. Sua leveza e eficiência energética são características fundamentais para dispositivos IoT, que frequentemente operam em condições de baixa largura de banda e com restrições de poder computacional e armazenamento. O CoAP permite a comunicação eficiente entre sensores, atuadores e servidores, trocando pequenos pacotes de dados com baixo custo de transmissão, o que o torna uma escolha ideal para esse tipo de aplicação, onde a economia de energia e a minimização de tráfego de rede são essenciais.

Sensores e Dispositivos de Baixa Potência

Dispositivos e sensores de baixa potência, como aqueles usados em sistemas de monitoramento ambiental ou dispositivos de saúde conectados, podem se beneficiar do CoAP. Sua arquitetura otimizada permite que esses dispositivos funcionem com eficiência, mesmo com restrições de processamento e memória. O CoAP facilita o funcionamento de sensores que medem variáveis como temperatura, umidade ou pressão, que enviam dados periódicos para servidores ou outros dispositivos. Além disso, o protocolo permite que esses dispositivos entrem em modos de economia de energia quando não estão em uso, o que é crucial em cenários de dispositivos móveis ou alimentados por baterias, prolongando significativamente sua vida útil e diminuindo a necessidade de manutenção.

Cidades Inteligentes (Smart Cities) e Automação Residencial

Em projetos de cidades inteligentes, o CoAP desempenha um papel fundamental ao conectar dispositivos e sistemas em uma infraestrutura urbana eficiente. Ele é utilizado em redes de monitoramento de tráfego, sistemas de iluminação pública inteligente, controle de qualidade do ar e até na gestão de resíduos urbanos. A capacidade de operar de maneira eficiente em redes com largura de banda limitada torna o CoAP ideal para cidades que buscam otimizar o uso de recursos e reduzir o consumo de energia.

No contexto de automação residencial, o CoAP facilita o controle de dispositivos domésticos conectados, como termostatos, câmeras de segurança, fechaduras inteligentes e eletrodomésticos. Esses dispositivos, que exigem comunicação eficiente para proporcionar conforto e segurança, podem se beneficiar do CoAP pela sua leveza e eficiência no consumo de energia. Além disso, o CoAP permite a comunicação entre dispositivos em um ambiente doméstico sem sobrecarregar a rede, o que é essencial em casas com múltiplos dispositivos IoT interconectados.

Uso do Multicast no CoAP

O CoAP permite o envio de requisições multicast para um grupo de dispositivos, o que é útil para descobrir serviços disponíveis ou enviar mensagens para vários dispositivos ao mesmo tempo. Esse tipo de comunicação funciona apenas com o protocolo UDP, o que significa que não há criptografia ou autenticação na camada de transporte, tornando a segurança um ponto de atenção. Para evitar congestionamento na rede, as requisições multicast são enviadas como Non-confirmable, sem garantia de entrega, e os servidores que decidem responder a elas esperam um tempo aleatório (chamado de "Leisure") antes de enviar a resposta individualmente para o cliente. O proxy pode lidar com requisições multicast, obtendo respostas dos servidores e enviando-as de volta ao cliente original. É importante lembrar que, devido à falta de segurança na camada de transporte, mecanismos adicionais de segurança na camada de aplicação ou restrições de acesso à rede multicast podem ser necessários.

Implementações e Ferramentas


Bibliotecas e Ferramentas Open Source

Existem várias bibliotecas e ferramentas open source para o desenvolvimento de aplicações CoAP. Algumas das mais conhecidas incluem:

  • libcoap: Uma implementação leve e altamente configurável do CoAP em C, amplamente usada para desenvolver aplicações para dispositivos IoT.
  • CoAPthon: Uma biblioteca CoAP escrita em Python, que oferece uma interface simples para desenvolver servidores e clientes CoAP, facilitando testes e simulações.
  • Eclipse Californium: Uma das bibliotecas CoAP mais populares e robustas, desenvolvida pela fundação Eclipse, suportando tanto o modo cliente quanto servidor, com suporte para DTLS.
  • Node-CoAP: Biblioteca para Node.js que permite a criação de aplicações IoT baseadas em JavaScript, utilizando CoAP como protocolo de comunicação.

Exemplos de Implementação em Plataformas de IoT

O CoAP já foi implementado em várias plataformas de IoT, tornando-se parte fundamental de soluções que exigem comunicação eficiente entre dispositivos. Exemplos incluem:

  • Contiki OS: Um sistema operacional para a IoT que possui suporte nativo ao CoAP, permitindo que dispositivos embarcados se comuniquem de forma eficiente em redes com restrições de energia e processamento.
  • RIOT OS: Outra plataforma IoT que implementa o CoAP, usada em dispositivos de baixa potência e com recursos limitados.
  • Arduino: Embora o Arduino seja um microcontrolador com recursos limitados, existem bibliotecas de CoAP que permitem a comunicação entre dispositivos Arduino e outros sistemas IoT.
  • ESP8266/ESP32: Estes microcontroladores amplamente usados em soluções IoT também possuem bibliotecas que suportam o CoAP, facilitando o desenvolvimento de projetos como sistemas de automação residencial ou redes de sensores.

Conclusão


Benefícios do CoAP em Ambientes Restritos

O CoAP é um protocolo especialmente útil em ambientes com restrições severas de recursos, como baixa largura de banda, processamento limitado e dispositivos alimentados por baterias. Ele é leve, eficiente e facilita a comunicação entre dispositivos IoT, proporcionando interoperabilidade com a web através de sua compatibilidade com arquiteturas RESTful e o HTTP.

Sua estrutura simples e o uso de UDP minimizam a sobrecarga de comunicação, o que é ideal para redes de sensores e dispositivos embarcados que precisam enviar pequenas quantidades de dados de forma rápida e eficiente. Além disso, a capacidade de observar recursos (CoAP Observe) permite um mecanismo de comunicação eficiente, reduzindo o número de mensagens trocadas entre dispositivos.

Considerações Finais sobre o Uso do CoAP na IoT

O CoAP vem ganhando destaque como uma solução interessante para a comunicação em redes de IoT, especialmente por sua flexibilidade e por ser adequado a ambientes com recursos limitados. Ainda assim, vale a pena estar atento a algumas limitações, como questões de segurança e dificuldades de escalabilidade em redes de grande porte. Além disso, o uso de simuladores e de analisadores de rede são uma boa ajuda para testar sua eficiência em condições reais.

Dentro do universo da Internet das Coisas, o CoAP deve continuar sendo um elemento fundamental para possibilitar a comunicação entre milhares de dispositivos conectados, principalmente com o surgimento de novas soluções de automação e monitoramento. No entanto, para que o protocolo seja amplamente adotado no futuro, é importante que ele evolua para enfrentar desafios como a interoperabilidade entre sistemas e o fortalecimento da segurança.

Glossário


CoAP
Tema do trabalho, protocolo de aplicação para dispositivos IoT que permite comunicação eficiente com baixa largura de banda.

IoT
Internet das Coisas: rede de dispositivos conectados que trocam dados via internet.

UDP
User Datagram Protocol: Protocolo de transporte orientado a datagramas que prioriza velocidade em vez de confiabilidade.

TCP
Transmission Control Protocol: protocolo de transporte que garante a entrega confiável de dados entre dispositivos na rede, corrigindo erros e retransmitindo pacotes quando necessário. Juntos, TCP e UDP são os protocolos mais usados e mais importantes na camada de transporte do modelo TCP/IP.

REST
Estilo de arquitetura para sistemas de software que define princípios de comunicação entre componentes de rede, podendo ser implementado com diversos protocolos, como HTTP, CoAP e MQTT.

HTTP
Protocolo de transferência de hipertexto, principal protocolo de aplicação utilizado para comunicação na web.

CoRE
Constrained RESTful Environments: iniciativa para adaptar o REST para ambientes com restrições, como dispositivos IoT.

IETF
Internet Engineering Task Force: organização que desenvolve padrões para a internet.

RFC
Request for Comments: documentos que definem padrões, práticas e protocolos para a internet, desenvolvidos e publicados pela IETF.

TLS
Protocolo de segurança que fornece criptografia, integridade de dados e autenticação para comunicações na Internet, utilizado para proteger a transferência de dados em aplicações como navegadores web e serviços de e-mail.

Smart Cities
Cidades que utilizam tecnologias da informação e comunicação (TIC) para melhorar a eficiência dos serviços urbanos e a qualidade de vida dos cidadãos, empregando dispositivos conectados e coleta de dados em tempo real para gerenciar recursos e oferecer serviços mais responsivos e sustentáveis.

Perguntas e Respostas sobre o CoAP


1 - Qual a principal diferença do CoAP para o HTTP, e qual o motivo desta diferença?
O HTTP utiliza o TCP enquanto o CoAP utiliza o UDP. O motivo do CoAP utilizar UDP é que com o UDP há um menor gasto de recursos com os mecanismos de funcionamento do TCP, que acrescentam muito overhead e podem sobrecarregar uma rede limitada em recursos.

2 - Quais os principais ambientes de uso do CoAP?
Em dispositivos IoT aplicações em ambientes com recursos restritos, como sensores, atuadores, dispositivos móveis e sistemas de controle remoto.

3 - Qual é o protocolo de segurança utilizado pelo CoAP e que serviços ele fornece?
O protocolo é o DTLS, que opera na camada de transporte e fornece confidencialidade, integridade e autenticação ao CoAP.

4 - Qual o modelo de comunicação do CoAP?
O CoAP utiliza um modelo cliente-servidor que pode ser síncrono (no caso do uso de mensagens confirmáveis) ou assíncrono.

5 - Quais os principais métodos do CoAP?
São métodos muito parecidos com os do HTTP, como GET, POST , PUT e DELETE.

Referências Bibliográficas


  • Shelby, Z., Hartke, K., & Bormann, C. (2014). The Constrained Application Protocol (CoAP). RFC 7252. RFC Editor. Disponível em: https://www.rfc-editor.org/rfc/rfc7252
  • CoAP Space. (n.d.). Disponível em: https://coap.space/
  • Colitti, W., Steenhaut, K., & De Caro, N. (2014). CoAP: An Application Protocol for Billions of Tiny Internet Nodes. IEEE Communications Magazine, 49(12), 92-100.
  • Lea, P. (2018). Internet of Things for Architects. Packt Publishing.
  • Pfister, C. (2011). Getting Started with the Internet of Things: Connecting Sensors and Microcontrollers to the Cloud. O'Reilly Media.

2024.2