作业链接:实验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的源码安装。

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

    如图:



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

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

直接使用命令:

sudo mn --topo=linear,3

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

直接使用命令:

sudo mn --topo=single,3

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

    使用命令:

    py net.addHost('h4')

    py net.addLink(h4,s1,0,4)



    分析:通过图片可以看出丢包率为50%,经过讨论询问大佬发现是因为没有配置路由表,导致信息无法传递。

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

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

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

    先使用sudo chmod -R 777 [文件名] 将文件的只读状态解除。

    然后对文件进行修改,如下:



    再次运行



    对性能进行测试

(二)进阶要求

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

    • 编写.py拓扑文件,命名为“学号_fattree.py”;
    • 必须通过Mininet的custom参数载入上述文件,不得直接使用miniedit.py生成的.py文件;
    • 设备名称必须和下图一致;

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

      代码如下:
from mininet.topo import Topo
class MyTopo(Topo):
def __init__(self):
Topo.__init__(self)
#hosts
hosts=[]
for i in range(16):
h =self.addHost('h'+str(i+1))
hosts.append(h) #switchs
switchs=[]
for i in range(14):
s =self.addSwitch('s'+str(i+1))
switchs.append(s) #links
#switch to switch
for i in range(0,2):
for j in range(2,6):
self.addLink(switchs[i],switchs[j]) for i in range(2,4):
for j in range(6,10):
self.addLink(switchs[i],switchs[j]) for i in range(4,6):
for j in range(10,14):
self.addLink(switchs[i],switchs[j]) #switch to host
for i in range(8):
self.addLink(switchs[i+6],hosts[2*i])
self.addLink(switchs[i+6],hosts[2*i+1]) topos = {'mytopo': (lambda: MyTopo())}

保存文件如下:



运行文件结果如下:

四、实验心得

这次实验的整个过程分为搭建环境和构建网络拓扑两部分。总体难度一般,主要是对Ubuntu的不熟练,对各种命令不熟悉。

  • 遇到的问题及解决

    1.在配置python环境的时候把usr习惯性看成了user,导致怎么都找不到文件夹。憨批一枚

    2.使用Mininet可视化工具生成拓扑时,没有把文件通过Export Level 2 Script保存,而是直接点击save保存,导致出错。

    3.后面添加一个主机并且pingall的时候,一直纠结于为什么会有50%的丢包,后来了解到是因为没有配置路由器。

    4.第6步编辑脚本的时候,发现031902126.py的文件是锁着的(只读,不能修改)。解决方法是 使用sudo chmod -R 777 031902126.py命令即可。
  • 对本次实验的心得

    通过这次实验,我学到了三种构建网络拓扑的方法:

    1.直接使用Mininet可视化工具,摆放需要的器件,然后连线。然后记得注意保存的格式。这种方法的优点是比较直观,容易了解拓扑的结构,但缺点是遇到复杂的拓扑就会手忙脚乱,需要画很多部分。

    2.使用命令行,简单的一句命令就可以构建出固定的拓扑结构。优点是构建快,只需要一行命令,但缺点是只能局限于一些固定的结构,遇到复杂的拓扑就需要很多条命令来添加主机或交换机。

    3.使用python脚本编写,建立文件,书写代码,保存并通过命令行运行。优点是很多庞大但有规律的拓扑结构建立十分方便,缺点是不能直观地看到拓扑结构。

    这使得我对网络的了解更为深刻,也让我对接下来的学习和实验产生了浓厚的兴趣。个人期待可以在后面的实验中学会用python脚本实现更复杂的拓扑结构。

