Pythonでns3のシミュレーションプログラムを書く

Created 2018年9月30日23:56
Updated 2018年10月6日13:27
Categories Python ns3

ns3について

ネットワークの研究でns3というシミュレーションソフトを使うことになりました。

ns3は有線から無線まで、様々なネットワークのシミュレーションを書くことができるネットワークシミュレータです。

さらに、PythonのAPIを用意しており、Pythonからシミュレーションプログラムを書くことができるようです。

Using Python to Run ns-3によると、

Python bindings provide support for importing ns-3 model libraries as Python modules. Coverage of most of the ns-3 C++ API is provided.

(誤訳してたらすみません: Python bindingsはns-3のモデルライブラリをPythonモジュールとしてimportできて、ほとんどのC++のAPIを使うことができるよ)

おぉ、これはすごい!これがあれば大好きなPythonでシミュレーションが書けそうです。

しかし、これが悪夢の始まりでした。

足りないAPI、少なすぎる(というか存在しない)ドキュメント、特殊なビルド環境、シミュレーションソフト特有の柔軟性の無さ・・・

この記事では、Pythonに入り浸り世間の厳しさを忘れた一介のプログラマーがns3という巨大シミュレーションソフトと格闘した道しるべを書いていきます(負けるかもしれない)。

本記事では具体的な事は書かず、シミュレーションを書いていて躓いたことを別記事に備忘録として列挙していこうと思います。

ns3の記事一覧はこちらをご覧ください。

何を作るのか

まず最初に目標を書いておきます。

私がns3で書きたいのは、”CCNのシミュレーション”です。

CCNはIPアドレス形式でのネットワーク通信を置き換えるようなアーキテクチャとして考案されたもので、コンテンツへのルーティングを全て中継するルーターが行うため、DNSによる名前解決が必要ないという特徴があります。

詳しい話はネットにいくらでも転がっているのでここでは省略しますが、要するにIPアドレスを用いない通信方式でコンテンツをサーバー(的なもの)から取ってくる形になります。

一般的な通信のシミュレーションならPythonでも簡単に書けたかもしれませんが、ネットワーク通信の基礎を弄るような事しているので結構大変だったのかもしれません。

もくじ

開発の大体の流れを書いておきます。

なんとなくの流れで書いてるので、記事化する項目があったりなかったりすると思います。

  1. とりあえず使ってみる
  2. サンプルを移植してみる
    • CCNはPacketSocketで再現できそう
    • ドキュメントが無いので自作
  3. 環境の再構築
    • Packetの中身設定できねぇ
    • 結局C++のコード弄らないと無理
    • 熾烈なコンパイルバトル
  4. 双方向通信するには
    • ChannelとNetDeviceの話
  5. CCNっぽいのを作ってみる
    • ノード同士の接続
    • はじめてのCCN
    • トポロジの自動生成
  6. CCNのパラメータを設定

コメントを投稿

コメント