首頁  >  文章  >  系統教程  >  SDN 網路系統之 Mininet

SDN 網路系統之 Mininet

WBOY
WBOY轉載
2024-01-13 21:36:34906瀏覽
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><br><br><br><br> cd mininet/util/ # ./install.sh -a

# ls mininet of-dissector oflops oftest openflow pox

建立網路
SDN 网络系统之 Mininet

圖 1.簡單網路範例圖


<br> <br>由於Mininet 支援自訂網絡,這裡先引用一個簡單網路範例如圖1,在Mininet 網路系統中直接輸入mn 指令,可以在此系統中建立單層的拓撲網絡,從中預設建立了兩台host和一個交換機,並且啟動了控制器和交換器。同時也可以透過指令 net 檢視到連結情況,先簡單列出了範例,例如在 Mininet 系統中啟用 Web 伺服器與用戶端。 <br> <br><br> # mn<br> *** Creating network<br> *** Adding controller<br> *** Adding hosts:<br> h1 h2<br> *** Adding switches:<br> s1<br> *** Adding links:<br> (h1, s1) (h2, s1)<br> *** Configuring hosts<br> h1 h2<br> *** Starting controller<br> *** Starting 1 switches s1

*** Starting CLI:

mininet>


啟用與關閉 Web 服務<br> <br>在 Mininet 環境中可方便建立一個 Web 伺服器,從下面範例中可以看到從 host1 建立了一個 Web 伺服器,並從另一個 Host 主機想 Web 伺服器取得 HTTP 請求。 <br> <br><br> mininet> h1 python -m SimpleHTTPServer 80 & #在主機 h1 開啟 Web 服務<br> mininet> h2 wget -O - h1 #主機 h2 上下載 h1 web 網站內容<br> --2013-11-04 00:05:40-- http://10.0.0.1/<br> Connecting to 10.0.0.1:80... connected. HTTP request sent, awaiting response... 200 OK# …………<br> Length: 760 [文本/html<title> </title>

  • #Directory listing for /
  • .bash_history
  • .wireshark/
  • install-mininet-vm.sh
  • mininet/
  • of-dissector/
  • oflops/
  • oftest/

    openflow/
  • pox/



    # 0K 100% 1.65M=0s
    2013-11-04 00:05:40 (1.65 MB/s) - written to stdout [760/760]

    mininet> h1 kill %python # 殺掉 web 程序 10.0.0.2 - - [04/Nov/2013 00:05:40] "GET / HTTP/1.1" 200 -
    bash: line 23: kill: python: ambiguous job spec
    Ping 測試 <br><br> 在 Mininet 系統上,實現兩主機互連測試。 <br> <br><br> mininet> h1 ping -c4 h2<br> PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

    64 bytes from 10.0.0.2: icmp_req=1 ttl=64 time=1.55 ms### 64 bytes from 10.0.0.2: icmp_req=2 ttl=64 time=0.094 ms### 64 bytes from 10.0.0.2: icmp_req=3 ttl=64 time=0.075 ms### 64 bytes from 10.0.0.2: icmp_req=4 ttl=64 time=0.071 ms###

    --- 10.0.0.2 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3006ms
    rtt min/avg/max/mdev = 0.071/0.448/1.55​​3/0.638 ms
    查看節點與連結
    <br> mininet> nodes<br> available nodes are:<br> c0 h1 h2 s1<br> mininet> net<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 目錄下給出了一個實例,如在topo-2sw-2host.py 檔案中定義了一個mytopo,則可以透過--topo 選項來指定使用這一拓撲:
    圖 2. 自定拓樸範例
    SDN 网络系统之 Mininet
    由於Mininet 也支援參數化拓撲,透過Python 程式碼也可以創建一個靈活的拓撲結構,也可根據自訂傳遞進去的參數進行配置,並且可重用到多個環境中,下面簡短列出其程式碼的大致結構及含義。
    <br> #!/usr/bin/python

    from mininet.topo import Topo
    from mininet.net import Mininet
    from mininet.util import dumpNodeConnections
    from mininet.log import setLogLevel


    #class SingleSwitchTopo(Topo):
    def __init__(self, n=2, **opts):
    Topo.__init__(self, **opts)
    switch = self.addSwitch('s1') #新增一個交換器在拓樸中
    for h in range(n):
    host = self.addHost('h%s' % (h 1)) #新增主機到拓樸中

    self.addLink(host, switch) #新增雙向連線拓撲


    #def simpleTest():
    topo = SingleSwitchTopo(n=4)
    net = Mininet(topo) #主要類別來建立和管理網路
    net.start() #啟動您的拓樸網路
    print "Dumping host connections"
    dumpNodeConnections(net.hosts) #轉存檔案連線
    print "Testing network connectivity"
    net.pingAll() #所有節點彼此測試互連

    net.stop() #停止您的網路


    if __name__ == '__main__':
    setLogLevel('info') # 設定 Mininet 預設輸出級別,設定 info 它將提供一些有用的信息
    simpleTest()

    驗證參數化拓樸結構

    <br><br># # python test-single.py<br> *** Creating network<br> *** Adding controller<br> *** Adding hosts:<br> h1 h2 h3 h4<br> *** Adding switches:<br> s1<br> *** Adding links:<br> (h1, s1) (h2, s1) (h3, s1) (h4, s1)<br> *** Configuring hosts<br> h1 h2 h3 h4<br> *** Starting controller<br> *** Starting 1 switches<br> s1<br> Dumping host connections<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> Testing network connectivity<br> *** Ping: testing ping reachability<br> h1 -> h2 h3 h4<br> h2 -> h1 h3 h4<br> h3 -> h1 h2 h4<br> h4 -> h1 h2 h3 *** Results: 0% dropped (12/12 received)

    名字空間 namespace

    #通常情況下,主機介面有用獨立的名字空間 namespace,而控制節點跟交換節點都在根名字空間(root namespace)中。如果想要讓所有節點擁有各自的名字空間,需要加入 --innamespace 參數,即執行:mn --innamespace
    <br><br> # mn --innamespace --switch user<br># *** Creating network<br> *** Adding controller<br> *** Adding hosts:<br> h1 h2<br> *** Adding switches:<br> s1<br> *** Adding links:<br> (h1, s1) (h2, s1) c0 <br> s1<br> *** Testing control network<br> s1 -> c0<br> c0 -> s1

    *** Results: 0% dropped (2/2 received)


    *** Configuring hosts
    h1 h2
    *** Starting controller
    *** Starting 1 switches
    s1
    *** Starting CLI:

    Mininet 常用動作

    表 1.Mininet 常用指令

    ###

    以上是SDN 網路系統之 Mininet的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:linuxprobe.com。如有侵權,請聯絡admin@php.cn刪除