CoAP(Constrained Application Protocol) こあっぷ
簡単に言うとこんな感じ!
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種類のメッセージタイプがあり、信頼性と効率を使い分けられます。
| メッセージタイプ | 略称 | 説明 |
|---|---|---|
| Confirmable | CON | 相手からの確認応答(ACK)を要求する。確実に届けたいとき |
| Non-confirmable | NON | 応答不要の送りっぱなし。センサーの定期送信などに使う |
| Acknowledgement | ACK | CONへの受信確認 |
| Reset | RST | 処理できないメッセージへの拒否応答 |
HTTPとの比較
CoAPはHTTPの「IoT版」として設計されているため、概念は非常に似ています。
| 比較項目 | HTTP | CoAP |
|---|---|---|
| トランスポート層 | TCP | UDP |
| ヘッダサイズ | 数百〜数KB | 最小4バイト |
| セキュリティ | TLS | DTLS |
| 通信モデル | リクエスト/レスポンス | リクエスト/レスポンス + Observe |
| 主な用途 | Webブラウザ、APIサーバー | IoT機器、センサー |
| ポート番号 | 80 / 443 | 5683 / 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以外にも複数あり、用途によって使い分けます。
CoAPが向いているケース・向いていないケース
| 向いているケース | 向いていないケース |
|---|---|
| 電池駆動のセンサーからの定期データ送信 | 大容量ファイルの転送 |
| 低帯域・不安定なネットワーク環境 | リッチなWebアプリケーション |
| 機器どうしのM2M(Machine to Machine)通信 | 信頼性が絶対条件(TCPが必須)の用途 |
| メモリが数KB〜数十KB程度の小型マイコン | 既存HTTPインフラとの直接統合 |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 7252 | CoAP本体の標準仕様(2014年) |
| RFC 7641 | Observeオプション(変化通知機能) |
| RFC 8323 | TCP・TLS上でのCoAP(2018年) |
| RFC 7959 | Block-wise転送(大きなデータを分割送信) |
| RFC 8974 | 拡張トークンサイズ |
| DTLS(RFC 6347) | UDP上のTLS。CoAPのセキュリティに使用 |
関連用語
- MQTT — CoAPと並ぶIoT向け軽量プロトコル。Pub/Sub型でブローカー経由通信が特徴
- IoT(Internet of Things) — モノがインターネットにつながる仕組み全般
- UDP(User Datagram Protocol) — CoAPが基盤とする軽量トランスポートプロトコル
- REST(Representational State Transfer) — CoAPが採用するWebアーキテクチャスタイル
- DTLS(Datagram TLS) — UDP通信を暗号化するセキュリティプロトコル。CoAPのセキュリティ層
- エッジコンピューティング — IoT機器の近くで処理を行うアーキテクチャ。CoAPと相性がよい