实验1:SDN拓扑实践

摘要:
实验1:SDN拓扑实践1.出于实验目的,您可以使用源代码安装Mininet;能够使用Mininet的可视化工具生成拓扑;能够使用Minet的命令行生成特定的拓扑;能够使用Mininet接口管理SDN拓扑;能够使用Python脚本构建SDN拓扑。在创建的目录中,完成Mininet的源代码安装。Mininet安装路径使用Mininet可视化工具生成下图所示的拓扑,并保存名为Student ID py的拓扑文件。
实验1:SDN拓扑实践

一、实验目的

  1. 能够使用源码安装Mininet;
  2. 能够使用Mininet的可视化工具生成拓扑;
  3. 能够使用Mininet的命令行生成特定拓扑;
  4. 能够使用Mininet交互界面管理SDN拓扑;
  5. 能够使用Python脚本构建SDN拓扑。

二、实验环境

  1. 下载虚拟机软件Oracle VisualBox 或 VMware;
  2. 在虚拟机中安装Ubuntu 20.04 Desktop amd64;

三、实验要求

(一)基本要求

  1. 在Ubuntu系统的home目录下创建一个目录,目录命名为学号

  2. 在创建的目录下,完成Mininet的源码安装。

    Mininet的安装路径

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

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

  • 打开Mininet可视化工具

    实验1:SDN拓扑实践第2张

  • 使用左侧图标直接点击建立拓扑图

    实验1:SDN拓扑实践第3张

  • 选择Export Level 2 Script

    实验1:SDN拓扑实践第4张

  • 保存为学号.py

    实验1:SDN拓扑实践第5张

  • pingall查看连通状况

    实验1:SDN拓扑实践第6张

  1. 使用Mininet的命令行生成如下拓扑

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

  • 输入建立满足题意的拓扑:

    sudo mn --topo=linear,3,1
    

    实验1:SDN拓扑实践第7张

b) 3台主机,每个主机都连接到同1台交换机上

  • 输入建立满足题意的拓扑:

    sudo mn --topo=single,3
    

    实验1:SDN拓扑实践第8张

5.在4 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。

在Mininet交互界面上新增1台主机并且连接到交换机上

  • 查看4b)连接状况

    mininet> net
    

    实验1:SDN拓扑实践第9张

  • 创建主机h4,并且建立主机h4与交换机s1的链接

    mininet> py net.addHost('h4')
    mininet> py net.addLink(s1, h4, 4, 0)
    
    

    实验1:SDN拓扑实践第10张

    实验1:SDN拓扑实践第11张

  • 查看新增后连接状况

    实验1:SDN拓扑实践第12张

  • 完整过程

    实验1:SDN拓扑实践第13张

测试新拓扑的连通性

h1,h2,h3可以互相ping通

h4无法ping通h1,h2,h3

实验1:SDN拓扑实践第14张

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

a) h1的cpu最高不超过50%;

b) h1和s1之间的链路带宽为10,延迟为5ms,最大队列大小为1000,损耗率50。

  • 打开之前保存的031902218.py,如下更改:

    实验1:SDN拓扑实践第15张

  • 运行得出结果

    实验1:SDN拓扑实践第16张

