【Mininet指令介紹】

現在我們就直接來看看要怎麼操作mininet,mininet下指令的介面分為兩種

  • Mininet CLI Mode (透過mn的指令進入mininet>的提示字元)
  • 直接下完整的mn [各種參數] 來完成指令

    首先我們介紹CLI Mode

    sudo mn
    進入到mininet> 提示字元

    Screenshot from 2017-11-09 02-26-08.png

    Screenshot from 2017-11-09 02-29-02.png
    預設產生出來的拓墣為1個controller/ 1個switch / 2個host
  • 顯示所有網路的連接情況

    mininet> net

    Screenshot from 2017-11-09 02-30-09.png

  • 列出所有節點的資訊

    mininet> nodes

    Screenshot from 2017-11-09 02-30-46.png

  • 列出所有節點的連接狀態

    mininet> links

    Screenshot from 2017-11-09 02-31-03.png

  • 查看交換機連接的port

    mininet> ports

    Screenshot from 2017-11-09 02-31-38.png

  • 顯示各節點資訊

    mininet> dump

    Screenshot from 2017-11-09 02-32-15.png

  • 顯示幫助(可以下的指令包含範例)

    mininet> help

    Screenshot from 2017-11-09 02-32-53.png

  • 列出所有的網路介面

    mininet> intfs

    Screenshot from 2017-11-09 02-34-51.png

  • 兩節點之間進行iperf TCP測試

    mininet> iperf

    Screenshot from 2017-11-09 02-36-31.png

  • 兩節點之間進行自訂頻寬的udp測試

    mininet> iperfudp

    Screenshot from 2017-11-09 02-36-55.png

  • 所有主機與其他所有主機進行ping測試

    mininet> pingall

    Screenshot from 2017-11-09 02-37-18.png

  • 所有主機與其他所有主機進行ping測試,並顯示詳細資訊

    mininet> pingallfull

    Screenshot from 2017-11-09 02-37-35.png

  • 對首兩台主機進行ping測試

    mininet> pingpair

    Screenshot from 2017-11-09 02-37-54.png

  • 對首兩台主機進行ping測試,並顯示詳細資訊

    mininet> pingpairfull

    Screenshot from 2017-11-09 02-38-05.png

  • 顯示設備的網路介面設定

    mininet> [設備名稱 host/switch] ifconfig

    Screenshot from 2017-11-09 02-38-58.png

  • 設備間相互ping

    mininet> [來源設備名稱 host/switch] ping [-c封包數] [目的設備名稱 host/switch]

    Screenshot from 2017-11-09 02-39-32.png

  • 開啟設備的終端機視窗

    mininet> xterm [設備名稱]

    Screenshot from 2017-11-09 02-40-43.png

    Screenshot from 2017-11-09 02-43-26.png
    我們也可以在各個終端機下指令,就好像操作每台設備一樣

     

  • 執行python指令

    mininet> py + 指令/[檔案名].py

    Screenshot from 2017-11-09 02-47-00.png

  • 執行shell指令

    mininet> sh + 指令/[檔案名].shell

    Screenshot from 2017-11-09 02-47-20.png

  • 離開mininet

    mininet> exit

    Screenshot from 2017-11-09 02-47-50.png

    Screenshot from 2017-11-09 02-47-55.png
    離開mininet後回到原系統目錄

    接著我們介紹mn [參數] 模式

    # mn [–topo] [–controller] [–link] [–switch] [–mac] [–nat] [–ipbase]

  • 清除mininet設定(通常上一個拓墣或指令下完,都會先執行清除,避免錯誤)

    mn -c

    Screenshot from 2017-11-09 02-48-19

  • mininet提供的GUI拓墣設定模式(除了在command line的模式下下拓墣指令,mininet更提供了一個人性化的拓墣設計介面)

    # 執行miniedit.py這個檔案
    # 該檔案預設放置於~/mininet/examples底下

    python miniedit.py

    Screenshot from 2017-11-09 03-03-22.png
    執行miniedit.py後的初始化介面

     

    Screenshot from 2017-11-09 03-05-17.png
    設計完拓墣後,按下"run"後發現左邊console也跟著執行拓墣
  • 設定MAC位址等於Deive ID

    # 比較有無–mac參數的差異
    mn [–mac]

    Screenshot from 2017-11-09 03-12-15.png
    一般我們在建立拓樸時,如沒有加入參數–mac,Mininet 將會以隨機產生的方式將產生出來的 MAC address 分配給各個節點,但如果加入了,則會變成有順序的方式產生 MAC address
  • 設定NAT到拓譜中

    # 比較有無–nat參數的差異
    mn [–nat]

    Screenshot from 2017-11-09 03-14-56

  • 設定拓譜內的IP位址

    # 比較有無–ipbase=ip_address參數的差異
    mn [–ipbase=ip_address]

    Screenshot from 2017-11-09 03-20-37.png

  • 在 Mininet 2.0 後允許使用者可以對連線條件進行設定,所以使用者可以進一步的設定頻寬、延遲時間等等

    mn [–link]

    Screenshot from 2017-11-09 03-24-14.png

  • 設定所使用的switch版本

    # Switch 的選擇,對整體的測試是佔有一定程度的影響的。以下就舉UserSwitch跟預設的OVSSwitch進行比較

    mn –switch user –test iperf
    mn –switch ovsk –test iperf

    Screenshot from 2017-11-09 03-26-55.png
    測試出來的數據,有很明顯的差異。UserSwitch因為還需要額外處理核心與使用者介面的溝通,大幅增加效率上的成本。UserSwitch也是會有需要它的時候,但應該不會使用在需要高即時性的狀況下
  • 將 Switch 與 Controller 規劃在同一個 Netwrok Namespace(user switch only)

    # 比較命名空間的不同

    sudo mn –switch user
    sudo mn –innamespace –switch user

    Screenshot from 2017-11-09 03-30-26
    現在我們可以觀察出差別了。加入選項–innamespace後,Switch 跟 Controller 被分開了,並分配在同一個網段中

     

    Screenshot from 2017-11-09 03-32-13.png
    由於controller和switch位於同一個命名空間,亦在同一個網段,故可以互ping
  • mininet與controller進行連接

    # remote表示外部controller
    mn –controller=remote,ip=[controller_ipaddress],port=[controller_listening_port]

    Screenshot from 2017-11-09 03-54-07.png
    mininet與ryu controller連接

     

    Screenshot from 2017-11-09 03-54-45.png
    我們發現h1和h2彼此間無法互相ping
    Screenshot from 2017-11-09 03-56-07.png
    我們在ryu controller執行simple_switch_13.py後,h1和h2間可以相互ping,因為simple_switch_13.py裡面有openvswitch13的相關協定與flow table

     

  • mininet的內建拓墣

    # mn [–topo = single/linear/tree]

    1)單一switch

    –topo single,n
    n表示switch個數

    2.線性拓墣

    –topo linear,n
    n表示n個switch線性連接

    3.樹狀拓墣

    –topo tree,depth=a,fanout=b
    depth表示樹的深度,fanout表示一個節點下面連接n個葉節點。所有葉子節點均為host,非葉子節點均為switch

    Screenshot from 2017-11-09 04-02-59

    Screenshot from 2017-11-09 04-03-26

    Screenshot from 2017-11-09 04-04-27

  • mininet的自定義拓墣

    # mn –custom 路徑/檔案名稱.py –topo=拓墣名稱

    建議直接copy位於~/mininet/custom/底下的topo-2sw-2host.py,來做修改比較不會有error

    /////////////////////////////////////////////////////////////////////////////////////////////
    //                                                controller                                                    //
    //                                               /             |       \                                               //
    //                                   switch          switch   switch                                  //
    //                                 /      |    \              |            |                                         //
    //                 switch   switch switch   host      host                                     //
    //                     |               |         |                                                                   //
    //                 host          host     host                                                               //
    /////////////////////////////////////////////////////////////////////////////////////////////

    Screenshot from 2017-11-09 04-18-25
    自己修改的新拓墣
    Screenshot from 2017-11-09 04-20-53
    執行結果

     

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s