2020 SDN第一次上机实验

一、实验目的

  掌握Mininet的源码安装方法和Mininet可视化拓扑生成工具

二、实验任务

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

三、实验步骤

  1. 实验环境

     Ubuntu 16.04 Desktop amd64

  2. 实验过程

    (1)源码安装

      $ mkdir SDN    //用以新建SDN文件夹,用于保存该实验所需应用

      $ sudo apt-get install git     //安装git 代码仓库托管

      $ cd SDN       //进入SDN文件夹

      $ git clone git://github.com/mininet/mininet      //从GitHub上下载mininet源码

      $ cd mininet

      $ sudo util/install.sh -a    //在mininet目录下执行安装指令,-a选项表示完整安装

      ( Ps:安装需要从GitHub上获取openflow、pox、oftest、oflops等组件和协议,需要较长时间。当出现Enjoy Mininet!字样时,安装完成。

      $ sudo mn --version    //查看Mininet版本

      如下图所示:

                

      版本为我们本次实验所需要的版本2.3.0d6。

    (2)CLI命令行基本功能测试

      $ sudo nm --test pingall

      结果如图所示:

                

      ps: 如果执行命令时提示 “Cannot find required executable ifconfig.” ,则需要安装网络工具net-tools。命令如下:

      $ sudo apt install net-tools

                

    (3)使用可视化工具

      使用命令

      $ sudo ./mininet/examples/miniedit.py    //在Mininet安装目录下执行 

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

               

      (ps:若出现报错 “ImportError: No module named mininet.log”,可参考博文 https://www.cnblogs.com/fjlinww/p/13388427.html )

      最简拓扑图为:

           

        将4台Host、2台Switch和1台Controller拖出,并用NetLink连接,形成下图所示的网络拓扑。

           

           右键长按Host和Controller,选择设置属性(Properties):Host部分主要是设置主机IP(分别使用10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4),以及VLAN等扩展设施。每台主机逐台操作;Controller部分主要是设置控制器类型,此处可按默认设置,如果是外部控制器,要选择Remote Controller,之后填上Controller的IP地址,如果是本机则按照默认的127.0.0.1即可。

               

      点击左上角的Edit,进行全局设置,此时在默认设置的基础上,勾选 “Start CLI” ,将OpenFlow 1.1,1.2,1.3全部勾选。

           

      系统上的终端(Terminal)上会显示当前确认的设置。如下图所示:

           

      点击左上角的run,运行拓扑,由于开启了CLI,可使用pingall命令测试主机的连通性,并做其他扩展操作。

           

      拓扑生成并确认无误之后,点击mininet左上角的File菜单,选择Export Level 2 Script,将拓扑保存为Python(此处为Python2版本),方便之后执行脚本一键生成。

            

      使用以下命令来运行Python文件:

      $ sudo python miniedittopo.py  

           

      附保存的Python代码:

#!/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')
    h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
    h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)
    h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
    h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)

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

    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()

 四、实验心得

  • 通过SDN可以使传统网络的数据与控制解耦,增加网络灵活性
  • SDN的可视化软件可以清晰的表明网络的拓扑结构,便于设置和调整参数
  • 做实验的时候遇到问题及时搜索解决方案,避免在影响接下来的实验进度
posted @ 2020-09-03 19:52  Limerences  阅读(370)  评论(0编辑  收藏  举报