zoukankan      html  css  js  c++  java
  • 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
    ' )
        c0=net.addController(name='c0',
                          controller=Controller,
                          protocol='tcp',
                          port=6633)
    
        info( '*** Add switches
    ')
        s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
        s2 = net.addSwitch('s2', cls=OVSKernelSwitch)
    
        info( '*** Add hosts
    ')
        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
    ')
        net.addLink(h1, s1)
        net.addLink(s1, h3)
        net.addLink(s2, h2)
        net.addLink(s2, h4)
        net.addLink(s1, s2)
    
        info( '*** Starting network
    ')
        net.build()
        info( '*** Starting controllers
    ')
        for controller in net.controllers:
            controller.start()
    
        info( '*** Starting switches
    ')
        net.get('s1').start([c0])
        net.get('s2').start([c0])
    
        info( '*** Post configure switches and hosts
    ')
    
        CLI(net)
        net.stop()
    
    if __name__ == '__main__':
        setLogLevel( 'info' )
        myNetwork()

     四、实验心得

    • 通过SDN可以使传统网络的数据与控制解耦,增加网络灵活性
    • SDN的可视化软件可以清晰的表明网络的拓扑结构,便于设置和调整参数
    • 做实验的时候遇到问题及时搜索解决方案,避免在影响接下来的实验进度
  • 相关阅读:
    javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码
    windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况
    javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url
    ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
    HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
    Servlet主要相关类核心类 容器调用的过程浅析 servlet解读 怎么调用 Servlet是什么 工作机制
    linq查询语句转mongodb
    winddows rabbitmq安装与配置
    Redis For Windows安装及密码
    出现,视图必须派生自 WebViewPage 或 WebViewPage错误解决方法
  • 原文地址:https://www.cnblogs.com/Limerence-C/p/13610232.html
Copyright © 2011-2022 走看看