# CoAP

Het Constrained Application Protocol (CoAP) is een gespecialiseerd weboverdrachtsprotocol voor gebruik met beperkte knooppunten en beperkte netwerken in het Internet of Things. Het protocol is ontworpen voor machine-to-machine (M2M) -applicaties zoals smart energy en building automation.

CoAP is een internetprotocol (service layer protocol) dat is ontwikkeld door het Internet Engineering Task Force (IETF). Het is ontworpen voor kleinere apparaten die niet veel rekenkracht bezitten en op beperkte netwerken (constrained networks) zitten. Dit was nodig omdat het HTTP protocol soms te veel rekenkracht vraagt.

# Begrip

CoAP is ontworpen voor communicatie tussen toestellen op eenzelfde beperkt netwerk (machine to machine of M2M), toestellen en algemene knooppunten (general nodes) op het internet, en toestellen op verschillende beperkte netwerken die verbonden zijn met internet. (CoAP wordt ook voor bijvoorbeeld SMS gebruikt.) CoAP kan worden gebruikt voor microcontrollers die slechts 10 kibibyte (= 10.24 kilobytes) RAM en 100 kibibyte (= 102.4 kilobytes) ruimte hebben voor code.

De pakketten die via CoAP worden verstuurd zijn veel kleiner dan die van HTTP + TCP, eenvoudig te genereren en kunnen ter plekke worden ontleed (parsed) zonder extra RAM te verbruiken, wat handig is voor apparaten met beperkte capaciteiten.

CoAP gebruikt, in tegenstelling tot veel HTTP toepassingen, UDP in plaat van TCP. Door het gebruik van UDP in plaat van TCP is het protocol minder beveiligd dan protocollen die gebonden zijn aan TCP. De beveiliging kan echter verbeterd worden door het gebruik van DTLS (dit komt later nog aan bod).

CoAP maakt gebruik van een server/client model waarbij clients verzoeken kunnen sturen naar de server en de server antwoorden terug stuurt. Clients kunnen middelen (resources) ophalen, plaatsen, posten en verwijderen (GET, PUT, POST, DELETE). Het server/client model dat gebruikt wordt door CoAP is dus een één-op-één interactie en heeft een asynchrone berichtenuitwisseling.

CoAP kan makkelijk vertaald worden naar HTTP waardoor het makkelijk kan geïntegreerd worden voor het web terwijl het ook voldoet aan gespecialiseerde vereisten zoals multicast-ondersteuning, zeer lage overhead en eenvoud (wat belangrijk is voor IoT en M2M toestellen).

Het protocol is gebaseerd op een REST-model (net zoals het HTTP protocol). REST (representational state transfer) is een software-architectuur voor gedistribueerde mediasystemen zoals het wereldwijde web. Net zoals HTTP, kan CoAP verschillende payloads dragen en identificeren.

Overview of CoAP Protocol for Constraint Devices

CoAP maakt gebruik van URI (Uniform Resource Identifier) om zaken zoals capaciteiten en interactieverwachtingen te delen met knooppunten op een netwerk. CoAP heeft een staatloze HTTP-toewijzing, waardoor proxy’s kunnen worden gebouwd waardoor er toegang tot CoAP middelen (resources) kan worden verkregen via HTTP op een uniforme manier, of voor HTTP simpele interfaces kunnen worden gerealiseerd via CoAP.

Het URI-schema van CoAP lijk sterk op dat van HTTP. Het wordt als volgt opgebouwd:
"coap:" "//" host [ ":" port ] path-abempty [ "?" query ]

# Berichtformaten

Het kleinste CoAP-bericht is 4 bytes lang als Token, Opties en Payload worden weggelaten. CoAP maakt gebruik van twee berichttypen, verzoeken en antwoorden, met behulp van een eenvoudig, binair, standaard headerformaat. De basiskop kan worden gevolgd door opties in een geoptimaliseerde Type-Lengte-Waarde-indeling. CoAP is standaard gebonden aan UDP en optioneel aan DTLS , wat een hoog niveau van communicatiebeveiliging biedt.

