Constrained Application Protocol
メッセージフォーマット

トークン、オプション、およびペイロードを省略する場合、最小のCoAPメッセージの長さは4バイトである。 CoAPは、シンプルなバイナリベースヘッダー形式を使用して、リクエストとレスポンスの2つのメッセージタイプを使用する。ベースヘッダーの後に、最適化されたType-Length-Value形式のオプションが続く。CoAPはデフォルトでUDPにバインドされ、オプションでDTLSにバインドされ、高レベルの通信セキュリティを提供する。
パケットのヘッダーの後のバイトはすべてメッセージ本文と見なされる。メッセージ本文の長さは、データグラムの長さによって暗示される。 UDPにバインドされる場合は、メッセージ全体が単一のデータグラムに収まらなければならない。 RFC 4944で定義されている6LoWPANで使用する場合、メッセージは単一のIEEE 802.15.4フレームに収め、断片化を最小限に抑える。
| オフセット> オクテット | オクテット> ビット | 0 | 0> 1 | 0> 2 | 0> 3 | 0> 4 | 0> 5 | 0> 6 | 0> 7 | 1> 8 | 1> 9 | 1> 10 | 1> 11 | 1> 12 | 1> 13 | 1> 14 | 1> 15 | 2> 16 | 2> 17 | 2> 18 | 2> 19 | 2> 20 | 2> 21 | 2> 22 | 2> 23 | 3> 24 | 3> 25 | 3> 26 | 3> 27 | 3> 28 | 3> 29 | 3> 30 | 3> 31 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 4 | 32 | VER | VER | タイプ | タイプ | トークンの長さ | トークンの長さ | トークンの長さ | トークンの長さ | CoAP要求/応答コード | CoAP要求/応答コード | CoAP要求/応答コード | CoAP要求/応答コード | CoAP要求/応答コード | CoAP要求/応答コード | CoAP要求/応答コード | CoAP要求/応答コード | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID | メッセージID |
| 8 | 64 | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） |
| 12 | 96 | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） | トークン（0-8バイト） |
| 16 | 128 | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） | オプション（存在する場合） |
| 20 | 160 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） | ペイロード（存在する場合） |
上位3ビットは、HTTPステータスコードのクラスに類似した「クラス」として知られる数値である 。 下位5ビットは、要求または応答に関する詳細を伝えるコードである。通常、コード全体はclass.codeの形式で通信する。最新のCoAP要求/応答コードはにある。以下にいくつかの例を示す。
Method: 0.XX
Success : 2.XX
Client Error : 4.XX
Server Error : 5.XX
Signaling Codes : 7.XX
次のマクロを使用して、Cヘッダーから情報を簡単に抽出できる。
#define COAP_HEADER_VERSION(data) ( (0xC0 & data[0])>>6  )
#define COAP_HEADER_TYPE(data)   ( (0x30 & data[0])>>4  )
#define COAP_HEADER_TKL(data)   ( (0x0F & data[0])>>0  )
#define COAP_HEADER_CLASS(data)  ( ((data[1]>>5)&0x07)  )
#define COAP_HEADER_CODE(data)   ( ((data[1]>>0)&0x1F)  )
#define COAP_HEADER_MID(data)   ( (data[2]<<8)|(data[3]) )