实验1:SDN拓扑实践

实验1:SDN拓扑实践

一、实验目的

  • 能够使用源码安装Mininet;

  • 能够使用Mininet的可视化工具生成拓扑;

  • 能够使用Mininet的命令行生成特定拓扑;

  • 能够使用Mininet交互界面管理SDN拓扑;

  • 能够使用Python脚本构建SDN拓扑。

二、实验环境

  • 下载虚拟机软件Oracle VisualBox 或 VMware;

  • 在虚拟机中安装Ubuntu 20.04 Desktop amd64;

三、实验要求

(一)基本要求

  • Mininet的安装路径
    实验1:SDN拓扑实践

  • 使用Mininet可视化工具,生成下图所示的拓扑,并保存拓扑文件名为学号.py

实验1:SDN拓扑实践
实验1:SDN拓扑实践

  • 使用Mininet的命令行生成如下拓扑:

    • 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。

    实验1:SDN拓扑实践

    • 3台主机,每个主机都连接到同1台交换机上。
      实验1:SDN拓扑实践
  • 在3台主机,每个主机都连接到同1台交换机上的拓扑的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。

    实验1:SDN拓扑实践

    实验1:SDN拓扑实践

注:须配置路由表,用h1 ping h4,使得h4知道h1的地址

  • 编辑(一)中第3步保存的Python脚本,添加如下网络性能限制,生成拓扑:

    • h1的cpu最高不超过50%;

    • h1和s1之间的链路带宽为10,延迟为5ms,最大队列大小为1000,损耗率50。
      实验1:SDN拓扑实践

      实验1:SDN拓扑实践

(二)进阶要求

  • 编写Python脚本,生成如下数据中心网络拓扑,要求:

    • 编写.py拓扑文件,命名为“学号_fattree.py”

    • 必须通过Mininet的custom参数载入上述文件,不得直接使用miniedit.py生成的.py文件;

    • 设备名称必须和下图一致

    • 使用Python的循环功能实现,不得在代码中手工直接添加设备和链路。

  • Python代码:

    #!/usr/bin/python
     
    from mininet.topo import Topo
    from mininet.net import Mininet
    from mininet.node import RemoteController,CPULimitedHost
    from mininet.link import TCLink
    from mininet.util import dumpNodeConnections
     
    class MyTopo( Topo ):
        
     
        def __init__( self ):
            
            Topo.__init__( self )
            aofsw = 14
            level1 = 2
            level2 = 4
            level3 = 8
            s = []
            h = []
            
              
            # add switches 
            for i in range( 14 ):
                    switch = self.addSwitch( ‘s{}‘.format( i + 1 ) )
                    s.append( switch )
        
    
            # add links between level1 and level2 switches
            for i in range( 2 ):
                  sw1 = s[i]
                  for sw2 in s[2:6:1]:
                         self.addLink( sw2,sw1 )
     
            # add links between level2 and level3 switches
            for i in range( 0, 4, 2 ):
                  for sw1 in s[i+2:i+4:1]:
                          for sw2 in s[i*2+6:i*2+10:1]:self.addLink(sw2,sw1 )
     
            #add hosts and level3 switches
            count = 1
            for sw1 in s[6:14:1]:
                    for i in range(2):
                       host = self.addHost( ‘h{}‘.format( count ) ) 
                       self.addLink( sw1, host ) 
                       count += 1
    topos = { ‘mytopo‘: ( lambda: MyTopo() ) }
    
  • 执行结果

实验1:SDN拓扑实践

四、个人总结

  • 个人感觉本次实验难度适中,难点集中在实验环境的安装fat-tree拓扑结构的构建

    • 在实验环境安装方面,虽然有老师详细的pdf指导文件,但还是在mininet的完整安装与虚拟机增强功能的安装方面遇到困难。
      • 第一次安装mininet完成后查看文件夹发现没有安装完全,后面经过反复实验最后更换了清华的软件源,无论是速度还是完整性都全方位碾压阿里。
      • 虚拟机增强功能的安装是查阅相关博客后在ubuntu上运行了Vbox_Gas的autorun.sh文件,并切换了主机的i/o缓存后得以解决。
    • 在fat-tree拓扑结构的构建上,由于没有python基础,只能对照实例代码查阅相关语句的用法,在弄清楚fat-free逻辑结构并掌握几个python语法知识后题目也迎刃而解。
  • 实验感觉最重要的还是搜索工具的使用。在本次实验中所遇到的问题基本上通过查阅相关资料都可以得到解决,不得不感慨互联网开源共享的理念,所需要的知识在网上应有尽有,从一开始我们就站到了巨人的肩膀上,诚挚感谢愿意分享自己学习经验的前辈们。

实验1:SDN拓扑实践

上一篇:使用LUIT解决Linux下SSH编码问题


下一篇:virtualbox构建Ubuntu虚拟局域网并且创建linux router管理内外网