ホームページ  >  記事  >  システムチュートリアル  >  SDNネットワークシステムのミニネット

SDNネットワークシステムのミニネット

WBOY
WBOY転載
2024-01-13 21:36:34921ブラウズ
SDN と Mininet の概要

SDN の正式名称は Software Defined Network で、現在のインターネットにおける新しい革新的なネットワーク アーキテクチャです。そのコア技術である OpenFlow は、ネットワーク機器のコントロール プレーンとデータ プレーンを分離し、ネットワーク トラフィックの制御を実現します。柔軟な制御により、優れたプラットフォームを提供します。ネットワークとアプリケーション。 Mininet は、軽量のソフトウェア デファインド ネットワークおよびテスト プラットフォームです。軽量の仮想化テクノロジを使用して、単一のシステムを、思考カーネル システムとユーザー コードを実行する完全なネットワークのように見せます。これは、単純にプロセスベースの仮想化プラットフォームとしても理解できます。 SDN ネットワーク システム。OpenFlow や OpenvSwith などのさまざまなプロトコルをサポートしています。Mininet は、同じコンピュータ上で完全なネットワーク ホスト、リンク、スイッチをシミュレートすることもでき、特に OpenFlow や SDN テクノロジを使用する対話型の開発、テスト、デモンストレーションを容易にします。このプロセス仮想化プラットフォームから実際の環境にコードを移行することも可能です。

Mininet によって実装された機能
  • OpenFlow や OpenvSwitch などのソフト定義ネットワーク コンポーネントをサポートします
  • システムレベルの復元テスト、複雑なトポロジ、カスタム トポロジなどをサポートします。
  • 複数人による共同開発を容易にするPython APIを提供します
  • 優れたハードウェアの移植性と高い拡張性
  • 数千のホストをサポートするネットワーク構造
Miniet の実装とワークフロー

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. 単純なネットワークの例の図
SDN 网络系统之 Mininet

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>

のディレクトリ リスト
  • .bash_history
  • .wireshark/
  • install-mininet-vm.sh
  • ミニネット/
  • 解剖者/
  • oflops/
  • 最も高い/
  • オープンフロー/
  • 痘/

  • 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.55​​3/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. カスタム トポロジの例
    SDN 网络系统之 Mininet
    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 の開始:

    Mininet の共通操作

    表 1. Mininet の共通手順

    以上がSDNネットワークシステムのミニネットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はlinuxprobe.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。