2020 SDN上机第一次作业

实验一:Mininet源码安装和可视化拓扑工具

一、实验任务

使用源码安装Mininet的2.3.0d6版本,并使用可视化拓扑工具生成一个最简拓扑(1台交换机连接2台主机)。

二、实验步骤

1.实验环境

安装了Ubuntu 16.04.7 Desktop amd64的虚拟机

2.实验过程

(1)源码安装

安装过程中使用的命令

$ mkdir 031802112huanglong

$ sudo apt-get install git

$ git clone git://github.com/mininet/mininet

$ cd mininet

$ sudo util/install.sh -a

$ sudo mn --version

显示 Enjoy Mininet 的字样则表示安装成功

使用Mininet的CLI命令行测试基本功能:$ sudo mn --test pingall

如果出现“cannot find required executable ifconfig.“执行下面的命令安装网络工具 net-tools

$ sudo apt install net-tools

(2)使用可视化工具

使用的命令

$ sudo ./mininet/examples/miniedit.py

执行界面如下,可以拖动左侧边栏的主机 Host、交换机 Switch、路由器 Router、
网络链路 NetLink、控制器 Controller 等组件到右侧空白处,实现网络拓扑的可视
化仿真。 

完成相关设置

最简拓扑结构:

 

目标拓扑:

 run起来,开始拓扑

 然后再 pingall 测试连通性

 最后File选择Export Level 2 Script,保存为py脚本。

三、实验结果

 miniedittopo.py文件内容:

#!/usr/bin/python

from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call

def myNetwork():

net = Mininet( topo=None,
build=False,
ipBase='10.0.0.0/8')

info( '*** Adding controller\n' )
c0=net.addController(name='c0',
controller=Controller,
protocol='tcp',
port=6633)

info( '*** Add switches\n')
s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
s2 = net.addSwitch('s2', cls=OVSKernelSwitch)

info( '*** Add hosts\n')
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)
h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)

info( '*** Add links\n')
net.addLink(h1, s1)
net.addLink(h3, s1)
net.addLink(s1, s2)
net.addLink(s2, h4)
net.addLink(s2, h2)

info( '*** Starting network\n')
net.build()
info( '*** Starting controllers\n')
for controller in net.controllers:
controller.start()

info( '*** Starting switches\n')
net.get('s1').start([c0])
net.get('s2').start([c0])

info( '*** Post configure switches and hosts\n')

CLI(net)
net.stop()

if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()

 

posted @ 2020-09-03 18:43  HL1123  阅读(200)  评论(0编辑  收藏  举报