組み込み機器におけるネットワーク通信の基礎とOKIアイディエスのTCP/IPスタック
こんにちは、小野です。
ネットワークにつながる組み込み機器が増えた今、家電から産業ロボットまで、様々な機器で安定した通信が求められています。
しかし、組み込み機器では、限られたCPU・メモリー資源の中で、それを実現しなければなりません。
そこで今回は、そんな環境でも安定した通信機能を実現する「TCP/IP Stack for ESWare」をご紹介します。
ではまず、組み込み機器のイメージをつかみやすくするために、簡単なクイズから始めましょう。
では、第1問!(ででん)
カーナビ、洗濯機、工場の生産ラインのロボット…これらに共通するものは何でしょうか?
突然クイズが始まったぞ…。カーナビは車載機器、洗濯機は家電…。
どれも用途や分野が違いますよね。ヒントをください。
もっと深く考えてみてよ…。じゃあヒント。スマホ、炊飯器もこれらの仲間です。
スマホと炊飯器?本当にヒントですか?ますますわからないけど、どれも身近な「電子機器」ですよね!これでどうだ!
だいぶアバウトな答えだね(笑)。正解は…すべて「組み込み機器」でした。
機器ってことは、「電子機器」でほぼ正解じゃないですか。
組み込み機器は一味違うよ。CPUやマイコンなどが組み込まれ、特定の機能を実現するための電子機器のことなんだ。
機器によって機能はもちろん違うけれど、ネットワークにつながって他の機器やシステムと連携する機器は増えている。遠隔監視や制御、データ収集のために通信機能が欠かせないんだ。
なるほど、開発者にとっては、通信の仕組みを理解しておくことが重要そうですね。
まさにその通り。OKIアイディエスは、こういった組み込み機器の通信機能に関わるソフトの設計も得意なんだ。今日は、ネットワーク通信の中でもポピュラーなTCP/IPと、組み込み機器のネットワーク通信について見ていこう。まずは、組み込み機器とネットワーク通信の関係からだよ。
組み込み機器とネットワーク通信
たとえば、外出先でもスマホで家のエアコンをON/OFFできるものがありますよね。こういうエアコンも組み込み機器ですよね。
その通り。他にも工場の生産ラインでは、異常監視や遠隔制御が行われているよね。組み込み機器は、ネットワークを通じて他の機器やシステムと連携するものなんだ。
遠隔から監視や制御が行えると、ユーザーにとって便利で魅力的な製品になりますよね。
その通り。でも、「つながる」だけでは十分とは言えない。通信が不安定だったり、使いにくかったりすると、ユーザーの負担が増えることもあるんだ。
なるほど。単に通信機能があるだけでなく、安定して使えることが大事なんですね。どんなに性能の良い製品でも、通信できなければ機能が動かないですもんね。
ところで、ネットワーク通信の代表的な用途って、どんなものがありますか?
表にすると整理しやすいよ。代表的な用途としては、「遠隔監視」、「データ収集」、「制御連携」、「保守・更新」だね。
| 用途 |
内容 |
期待できる効果 |
| 遠隔監視 |
離れた場所から機器の状態を確認する |
異常の早期発見、現場対応の削減 |
| データ収集 |
機器の動作データやセンサ情報を集める |
稼働状況の把握、分析、品質改善 |
| 制御連携 |
複数の機器のシステムをつなぐ |
全体最適、効率的な制御 |
| 保守・更新 |
ソフトウェア更新や設定変更を行う |
保守作業の効率化、運用負荷の低減 |
なるほど!こうして見ると、ネットワーク通信は組み込み機器を「つなぐ」だけではなく、状態を「見える化」し、そして安定稼働を「保つ」ための重要な手段ですね。
そうなんだ。通信にはいくつかの方式があるけれど、どの方式が適しているかは用途によって変わるんだ。たとえば、工場設備では高速性と高信頼性が重視され、車載機器では厳しい環境下でも安定して動作することが求められる。そのため、分野ごとに適した通信方式を使い分けているんだよ。
ネットワーク通信の基礎
組み込み機器のネットワーク通信って、求められる条件によって方式を使い分けるんですね。
そうなんだ。たとえば、工場設備ではEtherCAT、検査装置ではGigE Vision、車載機器ではCANやLIN、車載イーサネット、家電や医療機器ではBluetoothやBLE、Wi-Fiなどが使われているよ。
うん。そして、その中でも汎用性が高く、広く使われているのがイーサネット(Ethernet)とTCP/IPなんだ。
うん。イーサネットは有線ネットワークで広く使われる通信規格なんだ。たとえば、FA(ファクトリーオートメーション)で使われるEtherCATや、検査装置で使われるGigE Visionは、イーサネットをベースにした通信を行っているよ。
へぇ、GigE Vision向けの当社ソリューション「iGiGE」も、イーサネットがベースになっているんですね。確かにGigEのEはEthernetのEです。
そうそう。そしてもう1つがTCP/IP!標準的で汎用性の高いネットワーク通信方式なんだよ。
TCP/IPで使われる主なプロトコル
TCP/IP もよく聞く言葉です。でも具体的に何を指すのかは、あまりよくわかっていないかもです。
TCP/IPは、機器同士がデータをやり取りするための基本的ルールだよ。
データのやり取りのルールや手順を定めているということですか?
その通り。TCP/IPは役割ごとに複数の階層で分かれていて、各階層にプロトコルが決められているんだ。OSI参照モデルで整理するとわかりやすいんだ。
| OSI参照モデル |
TCP/IPの階層 |
役割 |
主なプロトコル |
| 7. アプリケーション層 |
4. アプリケーション層 |
ユーザーが利用する通信サービスを提供する |
DHCP: IPアドレスを自動で取得する
DNS: ホスト名をIPアドレスに変換する
|
| 6. プレゼンテーション層 |
| 5. セッション層 |
| 4. トランスポート層 |
3. トランスポート層 |
データを相手に届ける役割を担う |
TCP: 信頼性を重視してデータを転送する |
| UDP: 軽量にデータを送信する |
| 3. ネットワーク層 |
2. インターネット層 |
IPアドレスを使って相手まで届ける役割を担う |
IPv4: IPv4アドレスを使って通信する |
| IPv6: IPv6アドレスを使って通信する |
| 2. データリンク層 |
1. ネットワーク
インターフェース層
|
データを電気信号等に変換して送受信する役割を担う |
ARP: IPアドレスに対応するMACアドレスを調べる |
| 1. 物理層 |
Ethernet: MACアドレスを使って通信を行う |
- OSI参照モデル:ネットワーク通信の役割を7つの階層に分けて整理した国際標準
OSI参照モデルは7層ですが、TCP/IPの階層は、アプリケーション層、トランスポート層、インターネット層、ネットワークインターフェース層の4層で考えるんですね。
たとえば、最上位のアプリケーション層は、ユーザーが使う通信サービスを提供する層だよ。ここでは、DHCP や DNS などが使われるんだ。
DHCPは、IPアドレスなどの設定情報を自動で配布する仕組みだよ。DNSは、ホスト名を IPアドレスに変換する仕組みなんだ。以下に、補足の用語集として、表中のプロトコルの説明を簡単にまとめておくね。
補足
- TCP:送ったデータに対して相手から確認(ACK)応答を受け取り、返ってこなければ再送して、確実に届けようとする方式
- UDP:届いたかの確認や再送を基本的に行わず、速度優先で送る方式。映像などのリアルタイム通信に使用される方式
- IPv4:機器を識別するための32bit(例:192.168.1.1)のIPアドレスを使う仕組み
- IPv6:機器を識別するための128bit(例:2001:0db8:85a3:0000:0000:8a2e:0370:7334)のIPアドレスを使う仕組み
- ARP(Address Resolution Protocol):IPv4アドレスからMACアドレスを調べるための仕組み
- MACアドレス:ネットワーク機器1台1台に割り当てられる識別番号(例:00:1A:2B:3C:4D:5E)
TCP/IPで通信する流れ
ふむふむ。役割ごとにプロトコルが分かれていることがわかりました。今度はTCP/IPの通信でプロトコルが実際にどう動くのか、ぜひ知りたいです。
では、ここまでの話を踏まえて、今度はそれらのプロトコルが実際の通信でどう動くのか見てみよう。DHCPでIPアドレスを取得して、DNSで相手端末を見つけてTCPで通信を行う例を、下の通信フロー図で見ていくよ。

