このリポジトリは、Python で実装された学習用のネットワークシミュレータです。ノードやリンクを組み合わせてネットワークを構築し、パケット転送や各種プロトコルの動作を体験することを目的としています。
- ルート直下には
scenario1.pyからscenario15a.pyまで多数の シナリオスクリプト があり、対応するsec*ディレクトリのモジュールを使って実験を行います。 sec1,sec2, ...sec15aの各ディレクトリには、章ごとに機能を拡張したネットワーク部品 (Node,Link,Router,Switchなど) が実装されています。doc/には第1章から第16章までの日本語 Jupyter Notebook が収録され、理論と実装手順がまとめられています。data/にはサンプル画像cat.jpgが置かれており、ファイル転送のシナリオで使用します。
- 段階的な学習:
sec1ではごくシンプルな構成から始まり、セクションが進むにつれて DHCP や TCP、HTTPS まで機能を追加していきます。 - シナリオ実行: 各シナリオではネットワークトポロジを描画し、パケットログを記録できます。シナリオが参照する
sec*ディレクトリに注意してください。 - 必要なライブラリ:
networkx,matplotlib,numpyなど一般的な Python パッケージを使用します。requirements.txtは用意されていないため手動でインストールしてください。 - コードの重複: セクションごとに似たクラスが多数存在します。どのセクションのコードを使っているかを意識しながら学習を進めることが重要です。
doc/以下のノートブックを順に読み、各章の目的や理論を理解します。scenario1.pyから順にシナリオを実行し、出力結果を確認しながらコードとの対応を把握します。- DNS/DHCP/TCP などを扱う後半のシナリオ (
scenario10a.py以降) でより高度な機能を体験します。 - 既存のシナリオを参考に自分のトポロジや通信パターンを組み立て、
NetworkEventSchedulerのschedule_eventメソッドでイベントを追加してみましょう。
- 依存パッケージをインストールします。
pip install networkx matplotlib numpy
- 実行したいシナリオを指定して Python スクリプトを起動します。例として
scenario1.pyを実行する場合は次の通りです。python scenario1.py
各シナリオではノードの追加やリンクの帯域幅設定、パケット転送の様子を確認できます。複雑な動作を試したい場合は scenario14a.py なども参考にしてください。
本リポジトリの内容は Creative Commons Attribution-ShareAlike 4.0 International License の下で提供されます。