2022年11月号特集「ネットワーク・プログラミング」サポート・ページ

★ルータ・プログラムのサポート・ページはこちら★
第1部:仮想Linux環境でルータ作りに挑戦
第2部:ラズパイでも運用可!アプリケーション・ルータの開発

動画1 特集ではソフトウェア・ルータを作りながらネットワークの基礎知識を解説する
動画は第1部で作成するルータ・プログラムを仮想ネットワーク環境で実験している様子

 

●IoTの普及でますます重要に!「ネットワーク」がテーマ

 IoT(Internet of Things,モノのインターネット)は,さまざまなモノがインターネットにつながり,情報交換することで相互に制御する仕組みです.2010年代に入り,大手半導体メーカやITメーカが関連製品・サービスを提供し始めたことで,急速に普及しました.

 これにより,PCやスマートフォンなど従来のインターネット端末に加え,家電や自動車,ビルや工場など,さまざまなモノがインターネットにつながるようになりました.組み込み機器も例外ではありません.センサで測定したさまざまなデータをクラウド・サーバに送り,処理を行って,再び端末の制御のためのデータを戻す,といったことが普通に行われています.これらの仕組みは,インターネットを裏で支えるネットワークの技術により実現されています(図1図2).

 今回の特集では,IoTの普及によりますます重要になってきたネットワークについて,実際に手を動かしながら,その仕組みを学んでいきます.

 

図1 今回の特集でやること…インターネットを支えるネットワークの仕組みを学ぶ

利用者はサーバの場所やネットワークの構成を意識しなくても問題なく使えるようになっている

 

図2 ちゃんとサーバと通信できるのはネットワークが正しい経路を選んでいるから

 

●ネットワーク開発で困ること

▼トラブルが起きると手も足も出ない

 ネットワークのプログラムは,ネットワークの専門家でなくても開発できるようなライブラリやコマンドが豊富に用意されています(リスト1).しかし,肝心なネットワークの仕組みは完全に隠蔽されているので,トラブルが発生すると手も足もでません.コマンドやライブラリはエラー・メッセージを表示するだけで,具体的にどうすれば良いのかが分かりません(図3).

これに対処するには,ネットワークの仕組みを知って,発生しているエラーの意味が分かるようになることが重要です.

 

リスト1 ネットワーク通信プログラムは専門家でなくても開発できるが肝心なネットワークの仕組みは隠蔽されている

ライブラリやコマンドが豊富に用意されているので,たった3行のプログラムで地球の裏側までメッセージを届けられる

#TCP/IPで通信するための準備
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))  #HOST, PORTで指定される通信相手と接続する
    s.send(b’hello, world!’) #文字列hello, world!を送信する

 

図3 ネットワーク開発には便利なコマンドやライブラリが用意されているが…トラブルが起きるとエラー・メッセージを表示するだけ

 

▼機器が故障しなくてもエラーが発生する

 ネットワークと言えば,トラブルが付きものです.単独で動く機器であれば,故障がトラブルの主な要因だと思います.しかし,ネットワークでは故障しなくてもトラブルが起こります.商用レベルのネットワーク・プログラムは,当然トラブルによるエラー表示を想定した作りになっています.「ネットワーク・プログラムではエラー処理が9割を占める」という意見もあるほどです.

▼トラブルを経験することが重要

 ネットワークの仕組みを理解してからトラブルを経験すると,どのように対処すればよいかが分かるので,どのようなエラー処理を行えばよいか考えられるようになります(図4).

 気軽にトラブルを経験するには,実験用ネットワークを用意して自分で意図的にトラブルを起こしてみるのが一番です.

図4 いろいろなトラブルを経験することが成長につながる

仮想的な実験用ネットワーク環境を用意すれば,気軽に意図的にトラブルを経験できる

 

●ルータ作りを通してネットワークの基礎を学ぶ

 今回の特集では,ネットワークを構成する機器の1つであるルータとして動作するプログラムを開発しながら,ネットワークの基本的な仕組みを学んでいきます.

▼第1部:仮想Linux環境でルータ作りに挑戦

 特集の第1部では,仮想Linux環境でソフトウェア・ルータを作りながら,ネットワークの基礎知識を解説します.

 イーサネットやARP(Address Resolution Protocol)の処理を行い,IPルーティングによるパケット転送,ICMP(Internet Control Message Protocol)によるping応答機能などを実装します.また,家庭用ルータで利用されるNAT(Network Address Translation)機能も実装し,IPアドレスを複数ホストで共有できるようにします(図5).

 

図5 第1部で作成するルータ・プログラムの全体像

ルータとしての基本機能を実装して,実際に動かしながら通信実験を行う.実験は全て仮想環境で行えるので,PCが1台あれば試せる

 

▼第2部:ラズパイでも運用可!アプリケーション・ルータの開発

特集の第2部では,フルスクラッチ開発のソフトウェア・ルータ「アプリケーション・ルータ」を紹介します.OSのカーネル上で動作するアプリケーションとして実装されているので,FreeBSD/Linux/Windowsの環境で動作します.また,汎用的なPCだけでなく,ラズベリー・パイで動かすこともできます.

また,ファイル・システムや各種ライブラリを利用するなど,アプリケーションの利便性を生かしたさまざまなルータの実装が可能です.機能の追加や改造が容易なので,ネットワーク機器の開発・検証用ツールとしても有用です(図6).

 

図6 第2部で作成するアプリケーション・ルータの利用イメージ

カーネル内部のOS標準ルータ機能に比べると性能面で劣るが,改造や実験がしやすい

 

●IoTならセキュリティ対策も重要

▼世界中から24時間365日攻撃にさらされる

ネットワークにより,地球の裏側であっても容易に通信できるようになりました.これは,攻撃者から見ても同じです.自宅に居ながらにして,世界中を攻撃できます.

自宅のホーム・ゲートウェイなどのセキュリティ・ログを見ると,24時間365日攻撃されているのが分かると思います.個人宅を攻撃してどうするのか,と思うかもしれませんが,攻撃者は無差別に攻撃を行っています.例えば,玄関のドアが開いていないか,数多くの空き巣が1軒1軒ドアノブをガチャガチャ確認しているイメージです(図7).

 

図7 ネットワークに接続する機器は24時間365日世界中から攻撃にさらされている

 

▼第3部ではセキュリティ・プロトコルを使った通信プログラムを作る

特集の第3部では,IoTでも注目されているセキュリティについて取り上げます.インターネットで現在標準的に使われているセキュリティ・プロトコルであるTLS(Transport Layer Security)を使ったプログラミングの方法について解説します(図8).

TLSのプロトコルは一般的なウェブ・サーバやその他多くの通信で利用されています.実際にパブリックなウェブ・サーバ(Google)にアクセスするためのプログラムを作成し,接続してみます.

 

図8 攻撃から通信を守る「セキュリティ・プロトコル」に課せられている3つの目的

 

★ご購入はこちらから★

・紙版:CQ出版WebShop

https://shop.cqpub.co.jp/hanbai/books/MIF/MIF202211.html

・電子版:書庫&販売

https://cc.cqpub.co.jp/lib/system/doclib_item/1637/