此为中国大学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.