エンジニアじゃなくても理解しておきたいプロトコル

 IoTの開発現場に接すると、「プロトコル」という言葉をよく耳にすると思います。事業開発担当者は、このプロトコルを、どう理解したらよいでしょうか?プロトコルというのは、そもそも、IoT機器とIoTゲートウェイ、サーバーなど、コンピュータ同士のデータのやり取りの方法を厳格に定めた規格(規約)のことです(ちなみにIoTに使われるコンピュータに限った話ではありません)。

 コンピュータはプログラムに従って動作する機械です。ですので、どのようなタイミングで、どのような情報を相手のコンピューターに伝達し、その情報によってどのような動作をするということを厳密に取り決めなければ、複数のコンピュータは協調して動けないのです。IoTでは、よく使われるプロトコルには、HTTPやMQTTなどがあります。

プロトコルには様々なものがあります。IoTシステムには、様々な形態があるので、その要件に応じて使い分けが必要になります。考慮すべき項目には、以下のようなものがあります。

1、軽量性 プログラム規模
2、消費電力、電池駆動であれば、駆動制限時間、
3、デバイスが固定位置なのか、常に移動なのか?
4、リアルタイム性 応答時間
5、データ到達性 パケットロス率
6、通信形態、1対1なのか、1対Nなのか?
7、トランザクションがどこから開始されるか
8、トランザクションの発生頻度
9、データサイズ
10、使用するIoTセンサーデバイス・ゲートウェイの数

エンジニアさんたちは、上記のような事を考慮してシステム開発をします。技術畑出身ではない事業開発担当者としても、特に、消費電力・デバイスが固定なのかどうか、使用するIoTセンサーデバイスの数など、サービス企画時に考慮する必要があります。

TCP/IPモデル

プロトコルを理解するには、まずは、TCP/IPモデルを理解する必要が有ります。

TCP/IPモデルとは、米国国防高等研究計画局(DARPA)が作ったデータ通信機能におけるモデルです。「通信機能をざっくりと定義したもの」で、事実上の世界標準です。(同じ位置づけで、OSI参照モデルというモノがあり、内容や言葉がよく似ていますが、別物と考えておいた方がよいでしょう)

階層プロトコル
アプリケーション層HTTP MQTT
トランスポート層TCP/UDP
インターネット層IP
ネットワークインターフェース層Ethernet  IEEE802.11 等

実際にWebにアクセスした場合を例にして、具体的なプロトコル間のやり取りを説明してみましょう。

例えば、ブラウザに表示したいホームページのアドレスを入力すると、アドレスをサーバへ送信する為に、HTTPの規約にそって下位層のTCPを制御するプログラムに渡されます。TCP制御プログラムは、アプリケーション層から受け取ったデータに、TCPの規約に従った制御情報をヘッダとして加えたデータを作りIP制御プログラムに渡します。IP制御プログラムも受け取ったデータに、IPの規約に従った制御情報をヘッダとして加えたパケットを作り、Ethernet制御プログラムに渡します。最後に、IPパケットを受け取ったEthernet制御プログラムはEthernetの規約に従ったヘッダ情報を加えたデータを作成し、データを構成するビットパターンに応じた電気信号を、Ethernetケーブルを通じて相手のコンピュータに伝送します。

さて、受信側のコンピュータは、ケーブルから送られてきた電気信号を受信するとEthernet制御プログラムで伝送途中でデータが壊れていないかチェックします。正常であればヘッダ情報に応じた処理を行ない、IP制御プログラムにIPパケットを渡します。IP制御プログラムは渡されたIPパケットの中のIPヘッダの処理を行ない、TCP制御プログラムに渡します。同様に、TCP制御プログラムもTCPヘッダ情報の処理を行ない、HTTP サーバプログラムにデータを渡し、HTTPサーバプログラムは、HTTP規約に従った情報を判断し処理を行ないます。

TCP/IPの階層モデルでは、以上のような手順でプロトコル間の情報を受け渡しています。

IoT開発現場では、様々なメーカーのセンサーデバイスや、様々なベンダーのアプリケーションが接続されます。そこで、TCP/IPモデルいう、トランスポート層(=センサーデバイス・IoTゲートウェイ)までは、TCP・IP・Ethernet・IEEE802.11など、一般的なプロトコルを使い、アプリケーション層で、HTTPやIoTシステムで使いやすい軽量プロトコルのMQTTを使う事例が多いです。

※この記事は、プロトコル?な方の為にざっくりイメージを持ってもらう為に書きました。より詳細なご相談がございましたら、お気軽にご連絡下さい。