IoT・エッジ

CoAP(Constrained Application Protocol) こあっぷ

IoT軽量プロトコルUDPRESTセンサー通信M2M
CoAPについて教えて

簡単に言うとこんな感じ!

CoAPは、電池で動く小さなセンサーや機器のために作られた「超軽量な通信ルール」だよ。Webの通信(HTTP)を思いっきりダイエットさせた版で、消費電力や処理能力が限られたIoT機器どうしが、必要最小限のデータをやり取りするためのプロトコルなんだ!


CoAPとは

CoAP(Constrained Application Protocol) は、メモリや電力などのリソースが極めて限られた「制約のある機器(Constrained Device)」向けに設計された軽量なアプリケーション層プロトコルです。温度センサーや照明コントローラーなど、電池で長期間動作させたいIoT機器が、ネットワーク越しにデータを送受信するために使われます。

Webで広く使われるHTTPをベースに設計されており、RESTfulなアーキテクチャ(GET・POST・PUT・DELETEといった操作体系)を踏襲しています。ただしHTTPがTCP上で動くのに対し、CoAPはUDP上で動作するため、通信のオーバーヘッドが大幅に削減されています。2014年にIETFによってRFC 7252として標準化されました。

CoAPが必要とされる背景には、IoT機器の爆発的な普及があります。工場の振動センサー、農地の土壌センサー、ビルの空調制御など、何千・何万台もの機器が低コスト・低消費電力で動き続ける世界では、従来のHTTPのような「重い」プロトコルは使いにくいのです。CoAPはそのギャップを埋める存在として設計されました。


CoAPの構造と仕組み

メッセージの種類

CoAPには4種類のメッセージタイプがあり、信頼性と効率を使い分けられます。

メッセージタイプ略称説明
ConfirmableCON相手からの確認応答(ACK)を要求する。確実に届けたいとき
Non-confirmableNON応答不要の送りっぱなし。センサーの定期送信などに使う
AcknowledgementACKCONへの受信確認
ResetRST処理できないメッセージへの拒否応答

HTTPとの比較

CoAPはHTTPの「IoT版」として設計されているため、概念は非常に似ています。

比較項目HTTPCoAP
トランスポート層TCPUDP
ヘッダサイズ数百〜数KB最小4バイト
セキュリティTLSDTLS
通信モデルリクエスト/レスポンスリクエスト/レスポンス + Observe
主な用途Webブラウザ、APIサーバーIoT機器、センサー
ポート番号80 / 4435683 / 5684(DTLS)

Observeオプション(CoAP独自機能)

CoAPにはObserveという便利な拡張機能があります。クライアントが一度「このリソースを監視したい」と登録しておくと、サーバー側(センサー等)が値の変化を自動通知してくれます。毎回ポーリング(問い合わせ)しなくてよいため、電力消費を大幅に抑えられます。

[クライアント] ──GET(Observe登録)──▶ [温度センサー]
[クライアント] ◀── 25.3℃ ──────────── [温度センサー](変化時に自動送信)
[クライアント] ◀── 26.1℃ ──────────── [温度センサー](また変化したら送信)

覚え方

「CoAP = 超(CoAP)軽量なHTTP」

「こあっぷ」→「小圧(しょうあつ)」=小さくて圧縮された通信、と覚えると忘れにくいですよ!


歴史と背景

  • 2000年代後半IoT(Internet of Things)の普及とともに、リソース制約のある機器向けプロトコルの必要性が高まる。既存のHTTPは機器にとって重すぎた
  • 2010年 — IETFのCoRE(Constrained RESTful Environments)ワーキンググループが発足し、CoAPの標準化作業を開始
  • 2014年RFC 7252としてCoAPが正式標準化。IoT業界に広く認知される
  • 2018年 — ObserveオプションがRFC 7641として標準化
  • 2019年 — TCP上でのCoAP動作を定めたRFC 8323が追加公開(NAT越えなど特定環境への対応)
  • 2020年代 — スマートホーム・スマートファクトリー・農業IoTなど幅広い分野に普及。Matter(スマートホーム規格)など新興規格でも参照される

他のIoTプロトコルとの比較

IoTで使われる通信プロトコルはCoAP以外にも複数あり、用途によって使い分けます。

IoTプロトコル比較マップ 軽量性(左)← → 機能豊富(右) / 低頻度(上)← → 高頻度(下) 軽量 高機能 低頻度 高頻度 CoAP UDP・超軽量 センサー・M2M RFC 7252 LoRaWAN 超低電力・長距離 農業・インフラ 低レイヤー寄り MQTT TCP・Pub/Sub型 リアルタイム通知 広く普及 HTTP/REST TCP・汎用Web Webシステム連携 オーバーヘッド大 ※ CoAPはHTTPの概念を踏襲しながら、IoT向けに大幅軽量化したプロトコル

CoAPが向いているケース・向いていないケース

向いているケース向いていないケース
電池駆動のセンサーからの定期データ送信大容量ファイルの転送
低帯域・不安定なネットワーク環境リッチなWebアプリケーション
機器どうしのM2M(Machine to Machine)通信信頼性が絶対条件(TCPが必須)の用途
メモリが数KB〜数十KB程度の小型マイコン既存HTTPインフラとの直接統合

関連する規格・RFC

規格・RFC番号内容
RFC 7252CoAP本体の標準仕様(2014年)
RFC 7641Observeオプション(変化通知機能)
RFC 8323TCP・TLS上でのCoAP(2018年)
RFC 7959Block-wise転送(大きなデータを分割送信)
RFC 8974拡張トークンサイズ
DTLS(RFC 6347)UDP上のTLS。CoAPのセキュリティに使用

関連用語