Content deleted Content added
WikiEditor50 (talk | contribs) clean up, typo(s) fixed: between 0 to → between 0 and (2) |
ce |
||
(11 intermediate revisions by 5 users not shown) | |||
Line 2:
{{IP stack}}
'''Constrained Application Protocol''' ('''CoAP''') is a specialized [[User Datagram Protocol|UDP-based]] Internet application protocol for constrained devices, as defined in [https://datatracker.ietf.org/doc/html/rfc7252 RFC 7252] (published in 2014). It enables those constrained devices called "nodes" to communicate with the wider Internet using similar protocols.
CoAP is designed for use between devices on the same constrained network (e.g., low-power, lossy networks), between devices and general nodes on the Internet, and between devices on different constrained networks both joined by an internet. CoAP is also being used via other mechanisms, such as SMS on mobile communication networks.
Line 41:
|}
=== CoAP
The first 4 bytes are mandatory in all CoAP datagrams, they constitute the fixed-size header.
These fields can be extracted from these 4 bytes in C via these macros:
<syntaxhighlight lang="c"> #define COAP_HEADER_VERSION(data) ( (0xC0 & (data)[0]) >> 6 )
#define COAP_HEADER_TYPE(data) ( (0x30 & (data)[0]) >> 4 )
Line 195 ⟶ 196:
* Semantic and format this field depends on the respective option.
{| class="wikitable sortable"
|-
Line 202 ⟶ 203:
| coap || Dart || RFC 7252|| Client || Blockwise Transfers, Observe, Multicast, Proxying (partial) || MIT || https://github.com/shamblett/coap
|-
| aiocoap || Python 3 || RFC 7252, RFC 7641, RFC 7959, RFC 8323, RFC 7967, RFC 8132, RFC 9176, RFC 8613, RFC 9528|| Client + Server || Blockwise Transfers, Observe (partial) || MIT || {{URL|https://pypi.python.org/pypi/aiocoap}}
|-
| Californium || Java || RFC 7252, RFC 7641, RFC 7959|| Client + Server || Observe, Blockwise Transfers, Multicast (since 2.x), DTLS (+ DTLS 1.2 Connection ID) || EPL+EDL || {{URL|https://www.eclipse.org/californium}} {{URL|https://github.com/eclipse/californium}}
|-
|
|-
|
|-
| Go-CoAP || [[Go (programming language)|Go]] || RFC 7252, RFC 8232, RFC 7641, RFC 7959|| Client + Server || Core, Observe, Blockwise, Multicast, TCP/TLS || Apache License 2.0 || {{URL|https://github.com/plgd-dev/go-coap}}
|-
|
|-
|
|-
|libcoapy
| CoAPSharp || C#, .NET || RFC 7252|| Client + Server || Core, Observe, Block, RD || LGPL || http://www.coapsharp.com▼
|Python
| colspan="3" |same support as libcoap
|MIT
|{{URL|https://github.com/anyc/libcoapy}}
|-
|
|-
|
|-
|
|-
| eCoAP || C || RFC 7252|| Client + Server || Core || MIT || https://gitlab.com/jobol/ecoap▼
RFC 7641, RFC 7959▼
| Client + Server || Core, Observe, Block || MIT || {{URL|https://github.com/mcollina/node-coap}}▼
|-
|
|-
|
{{URL|https://docs.rs/coap/}}▼
|-
| guile-coap || Guile || RFC 7252, RFC 8323 || Client + Server || || GPL-3.0-or-later || https://codeberg.org/eris/guile-coap▼
==Proxy implementations==
There exist [[Proxy server|proxy]] implementations which provide [[Forward proxy|forward]] or [[Reverse proxy|reverse]] proxy functionality for the CoAP protocol and also implementations which translate between protocols like HTTP and CoAP.
The following projects provide proxy functionality:
* [http://telecom.dei.unipd.it/pages/read/90/ Squid 3.1.9 with transparent HTTP-CoAP mapping module]▼
* [https://code.google.com/p/jcoap/ jcoap Proxy]▼
* [https://github.com/eclipse/californium/tree/master/californium-proxy2 Californium cf-proxy2]▼
* [https://github.com/Tanganelli/CoAPthon CoAPthon]▼
* [https://github.com/keith-cullen/FreeCoAP FreeCoAP]▼
* [https://github.com/obgm/libcoap libcoap]
==Projects using CoAP==
{| class="wikitable sortable"
|-
! Name !! Programming Language !! Implemented CoAP version !! Client/Server !! Implemented CoAP features !! License !! Link
| iCoAP || Objective-C || RFC 7252|| Client || Core, Observe, Blockwise Transfers || MIT || https://github.com/stuffrabbit/iCoAP▼
|-
|
|-
|
|-
|}
==Inactive protocol implementations==
{| class="wikitable sortable"
|-
! Name !! Programming Language !! Implemented CoAP version !! Client/Server !! Implemented CoAP features !! License !! Link
| LibNyoci || C || RFC 7252|| Client + Server || Core, Observe, Block, DTLS || MIT || https://github.com/darconeous/libnyoci▼
|-
|
|-
|
|-
|
|-
|
|-
|
|-
▲| eCoAP || C || RFC 7252|| Client + Server || Core || MIT || https://gitlab.com/jobol/ecoap
▲| node-coap || Javascript || RFC 7252,
▲RFC 7641, RFC 7959
▲| Client + Server || Core, Observe, Block || MIT || https://github.com/mcollina/node-coap
|-
|
|-
▲| guile-coap || Guile || RFC 7252, RFC 8323 || Client + Server || || GPL-3.0-or-later || https://codeberg.org/eris/guile-coap
|-
▲| 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/
|-
▲|
|-
▲|
|-
| nCoap || Java || RFC 7252|| Client + Server || Observe, Blockwise Transfers, CoRE Link Format, [https://tools.ietf.org/html/draft-kleine-core-coap-endpoint-id-01 Endpoint-ID-Draft] || BSD || https://github.com/okleine/nCoAP
|-
| Ruby coap || Ruby || RFC 7252|| Client + Server (david) || Core, Observe, Block, RD || MIT, GPL || https://github.com/nning/coap<br/>https://github.com/nning/david
Line 271 ⟶ 306:
|-
| txThings || Python (Twisted) || RFC 7252|| Client + Server || Blockwise Transfers, Observe (partial) || MIT || https://github.com/mwasilak/txThings/
▲|-
▲https://docs.rs/coap/
|-
| YaCoAP || C || || || || MIT || https://github.com/RIOT-Makers/YaCoAP
|-
|}
▲==Proxy implementations==
▲* [http://telecom.dei.unipd.it/pages/read/90/ Squid 3.1.9 with transparent HTTP-CoAP mapping module]
▲* [https://code.google.com/p/jcoap/ jcoap Proxy]
▲* [https://github.com/eclipse/californium/tree/master/californium-proxy2 Californium cf-proxy2]
▲* [https://github.com/Tanganelli/CoAPthon CoAPthon]
▲* [https://github.com/keith-cullen/FreeCoAP FreeCoAP]
==CoAP group communication==
Line 303 ⟶ 328:
* Certificate, where DTLS is enabled and the device uses [[X.509]] certificates for validation.
Research has been conducted on optimizing DTLS by implementing security associates as CoAP resources rather than using DTLS as a security wrapper for CoAP traffic. This research has indicated that improvements of up to 6.5 times none optimized implementations.<ref name="Security as a CoAP resource: An optimized DTLS implementation for the IoT">{{cite book |last1=Capossele |first1=Angelo |last2=Cervo |first2=Valerio |last3=De Cicco |first3=Gianluca |last4=Petrioli |first4=Chiara|title=2015 IEEE International Conference on Communications (ICC) |chapter=Security as a CoAP resource: An optimized DTLS implementation for the IoT |author4-link= Chiara Petrioli |date=June 2015 |
In addition to DTLS, RFC8613<ref>{{Cite journal|last1=Palombini|first1=Francesca|last2=Seitz|first2=Ludwig|last3=Selander|first3=Goeran|last4=Mattsson|first4=John|title=Object Security for Constrained RESTful Environments (OSCORE)|url=https://tools.ietf.org/html/rfc8613.html|access-date=2021-05-07|website=tools.ietf.org|year=2019 |doi=10.17487/RFC8613 |s2cid=58380874 |language=en}}</ref> defines the Object Security for Constrained RESTful Environments ([[OSCORE]]) protocol which provides security for CoAP at the application layer.
|