自端末の通信準備、相手端末の情報取得、相手端末と通信、の3STEPですね。
まずは自端末の通信準備だ。ネットワークに接続するために、DHCPサーバーからIPアドレスなどの設定情報を受け取るんだ。
次に、自端末は通信したい相手を見つけるために、DNSサーバーに問い合わせるんだ。相手端末もDHCPでアドレスを取得している環境では、端末名は分かっていてもIPアドレスがすぐには分からないことがあるからね。
DNSはホスト名をIPアドレスに変換するんですね。まさにこの機能を利用しているんですね。
それが3つめのステップ、相手端末との通信だよ。実際のデータのやり取りでは、TCPを使って、データを順番どおりに確実に届けるように通信するんだ。
こうやって順番を守ることで、通信相手へデータを正確かつ確実に届けているんですね。当たり前に行われている通信の裏では、こんなことが行われていたとは…。
しかし、組み込み機器では、この通信の流れが汎用PCのように簡単にうまくいくとは限らない。次はどんな課題があるか深堀していこう。
組み込み機器ならではの通信品質と課題
その課題って、最初に話していた通信の安定性に関係しているんじゃないですか?
そう。汎用PCは、CPU、メモリー、ネットワークインターフェースカード(NIC)といった部品があり、OSの上で通信プロトコル群が動く一般的なコンピューターなんだ。
その通り。これに対して組み込み機器は、限られた資源の中で通信を実現しなければならない。ここが大きな違いなんだよ。数MHzのクロックや数MB程度のメモリーしか使えないことも多いよ。
資源が限られているなら、最初から高性能なCPUや大容量のメモリーを用意すれば…というわけにもいかなさそうですね。
量産品ならコストや消費電力を抑える必要があるし、リアルタイムOSでは通信プロトコルのソフトウェアが入ってない場合もある。だから、そのままではネットワーク通信ができず、通信プロトコル群を別途用意する必要があるんだ。
でも、組み込み機器で通信品質を確保しないとなんですよね。通信の遅延や途切れが起きないように工夫をしないと。
そう。通信量が増えると遅延が起きやすくなり、応答性が落ちてしまう。パケットロスも通信の不安定さにつながるんだ。機器ごとに用途や仕様が違うため、個別対応やカスタマイズが必要になることもある。
ということは、組み込み機器の通信は、限られた資源の中で安定して動かす工夫が必要なんですね。
その通り。だから、少ないCPU・メモリー資源でもリアルタイム性や高信頼性を確保できる通信処理が必要になる。そこで、OKIアイディエスのTCP/IPスタックは、そうした組み込み機器特有の制約を前提に設計されているんだよ。
OKIアイディエスのTCP/IPスタックはOS・CPU・コンパイラに非依存!
OKIアイディエスのTCP/IPスタックとはなんでしょうか?ぜひ教えてください!
OKIアイディエスのTCP/IPスタックは、「リアルタイム性」、「高信頼性」、「柔軟性」の要求に応えるために、組み込み機器特有の制約を前提に設計されているんだよ。
汎用的なパソコンだと通信を含めて様々なタスクを高速で処理できるということでしたが、組み込み機器だとそうはいきませんよね。
だから、OKIアイディエスのTCP/IPスタックは、少ないメモリーサイズで動作するように設計されているのだよ。また、OS・CPU・コンパイラに依存しない構成にもなっているんだ。
ということは、その部分はユーザーが意識する必要はないってことですね。様々な環境で幅広く使えそうじゃないですか。
そうだね。ここで、ブロック図を見てほしい。お客様のアプリケーションに対して、「BSDソケットインターフェース」や「TCP/IP Driverインターフェース」を用意しているんだ。BSDソケットインターフェースを使った開発経験のあるエンジニアなら、なじみやすい構成になっているよ。

