ICT STUDY GUIDEIoTの用語IoT中級

IoTの再送と冪等性|通信が届いても二重登録が起こる理由

通信タイムアウトを失敗と決めつけないために。センサー記録の再送・確認応答・重複排除・処理IDの役割を独自ケースと図で整理し、MQTTのQoSと業務処理の保証範囲も分けます。

最終更新
読了目安
約4分
執筆
ICT模試 編集部
まず結論

この記事の要点

  • 応答が届かないときは、処理前に失敗した場合と、処理済みで応答だけ失われた場合を区別できません。
  • 再送による重複は、通信の届き方と業務処理の設計を分けて考えます。
  • 以下は一般的な設計理解のための自作例です。公式問題や出題予想ではありません。

タイムアウトは「登録されなかった」という証拠ではない

倉庫の温度計が、観測した温度をサーバーに送る場面を考えます。端末に「送信完了」が出なかったとしても、サーバー側に記録がないとは限りません。送信要求が届く前に回線が切れた場合と、サーバーが保存した後に確認応答が失われた場合は、端末から見ると同じ待ち時間切れになります。

ここで端末が記録を捨てれば、前者では欠測になります。反対に新しい記録として送信し直せば、後者では同じ観測が二つ保存されるかもしれません。「再送するか、しないか」の二択だけでは、欠落と重複を同時に解決できません。失敗した場所が分からない状況を扱う設計が必要です。

応答なしでも、保存状態は二通り

保存前に通信断

  • 要求が届いていない
  • サーバーに記録なし
  • 再送しないと欠測

保存後に応答断

  • 要求と保存は完了
  • 端末に確認が届かない
  • 新規登録すると重複

端末に見える結果は同じでも、サーバーの状態は異なります。

一つの観測に、一つの識別子を付ける

自作例では、端末Aの観測に「A-104」というIDを付けます。通信をやり直すときも同じ観測なら同じIDを使い、次の観測には「A-105」を使います。サーバーはA-104を初めて受け取ったときだけ保存し、再び受け取ったときは保存済みであることを確認して応答します。

IDは温度の値とは別です。10時と10時1分に同じ20度を観測することはあります。値が同じだから重複と判断すると、別の観測を消してしまいます。逆に再送のたびに新しいIDを発行すると、同じ観測と分からず重複防止になりません。何を「同じ一件」とするかを先に決めます。

再送でも同じ観測IDを引き継ぐ
  1. 1

    観測A-104を保存

    端末が値とIDを一緒に保持

  2. 2

    送信・再送

    応答がなくてもIDは変えない

  3. 3

    受信済みを確認

    同一IDは業務登録を繰り返さない

  4. 4

    結果を応答

    端末は確認後に送信待ちを解除

単純化した処理例。実装には同時受信や障害復旧時の整合性も必要です。

冪等性は「同じ応答が返る」だけではない

冪等性は、同じ操作を複数回行ったときの意図された効果が、一回行った場合と同じになる性質です。HTTPのRFC 9110では、PUTやDELETEなどをこの性質で扱います。例えば設定値を20にする操作と、現在値に20を加える操作は異なり、後者を二回実行すると増分は40になります。

同じHTTPメソッドなら、どんな実装でも安全に再送できるという意味ではありません。業務側が意図どおりの意味で実装されている必要があります。また一回目と二回目で応答コードやログの内容が変わっても、それだけで冪等性が失われるわけではありません。確認するのは、狙った状態変更が繰り返されていないかです。

POSTを使う登録APIでも、サービス独自の処理IDを使って重複効果を防ぐ設計は可能です。ただしPOST一般に冪等性が保証されるわけではなく、利用側はそのAPIの仕様と、同じIDを保持する期間や同一性の判定条件を確認します。

受信・保存・業務処理の三つを分ける

メッセージが到達した、データベースに保存した、通知や請求などの業務処理を完了した、という三つは別の状態です。保存後に通知処理が失敗することもあります。受信済みの印だけを先に付けて再送を無視すると、まだ終わっていない業務処理まで終わったものとして扱う危険があります。

逆に業務処理が終わってから受信済みの印を書く途中で停止すると、復旧後に同じ業務処理をやり直す可能性があります。重複確認と状態更新の一貫性、処理途中の記録、再開できる段階を設計する必要があります。IDを追加したという一点だけで「重複は起こらない」と断定しないでください。

確認対象保存する情報の例不足した場合
観測の同一性端末IDと観測番号再送と新規観測を混同
処理の状態受付・処理中・完了未完了を完了として扱う
再送の期限記録の保持期間古い再送を識別できない

MQTTのQoSと業務の一回処理は同一ではない

MQTTのQoSは、プロトコル上の送信者と受信者の間でメッセージをどう届けるかに関わります。QoS 1では重複配信があり得るため、アプリケーション側でも同じメッセージを受ける可能性を考えます。QoS 2の一回配信という性質を、別システムへの登録や請求まで含めた一回実行の保証に広げないことが重要です。

プロトコルが保護する区間と、業務が完了したと扱う区間を図に書くと、追加で必要な管理が見えます。MQTTの基本構造はMQTTとQoSの解説で扱い、本記事はその先の再送・保存・業務処理の境界に絞っています。

再送と処理の重複を分ける:届いたか不明な情報を再送するとき、受信側で同じ出来事か照合する場面です
届いたか不明な情報を再送するとき、受信側で同じ出来事か照合する場面です。通信が届くことと、業務上の処理が重複しないことを分けます。

学習では条件を変えて説明する

再送IDを毎回変えたらどうなるか、同じ温度を別時刻に測ったらどうするか、保存後に通知だけ止まったら何を再開するか。この三つを説明してみてください。「通信を安定させる」と「障害が起きても整合性を保つ」は、補い合う別の課題です。

設計条件を読み分ける練習はIoT中級の問題集の選び方、科目を横断した設計の確認はモバイル1級の問題集ガイドへ進めます。実際の教材範囲はIoT中級コースで確認してください。この解説だけで実システムの安全性や試験の得点を保証するものではありません。

出典・参考

  1. [1]IETF RFC 9110 §9.2.2 Idempotent Methods(2026-10-21確認)
  2. [2]OASIS MQTT Version 5.0(配信保証の範囲)

本番と同じペースで腕試し

記事の次は、本番形式の問題で。

各検定の出題カテゴリをもとに作った独自の無料お試しを、登録不要・カード不要で解けます。本番と同じ出題配分とは限りません。続きの模試と章別ドリルは買い切りで、月額はかかりません。

IoTシステム技術検定 中級

80問・90分の模試と章別ドリル・¥4,980(税込・買い切り)

IoT中級の無料お試し20問
料金と収録内容を見る →

当サイトは、MCPC・全日本情報学習振興協会・IPAとは関係のない個人が運営する非公式の学習教材です。掲載している問題はすべて当サイトのオリジナルで、実際の試験問題・過去問題・再現問題ではありません。試験の日程・受検料・出題範囲・合格基準は各試験の公式サイト(モバイル・IoT:https://www.mcpc-jp.org/license/ 、サイバー管理士:https://www.joho-gakushu.or.jp/isme/ 、情報セキュリティマネジメント(SG):https://www.ipa.go.jp/shiken/kubun/sg.html )で必ず確認してください。教材内の正答率や学習の目安は、本番の評価点や公式の合格基準とは異なります。合格を保証するものではありません。技術・制度の記述は「最終確認日」時点のものです。

← 対策記事の一覧へ