(二)进阶要求

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

  • 编写.py拓扑文件,命名为“学号_fattree.py”
  • 必须通过Mininet的custom参数载入上述文件,不得直接使用miniedit.py生成的.py文件;
  • 设备名称必须和下图一致
  • 使用Python的循环功能实现,不得在代码中手工直接添加设备和链路。
  • 编写Python脚本031902218_fattree.py

    #!/usr/bin/python
    #创建网络拓扑
     
    from mininet.topo import Topo
    from mininet.net import Mininet
    from mininet.node import RemoteController,CPULimitedHost,Controller
    from mininet.link import TCLink
    from mininet.util import dumpNodeConnections
     
    class MyTopo(Topo):
     
        def __init__(self):
     
            # 初始化拓扑
            Topo.__init__(self)
            L1 = 2
            L2 = L1 * 2 
            L3 = L2 * 2
            c = []
            a = []
            e = []
            
            # 添加第一行交换机  
            for i in range(L1):
                    sw = self.addSwitch('s{}'.format(i + 1))
                    c.append(sw)
        
            # 添加第二行交换机
            for i in range(L2):
                    sw = self.addSwitch('s{}'.format(L1 + i + 1))
                    a.append(sw)
        
            # 添加第三行交换机
            for i in range(L3):
                    sw = self.addSwitch('s{}'.format(L1 + L2 + i + 1))
                    e.append(sw)
    
            # 建立第一行交换机和第二行交换机的链接
            for i in range(L1):
                    sw1 = c[i]
                    for sw2 in a[i//2::L1//2]:
                        self.addLink(sw2, sw1)
    
            # 建立第二行交换机和第三行交换机的链接
            for i in range(0, L2, 2):
                    for sw1 in a[i:i+2]:
    	                for sw2 in e[i:i+2]: 
                                self.addLink(sw2, sw1)
     
            # 建立第三行交换机和主机之间的链接
            count = 1
            for sw1 in e:
                    for i in range(2):
                    	host = self.addHost('h{}'.format(count))
                    	self.addLink(sw1, host)
                    	count += 1
    topos = {'mytopo': (lambda: MyTopo())}
    
  • 利用custom参数加载py文件建立拓扑

    $ sudo mn --custom 031902218_fattree.py --topo mytopo
    

    实验1:SDN拓扑实践第17张

四、个人总结

  • 实验难度:适中

  • 实验过程遇到的困难:

    1.问题:VMware Tools未被正常安装,无法实现虚拟机和外部宿主机之间要复制粘贴文本和文件

    解决方法:根据官方文档安装VMware Tools(在 Linux 虚拟机中手动安装 VMware Tools

    2.问题:在安装Mininet过程中,执行 git clone https://github.com/mininet/mininet.git 或者在执行util 子目录下的 install.sh 安装脚本时,出现fatal: unable to access ‘https://github xxxxxxxxx‘的错误

    解决方法:将https改成git

  • 个人感想:

    通过这次实验,我学会了使用Mininet构建拓扑、创建并使用虚拟机以及一些Ubuntu的使用技巧。相比只是传统地传授理论知识,本课程通过创新实践的方式,让我们加深了对于所学知识的理解,能够让我们的思考更有深度。 这次实验也让我深刻体会到了可视化工具的好处,利用可视化工具可以无门槛、更加便捷地建立拓扑,效率得到了提高。

免责声明:文章转载自《实验1:SDN拓扑实践》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jekins安装Linux下模拟多线程的并发并发shell脚本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python下使用virtualenv虚拟环境

前言 一般我们在写Python代码的时候,可能会同时开发几个项目,并且不同项目中使用到第三方库的版本也可能会不一致,这种情况下,我们最好就是能够使用 虚拟环境 来进行管理。 创建虚拟环境 使用virtualenv创建虚拟环境 virtualenv 是Python中用来创建虚拟环境的一个第三方库,可直接通过 pip 命令进行安装,命令如下:pip insta...

python读取数据库表数据并写入excel

一个简单的使用python读取mysql数据并写入excel中实例 1、python连接mysql数据库 conn = pymysql.connect(user='root',host='127.0.0.1',port=3306,passwd='root',db='python',charset='utf8') #连接数据库 cur = conn.cur...

PostgreSQL连接python,postgresql在python 连接,创建表,创建表内容,插入操作,选择操作,更新操作,删除操作。

安装 PostgreSQL可以用Python psycopg2模块集成。 sycopg2是Python编程语言的PostgreSQL数据库的适配器。 其程序代码少,速度快,稳定。不需要单独安装这个模块,因为它默认情况下被运往随着Python版本在2.5.x一起的。如果不把它安装在机器上,然后可以使用yum命令安装它,如下所示: $yum install p...

Python 读取Excel用例——openpyxl模块

openpyxl是第三方库,专门处理Excel2007及以上版本产生的xlsx文件 Python官方库一般使用xlrd库来读取Excel文件,使用xlwt库来生成Excel文件,使用xlutils库复制和修改Excel文件,这三个库只支持到Excel2003。 openpyxl中有三个不同层次的类,Workbook是对工作簿的抽象,Worksheet是对表...

Python内置进制转换函数(实现16进制和ASCII转换)

在进行wireshark抓包时你会发现底端窗口报文内容左边是十六进制数字,右边是每两个十六进制转换的ASCII字符,这里使用Python代码实现一个十六进制和ASCII的转换方法。 hex() 转换一个整数对象为十六进制的字符串 >>> hex(16) '0x10' >>> hex(18) '0x12' >>...

python 获取当天日期

取得时间相关的信息的话,要用到python time模块,python time模块里面有很多非常好用的功能,你可以去官方文档了解下,要取的当前时间的话,要取得当前时间的时间戳,时间戳好像是1970年到现在时间相隔的时间。你可以试下下面的方式来取得当前时间的时间戳:import timeprint time.time()输出的结果是:1357723206....