Mininet學習指南

Mininet creates a realistic virtual network, running real kernel, switch and application code, on a single machine (VM, cloud or native), in seconds, with a single command:php

mininet學習指南

Mininet & OpenVSwitch

Mininet在/mininet/node.py中定義了Node、OVSSwitch和Controller等重要的類。在OVSSwitch類中,經過使用命令OVS的命令建立交換機從而獲得一個OVS實例。html

建立交換機獲得OVS實例

Mininet建立的host,switch等實例其實是運行在不一樣namespace下的某個進程。默認狀況下Host運行在本身的namespace中,交換節點運行在root namespace中。node

OpenVSwitch

Open vSwitch is a production quality, multilayer virtual switch licensed under the open source Apache 2.0 license. It is designed to enable massive network automation through programmatic extension, while still supporting standard management interfaces and protocols (e.g. NetFlow, sFlow, IPFIX, RSPAN, CLI, LACP, 802.1ag).python

OpenVSwitch

Installation

• Mininet VM Installation(easy, recommended)linux

http://mininet.org/download/#option-1-mininet-vm-installation-easy-recommendedgit

• Native Installation form Sourcegithub

http://mininet.org/download/#option-2-native-installation-from-sourceapi

http://www.muzixing.com/pages/2014/11/02/openvswitch230-and-mininet-install.html網絡

• Installation form Packagesapp

http://mininet.org/download/#option-3-installation-from-packages

Getting Started
Startup Options
● Help: sudo mn [-h] 經過-h能夠查看到幫助信息。
● Connect to remote controller: sudo mn --controller=remote,ip=127.0.0.1,port=6633 端口能夠省略,默認值是6633,可指定。
● Topology: sudo mn --topo=

  • tree,n,m 第一個參數爲深度,第二個位扇出係數。能夠寫成--tree,depth=2,fanout=8
  • single, n:單個交換機,n個交換機
  • liner, n: 線性拓撲,n個交換機

● Test:--test [pingall/pingpair..]
● Link:--link=tc, bw=10M, delay=10ms,loss=5%
● Custom Topo:--custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo
● ID=MAC: sudo mn --mac
● Xterm: sudo mn -x 啓動xterm到每個host和switch
● Switch type: sudo mn --switch ovsk/user,
● Clear: sudo mn -c

Command-Line Interface

● Help: help 查看幫助信息
● Exit: exit 退出mininet
● Python: py 「hello」 / py dir(s1) py hello.py 運行python文件:
● Link: link s1 h1 down/up 參數分別爲link兩端網元。
● Xterm: xterm s1/h1 xterm到某一個主機或交換機
● Node: nodes 查看節點
● Dump:dump 查看全部節點信息
● 節點命令:

  • s1 ifconfig
  • s1 ps -a
  • h1 arp -s
  • h1 ping -c 10 h2

● Iperf: iperf h1 h2 啓用iperf功能
● Ping: h1 ping h2 pingall/pingpair 發送ping消息
● HTTPSERVER : h1 python -m SimpleHTTPServer 80 &
● HTTPCLIENT: h2 wget -O -h1

Custom Topology

Custom Topology

自定義拓撲腳本

完成mininet 搭建腳本,並經過sudo mn --custom /yourtopo.py --topo=mytopo mytopo 是在腳本里定義的一個類型。

自定義拓撲腳本設計

import Topo 類用於派生Mytopo 類;

topo 類中包含構建網絡的函數;

● addHost(「host name」): 添加主機
● addSwitch(「sw name」): 添加交換機
● addLink(node,node,port,port): 添加鏈

● ...

在topos 中添加„mytopo‟, 值爲MyTopo() 類;

在啓動mininet時將參數配置爲本文件便可。

自定義拓撲程序

  1. 將mininet 相關文件import
  2. 利用mininet 的相關接口,建立拓撲
  3. 在python 文件中,建立net 類,並在使用net.start() 函數運行拓撲。
  4. 直接python mytopo.py 運行topo 文件便可運行對應 拓撲。

自定義拓撲程序

import mininet 對應的文件中相關類;
繼承Topo 類建立Fattree 類;
● __init__ 函數初始化拓撲
● createTopo 函數建立拓撲
● createLink 函數用於添加鏈路
● 其餘函數...

全局的createTopo 函數用於建立拓撲:

● 建立Fattree 類的對象
● 調用對應函數,建立拓撲
● 建立Mininet 類的對象net 並進行配置
● 調用net.start() 函數啓動net 對象。
● 運行CLI(net), 解析命令行

主函數用於調用全局的createTopo 函數。

在topos 中添加„mytopo‟, 值爲MyTopo() 類 。

在啓動mininet 時將參數配置爲本文件便可。

Connect to Internet

Connect to Internet

● NAT
Mininet 中有nat.py 示例,可參考連接
● Mininet 與外部host 通訊
經過將網卡添加到ovs 上,實現數據轉發。若是虛擬機與外界爲bridge, 則須要設置網卡爲nat, 若
虛擬機自己爲nat 鏈接,則能夠不進行設置。Intf 的使用方法可參考examples/hwintf.py
● Mininet host talking to Internet/the NCTUNS hosts
和Mininet 與外部host 通訊方案相同,參考連接1連接2