なんですか?その「なんとかインターフェース」って?このあたりに、何かすごい特長がありそうです。
開発しやすいインターフェース構成
「BSD(Berkeley Software Distribution)ソケットインターフェース」は、アプリケーションがネットワーク通信を行うための標準的なインターフェースだよ。送受信処理を、使いやすい共通の方法で実装できるんだ。アプリケーション側は、通信方式の違いをあまり意識せずに実装できるんだよ。
プロトコルスタックによってAPIが異なると、合わせる必要がありますもんね。
そう。WindowsではWinsock、LinuxではPOSIX系のソケットAPIが使われている。FreeRTOS向けにも「FreeRTOSインターフェース」を提供していて、特定のOSに依存しない構成になっているんだ。
そうだね。さらに、通信ハードウェアの違いも吸収できるように、「HAL(Hardware Abstraction Layer)インターフェース」も用意している。HAL(Ethernet)ドライバーも分離していて、特定のイーサネットデバイスに依存しない構成にしているんだ。
なるほど。アプリケーションだけでなく、下位のハードウェア差まで吸収しているんですね。
その通り。OSやハードウェアに制約がある場合でも、柔軟に対応できるようになっているんだよ。
IPv4/IPv6に両対応のデュアルスタック
OKIアイディエスのTCP/IPスタックは、主要なRFC仕様に基づいて自社開発された、IPv4/IPv6デュアルスタックなんだ。
IPv4アドレスとIPv6アドレスの両方を利用できる、ということだよ。既存のIPv4環境と新しいIPv6環境の両方に対応できるし、IPv4からIPv6へ移行しやすいというメリットがあるよ。
だからデュアルなのか。今はIPv4に対応した環境でも、今後IPv6へ移行できるんですね。将来のシステムの拡張性も高そうです。
さらに、BSD Socket準拠のAPIで既存資産を活かせて、OS・CPU・コンパイラ非依存で導入しやすいのが特徴だね。自社開発ならではの柔軟な対応がしやすい点も強みなんだ。
OKIアイディエスのTCP/IPスタックの性能
当社のTCP/IPスタックの特徴は理解できましたが、性能は果たしてどうなんですか?
当社のTCP/IPスタックは、150MHzクラスのマイコンでも高い転送速度を実現できるんだ。
100Mbitイーサネット環境では、送信で約20.8Mbps、受信で約15.2Mbpsの性能が出ているよ。
ベンチマーク結果を、下の表に示すね。
転送速度比較:
|
OKIアイディエス製 (単位:Mbps) |
他社製 (単位:Mbps) |
対他社比 |
| 送信 |
20.8 |
4.0 |
×5.2 |
| 受信 |
15.2 |
4.0 |
×3.8 |
【条件】
- 通信規格:100Mbitイーサネット
- ハードウェア:
・CPU:ルネサス製マイコン
・クロック:156MHz
・バス:52MHz
・LANコントローラー:インテル製82559ER
- 測定条件
・送信単位:1460bytesの繰り返し
他社製のTCP/IPスタックは、送信・受信ともに約4Mbpsだったよ。
送信では約5.2倍、受信でも約3.8倍のパフォーマンスが期待できるよ。
なるほど、そんなに大きく違うんですね!
この転送速度なら、どんな用途に使えそうなんでしょうか?
20Mbps程度あれば、テキスト主体の通信や、比較的データ量の少ない制御通信には十分使いやすい。
へぇ、現在は、ギガビットが当たり前ですが、20Mbpsでも十分なケースがあるんですね。
そうなんだ。用途に応じて必要な性能を見極めることが大切で、OKIアイディエスのTCP/IPスタックは、そうした組み込み用途に適した性能を持っているんだ。
(注)実際の転送速度は、送受信機器や通信環境、実装条件で大きく変わることもあるので注意が必要です。あくまで目安としてご理解ください。
最後に
今回はネットワークの基礎のお話で、TCP/IPとは何かをたくさん教えてもらいました。身近だけど、なんとなくしか知らなかったTCP/IPがわかってきましたよ。奥が深い…。
そうだね。冒頭で挙げたカーナビや洗濯機、工場の産業用ロボットも、今ではネットワークにつながって使われることが当たり前になっている。だからこそ、組み込み機器では限られた資源の中で、安定して通信できることがとても重要なんだ。
なるほど…。最初のクイズ、TCP/IPにまでちゃんとつながっていたんですね。そんな組み込み機器向けに、OKIアイディエスのTCP/IPスタックがあるんですね。
そうだよ。限られたCPU・メモリー資源でも、リアルタイム性や高信頼性が求められる現場で、安定した通信を支えているんだ。組み込み機器開発には、安定した通信を支える工夫はまだまだあるよ。
さらに奥が深そうですね…。TCP/IPスタック以外にもあるなんて。また今度教えてください!
もちろん。次は、通信の不安定さやパケットロスを防ぐための工夫や、実際の組み込み機器開発における設計のポイントついて話していこう。
ということで、お楽しみに!
次回のブログ更新は8月を
予定しています。お楽しみに!
- ※記載されている会社名、製品名は、各社の商標または登録商標です。
- ※ここに記載されている仕様、デザインなどは予告なしに変更する場合があります。