CoAP (acrónimo inglés de Constrained Application Protocol) es un protocolo de la capa de aplicación de internet para dispositivos con recursos restringidos. CoAP permite que dispositivos con pocos recursos se puedan comunicar con cualquier nodo de Internet. CoAP es un protocolo de capa de aplicación dirigido a la internet de las cosas.[1][2][3]

Fig.1 Estructura protocolo CoAP

Propiedades

editar
  • El núcleo del protocolo está basado en la especificación internet RFC 7252 realizada por The Internet Engineering Task Force (IETF).
  • La eficiencia de la comunicación es muy importante, por tanto CoAP utiliza el protocolo de transporte UDP. Los errores y reintentos de mensajes se gestionan desde la capa de aplicación.
  • COAP es un protocolo que sigue el modelo cliente/servidor.
  • Opcionalmente emplea la seguridad DTLS (Datagram Transport Layer Security) que es la implementación del protocolo SSL sobre el protocolo UDP.[4]

Implementaciones

editar
Nombre Lenguaje de programación Versión CoAP implementada Cliente/Servidor Funcionalidades CoAP implementadas Licencia Enlace
aiocoap Python 3 RFC 7252 Client + Server Blockwise Transfers, Observe (parcial) MIT https://pypi.python.org/pypi/aiocoap
Californium Java RFC 7252 Client + Server Observe, Blockwise Transfers, DTLS EPL+EDL https://www.eclipse.org/californium
cantcoap C++/C RFC 7252 Client + Server BSD https://github.com/staropram/cantcoap
Canopus Go RFC 7252 Client + Server Core Apache License 2.0 https://github.com/zubairhamed/canopus
CoAP implementation for Go Go RFC 7252 Client + Server Core + Draft Subscribe MIT https://github.com/dustin/go-coap
CoAP.NET C# RFC 7252, coap-13, coap-08, coap-03 Client + Server Core, Observe, Blockwise Transfers 3-clause BSD https://github.com/smeshlink/CoAP.NET
CoAPSharp C#, .NET RFC 7252 Client + Server Core, Observe, Block, RD LGPL http://www.coapsharp.com
CoAPthon Python RFC 7252 Client + Server + Forward Proxy + Reverse Proxy Observe, Multicast server discovery, CoRE Link Format parsing, Block-wise MIT https://github.com/Tanganelli/CoAPthon
Copper JavaScript (Browser Plugin) RFC 7252 Client Observe, Blockwise Transfers 3-clause BSD https://github.com/mkovatsc/Copper https://addons.mozilla.org/firefox/addon/copper-270430/ (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
eCoAP C RFC 7252 Client + Server Core MIT https://gitlab.com/jobol/ecoap
Erbium for Contiki C RFC 7252 Client + Server Observe, Blockwise Transfers 3-clause BSD http://www.contiki-os.org/ (er-rest-example)
iCoAP Objective-C RFC 7252 Client Core, Observe, Blockwise Transfers MIT https://github.com/stuffrabbit/iCoAP
jCoAP Java RFC 7252 Client + Server Observe, Blockwise Transfers Apache License 2.0 https://code.google.com/p/jcoap/
libcoap C RFC 7252 Client + Server Observe, Blockwise Transfers, DTLS BSD/GPL http://sourceforge.net/projects/libcoap/develop
LibNyoci C RFC 7252 Client + Server Core, Observe, Block, DTLS MIT https://github.com/darconeous/libnyoci
lobaro-coap C RFC 7252 Client + Server Observe, Blockwise Transfers MIT http://www.lobaro.com/lobaro-coap
microcoap C RFC 7252 Client + Server MIT https://github.com/1248/microcoap
nCoap Java RFC 7252 Client + Server Observe, Blockwise Transfers, CoRE Link Format, Endpoint-ID-Draft BSD https://github.com/okleine/nCoAP
node-coap Javascript RFC 7252 Client + Server Core, Observe, Block MIT https://github.com/mcollina/node-coap
Ruby coap Ruby RFC 7252 Client + Server (david) Core, Observe, Block, RD MIT, GPL https://github.com/nning/coap https://github.com/nning/david
Sensinode C Device Library C RFC 7252 Client + Server Core, Observe, Block, RD Comercial https://silver.arm.com/browse/SEN00
Sensinode Java Device Library Java SE RFC 7252 Client + Server Core, Observe, Block, RD Comercial https://silver.arm.com/browse/SEN00
Sensinode NanoService Platform Java SE RFC 7252 Cloud Server Core, Observe, Block, RD Comercial https://silver.arm.com/browse/SEN00
SwiftCoAP Swift RFC 7252 Client + Server Core, Observe, Blockwise Transfers MIT https://github.com/stuffrabbit/SwiftCoAP
TinyOS CoapBlip nesC/C coap-13 Client + Server Observe, Blockwise Transfers BSD http://docs.tinyos.net/tinywiki/index.php/CoAP Archivado el 12 de marzo de 2013 en Wayback Machine.
txThings Python (Twisted) RFC 7252 Client + Server Blockwise Transfers, Observe (partial) MIT https://github.com/mwasilak/txThings/
FreeCoAP C RFC 7252 Client + Server + HTTP/CoAP Proxy Core, DTLS, Blockwise Transfers BSD http://www.freecoap.org Archivado el 24 de marzo de 2017 en Wayback Machine.
coap-rs Rust RFC 7252 Client + Server MIT https://github.com/Covertness/coap-rs

Comunicaciones en grupo con CoAP

editar

En muchas aplicaciones CoAP es esencial tener la posibilidad de comunicarse con diferentes nodos al mismo tiempo (por ejemplo para apagar o encender todas las luces a la vez). CoAP solventa esta necesidad con unas extensiones definidas en la recomendación RFC 7390 que implementa una difusión múltiple (multicast) a todos los nodos del grupo.

Véase también

editar
  • OMA LWM2M: protocolo abierto y de baja complejidad para la gestión de dispositivos IoT o M2M.

Referencias

editar
  1. coap.technology, ed. (20 de abril de 2017). «CoAP — Constrained Application Protocol | Overview» (en inglés). Archivado desde el original el 3 de enero de 2017. Consultado el 20 de abril de 2017. 
  2. Chen, Xi. www.cs.wustl.edu, ed. «Constrained Application Protocol for Internet of Things» (en inglés). Consultado el 20 de abril de 2017. 
  3. Joncas, Roxanne (20 de abril de 2017). eclipse.org, ed. «MQTT and CoAP, IoT Protocols» (en inglés). Consultado el 20 de abril de 2017. 
  4. «Hands-on with CoAP». Google Docs (en inglés). 20 de abril de 2017.