モノのインターネット(IoT)は急速に拡大しており、冷蔵庫から工場まであらゆるものが接続されている。しかし、この相互接続された世界には新たな問題が生じている。それは、これらのデバイス間の効率的な通信をどのように確保するかということだ。そこで登場するのが通信プロトコルで、デバイス同士の会話を可能にする言語として機能する。そのようなプロトコルの1つがCoAPであり、リソースに制約のあるIoTデバイスに軽量のソリューションを提供します。
ナガロは、最新のIoTアプリケーションの厳しい要求を満たす高性能CoAP通信ソリューションを 提供してきました。この記事では、CoAPとナガロのミドルウェア・ソリューションであるCoAPConnectの概要を紹介します。CoAPConnectは、新規および既存のアプリケーションへのCoAPのシームレスな統合を促進するように設計されています。
CoAPと他のIoTプロトコル
数十台のサーモスタットが常に室温を監視しているスマートホームを考えてみよう。HTTPのような従来のプロトコルは、かさばるヘッダーとバッテリー寿命を消耗するTCP接続のために苦労しています。MQTTは信頼性の高い配信を提供するが、複雑さと消費電力を増加させる。CoAPが勝者として浮上した。制約の多いデバイス向けに設計されたCoAPは、データサイズとリソース消費を大幅に削減する。
例えば、CoAPの合理化されたヘッダーにより、サーモスタットはHTTPの576mAhと比較して、わずか144mAh/日でデータを送信することができる。 CoAPの影響は個々の機器にとどまらない。これらのサーモスタットを制御する中央ハブを想像してみてほしい。CoAPの低レイテンシー(MQTTの50-100msに対して20-50ms、HTTPの100-200ms)とメモリフットプリントの削減(MQTTの3-5MB、HTTPの5-10MBに対して1-3MB)により、ハブはリアルタイムデータを受信し、効率的に設定を調整することができ、より良い、よりエネルギー意識の高い未来を創造することができる。
このコンセプトは、リソースに制約のあるデバイスとの効率的な通信が重要な農業、ウェアラブル、産業オートメーションなど、さまざまな領域に適用されます。
CoAP | MQTT | HTTP | AMQP | |
トランスポート | UDP | TCP | TCP | TCP |
マルチキャスト対応 | あり | なし | なし | なし |
ヘッダーサイズ | 4バイト | 2バイト | 可変 | 8バイト |
通信タイプ | リクエスト - レスポンス | パブリッシュ - サブスクライブ | リクエスト - レスポンス | パブリッシュ - サブスクライブ |
QoS | 確認可能メッセージ 確認不可能メッセージ | 0 - 最大1回 1 - 少なくとも1回 2 - 一度だけ |
限定的(トランスポート・プロトコルTCP経由) | セトル(最大1回など)/アンセット(最低1回など) |
レイテンシー | 低 | 中 | 高い | 低い |
リソース使用量 | 低 | 低 | 高 | 高い |
動的発見 | あり | なし | なし | なし |
アーキテクチャスタイル | P2P | ブローカー | P2P | P2P、ブローカー |
キャッシュ、プロキシ | あり | 部分的 | あり | はい |
データのシリアライズ | 設定可能 | 未定義 | 未定義 | AMQPタイプ定義 |
セキュリティ | DTLS | SSL | SSL/TLS | TLS |
エネルギー消費 | 低い | 中程度 | 高い | 非常に高い |
相互運用性 | あり | いいえ | はい | はい |
CoAPの仕組み
CoAPは、リソースに制約のあるIoTの世界で効率的な通信を行うために、合理化されたクライアント・サーバー・ダンスで動作します。コアとなるやり取りは以下の通りです:
- クライアントが開始します:リソースに制約のあるデバイス(クライアント)は、希望する操作(GET、PUTなど)とデータソース(リソース識別子)を指定したCoAPリクエストを送信する。
- UDP配信: CoAPはメッセージ・トランスポートにUDPを使用し、オーバーヘッドを削減するために、保証されたデリバリーよりもスピードを優先します。
- メッセージ・タイプ:CoAPはメッセージ・タイプに柔軟性を持たせています。確認可能なメッセージは再送信による信頼性を優先し、確認不可能なメッセージはリアルタイム・シナリオの速度を優先します。
- サーバー処理: リクエストを受信すると、サーバーはオペレーションとリソース識別子に基づいて処理します。
- サーバー応答:サーバーは、ステータスコード(成功/失敗)とデータまたはエラーメッセージを含むCoAPレスポンスを生成する。
- レスポンスの配信: サーバーはメッセージを含むレスポンスをクライアントに送信し、通信サイクルを完了する。
この効率的なやり取りにより、CoAPは帯域幅や処理能力が制限されるIoTアプリケーションで優れた性能を発揮する。
"CoAPConnect "の導入
アプリケーションにおけるCoAPの統合は、一般的にCoAP適応ライブラリを使用して実装される。しかし、このアプローチでは、柔軟性と耐障害性が制限される一方で、リソース管理に課題が生じる。Nagarroは、YoctoレシピまたはBuildrootパッケージ定義を通じてオペレーティング・システムとシームレスに統合するように設計された、Linuxベースのシステム向けのミドルウェア・サービス "CoAPConnect "を開発しました。システム起動時に自動的に開始されるこのサービスにより、アプリケーションは、Linuxで広く使われているIPCメカニズムであるD-Busを通じて、CoAPクライアントとサーバーを簡単に作成、設定、管理することができる。
この設計により、CoAPの複雑さが抽象化され、開発者はプロトコルの複雑さやメモリ管理を気にすることなく、アプリケーション・ロジックに集中することができます。
アーキテクチャ
CoAPConnectなし
CoAPをLinuxアプリケーションに統合するには、通常、アプリケーション自体にCoAPライブラリを組み込みます。
このアプローチは、柔軟性とプロトコルの直接制御を提供する一方で、大きな課題を伴います。
プロトコルの複雑さ:
- アプリケーションは、メッセージ管理、再送、リソース制約などの低レベルのプロトコルの複雑さを直接処理する必要があります。
- このため、開発工数が増加し、バグが発生する可能性も高くなります。
リソースのオーバーヘッド:
- ライブラリのフットプリントは、リソースに制約のあるシステムにおいて、メモリとCPUに大きな負担を強いる可能性があります。
- これらの要求は、CoAPライブラリの個別のインスタンスを使用するアプリケーションが増えるにつれて大きくなります。
マルチアプリケーションシナリオにおける非効率性:
- 複数のアプリケーションがCoAP機能を必要とする場合、それぞれにライブラリのインスタンスを含める必要があります。
- この重複は、メモリとCPUの冗長な使用、およびネットワーク使用率の増加につながります。
- リソースの使用量はアプリケーションの数に比例し、デバイスを圧倒する可能性があります。
メンテナンスの複雑さ:
- ライブラリの更新は各アプリケーションに個別に適用する必要があり、更新プロセスが複雑になる。
- アプリケーション間のバージョンの不一致は、一貫性のない動作やシステムの不安定性につながる可能性があります。
CoAPConnect
CoAP用の集中型サービスを使用することで、各アプリケーション内にCoAPライブラリを埋め込む代わりに堅牢な代替手段を提供します。
NagarroのCoAPConnectは、開発を合理化し、リソースの利用を最適化し、アプリケーションの特定の要件に基づいて、クライアント、サーバー、またはその両方としての役割を構成する柔軟性を提供します。
CoAPConnectの主な特徴と技術的な利点は以下の通りです:
プロトコル管理の簡素化:
- CoAPConnectは、メッセージ処理、再送、リソース管理などの低レベルのCoAPプロトコルの詳細を抽象化します。
- これにより、個々のアプリケーションの複雑さが軽減され、プロトコル固有のタスクを管理することなく、コア機能のみに集中することができます。
効率的なリソース利用:
- CoAPConnect がすべてのプロトコル操作を処理するため、複数のアプリケーションで冗長なライブラリインスタンスを使用する必要がありません。
- これにより、メモリ、CPU、ネットワークの使用量を最小限に抑え、リソースに制約のあるデバイスに最適です。
より簡単な設定:
- CoAPConnectは、CoAP接続を確立するために必要な設定を最小限に抑えます。
- アプリケーションは動的に複数のセッションを作成し、必要に応じて新しいリソースを公開することができます。
- CoAPConnect では、各セッションでセキュアまたは非セキュア通信を選択できます。
二重の役割と P2P サポート:
- CoAPConnect はクライアントとサーバーの両方の役割をサポートし、アプリケーションは必要に応じてどちらの役割でも動作することができます。
- ピアツーピア(P2P)モードでは、各アプリケーションはクライアントとサーバーの両方として機能し、仲介者を介さないデバイス間の直接通信を可能にします。
セキュアな通信
- CoAPConnectは、OSCAR (Open Security for CoAP and REST)を使用して、CoAPクライアントとサーバー間の安全で暗号化された通信を提供します。
- CoAPConnectは、OSCARの認証メカニズムを活用し、許可されたデバイスのみがシステムとやり取りできるようにし、不正アクセスから保護します。
- OSCARのデータ整合性チェックにより、CoAPConnectは送信されたメッセージの信憑性を保証し、信頼性の高い改ざん防止通信を実現します。
拡張性:
- すべてのアプリケーションがCoAPConnectサービスの単一インスタンスを共有するため、新しいアプリケーションを追加してもリソース需要が大幅に増加することはありません。
- このアーキテクチャは、リソースの使用量を直線的に拡張することなく、マルチアプリケーションシナリオをサポートします。
メンテナンスと障害管理の容易さ:
- 更新やバグフィックスはサービスに適用されるため、すべてのアプリケーションで一貫した動作が保証されます。
- これにより、複数のアプリケーションにまたがるCoAP機能の保守やアップグレードの複雑さが軽減されます。
- ライブラリとは対照的に、サービスに重大な障害が発生しても、アプリケーション全体の動作が中断されることはありません。
CoAPConnect ワークフロー
初期化とスタートアップ
システムブート中、CoAPConnect は初期化され、プロセス間通信の通信バスとして機能する D-Bus に自動的に登録されます。これにより、CoAPConnectは起動時にアプリケーションから即座にアクセスできるようになり、追加のネットワーク設定なしにCoAP操作のためのすぐに使える環境を提供します。
Dバス経由のインタラクション
アプリケーションは、D-Busメッセージを通じて高レベルのコマンドを送信することで、CoAPConnectと対話します。これらのメッセージには通常、CoAP クライアントまたはサーバーの作成、リソースの設定、CoAP リクエストの送信、および受信レスポンスの処理の指示が含まれます。CoAPConnect はこれらの D-Bus リクエストを処理し、内部メカニズムを使用してコマンドをメッセージフォーマット、ルーティング、レスポンス処理などの CoAP 固有のオペレーションに変換します。
ネットワーク処理
CoAPConnect は、ソケット管理を含む全てのネットワークレベルのオペレーションを担当します。CoAPはUDPをベースにしているため)UDPプロトコルを利用し、通信に必要なソケットをオープンして設定します。CoAPConnectはソケットを特定のポートとIPアドレスにバインドし、ソケットの状態を管理し、継続的な通信のためにソケットがオープンであることを保証する。通信を開始する前に設定されている場合、OSCARは非対称暗号または事前共有鍵を使用して、通信エンティティ(クライアントとサーバー)間の安全な鍵交換を容易にします。この鍵はメッセージの暗号化と復号化に使用されます。
プロトコルのカプセル化
CoAPConnectは、CoAPプロトコル仕様に従って、CoAPメッセージをUDPパケットにカプセル化します。ヘッダー管理(CoAPコード、トークン、メッセージID、オプションなど)を含むメッセージ構築を処理し、大きなペイロードの正しいセグメンテーションを保証します。信頼性のために、CoAPConnect は定義されたタイムアウト内に確認応答を受け取らなかったメッセージの再送信も処理し、再送信タイマーの管理とメッセージ状態の追跡を行います。設定されている場合、CoAPConnect は送信データを暗号化し、受信データを認証および復号化します。
セッションとリソース管理
CoAPConnectは、CoAPクライアントとサーバーのセッション管理を提供します。セッションの作成、維持、終了など、各 CoAP セッションの状態を追跡します。リソース管理のために、CoAPConnectはサーバー側で利用可能なリソースの内部レジストリを維持し、各リソースを関連するURIにマッピングします。CoAPConnect は、入ってくる CoAP リクエストを処理し、リソースレジストリをチェックし、応答をリアルタイムに処理します。また、オブザーバー関係、タイムアウト、その他のセッション関連属性も管理し、必要なときにリソースがクライアントとの対話に利用できるようにします。
エラー処理と再送信:
CoAPConnectは通信エラーを検出し、再送信を自動的に管理します。CoAPConnectは、確認応答が必要なトランザクションに対して、CoAPのConfirmableメッセージ(CON)を使用した信頼性の高いメッセージ配信メカニズムを活用しています。CoAP メッセージが定義されたタイムアウト期間内に応答を受け取らなかった場合、CoAPConnect は再送信をトリガーします。さらに、不正なメッセージ、タイムアウト条件、到達不能なエンドポイントなどのエラーシナリオを処理し、信頼性の低いネットワーク環境でも堅牢性を確保します。CoAPConnect は再試行に指数バックオフ戦略を使用し、再送試行を追跡することで、過剰な再試行やパケットフラッディングを回避します。
結論
CoAPは、リソースに制約のあるIoT環境における通信のための魅力的な選択肢として際立っている。その軽量設計、非同期メッセージング、ビルトイン・ディスカバリー、マルチキャスト・サポートは、バッテリー駆動のデバイスやダイナミック・ネットワークに理想的です。さらに、CoAPはRESTfulアーキテクチャに準拠しているため、HTTPメソッドに関する既存の知識とシームレスに統合でき、開発者の効率が向上します。
プロトコルの複雑性を抽象化し、リソース管理を一元化することで、NagarroのCoAPConnectは製品開発時間とコストを大幅に削減し、競争上の優位性を提供します。当社のCoAP、IoT、セキュリティの専門家と交流し、スマートで安全なIoTデバイスを構築するには、embedded@nagarro.com。