Alle bytes na de headers in het pakket worden beschouwd als de berichttekst. De lengte van de berichttekst wordt geïmpliceerd door de datagramlengte. Indien gebonden aan UDP, MOET het hele bericht binnen een enkel datagram passen. Bij gebruik met 6LoWPAN zoals gedefinieerd in RFC 4944 , MOETEN berichten in een enkel IEEE 802.15.4- frame passen om fragmentatie te minimaliseren.

Offsets Octet 0 1 2 3
Octet Bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
4 32 VER, Type, Token Length Request/Response Code Message ID Message ID
8 64 Token (0 - 8 bytes) Token (0 - 8 bytes) Token (0 - 8 bytes) Token (0 - 8 bytes)
12 96 Token (0 - 8 bytes) Token (0 - 8 bytes) Token (0 - 8 bytes) Token (0 - 8 bytes)
16 128 Options (If Available) Options (If Available) Options (If Available) Options (If Available)
20 160 1 1 1 1 1 1 1 1 Payload (If Available) Payload (If Available) Payload (If Available)

# Een Aantal Implementaties:

Name Progamming Language Implemented CoAP version Client/Server Implemented CoAP features License Link
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
Californium Java RFC 7252 Client + Server Observe, Blockwise Transfers, DTLS EPL+EDL https://www.eclipse.org/californium/
libcoap C RFC 7252 Client + Server Observe, Blockwise Transfers, DTLS BSD/GPL https://github.com/obgm/libcoap

Hier kan je alle implemenaties vinden (opens new window)

COAP

# CoAP-groepscommunicatie

In veel CoAP-toepassingsdomeinen is het essentieel om de mogelijkheid te hebben om meerdere CoAP-bronnen als een groep aan te spreken, in plaats van elke bron afzonderlijk aan te spreken (bijv. Om alle voor CoAP geschikte lichten in een kamer aan te zetten met een enkel CoAP-verzoek dat wordt geactiveerd door het wisselen van de lichtschakelaar). Om aan deze behoefte te voldoen, heeft de IETF een optionele uitbreiding voor CoAP ontwikkeld in de vorm van een experimentele RFC: Groepscommunicatie voor CoAP - RFC 7390 Deze extensie is afhankelijk van IP-multicast om het CoAP-verzoek aan alle groepsleden te bezorgen.

Het gebruik van multicast heeft bepaalde voordelen, zoals het verminderen van het aantal pakketten dat nodig is om het verzoek aan de leden te bezorgen. Multicast heeft echter ook zijn beperkingen, zoals slechte betrouwbaarheid en cachevriendelijk zijn. Een alternatieve methode voor CoAP-groepscommunicatie waarbij gebruik wordt gemaakt van unicasts in plaats van multicasts, is afhankelijk van een tussenpersoon waar de groepen worden gemaakt. Klanten sturen hun groepsaanvragen naar de tussenpersoon, die op zijn beurt individuele unicast-verzoeken naar de groepsleden stuurt, de antwoorden van hen verzamelt en een geaggregeerd antwoord terugstuurt naar de klant.

# Verschil MQTT & SOAP


bron: A Reference Guide to IoT

# Besluit

  • Dit protocol is gemaakt voor IoT aangezien IoT steeds groter zal worden en miljarden knooppunten zal nodig hebben, welke meestal heel goedkoop gemaakt zijn en weinig capaciteiten hebben.
  • CoAP is gebonden aan UDP (en DTLS voor veiligere communicatie) omdat deze protocollen minder rekenkracht vragen dan TCP.
  • COAP is een alternatief is voor het (oudere) MQTT.

# Bronvermelding

© 2024 Arteveldehogeschool Laatst bijgewerkt: 7/4/2020, 11:43:09