实验1:SDN拓扑实践的更多相关文章

  1. 实验 1: SDN拓扑实践

    (图片和文档是自己写的,因为在CSDN也写了,所以会有自己的水印) 一.实验目的 能够使用源码安装Mininet: 能够使用Mininet的可视化工具生成拓扑: 能够使用Mininet的命令行生成特定 ...

  2. 实验1:SDN拓扑拓扑实验

    一.实验目的 能够使用源码安装Mininet: 能够使用Mininet的可视化工具生成拓扑: 能够使用Mininet的命令行生成特定拓扑: 能够使用Mininet交互界面管理SDN拓扑: 能够使用Py ...

  3. 20155317王新玮《网络对抗技术》实验8 WEB基础实践

    20155317王新玮<网络对抗技术>实验8 WEB基础实践 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  4. 20145314郑凯杰《网络对抗技术》实验8 WEB基础实践

    20145314郑凯杰<网络对抗技术>实验8 WEB基础实践 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  5. 实验四 Python综合实践

    课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...

  6. 实验2:Open vSwitch虚拟交换机实践

    作业链接:实验2:Open vSwitch虚拟交换机实践 一.实验目的 能够对Open vSwitch进行基本操作: 能够通过命令行终端使用OVS命令操作Open vSwitch交换机,管理流表: 能 ...

  7. 实验5:开源控制器实践——POX

    一.实验目的 1.能够理解 POX 控制器的工作原理: 2.通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法: 3.能够运 ...

  8. # 2017-2018-2 20155231《网络对抗技术》实验九: Web安全基础实践

    2017-2018-2 20155231<网络对抗技术>实验九: Web安全基础实践 实验要求: 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验内容: ( ...

  9. Mininet实验 多个数据中心的拓扑网络实现

    实验目的 掌握多数据中心网络拓扑的构建 掌握多数据中心数据交换过程 实验原理 主机间发送消息上报给交换机,交换机对收到的报文信息进行分析判断,如果交换机中存在此消息相对应的流表,则交换机直接下发流表, ...

随机推荐

  1. 了解Flask

    了解Flask 什么是Flask Flask 是一个微框架(Micro framework),所谓微框架,它就是很轻量级的,作者划分出了Flask应该负责什么(请求路由.处理请求.返回响应).不应该负 ...

  2. 【C语言】第4章 选择结构程序设计

    第4章 选择结构程序设计 C语言有两种选择语句: if 语句,实现两个分支的选择结构 switch 语句,实现多分支的选择结构 输入3个数a,b,c,要求按由小到大的顺序输出. 可以先用伪代码写出算法 ...

  3. 关于IDEA无法加载main方法的bug

    问题现象 main方法没有run按钮 问题解决 发现args显示灰色未调用,原来是之前莫名其妙调用了sun包下的String 删除调用问题解决!

  4. Django项目使用requirements.txt文件

    1.生成requirements.txt pip freeze > requirements.txt 2.使用requirements.txt pip install -r requiremen ...

  5. 运输层协议:TCP连接建立与释放

    TCP的特点 面向连接:TCP是面向连接的运输层协议,通过TCP发送数据需要先建立连接,通信结束后需要释放连接 可靠传输:TCP实现了可靠传输,使得数据能够无丢失.无差错.不重复地到达接收端 面向字节 ...

  6. 判断页面是在pc端还是移动端打开不同的页面

    在pc端页面上的判断 var mobileAgent = new Array("iphone", "ipod", "ipad", " ...

  7. 部署MySQL主主复制管理器

    一.概念 MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器)是一套支持双主故障切换和双主日常管理的脚本程序.MMM 使用 Per ...

  8. 痞子衡嵌入式:原来i.MXRT1xxx系列里也暗藏了Product ID寄存器

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列里暗藏的Product ID寄存器. MCU 厂商在定义一个产品系列时,通常是会预先规划产品发展路线的(即会有一 ...

  9. 从零开始学习SQL SERVER(1)--- 了解SQL

    SQL是什么 SQL (发音为 sequal ['  sikwəl ' ]) SQL指 Structured Query Language 结构化查询语言,是用于访问和处理数据库的标准的计算机语言. ...

  10. 解决umount: /home: device is busy

    取消挂载/home时出现umount: /home: device is busy,        原因是因为有程序在使用/home目录,我们可以使用fuser查看那些程序的进程,        然后 ...