Constrained Application Protocol (COAP)#
The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained networks in the Internet of Things. The protocol is designed for machine-to-machine (M2M) applications such as smart energy and building automation.
Based on Representational State Transfer (REST).
Header Format:#
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ver| T |  TKL  |      Code     |          Message ID           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Token (if any, TKL bytes) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options (if any) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1 1 1 1 1 1 1 1|    Payload (if any) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Ver: Version Number (currently 0b01)
 - T: Type (0: Confirmable, 1: Non-confirmable, 2: Acknowledgement, 3: Reset)
 - Code: Upper 3 MSBs: Class, 5 LSBs: Class details
 - Message ID: used to prevent duplicates, same for the ACK
 - Token: used to correlate request and response
 - Payload Marker:
 
Options#
 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| delta |length |   1 byte
+---------------+
\ delta ext.    \   0-2 byte
+---------------+
\ length ext.   \   0-2 byte
+---------------+
\    value      \   0 or more bytes
+---------------+
Features#
- Embedded web transfer protocol (
coap://) - UDP binding with reliability and multicast support
 - GET, POST, PUT, DELETE methods
 - URI support
 - 4 byte header
 - Subset of MIME types and HTTP response codes
 
REST request: CON GET /light
- Problem: REST paradigm is often "PULL" type Solution: COAP observation Fragmentation at application layer to avoid fragmentation at IPv6 layer.