イーサネットの演習でのシミュレータの使用

講義は全体としては昨年にちかいかたちですすめている. だから,このブログにもほとんど書かなかった. しかし,当初予定では Seattle というシステムをつかうつもりだったのをあきらめて,イーサネットのシミュレータを新規開発して演習につかってみた. その結果はあまりよくなかったが,このプログラムはつかえるのではないかとおもうので公開する.

Seattle をやめた理由は,第 1 に大学のなかから外部のシステムをつかうのには困難があったということだ. Seattle じたいはセキュリティには気をつかいながらも比較的おおらかにできているが,大学側はそんなにおおらかなポリシーでできていないので,つなぐのがむずかしい. そして第 2 に,Seattle は Python 2 で書かれていて,大学で標準的な環境である Python 3 とは互換性がないということだ. Python 2 のプログラムを Python3 に変換する 2to3 というプログラムもあるのだが,それはあまりうまく機能しない. そんなにかんたんに学内の環境になじませることはできないようなので,あきらめた.

かわりに 1 台のマシン上で動作するシミュレータを用意しようとかんがえた. 汎用のネットワーク・シミュレータはもちろんいろいろあるが,イーサネットの動作を学生にみせるのに適当なものがみつけられなかった. そこで,とりあえず自分で Python で書いてみることにした. このプログラムでみせたいものは,端末間でのパケットのやりとり (パケットの内容,送受信の時刻など) と,スイッチの MAC アドレス・テーブルの内容だ. スイッチのプログラムを動作させると MAC アドレス・テーブルの内容は変化するが,その内容や変化を CUI (文字出力インターフェース) でよみとれるようにしている.

最初は Macintosh 上の Python 2 でうごくように書いたが,いくつかの点を変更することで Python 3 版もつくった. ひとつの版を両方でうごくようにできないかとかんがえたが,これはうまくいかなかった. ひとつのプログラムのいくつかの行をコメントアウトし,べつの行のコメントをはずすと,Python 3 用から Python 2 用になるようにしている.

このシミュレータはスイッチや PC ごとに端末ウィンドウ (Windows ではコマンド・プロンプト) をひらき,それぞれがプロセスとして動作するようになっている. これらのプロセスはイーサネットで通信するかわりに UDP で通信する. イーサネットのパケットを UDP でカプセル化するのが通常のつくりかただろうが,UDP のペイロードはイーサネットではないフォーマットになっている.

たとえばつぎのようにスイッチに 4 個のコンピュータが接続されたネットワークをかんがえる.

PC2 から PC3,PC3 から PC2,PC1 から PC2 にそれぞれパケットを送信したあとの各スイッチと各 PC の状態はつぎのようにシミュレートされる (ここでは PC1 のコマンドだけを表示している). スイッチのプログラムが表示しているのが MAC アドレス・テーブルの内容である.

このプログラムはパブリック・ドメインにおくことにした. くわしくはこのファイルにふくまれる readme.txt を参照されたい.

トラックバック(0)

トラックバックURL: http://www.kanadas.com/mt504/mt-tb.cgi/4485

コメントする