CoAP

読み:こあっぷ / 英語表記:Constrained Application Protocol

IoT機器のような、電力やメモリが限られた機器向けのアプリケーション層プロトコル。HTTPに似たやり取りを、軽いUDPの上で行う。

イマシルちゃんの解説

部屋の温度センサーや、畑の土の湿り気を測るセンサーみたいなIoT機器って、電池で何年も動かしたいんだ。
だから、たくさんの電気やメモリを使う重たい通信はできないんだよね。

そこで生まれたのがCoAP!
Webでおなじみの「GETでデータをもらう」「PUTで設定を変える」みたいなやり方はそのままに、
とっても小さく、軽くした通信ルールなんだ。

より深い解説

定義

CoAP(Constrained Application Protocol)は、IETFがRFC 7252(2014年)で標準化した、制約のある機器(constrained device)と制約のあるネットワーク向けのアプリケーション層プロトコルである。電池で動く小さなセンサーや、パケット損失が多く帯域の狭い無線ネットワーク(6LoWPANなど)での利用を想定している。

HTTPに似た仕組み

CoAPは、HTTPと同じRESTの考え方で設計されている。

そのため、CoAPとHTTPを相互に変換するプロキシを置けば、IoT機器のデータを普通のWebの仕組みから扱える。

軽くするための工夫

工夫内容
UDPの上で動くTCPのような接続の確立や管理が不要。標準のポート番号は5683
小さなバイナリヘッダ固定部分はわずか4バイト。HTTPのようなテキストのヘッダではない
必要なときだけ再送下の「メッセージの種類」で、確認が必要なメッセージだけ再送する

メッセージの種類と信頼性

UDPには再送の仕組みがないため、CoAP自身が簡単な信頼性の仕組みを持つ。

種類意味
CON(Confirmable)確認が必要。相手からACKが返らなければ、間隔を広げながら再送する
NON(Non-confirmable)確認不要。定期的なセンサー値のように、1回くらい欠けても困らないデータ向け
ACK(Acknowledgement)CONを受け取ったことを知らせる
RST(Reset)受け取ったが処理できないことを知らせる

この「大事なものだけ確認する」仕組みにより、パケット損失が起きやすいネットワークでも、少ない電力で必要な信頼性を確保できる。

その他の特徴

MQTTとの違い

IoT向けのプロトコルとして、CoAPとよく比べられるのがMQTTである。

CoAPMQTT
通信の形要求と応答(HTTPに似る)発行と購読(Publish/Subscribe)
下位のプロトコルUDPTCP
仲介役なくてよいブローカーが必須

メッセージIDとトークン

CoAPには、メッセージを対応付けるための値が2つある。役割の違いが午後でよく問われる。

値対応付けるもの使い道
メッセージIDCONとそれに対するACKなど、メッセージ同士確認応答の対応付けと、重複の検出(同じメッセージIDのメッセージを再び受け取ったら、処理済みとして無視する)
トークン要求と応答の内容どの要求に対する応答のデータかを判断する。応答が別のメッセージで後から届いても対応付けられる

応答の返し方

方式内容
ピギーバックCONに対するACKに、応答のデータ(2.05 Contentなど)を載せて返す
別応答(セパレート)すぐにデータを用意できないときは、まず空のACKだけを返し、後でデータを新しいCONで送る。どの要求の応答かはトークンで判断する

HTTP/1.1との比較

CoAPはUDPの上で動くため、データを送るたびにTCPのコネクションの確立(3ウェイハンドシェイク)と切断の処理が必要なHTTP/1.1に比べて、やり取りするIPパケットの数が少なく、通信の時間と機器の電力を節約できる。

実際の試験ではここに出る!

この用語が出てくる記事

↑