Mininet‟s code

Mininet‟s code

bin/mn

Simple use class names as option help。該腳本定義了一個 MininetRunner 類,用來表示模擬網絡的主程序。主要過程是建立一個 MininetRunner() 實例,依次解析傳入參數,進行初始化後開啓網絡。總體過程以下圖所示:

總體過程以下圖所示

Ref:http://yeasy.gitbooks.io/mininet_book/content/runtime_and_example/mn.html

examples

These examples are intended to help you get started using Mininet's Python API.
hwintf.py:
This example shows how to add an interface (for example a real hardware interface) to a network after the network is created.

nat.py:
This example shows how to connect a Mininet network to the Internet using NAT. It also answers the eternal question
"why can't I ping google.com?

mininet/mininet

mininet目錄mininet

  • cli.py: 用於定義命令解析
  • link.py:定義了class link
  • log.py:log相關
  • net.py:定義了class net,是mininet的核心類
  • node.py:定義了class node, 是host,sw等類的父類
  • topo.py:定義了class topo,用於建立topo
  • util.py:經常使用方法定義

mininet/cli

mininet目錄cli

cli.py 文件完成了參數解析相關函數定義。當mininet 捕捉到輸入的指令時,使用對應的解析函數則能夠解析出正確參數並執行函數。

命令類型解析在mn 文件下定義。

mininet/topo

mininet目錄topo

mininet目錄topo1

class topo中定義的:
• addNode,
• addHost,
• addSwitch,
• addLink,
• addPort
等函數會在自定義拓撲時頻繁使用。

topo模塊定義簡單拓撲:
• SingleSwitchTopo
• SingleSwitchReversedTopo
• LinearTopo

mininet/node

mininet目錄node

Mininet‟s extension

Mininet‟s extension

1:在net.py的Mininet類中添加函數/方法,即拓展功能的執行實體。例:iperfMulti功能iperfmulti是隨機選取多個S/C對進行打流。函數調用了新定義的iperf_single函數。

注:iperf_single函數細節未展現。

Mininet‟s extension code

2:在cli.py的CLI類中添加對應參數解析函數,用於解析輸入參數,並調用mininet類中對應執行實體。

例:iperfMulti功能iperfmulti函數輸入參數若爲1個,則該參數爲帶寬,若2個,則第一個爲帶寬,第二個爲打流週期。不然報錯。

Mininet類  extension code

3:在bin/mn的TESTS列表和ALTSPELLING字典中添加對應的元素。用於識別CLI的類型。

例:iperfMulti功能在mininet中聲明iperfmulti語句是一個命令。且執行的函數名字爲do_iperfmulti函數。

extension用於識別CLI類型

注:在解析名字時,名字對應的就是CLI中do_functionname函數。

4:從新安裝mininet:進入mininet/util目錄,輸入一下命令從新編譯安裝mininet code。

例:iperfmulti安裝完成以後,啓動mininet,可使用新定義的命令,如:mininet> iperfmulti 10M,20命令含義爲在全部的主機中隨機選擇C/S對進行打流,打流速率爲10Mbits/s,打流時長爲20s。

extension從新編譯安裝mininet code

簡單示例:

print命令的添加在mininet中輸入print命令,可打印對應信息。若print以後無參數,則打印默認信息」talk is cheap,show me your code」, 若攜帶參數,則直接打印參數,如」No, a coder need to learn speaking skill.」

extension簡單示例 print命令的添加

Mininet & Sflow

Sflow是一個網絡流量監控軟件。

mininet&SFlow

具體使用可參考SDNLAB上的連接1連接2

參考links

http://mininet.org/

http://mininet.org/api/annotated.html

https://github.com/mininet/mininet/wiki/Introduction-to-Mininet

http://www.sdnlab.com/?searchType=playlist&s=mininet&x=0&y=0

http://www.muzixing.com/pages/2015/02/22/fattree-topo-and-iperfmulti-function-in-mininet.html

http://www.muzixing.com/search.html?q=mininet

http://man7.org/linux/man-pages/man7/namespaces.7.html

http://yeasy.gitbooks.io/mininet_book/content/runtime_and_example/mn.html

http://csie.nqu.edu.tw/smallko/sdn/sdn.htm

https://mailman.stanford.edu/mailman/listinfo/mininet-discuss

http://archive.openflow.org/wk/index.php/OpenFlow_Tutorial

http://sdnhub.cn/index.php/category/mininet/mininet-introduction/

http://www.ibm.com/developerworks/cn/cloud/library/1404_luojun_sdnmininet/index.html

http://www.sflow.org/

http://openvswitch.org/

另附其文章呈現的PPT可能更好理解,歡迎你們一塊兒交流!

做者簡介:

李呈,2014/09-至今,北京郵電大學信息與通訊工程學院將來網絡理論與應用實驗室(FNL實驗室)攻讀碩士研究生。

相關文章
相關標籤/搜索