この記事の要点
- CoAP(Constrained Application Protocol)は、非力な機器と不安定なネットワーク向けに作られた、HTTPに似たWebの転送プロトコル。RFC 7252(2014年6月)で規定された。
- HTTPと同じくGET・POST・PUT・DELETEで資源を操作するREST型だが、TCPではなくUDPの上で動く。既定ポートはcoapが5683、DTLSで暗号化するcoapsが5684。
- UDPの上で確実に届けるため、確認応答を求めるCON、求めないNONなど4種類のメッセージを使い分ける。
- MQTTとの違いは「要求・応答(CoAP)か、publish/subscribe(MQTT)か」と「UDPか、TCPか」の2点で押さえる。
CoAPとは?一言でいうと?
CoAPは、メモリや電力の少ない機器どうし、または機器とサーバの間で、Webと同じ考え方(URIで資源を指し、GETで読み、PUTで書く)の通信をするためのプロトコルです。IETFのRFC 7252(2014年6月)は、CoAPを制約のあるノードとネットワーク(低消費電力で損失の多いネットワーク)向けの特化したWeb転送プロトコルと説明し、スマートエネルギーやビル自動化などのM2Mの用途を想定しています(2026年9月27日確認)。
RFC 7252は、対象の例として、ROMとRAMの少ない8ビットのマイコンや、6LoWPANのようにパケットの誤りが多く、数十kbit/s程度の速度しか出ないネットワークを挙げています。こうした環境では、HTTPのヘッダの大きさや、TCPの接続手続きの往復が重荷になります。
CoAPはHTTPと簡単に連携できるように作られており、プロキシを介してHTTPの世界とつなげます。一方で、マルチキャスト対応、非常に小さなオーバーヘッド、単純さといった、制約のある環境向けの要件を満たすことを目指しています。
REST型(GET・PUTなど)とUDPはどう組み合わさる?
CoAPは、上の層はHTTPに似せ、下の層はUDPで軽くするという組み合わせです。温度センサ(CoAPサーバ)の値を読む例で見ます。
- クライアントが coap://sensor1.example/temp に GET の要求を送る(UDPの既定ポート5683)
- センサは、応答コード 2.05 Content と温度の値を返す
- 設定を変えたいときは PUT、資源を作るときは POST、消すときは DELETE を使う
- 資源が見つからなければ 4.04 Not Found のように、HTTPの404に対応するコードを返す
応答コードは「クラス.詳細」の形で、2.xxが成功、4.xxがクライアント側の誤り、5.xxがサーバ側の誤りです。HTTPを知っていれば意味を推測しやすいように作られています。
UDPの上でどう確実に届ける?4種類のメッセージ
UDPは届いたかどうかを保証しないため、CoAPはUDPの上にメッセージの層を持ち、次の4種類を使い分けます。
| 種類 | 意味 | 使う場面 |
|---|---|---|
| CON(Confirmable) | 確認応答を求める。届かなければ間隔を倍々に延ばして再送する | 確実に届けたい要求・通知 |
| NON(Non-confirmable) | 確認応答を求めない | 定期的に送る測定値など、多少欠けてもよいもの。マルチキャストの要求もNON |
| ACK(Acknowledgement) | CONを受け取ったことを知らせる。応答を載せることもある | CONへの返事 |
| RST(Reset) | 受け取ったが処理できないことを知らせる | 心当たりのないメッセージへの返事 |
← 表は横にスクロールできます →
ヘッダ・ポート・暗号・拡張は?
CoAPのメッセージは4バイトの固定ヘッダから始まり、0〜8バイトのトークン(要求と応答を対応づける値)とオプションが続きます。既定ポートはUDPの5683番(coap)で、DTLSで保護するcoapsは5684番です。
再送の既定値は、最初の待ち時間(ACK_TIMEOUT)が2秒、最大再送回数(MAX_RETRANSMIT)が4回で、同じ相手に同時に出してよい未完了の要求(NSTART)は1つです。RFC 7252は、この倍々に延ばす再送(指数バックオフ)を基本の輻輳制御としています。
CoAPは、基本仕様のあとに拡張が加えられています。
- Observe(RFC 7641、2015年9月):資源の値が変わるたびにサーバから通知を受け取る仕組み。GETで一度登録すれば、繰り返し問い合わせずに済む
- CoRE Link Format(RFC 6690、2012年8月):/.well-known/core にGETすると、その機器が持つ資源の一覧が返る(資源の発見)
- CoAP over TCP, TLS, and WebSockets(RFC 8323、2018年2月):UDPが通りにくい環境向けに、TCPやWebSocketの上でもCoAPを使えるようにした
MQTTと何が違う?比較表
IoTのプロトコルとして並べて問われやすい2つを、同じ軸で比べます。
| 比較軸 | CoAP | MQTT |
|---|---|---|
| 規格 | IETF RFC 7252(2014年6月) | OASIS MQTT 5.0(2019年3月7日) |
| 通信モデル | 要求・応答(REST型。GET・PUTなど) | publish/subscribe(ブローカーが配る) |
| 下位の通信 | UDP(TCP・WebSocket版はRFC 8323) | TCP/IPなど順序どおり欠けずに届く通信 |
| 中継役 | 不要(端末どうしで直接話せる。プロキシも使える) | ブローカーが必須 |
| 確実さの調整 | CON(確認あり)とNON(確認なし) | QoS 0・1・2 |
| 既定ポート | 5683(coap)、5684(coaps・DTLS) | 1883(TLSなし)、8883(TLS) |
| 暗号化 | DTLS | TLS |
| 値の変化の通知 | Observe(RFC 7641) | 購読したトピックに配信 |
| マルチキャスト | 対応(要求はNON) | 仕様にはない(ブローカーが複数に配る) |
← 表は横にスクロールできます →
迷ったら、「誰が相手を知っているか」で考えます。CoAPはクライアントがセンサのURIを知って直接たずねる形、MQTTは送り手も受け手もブローカーだけを知っていればよい形です。MQTTの仕組みは MQTTとは、UDPとTCPの違いそのものは TCPとUDPの違い で確認できます。
IoT中級ではどこで、どう問われる?
CoAPは、IoTシステム技術検定 中級の出題カテゴリ「センサ/アクチュエータ技術と通信方式(デバイス、ネットワーク、LPWA、プロトコル)」の「プロトコル」に当たります。公式ページの図では比率が25〜30%です(MCPC公式ページ、2026年9月27日確認)。公式テキスト『IoT技術テキスト 第4版』では第4章「IoT通信方式」に当たる範囲です(章とカテゴリの対応は当サイトの推定)。
CoAPの出題数は公表されていません。4択では、次のような観点が考えられます(当サイトの予想で、出題の再現ではありません)。
- CoAPが使う下位プロトコル(UDP)と、MQTTが使うもの(TCP)の区別
- REST型のメソッド(GET・POST・PUT・DELETE)を使うこと
- CON・NON・ACK・RSTの意味の組合せ
- 暗号化の手段(CoAPはDTLS、MQTTやHTTPSはTLS)
用途の条件からHTTP・MQTT・CoAPを選ぶ考え方は HTTPとMQTTの使い分け でまとめています。
どこで取り違えやすい?つまずき別の見直し表
| 取り違え | 正しい整理 | 見直す手がかり |
|---|---|---|
| CoAPもTCPで動くと思う | 基本はUDP。TCP・WebSocket版は後からRFC 8323で追加 | RFC 7252=UDP |
| CoAPはpublish/subscribe型だと思う | 要求・応答のREST型。変化の通知はObserveで補う | ブローカーがいるのはMQTT |
| CoAPの暗号化はTLSだと思う | UDPの上なのでDTLS。coapsの既定ポートは5684 | D=Datagram(UDP向け) |
| NONは応答が返らない要求だと思う | NONは確認応答(ACK)を求めないだけで、応答自体は返りうる | ACKの有無と応答の有無を分ける |
| ポート番号をMQTTと混同する | CoAPは5683・5684、MQTTは1883・8883 | CoAPは56で始まる |
← 表は横にスクロールできます →
確認問題1:CoAPの説明として正しいのは?
CoAPの説明として、最も適切なものはどれか。
- UDPの上で動き、GETやPUTで資源を操作するREST型
- TCPの上で動き、ブローカーを介してメッセージを配信する
- UDPの上で動き、トピックを購読してメッセージを受け取る
- TCPの上で動き、HTTP/3と同じくQUICの利用を必須としている
正解:1。CoAPはRFC 7252で規定された、UDPの上で動くREST型のプロトコルで、HTTPと同じくGET・POST・PUT・DELETEを使います。
2はMQTTの説明です。3は「UDP」の部分は合っていますが、トピックの購読はMQTTの仕組みで、CoAPは要求・応答型です。4は誤りで、CoAPの基本はUDPで、QUICを使うのはHTTP/3です。
確認問題2:確認応答を求めるメッセージはどれ?
CoAPで、受信側に確認応答(ACK)を求め、応答がなければ再送するメッセージの種類はどれか。
- NON(Non-confirmable)
- RST(Reset)
- ACK(Acknowledgement)
- CON(Confirmable)
正解:4。CONは確認応答を求めるメッセージで、ACKが返らなければ待ち時間を倍々に延ばしながら再送します。
1のNONは確認応答を求めないメッセージで、定期的な測定値など多少欠けてもよい送信に使います。2のRSTは、受け取ったメッセージを処理できないことを知らせる返事です。3のACKは、CONを受け取ったことを知らせる側のメッセージです。
確認問題3:coapsの既定ポートと暗号化の組合せは?
RFC 7252で定められた、暗号化されたCoAP(coaps)の既定ポートと暗号化の方式の組合せとして、最も適切なものはどれか。
- 5683番とTLS
- 5684番とDTLS
- 8883番とTLS
- 1883番とDTLS
正解:2。coapsはUDPの上でDTLSを使い、既定ポートは5684番です。暗号化しないcoapの既定ポートは5683番です。
1の5683番は暗号化しないcoapのポートで、方式もTLSではありません。3の8883番とTLSは、MQTTをTLSで使う場合の組合せです。4の1883番はTLSを使わないMQTTのポートです。
プロトコルの問題にほかの分野を混ぜて本番の形式で試すなら、IoT中級の無料お試し20問 へ。登録なしで全問の解説を確認できます。
よくある質問
CoAPはHTTPの代わりになりますか?
RFC 7252は、CoAPをHTTPと簡単に連携できるように設計したと説明しています。ただし、目的は非力な機器やネットワークでWebの考え方を使うことで、一般のWebサイトの通信を置き換えるものではありません。機器側はCoAP、クラウド側はHTTPとし、プロキシでつなぐ構成も考えられます。
CoAPとMQTTはどちらが省電力ですか?
一概には言えません。CoAPはUDPで接続の維持が不要な一方、MQTTは接続を保つ代わりに小さなヘッダで何度も送れます。送信の頻度、下りの指示の有無、ネットワークの品質で有利な方が変わるため、試験でも条件つきで考えるのが安全です。
Observeを使えばpublish/subscribeと同じですか?
似た動きになりますが、仕組みは違います。Observeは、クライアントがサーバ(センサなど)の資源に直接登録し、変化をそのサーバから受け取ります。MQTTのように、送り手と受け手の間にブローカーが入って配信を仲介するわけではありません。
出典・参考
- [1]MCPC IoTシステム技術検定 中級(出題カテゴリと比率。2026年9月27日確認)
- [2]RFC 7252: The Constrained Application Protocol (CoAP)(2014年6月。2026年9月27日確認)
- [3]RFC 7641: Observing Resources in CoAP(2015年9月。2026年9月27日確認)
- [4]RFC 6690: CoRE Link Format(2012年8月。2026年9月27日確認)
- [5]RFC 8323: CoAP over TCP, TLS, and WebSockets(2018年2月。2026年9月27日確認)
- [6]OASIS: MQTT Version 5.0(2026年9月27日確認)
本番と同じペースで腕試し
記事の次は、本番形式の問題で。
公式の出題カテゴリの比率どおりに組んだ無料お試しを、登録不要・カード不要で解けます。続きの模試と章別ドリルは買い切りで、月額はかかりません。
あわせて読みたい
当サイトは、モバイルコンピューティング推進コンソーシアム(MCPC)とは関係のない個人が運営する非公式の学習教材です。掲載している問題はすべて当サイトのオリジナルで、実際の試験問題・過去問題・再現問題ではありません。試験の日程・受検料・出題範囲は公式サイト(https://www.mcpc-jp.org/license/ )で必ず確認してください。合格を保証するものではありません。合格の目安は当サイトの推定です。技術・制度の記述は「最終確認日」時点のものです。