此為中國大學MOOC上溫州大學所開設的SDN軟件定義網絡課程配套實驗。
鏡像地址:https://pan.baidu.com/s/1qYN_MtUboPmruHda1DgrTA 提取碼:mhfi
實驗指導書地址:鏈接:https://pan.baidu.com/s/1XpDrV2car4qH-sXJq1zbPA 提取碼:s8un
實驗步驟:
1、用可視化界面創建拓撲
(1)下載鏡像源並裝入VMware虛擬機
(2)進入mininet/examples文件夾,輸入sudo py miniedit.py
(3)創建簡單拓撲
(4)在"Edit"->"Preference"可以配置支持的OpenFlow版本、默認終端、默認交換機等參數。
2、用命令行創建拓撲
(1)拓撲已預置好幾種類型,各類型介紹可參考:
https://blog.csdn.net/wuliangtianzu/article/details/82689347
(2)命令
類型 | 命令 | 參數說明 |
最小拓撲 | sudo mn --topo minimal | 1台交換機,底下連接2台主機 |
單交換機 | sudo mn --topo single,5 | 1台交換機,底下掛5台主機,呈放射狀 |
線性拓撲 | sudo mn --topo linear,3,2 | 線性拓撲,交換機個數,每台交換機下主機數 |
樹形拓撲 | sudo mn --topo tree,3,2 | 樹形拓撲,層數,每層下交換機(主機)個數 |
例如創建樹形拓撲:
3、用python程序創建拓撲
(1)官方api說明:http://mininet.org/api/functions_a.html#index_a
(2)例子:
from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
net =Mininet(host=CPULimitedHost, link=TCLink)
c0 = net.addController()
s0 = net.addSwitch('s0')
h0 = net.addHost('h0')
h1 = net.addHost('h1', cpu=0.5)
h2 = net.addHost('h1', cpu=0.5)
net.addLink(s0, h0, bw=10, delay='5ms',max_queue_size=1000, loss=10)//帶寬10M,延時5ms,最大隊列大小為1000,損耗率為10%
net.addLink(s0, h1)
net.addLink(s0, h2)
net.start()
net.pingAll()
net.stop()
使用sudo python mytopo.py運行
ping測試成功。
(3)主要api說明
1)addHost(self,name,cls=None,params)
- Name:加入的節點名字
- Cls:custom host class
- Params:可選參數
- cpu: desired overall system CPU fraction
- cores: (real) core(s) this host can run on
可選參數見mininet/mininet/node.py中的config()
例如:h1 = net.addHost('h1', cpu=0.5)
2)addLink(self,node1,node2,source_port,dest_port,cls,params)
- Node1:節點1
- Node2:節點2
- Sour_port(可選):源端口
- Dest_port(可選):目的端口
- Cls(可選):Link class
- Params:可選參數,具體見mininet/mininet/link.py的config()
- bw: bandwidth in b/s (e.g. '10m')
- delay: transmit delay (e.g. '1ms' )
- jitter: jitter (e.g. '1ms')
- loss: loss (e.g. '1%' )
- gro: enable GRO (False)
- txo: enable transmit checksum offload (True)
- rxo: enable receive checksum offload (True)
- speedup: experimental switch-side bw option
- use_hfsc: use HFSC scheduling
- use_tbf: use TBF scheduling
- latency_ms: TBF latency parameter
- enable_ecn: enable ECN (False)
- enable_red: enable RED (False)
- max_queue_size: queue limit parameter for netem
例子:
self.addLink( node1, node2, bw=10, delay='5ms', max_queue_size=1000, loss=10, use_htb=True)
: adds a bidirectional link with bandwidth, delay and loss characteristics, with a maximum queue size of 1000 packets using the Hierarchical Token Bucket rate limiter and netem delay/loss emulator. The parameter bw
is expressed as a number in Mbit; delay
is expressed as a string with units in place (e.g. '5ms', '100us', '1s'); loss
is expressed as a percentage (between 0 and 100); and max_queue_size
is expressed in packets.