CoAP ( Constrained Application Protocol ) è un protocollo di trasferimento web ottimizzato per dispositivi e reti vincolate utilizzate nelle reti di sensori wireless per formare l' Internet delle cose . Basato sullo stile architettonico REST , consente di manipolare, attraverso un modello di interazione client-server , le risorse di comunicazione di oggetti e sensori identificati dagli URI facendo affidamento sullo scambio di richieste-risposte e metodi simili al protocollo HTTP .
Nel 2016, l'uso dei servizi web è comune nelle applicazioni Internet. CoAP estende questo paradigma all'Internet of Things e alle applicazioni M2M che possono così essere sviluppate con servizi web RESTful condivisi e riutilizzabili. Tenendo conto dei vincoli e delle esigenze dell'Internet of Things come il supporto asincrono o multicast . CoAP è destinato a diventare un protocollo applicativo onnipresente nel futuro Internet of Things.
Il protocollo CoAP si trova a livello di applicazione del livello OSI e si basa su UDP per la comunicazione. Implementa un metodo di osservazione delle risorse e fornisce funzioni di rilevamento dei dispositivi per ridurre al minimo l'intervento umano. Implementato con diverse lingue, questo protocollo può essere utilizzato in campi come la salute o la gestione energetica. Offre prestazioni adatte per oggetti con poche risorse e protezione per dati sensibili.
CoAP è stato creato dal gruppo di lavoro CoRE ( Constrained Restful Environment ) e fa seguito al lavoro svolto dall'IETF con la specifica 6LoWPAN che consente alle reti di sensori wireless vincolate di utilizzare il protocollo "IPv6". CoAP consente l'interazione con questi sensori tramite i servizi web RESTful. Questo protocollo è stato sviluppato per dispositivi alimentati a batteria con limitazioni, dotati di microprocessori con prestazioni scadenti e con una quantità limitata di RAM e memoria ROM . Offre semplicità, basso sovraccarico per ambienti di rete a bassa potenza vincolati che devono affrontare tassi di perdita elevati. CoAP abilita le comunicazioni M2M necessarie per l'interazione e il funzionamento dei sistemi di bordo. È definito come un protocollo generico per reti a bassa potenza e con perdite e si basa sui protocolli e sulle reti sottostanti 6LoWPAN, IEEE802.15.4 . Tuttavia, CoAP si differenzia dalla sua controparte HTTP per la sua ridotta complessità con l'utilizzo di UDP che gli consente di avere una dimensione dell'intestazione ridotta, tra 10 e 20 byte facilmente interpretabile da dispositivi vincolati, pur conservando un meccanismo di ritrasmissione in caso di perdita di messaggi. Sviluppato appositamente per ambienti vincolati, fornisce queste caratteristiche principali:
CoAP si basa su un modello client-server simile a HTTP, in cui i client inviano richieste alle risorse REST per recuperare informazioni da un sensore o controllare un dispositivo e il suo ambiente. Tuttavia, CoAP elabora gli scambi in modo asincrono tramite datagrammi UDP. HTTP è un protocollo collaudato, tuttavia la sua implementazione richiede un codice di grandi dimensioni per dispositivi con solo 100 kb di memoria ROM e un elevato utilizzo delle risorse di rete.
Una richiesta CoAP è simile a una richiesta HTTP. Viene inviato dal client per richiedere un'azione GET, POST, PUT o DELETE su una risorsa identificata da un URI . Il server risponde con un codice di risposta eventualmente accompagnato dalla rappresentazione della risorsa.
L'architettura CoAP è divisa in due livelli. Un livello di messaggi che fornisce affidabilità e sequenze di scambio end-to-end basate su UDP. Un livello "Richiesta / Risposta" che utilizza metodi e codici di risposta per le interazioni richiesta / risposta. Tuttavia, è davvero un unico protocollo che offre queste funzionalità nella sua intestazione.
Livello messaggio Il livello Messaggio fornisce affidabilità per i messaggi digitati confermabili . Assicura quindi il controllo end-to-end e la loro ritrasmissione in caso di smarrimento. L'utilizzo di un token consente a CoAP di effettuare l'associazione tra richieste e risposte durante una comunicazione. Mentre una “Etichetta” generata e inserita dal cliente in ciascuna intestazione del messaggio CoAP consente di rilevare i duplicati. Quando i messaggi non richiedono la garanzia di un buon instradamento, è anche possibile, pur beneficiando del rilevamento di duplicati, utilizzare messaggi di tipo Non confermabile . Un server che riceve un messaggio confermabile deve confermare la sua ricezione al client che avvia la connessione e rispondere con un messaggio di riconoscimento digitato ACK . Se il server può fornire la risposta immediatamente, viene aggiunta al messaggio di riconoscimento e la transazione termina. In caso contrario, al client viene restituito un messaggio di riconoscimento vuoto per indicare che la risposta è ritardata. Quando un messaggio confermabile viene inviato al server, il client conta alla rovescia il tempo trascorso e ritrasmette il messaggio periodicamente fino a quando il messaggio non è stato riconosciuto. Se il server non è in grado di elaborare la richiesta, può indicarlo al client rispondendo con un messaggio di tipo RST .Metodo | Azione |
---|---|
"OTTENERE" | Questo metodo recupera la rappresentazione delle informazioni corrispondenti alla risorsa identificata dalla richiesta URI. |
"INVIARE" | Questo metodo richiede l'elaborazione della rappresentazione allegata alla risorsa identificata dalla richiesta URI. Normalmente questo si traduce nella creazione di una nuova risorsa o nel suo aggiornamento. |
"METTERE" | Questo metodo richiede che la risorsa identificata dalla query URI venga aggiornata con la rappresentazione allegata. Il formato della rappresentazione è specificato dal tipo di supporto e dalla codifica contenuti nell'opzione Content-Format, se fornita. |
"ELIMINA" | Questo metodo richiede che la risorsa identificata dalla richiesta URI venga eliminata. |
Le risposte sono identificate da codici di risposta analoghi ai codici di stato di successo del protocollo HTTP 2.xx, errore 4.xx o 5.xx che indicano lo stato dell'operazione.
Successo 2.xx, indica che la richiesta è stata correttamente ricevuta, compresa e accettata. Errore del client 4.xx indica che il client ha riscontrato un errore. Errore interno del server 5.xx indica che il server non è in grado di elaborare la richiesta.CoAP si inserisce in un modello a 5 livelli, fisico, collegamento dati, rete, trasporto e applicazione.
Livello 5 CoAP come protocollo di trasferimento web allo stesso livello del protocollo HTTP, i livelli superiori si trovano all'interno del perimetro del browser web e delle applicazioni M2M. Livello 4 Il livello di trasporto UDP si interfaccia con il sottolivello Message di CoAP. I messaggi vengono inseriti nei datagrammi UDP, il suo utilizzo consente di risparmiare larghezza di banda e fornisce supporto multicast . Livello 3 IPv6, i datagrammi UDP vengono inseriti nei pacchetti IPv6. Il livello 6LowPAN effettua gli adattamenti, per il livello sottostante avente una dimensione del frame limitata a 128 byte. Procede alla compressione degli header IPv6, esegue la frammentazione e il riassemblaggio dei pacchetti IPv6. Ma anche responsabile dell'indirizzamento, del routing. Livello 2 e 1 IEEE 802.15.4 è lo standard che specifica le specifiche Layer 1 e Layer 2 per le reti personali wireless.I messaggi CoAP vengono trasportati per impostazione predefinita tramite datagrammi UDP. Questa comunicazione può essere trasmessa tramite DTLS ma anche con altri mezzi come SMS, TCP o SCTP. I messaggi sono codificati in un semplice formato binario. Un messaggio inizia con un'intestazione fissa di 4 byte, seguita da un campo “Token” di dimensione variabile tra 0 e 8 byte che consente negli scambi di associare le richieste alle risposte. La sua lunghezza è indicata dal campo "TKL". Viene quindi visualizzata una sequenza di opzioni in formato TLV seguita opzionalmente dai dati che occupano il resto del datagramma. Se questi ultimi sono presenti, sono separati dall'header da un marker di 1 byte contenente il valore “0xFF”.
L'intestazione nella versione 1 contiene le seguenti informazioniCampo | Descrizione | |
---|---|---|
Worm (versione) | Il campo Ver ha 2 bit, che indicano la versione di CoAP utilizzata. | |
T (tipo) | Il campo Tipo viene utilizzato per specificare il tipo di messaggio:
|
|
TKL (lunghezza token) | è composto da 4 bit, che indicano la lunghezza del campo Token. | |
Codificato | è composto da 8 bit, di cui i 3 bit più significativi (c) indicano la classe e i 5 bit meno significativi i dettagli (dd). Il codice in formato "c.dd" viene utilizzato per indicare il tipo di messaggio, "0" per una richiesta, "2" per una risposta OK, "4" per una risposta in errore del client, "5" per un errore del server . In caso di richiesta, il codice indica la modalità della richiesta e in caso di risposta, il codice della risposta. Il codice "0.00" indica un messaggio vuoto. | |
ID messaggio | è composto da 16 bit, utilizzati per rilevare la duplicazione dei messaggi e per abbinare i messaggi di riconoscimento / ripristino ai messaggi di tipo confermabile / non confermabile . | |
Gettone | è composto da 0 a 8 byte, utilizzato per associare una richiesta a una risposta. |
Lo stato di una risorsa può cambiare nel tempo e un client potrebbe aver bisogno di queste modifiche di stato. In HTTP, le transazioni vengono sempre avviate dal client, che esegue più richieste GET per mantenere aggiornato lo stato di una risorsa. Questo meccanismo che consuma risorse non è adatto in un ambiente limitato con risorse di rete limitate e per lo più dispositivi inattivi. Per soddisfare questa esigenza, CoAP beneficia di un'estensione del protocollo RFC7641 che consente ai clienti di osservare le risorse utilizzando l'opzione di osservazione. Un server CoAP è l'autorità per determinare in quali condizioni le risorse cambiano il loro stato e quindi è lui che decide quando informare gli osservatori dei nuovi stati di queste risorse. Poiché il protocollo non offre mezzi espliciti per impostare trigger o soglie, spetta al server esporre risorse osservabili che notificano il loro stato in modo utile nel contesto dell'applicazione. Ad esempio, un server con un sensore di temperatura può esporre una o più risorse. Nel caso in cui una risorsa cambi stato ogni x secondi. Una risorsa può cambiare il suo stato in freddo o caldo in base a soglie corrispondenti o anche in base a espressioni complesse.
Principio di funzionamentoGli osservatori si registrano presso un soggetto per indicare che desiderano essere informati di ogni cambiamento di stato. Il soggetto è responsabile dell'amministrazione del suo elenco di osservatori registrati. Se l'osservatore è interessato a più argomenti, deve registrarsi separatamente a ciascuno di essi. Un client si registra inviando una richiesta GET estesa con l'opzione "osservare: 0" al server. Il valore "0" è una richiesta di registrazione e il valore "1" corrisponde a una richiesta di annullamento della registrazione. Il server restituisce una notifica 2.xx che indica che ha aggiunto la voce all'elenco degli osservatori. Quando lo stato cambia, il server invia la notifica al client. Il token consente al cliente di identificare le osservazioni nel caso siano multiple. Per evitare la congestione, i server non dovrebbero inviare più di una notifica ogni 3 secondi e dovrebbero usare un valore meno aggressivo se possibile. In futuro sono previste ottimizzazioni come CoCoA (Congestion Control / Advanced) che estende la specifica CoAP con un controllo avanzato della congestione.
Nell'ambiente machine-to-machine ( M2M ), i dispositivi devono essere in grado di rilevarsi l'un l'altro e le proprie risorse. Questi dispositivi vincolati comunicano tra loro utilizzando comunicazioni wireless a bassa potenza. La sfida è rendere questi dispositivi il più autonomi possibile riducendo al minimo l'intervento umano. Come illustrato, esistono due tipi di servizi di rilevamento per il protocollo CoAP: centralizzato e distribuito.
Distributed Resource Discovery è il metodo di base utilizzato da un dispositivo per rilevare le risorse di un altro dispositivo senza la necessità di una directory. Quando un dispositivo client deve ottenere le risorse ospitate su un server, invia una richiesta GET all'URI /.well-known/core del server RFC5785.
Nel caso di una richiesta unicast perché l'indirizzo del server è noto, solo il server di destinazione risponderà comunicando tutte le sue risorse rilevabili nel formato Core Link RFC6690.
Se il multicast IP è supportato all'interno della rete, è anche possibile inviare una richiesta multicast per scoprire gli endpoint e le relative risorse offerte in un'unica richiesta. Tuttavia, le richieste multicast non sono affidabili perché il client non può sapere se la loro richiesta ha raggiunto tutte le destinazioni. I client possono anche avviare query per tipi specifici di risorse specificando parametri (rt). I server decidono quali sono le loro risorse disponibili da scoprire. Questo metodo di rilevamento distribuito ha il vantaggio che le richieste vengono effettuate direttamente dal client al server senza un intermediario. Ma questo richiede che il client conosca l'indirizzo IP o il nome host del server, il che significa che un'applicazione esterna deve fornire l'indirizzo o dovrà essere codificato nel firmware del client. Nel caso in cui l'indirizzo IP sia sconosciuto, il client può anche inviare una richiesta di discovery del prossimo il cui indirizzo sarà ottenuto dal livello di rete. Tuttavia, questo metodo non è desiderabile per una rete vincolata in cui l'energia deve essere preservata.
Il DNS multicast (mDNS) è un protocollo COAP indipendente definito da RFC6762. MDNS è adatto per i dispositivi connessi poiché funziona senza infrastruttura, non è necessario configurare i dispositivi manualmente o utilizzare un'amministrazione aggiuntiva per gestirli. Dopo la scoperta, i dispositivi pubblicano informazioni sui servizi e le risorse che offrono facendo un annuncio multicast. Quando un dispositivo client (ad esempio di tipo switch) vuole accedere a una risorsa (ad esempio di tipo light) utilizzerà le informazioni ottenute (durante la pubblicazione) per accedervi.
Topologia centralizzataIl gruppo di lavoro CoRE propone l'uso di un'entità Resource Directory (RD) nel LowPAN per l'esplorazione delle risorse.
La Resource Directory memorizza le descrizioni delle risorse detenute dai server (registrati da loro stessi sul RD). In questo modo i clienti possono scoprire tutte le risorse necessarie in un'unica richiesta. Per utilizzare il DR, sia per la registrazione che per la ricerca, il dispositivo deve sapere come raggiungerlo. L'endpoint può individuare il DR in diversi modi. O il punto terminale ha l'indirizzo dell'RD in statico nel suo firmware e lo scopre all'avvio, o dall'Edge Router che trasmette le informazioni durante l'annuncio del router (ad esempio la route predefinita se l'RD è installato nel router) o utilizzando il CoRE Link Format eseguendo un GET / .well-known / core? rt = core.rd *.
Per quanto riguarda gli aggiornamenti, i server possono aggiornare il proprio record, il DR può verificare se un record è valido interrogando l'endpoint e i record possono essere cancellati dall'endpoint in qualsiasi momento. Il RD può anche eliminare i record al rilevamento di una durata di vita scaduta.
CoAP e DNS-SD sono allo studio della comunità Internet per il servizio di discovery in reti M2M vincolate. DNS-SD è un protocollo separato definito da RFC6763. DNS-SD definisce come denominare e organizzare i record DNS Per il rilevamento centralizzato del servizio DNS-SD, un server DNS-SD deve essere disponibile all'interno dell'infrastruttura di rete. I dispositivi si registrano nel DNS-SD dopo averlo scoperto con uno dei seguenti metodi: annuncio router IPV6, utilizzando il metodo mDNS descritto in precedenza o con il noto metodo. Dopo la registrazione, qualsiasi dispositivo sarà in grado di cercare servizi tramite query DNS al server DNS-SD.
Il gruppo di lavoro IETF CoRE ha riconosciuto la necessità di supportare l'invio di un messaggio multicast a un gruppo di dispositivi per manipolare le loro risorse. Il lavoro di questo gruppo ha portato alla RFC7390 sperimentale pubblicata per la revisione che descrive la comunicazione di gruppo per il protocollo CoAP. Il vantaggio è che i dispositivi vincolati possono lavorare in gruppo, ad esempio per l'automazione di un edificio dove può essere necessario attivare e / o disattivare contemporaneamente tutte le luci di una stanza. Le richieste vengono inviate in multicast mentre le risposte sono in unicast (aspetto specificato nella sezione 8 di RFC7252). Nessuna modalità di sicurezza è specificata per il multicast CoAP, vale a dire che in questo framework il CoAP non è crittografato, né autenticato e non c'è controllo degli accessi. Il multicast IP è generalmente classificato come un servizio inaffidabile perché non vi è alcuna garanzia di consegna dei pacchetti a ogni membro del gruppo. Tuttavia, la qualità di questo servizio può essere migliorata utilizzando il protocollo multicast per reti a bassa potenza e con perdita (MPL) che esegue ritrasmissioni periodiche. Coap riduce il rischio di congestione multicast con le misure descritte alle pagine 19 e 20 di RFC7390. Ci sono lavori che propongono soluzioni alternative per manipolare facilmente gruppi di risorse attraverso entità gestite da un Entity Manager.
I dispositivi di comunicazione vengono indirizzati utilizzando risorse universali (URI) e i dati vengono scambiati tramite XML standard. Il paradigma dei servizi web RESTful presenta molti vantaggi per le reti a bassa potenza rispetto ai servizi web RPC che utilizzano SOAP (e quindi XML ). XML presenta una grande complessità di interpretazione se viene utilizzato nel payload. Sebbene i servizi web abbiano molti vantaggi, i protocolli ei formati di payload utilizzati non sono necessariamente ottimizzati per i dispositivi con limitazioni wireless. Sono state sviluppate molte tecniche di compressione per adattare i dati XML a reti vincolate, ma quella scelta è EXI .
Il formato Efficient XML Interchange (EXI) è una rappresentazione XML compatta, attualmente standardizzata dal World Wide Web Consortium W3C. È progettato per supportare applicazioni XML ad alte prestazioni per ambienti con risorse limitate, riducendo drasticamente i requisiti di larghezza di banda e migliorando le prestazioni di codifica e decodifica. La compressione EXI combina XML con un algoritmo di compressione standard per ottenere tassi di compressione elevati , riducendo la verbosità dei documenti XML. Il lavoro ha dimostrato che l'utilizzo della compressione EXI per il payload può essere fino a 50 volte più efficiente rispetto al semplice utilizzo di XML di base.
Esistono molte implementazioni CoAP scritte in diversi linguaggi, forniscono librerie e API che possono essere utilizzate per l'integrazione di CoAP in sensori wireless e lo sviluppo di applicazioni in diversi ambienti.
Implementazione | linguaggio | piattaforma | Descrizione |
---|---|---|---|
Californio | Giava | JVM | È un framework Java per dispositivi non vincolati. Consente lo sviluppo di client e applicazioni web in grado di comunicare con reti di sensori wireless. |
Erbio | VS | Contiki | Questo è un motore REST leggero per il sistema operativo Contiki. Porta la connettività Internet a dispositivi limitati. |
Rame | Javascript | Firefox | Copper è un plugin per Firefox per la gestione dei dispositivi CoAP, consente agli utenti di eseguire test. |
libcoap | VS | Posix / Contiki | La libreria libcoap può essere utilizzata per l'implementazione su dispositivi di classe 1, 2 e superiori. |
CoapBlip | VS | TinyOS | È un adattamento della libreria "libcoap" per TinyOS che è intesa per le periferiche di classe 1. |
jCoAP | Giava | JVM | Scritto in Java, jCoAP è rivolto a dispositivi non vincolati come smartphone Android e sistemi embedded. Consente l'esecuzione di proxy CoAP-to-HTTP e HTTP-to-CoAP che si traduce tra i 2 protocolli. |
coap.me | Rubino | È uno strumento di test accessibile su un front-end Web all'indirizzo, consente di ripristinare i server CoAP. | |
Watteco | VS | Contiki | È un'implementazione commerciale per i dispositivi Contiki Classe 1 basati su Erbio. |
Cooja | VS | Contiki | Cooja è uno strumento di simulazione basato sul sistema operativo Contiki, permette simulazioni e test di implementazione. |
Queste implementazioni si rivolgono a diversi dispositivi che IETF classifica come segue:
Classe 0 Questi dispositivi non sono in grado di eseguire in modo sicuro uno stack IP conforme a RFC. Devono utilizzare un gateway per connettersi a Internet. Classe 1 Include la maggior parte dei dispositivi che dispongono di risorse limitate in grado di connettersi a Internet con meccanismi di sicurezza incorporati. Hanno 100 kb di ROM e 10 kb di RAM. Non possono implementare uno stack di protocollo HTTP su TLS e richiedono l'uso di protocolli leggeri con un consumo energetico ottimizzato. Con la dimensione molto limitata della loro memoria cache, usano principalmente reti a basso consumo come IEE802.15.4 su 6LowPAN. In virtù delle loro prestazioni e del loro costo contenuto, sono le periferiche preferite per formare l'Internet of Things. Classe 2 Si tratta di dispositivi che possono connettersi a Internet e dispongono di capacità di elaborazione simili agli smartphone. Ciò è reso possibile con circa 250 KB di ROM e 50 KB di RAM. Possono beneficiare dei vantaggi di un protocollo leggero ea basso consumo energetico per liberare risorse sulle loro applicazioni e ridurre i costi di produzione.La comunità di ricerca ha realizzato molte implementazioni di CoAP. Diversi importanti attori nel campo dell'automazione degli edifici e della misurazione hanno indicato il loro interesse nell'utilizzo di questo protocollo nei loro sistemi di bordo. Questi studi hanno dimostrato la possibilità di implementare il CoAP con solo una decina di kilobyte di memoria ROM e RAM, ma anche di valutarne le prestazioni: tempo di risposta, consumo energetico, sovraccarico. Un'implementazione sul sistema operativo Contiki, evidenzia i guadagni realizzati da CoAP in termini di gestione energetica ma anche che l'uso del protocollo “ ContiMAC RDC ” per ottimizzare i cicli operativi dei componenti radio di consumo porta guadagni simili e solleva la questione. interesse a mantenere i meccanismi di risparmio energetico a livello dei livelli applicativi. L'implementazione CoAP eseguita su Contiki mostra un'occupazione di 8.5 kb di ROM e 1.5 kb di RAM con il layer REST associato. La sperimentazione mostra anche che gli scambi di richieste e risposte sono più efficienti dal punto di vista energetico quando ogni messaggio può essere contenuto in un singolo frame 802.15.4.
La valutazione della libreria CoapBlip evidenzia un problema nel processo di adattamento delle librerie indipendenti dal sistema operativo, che non garantisce quindi prestazioni ed esecuzione affidabile. Un'implementazione nativa per il sistema operativo è molto più efficiente. Le misurazioni mostrano che il carico utile non può superare i 650 byte con CoapBlip quando l'implementazione specifica di TinyCoAP raggiunge i 1200 byte. TinyCoAP è più veloce dell'adattamento CoapBlip, consuma meno energia e può gestire un volume maggiore di richieste
Infine, in diverse implementazioni, le comunicazioni end-to-end con reti di sensori che utilizzano CoAP vengono eseguite tramite un server proxy responsabile dell'adattamento del protocollo. Un approccio diverso è possibile deportando l'elaborazione degli adattamenti al browser Web del client con l'utilizzo di una JVM e JavaScript evitando quindi l'utilizzo di server intermedi.
Ci sono molte aree di applicazione. Il CoAP è stato implementato con successo in esperimenti nei settori della salute, della gestione energetica e dell'edilizia.
Sistema di sorveglianza sanitariaIn ambito sanitario, una delle applicazioni pratiche è la realizzazione di un sistema di monitoraggio sanitario con una rete di sensori wireless basati su CoAP al fine di ridurre il carico di lavoro dei centri medici che effettuano le analisi e facilitare la rapida cura del paziente in un'emergenza. Questa infrastruttura monitora le condizioni di salute del paziente e consente l'accesso a parametri importanti in qualsiasi momento con un browser web da qualsiasi luogo. Ciò consente ai pazienti che non si trovano in condizioni critiche di lasciare l'ospedale, poiché i loro segni vitali possono essere monitorati in tempo reale da casa. CoAP consente di modellare le proprietà dei sensori sanitari come risorse e di esporli ai clienti. Queste risorse vengono quindi manipolate utilizzando metodi HTTP tramite un browser web.
In una rete di sensori wireless basata su CoAP, ognuno può comportarsi come un server ed esporre il percorso di una risorsa " /.well-known/core " per consentire il rilevamento delle risorse da parte dei client. Questi ultimi accedono a questo percorso tramite un metodo "POST" per dichiarare le proprie risorse, oppure un metodo "GET" per scoprire le risorse già dichiarate. L'opzione Observe quando viene utilizzata con un metodo "GET" consente ai client di indicare il loro interesse per una risorsa, in caso di aggiornamento di questa risorsa, il server avvisa in modo asincrono i client. Nell'esperimento, i tradizionali sensori responsabili del controllo della frequenza cardiaca, della saturazione di ossigeno nel sangue e degli elettrocardiogrammi sono collegati a periferiche vincolate come “Telos Mote” tramite un collegamento seriale su cui è installato il Contiki OS. L'implementazione Erbium con il suo motore REST è responsabile dell'esposizione delle risorse di ciascun sensore. Nel caso di un sensore che monitora la frequenza cardiaca ed espone le sue risorse all'indirizzo "coap: // server / oximeter / hrs". Il client invia una richiesta contenente un metodo "GET" con "uri-host = server" e "uri-path = / oximeter / hrs" per recuperare la frequenza cardiaca del paziente e futuri aggiornamenti. Le informazioni ottenute dai sensori del paziente vengono trasmesse al web server in formato JSON , quindi archiviate e utilizzate dal personale medico.
Sistema di gestione dell'energia intelligente, Smart GridUna rete di distribuzione elettrica intelligente mira a ottimizzare la produzione, la distribuzione e il consumo di energia. L'implementazione di un sistema di gestione dell'energia domestica in grado di interagire con le apparecchiature domestiche e dialogare con una smart grid consente di controllare i consumi e di ottenere risparmi energetici. Il sistema è costituito da un sistema di gestione energetica domestica denominato HEMS installato nell'abitazione basato su una soluzione gratuita, e da una rete di attuatori e sensori denominati HEC che utilizzano il protocollo CoAP collegati ad apparecchiature domestiche. Gli HEC collegati alla rete locale dell'abitazione recuperano il consumo energetico: tensione, potenza istantanea delle apparecchiature collegate. Questi dati vengono inviati in modo asincrono all'HEMS , grazie al meccanismo di osservazione CoAP. Questi vengono elaborati da algoritmi di ottimizzazione energetica eseguiti sul sistema HEMS, che può quindi controllare le risorse HEC tramite metodi CoAP per richiederne l'accensione o lo spegnimento.
Automazione degli edificiNel campo della building automation. Le risorse gestite dai protocolli storici BacNet , LON possono essere adattate per funzionare con CoAP, i messaggi storici possono essere veicolati nel payload dei messaggi CoAP. Con il supporto del multicast e della comunicazione di gruppo, un dispositivo può comunicare con altri dispositivi che condividono le stesse caratteristiche (ad esempio: indirizzamento di tutti i dispositivi in una stanza).
CoAP può essere utilizzato anche in aree di applicazione come trasporti, industria, agricoltura, casa.
Le diverse implementazioni evidenziano i seguenti punti:
Finanziariamente, altri studi dimostrano che la scelta di utilizzare CoAP risulta essere una scelta saggia rispetto a HTTP:
Il lavoro svolto confronta le prestazioni di CoAP con il suo predecessore, HTTP. I tempi di risposta CoAP sono molto più brevi di HTTP con un risparmio stimato di tempo di risposta di circa il 30%, grazie alla compressione dell'intestazione e al fatto che CoAP utilizza UDP. La compressione dell'intestazione avrà anche un impatto sul consumo energetico. Il numero di byte trasferiti è inferiore in una transazione CoAP rispetto a una transazione HTTP
A livello dei protocolli di discovery CoAP, il meccanismo distribuito surclassa il meccanismo centralizzato relativo al sovraccarico in quanto la discovery di RD (Resource Discovery) e le varie fasi di registrazione non vengono effettuate. Per quanto riguarda i protocolli di discovery DNS, sono meno efficienti in termini di sovraccarico rispetto al protocollo CoAp. In effetti, la scoperta CoAP è l'approccio più ragionevole in un ambiente con dispositivi a basso consumo di energia limitato.
Il processo di protezione dei flussi in CoAP non è privo di impatto sulla memoria ROM dell'apparecchiatura quando la crittografia dei dati viene eseguita in modo hardware e anche l'uso della RAM a più dell'80% può essere un problema perché ciò potrebbe impedire il corretto funzionamento di altre applicazioni in esecuzione sull'apparecchiatura.
Le prestazioni del protocollo di rete svolgono un ruolo importante nel consumo energetico e CoAP dipende da queste prestazioni a causa del protocollo di trasporto sottostante UDP, della frequente frammentazione dei pacchetti e dei semplici meccanismi di ritrasmissione. Il consumo energetico in CoAP aumenta quando la dimensione del pacchetto diventa maggiore di 1024 byte a causa della frammentazione.
I dispositivi che utilizzano il protocollo CoAP devono essere in grado di proteggere il flusso di informazioni di natura sensibile (ad esempio per il settore sanitario). La sicurezza efficace in CoAP può essere riassunta nei diversi temi presentati nella tabella seguente:
Temi | Minacce associate |
---|---|
Integrità | Download di codice dannoso |
Disponibilità | Denial of Service ( DoS ) |
Riservatezza | Analisi del traffico
Intercettazioni (intercettazioni) |
Per proteggere i flussi di COAP, DTLS , Datagram Transport Layer Security, il protocollo di sicurezza principale degli oggetti che è stato specificato da IETF in RFC 6347, è stato progettato per la comunicazione sicura end-to-end tra due dispositivi. DTLS è una versione di TLS e assume le funzionalità di quest'ultimo ma utilizzerà il livello di trasporto fornito da UDP a differenza di TLS che utilizza TCP .
Rappresentazione DTLS nello stack del protocollo
CoAP |
---|
Sicurezza - DTLS |
Livello di trasporto - UDP |
Livello di rete - IPV6 |
Livello fisico - IEEE 802.15.4 |
DTLS è un protocollo composto da due livelli:
I dispositivi IoT basati su CoAP sono configurati in una delle seguenti 4 modalità di sicurezza:
In modalità "NoSec", il sistema è protetto solo bloccando l'invio o la ricezione di pacchetti in rete da parte di un malintenzionato e semplicemente invia i pacchetti tramite UDP.
CoAP si basa sui comandi URI "coap" o "coaps" - quando viene utilizzato DTLS - per identificare le risorse e la loro posizione. L'uso di "coaps" implica che i datagrammi UDP siano protetti con DTLS. Le risorse disponibili tramite "coap" non sono condivise con "coap" anche se il loro identificativo di risorsa è identico.
CoaP essendo per definizione un protocollo limitato, il suo utilizzo con DTLS così com'è pone un problema perché è stato progettato per le reti di computer tradizionali.
DTLS è un protocollo pesante e le sue intestazioni sono troppo lunghe per essere contenute in un singolo frame IEEE802.15.4. Per superare i problemi di compatibilità, 6LoWPAN , il livello di rete su cui si basa CoAP, fornisce meccanismi di compressione delle intestazioni per ridurre le dimensioni delle intestazioni del livello superiore (DTLS).
IPSec , il protocollo di sicurezza dello stack IP, può essere utilizzato per proteggere i flussi CoAP in ambienti vincolati e più in particolare ESP quando CoAP viene utilizzato senza DTLS.
L'utilizzo di IPsec tra gli endpoint CoAP è trasparente al livello dell'applicazione e non richiede condizioni speciali per l'implementazione in CoAP. Tuttavia, IPsec potrebbe non essere adatto a tutti gli ambienti: firewall e NAT possono limitare notevolmente l'uso di IPsec
.
L'utilizzo di un meccanismo di protezione come DTLS è essenziale per le reti e i sistemi CoAP, ma non forniscono il controllo degli accessi. L'uso del controllo degli accessi su un dispositivo CoAP può autorizzare l'accesso in LETTURA / SCRITTURA ai suoi servizi a un gruppo di utenti mentre autorizza solo l'accesso SOLO IN LETTURA a un altro gruppo. Ciò aggiunge un altro livello di protezione e quindi aumenta la sicurezza a livello dei flussi CoAP.
Il gruppo di lavoro CoRE, Constrained RESTFul Environment, ha creato il protocollo CoAP come risultato del lavoro del gruppo di lavoro 6LoWPAN . L'obiettivo di CoAP è quello di estendere l'architettura WEB alle applicazioni Machine to Machine (M2M) e Internet of Things (IoT) utilizzando sistemi vincolati.I servizi Web su Internet sono elementi essenziali nella maggior parte delle applicazioni e dipendono dall'architettura REST. Per rendere questo possibile, CORE ha definito il protocollo CoAP, Constrained Application Protocol. Questo protocollo consente la comunicazione tra oggetti collegati in un'architettura vincolata. Il protocollo CoAP si rivolge ad apparecchiature e macchine che a volte hanno solo un microcontrollore con processore a 8 bit con poca memoria e che sono collegate da collegamenti radio lenti e inaffidabili, i LowPAN.
CoAP è in continua evoluzione. Il protocollo si arricchisce di estensioni come Observe, Group communication ...