SDN の正式名称は Software Defined Network で、現在のインターネットにおける新しい革新的なネットワーク アーキテクチャです。そのコア技術である OpenFlow は、ネットワーク機器のコントロール プレーンとデータ プレーンを分離し、ネットワーク トラフィックの制御を実現します。柔軟な制御により、優れたプラットフォームを提供します。ネットワークとアプリケーション。 Mininet は、軽量のソフトウェア デファインド ネットワークおよびテスト プラットフォームです。軽量の仮想化テクノロジを使用して、単一のシステムを、思考カーネル システムとユーザー コードを実行する完全なネットワークのように見せます。これは、単純にプロセスベースの仮想化プラットフォームとしても理解できます。 SDN ネットワーク システム。OpenFlow や OpenvSwith などのさまざまなプロトコルをサポートしています。Mininet は、同じコンピュータ上で完全なネットワーク ホスト、リンク、スイッチをシミュレートすることもでき、特に OpenFlow や SDN テクノロジを使用する対話型の開発、テスト、デモンストレーションを容易にします。このプロセス仮想化プラットフォームから実際の環境にコードを移行することも可能です。
Mininet によって実装された機能Mininet のインストール方法は比較的簡単です。Git ソース コードと組み込みのインストール スクリプトを通じて Linux システムにインストールできます。ここでは、次のようなすべての Mininet 関連パッケージのデフォルトのインストールを使用します。 OpenFlow、POX、およびその他のツールは、デフォルトで現在のユーザーのホーム ディレクトリに保存されます。
<br>
# git clone git://github.com/mininet/mininet<br>
# cd mininet/util/<br>
# ./install.sh -a<br>
#ls<br>
mininet of-dissector oflops oftest openflow pox<br>
図 1. 単純なネットワークの例の図
Mininet はカスタム ネットワークをサポートしているため、図 1 に示すような簡単なネットワークの例を示します。 Mininet ネットワーク システムに直接 mn コマンドを入力して、このシステムに単一層トポロジ ネットワークを作成します。そこから 2 つのホストが作成されます。デフォルト.とスイッチがあり、コントローラーとスイッチがアクティブになります。同時に、net コマンドを通じてリンクの状態を確認することもできます。まず、Mininet システムで Web サーバーとクライアントを有効にするなど、簡単な例を示します。
<br>
#mn<br>
*** ネットワークの作成<br>
*** コントローラーの追加<br>
*** ホストの追加:<br>
h1 h2<br>
*** スイッチの追加:<br>
s1<br>
*** リンクの追加:<br>
(h1, s1) (h2, s1)<br>
*** ホストの構成<br>
h1 h2<br>
*** コントローラーの開始 <br>
*** 1 つのスイッチを開始します <br>
s1<br>
*** CLI の開始:<br>
ミニネット><br>
Web サービスの有効化と無効化
Mininet 環境では Web サーバーを簡単に構築できます。次の例では、host1 から Web サーバーを構築し、別のホストから Web サーバーへの HTTP リクエストを取得することがわかります。
<br>
mininet> h1 python -m SimpleHTTPServer 80 & #ホスト h1<br> で Web サービスを開く
mininet> h2 wget -O - h1 #h1 Web サイトのコンテンツをホスト h2<br> にダウンロードする
--2013-11-04 00:05:40-- http://10.0.0.1/<br>
10.0.0.1:80に接続中...接続されました。<br>
HTTP リクエストが送信され、応答を待っています... 200 OK<br>
…………<br>
長さ: 760 [text/html<br>
<br>
<title>/</title>
0K 100% 1.65M=0秒
2013-11-04 00:05:40 (1.65 MB/秒) - 標準出力 [760/760]
mininet> h1 kill %python # Web プロセスを強制終了します
10.0.0.2 - - [2013/11/04 00:05:40] "GET / HTTP/1.1" 200 -
bash: 行 23: kill: Python: あいまいなジョブ仕様
Ping テスト
Mininet システム上で、2 つのホスト間の相互接続テストを実現します。
<br>
ミニネット> h1 ping -c4 h2<br>
PING 10.0.0.2 (10.0.0.2) 56(84) バイトのデータ。<br>
10.0.0.2 からの 64 バイト: icmp_req=1 ttl=64 time=1.55 ms<br>
10.0.0.2 からの 64 バイト: icmp_req=2 ttl=64 time=0.094 ms<br>
10.0.0.2 からの 64 バイト: icmp_req=3 ttl=64 time=0.075 ms<br>
10.0.0.2 からの 64 バイト: icmp_req=4 ttl=64 time=0.071 ms
--- 10.0.0.2 ping 統計 ---
4 パケット送信、4 パケット受信、パケット損失 0%、時間 3006ms
rtt 最小/平均/最大/mdev = 0.071/0.448/1.553/0.638 ミリ秒
ノードとリンクの表示
<br>
ミニネット>ノード<br>
利用可能なノードは次のとおりです:<br>
c0 h1 h2 s1<br>
ミニネット>ネット<br>
h1 h1-eth0:s1-eth1<br>
h2 h2-eth0:s1-eth2<br>
s1 lo: s1-eth1:h1-eth0 s1-eth2:h2-eth0<br>
c0<br>
Mininet はカスタム トポロジをサポートしています。例は mininet/custom ディレクトリにあります。mytopo が topo-2sw-2host.py ファイルで定義されている場合は、--topo オプションを使用してこれの使用を指定できます。 :
図 2. カスタム トポロジの例
Mininet はパラメータ化されたトポロジもサポートしているため、Python コードを通じて柔軟なトポロジを作成でき、渡されたカスタム パラメータに従って構成することもでき、複数の環境で再利用することができます。そのコードの一般的な構造は以下に簡単にリストされています。 。
<br>
#!/usr/bin/python
mininet.topoインポートTopoから
from mininet.net import Mininet
mininet.util から import dumpNodeConnections
mininet.log からインポート setLogLevel
クラス SingleSwitchTopo(Topo):
def __init__(self, n=2, **opts):
Topo.__init__(self, **opts)
switch = self.addSwitch('s1') #トポロジにスイッチを追加します
範囲(n)のhの場合:
host = self.addHost('h%s' % (h 1)) #トポロジにホストを追加します
self.addLink(host, switch) #双方向接続トポロジの追加
def simpleTest():
トポ = SingleSwitchTopo(n=4)
net = Mininet(topo) #ネットワークを作成および管理するメインクラス
net.start() #トポロジーネットワークを開始します
print "ホスト接続をダンプしています"
dumpNodeConnections(net.hosts) #ダンプ ファイル接続
print "ネットワーク接続のテスト"
net.pingAll() #すべてのノードが相互接続をテストします
net.stop() #ネットワークを停止します
if __name__ == '__main__':
setLogLevel('info') #Mininet のデフォルトの出力レベルを設定します。情報を設定すると、役立つ情報が提供されます
simpleTest()
<br>
# Python テスト-single.py<br>
*** ネットワークの作成<br>
*** コントローラーの追加<br>
*** ホストの追加:<br>
h1 h2 h3 h4<br>
*** スイッチの追加:<br>
s1<br>
*** リンクの追加:<br>
(h1, s1) (h2, s1) (h3, s1) (h4, s1)<br>
*** ホストの構成<br>
h1 h2 h3 h4<br>
*** コントローラーの開始 <br>
*** 1 つのスイッチを開始します <br>
s1<br>
ホスト接続をダンプしています<br>
h1 h1-eth0:s1-eth1<br>
h2 h2-eth0:s1-eth2<br>
h3 h3-eth0:s1-eth3<br>
h4 h4-eth0:s1-eth4<br>
ネットワーク接続のテスト<br>
*** Ping: ping 到達可能性のテスト<br>
h1 -> h2 h3 h4<br>
h2 -> h1 h3 h4<br>
h3 -> h1 h2 h4<br>
h4 -> h1 h2 h3<br>
*** 結果: 0% ドロップ (12/12 受信)
通常、ホスト インターフェイスには独立した名前空間があり、制御ノードとスイッチング ノードは両方ともルート名前空間にあります。すべてのノードに独自の名前空間を持たせたい場合は、 --innamespace パラメーターを追加する必要があります。つまり、 mn --innamespace
を実行します。
<br>
# mn --innamespace --ユーザーの切り替え<br>
*** ネットワークの作成<br>
*** コントローラーの追加<br>
*** ホストの追加:<br>
h1 h2<br>
*** スイッチの追加:<br>
s1<br>
*** リンクの追加:<br>
(h1, s1) (h2, s1)<br>
c0 s1<br>
*** 制御ネットワークのテスト<br>
s1 -> c0<br>
c0 -> s1<br>
*** 結果: 0% がドロップされました (2/2 を受け取りました)
*** ホストの構成
h1 h2
*** コントローラーの開始
*** 1 つのスイッチを開始します
s1
*** CLI の開始:
表 1. Mininet の共通手順
以上がSDNネットワークシステムのミニネットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。