SDN架构:mininet的基础命令和四种基础拓扑创建

Posted 小白的孤独历险记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDN架构:mininet的基础命令和四种基础拓扑创建相关的知识,希望对你有一定的参考价值。

一、基础命令

nodes        显示节点       

links        显示链路

net        显示网络

pingall        ping测试

h1 ping h2        终端1ping终端2测试

link h1 s1 down/up        链路h1-s1关闭或打开

exit        退出

命令操作展示放在第四种拓扑介绍里

二、四种基础拓扑创建介绍

 第一种:一台交换机与两个终端相连

命令:

mn --topo=minimal
#这个可以直接简写成mn

 

形成的拓扑图

 

 第二种:单一拓扑,一台交换机和n个终端相连

命令:

mn --topo=single,n
#              n为终端数

 

形成的拓扑图

 

第三种:线性结构,1台终端,n台交换机

命令:

mn --topo=linear,n
#             其中n为终端数

 

 

形成的拓扑图

 第四种:树状结构,m层交换机,扩散为n的次方增长,终端总数为n^m台

例如这个,总共交换机为3层,每台交换机向外扩2台,最底下终端为交换机连两台终端

命令:

mn --topo=tree,depth=3,fanout=2
#              深度为3 ,扇出为2
#                   m         n

 

形成的拓扑图

 基础命令展示

nodes 显示全部节点 

links 显示链路

 net 显示网络

pingall ping链路测试

 h1 ping h2 

 link h1 s3 down 关闭链路h1 -  s3,关闭后h1就无法再ping通其他终端了

 

 link h1 s3 up 恢复链路h1 - s3

 三、其他注意事项

1、这个命令方式创建的拓扑退出后是不会保存的

2、第四种方式创建的拓扑,交换机的命名顺序是按从上往下,从左往右的顺序,看图可以更清楚理解

3、这些命令需要自己在虚拟机上多练习加深理解

实验1:SDN拓扑实验

实验1:SDN拓扑实验

一、实验目的

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

二、实验环境

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

三、实验要求

(一)基本要求

  • 在Ubuntu系统的home目录下创建一个目录,目录命名为学号。
  • 在创建的目录下,完成Mininet的源码安装。
  • 使用Mininet可视化工具,生成下图所示的拓扑,并保存拓扑文件名为学号.py。
  • 使用Mininet的命令行生成如下拓扑:
    • 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。
    • 3台主机,每个主机都连接到同1台交换机上。
  • 在4 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。
  • 编辑(一)中第3步保存的Python脚本,添加如下网络性能限制,生成拓扑:
    • h1的cpu最高不超过50%;
    • h1和s1之间的链路带宽为10,延迟为5ms,最大队列大小为1000,损耗率50。

进阶要求

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

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

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

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

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

  • 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):
        #initilize topology
        Topo.__init__(self)

        f1=2
        f2=f1*2
        f3=f2*2
        s1=[]
        s2=[]
        s3=[]
        # set up the firt floor of switch, and then put in the s1
        for i in range(f1):
            sw=self.addSwitch(\'s{}\'.format(i+1))
            s1.append(sw)

        #set up the second floor of switch, and then put in the s2
        for i in range(f2):
            sw=self.addSwitch(\'s{}\'.format(i+1+f1))
            s2.append(sw)
        
        #set up the third floor of switch , and then put in the s3
        for i in range(f3):
            sw=self.addSwitch(\'s{}\'.format(i+1+f2+f1))
            s3.append(sw)

        
        #switch of s1 connect the switch of s2
        for g in range(f1):
            for m in range(f2):
                self.addLink(s1[g],s2[m])

        #the first  half of switch in the array-s2 connect the fist half of s3\'switch 
        #the second half of switch in the array-s2 connect the seocnd half of s3\'swicth
        for i in range(f2):
            if i<int(f2/2):
                for k in range(int(f3/2)):
                    self.addLink(s2[i],s3[k])
            else:
                for t in range(int(f3/2),f3):
                    self.addLink(s2[i],s3[t])

        
        #add the host ,and then connect the swicth of s3
        node=2
        count=1
        for i in range(f3):
            for b in range(node):   
                host = self.addHost(\'h{}\'.format(count))
                self.addLink(s3[i],host)
                count+=1


topos = { \'mytopo\': ( lambda: MyTopo() ) }
  • 执行情况如下:

四、实验心得

掌握了解了linux操作系统下的一些指令的使用。提高了自己独立解决问题的能力,如ubuntu和vm的安装起初并不是那么顺利,网络上寻找各种下载资源,以及相关设置要求;实验按照老师pdf一步步做下来,大体上很顺利,但也有一些难点无法解决,如一些抛出异常错误,controller服务器没有关掉而继续运行其他的网络----通过搜索得知要要指令sudo mn -c先将之前的controller关闭才可以运行接下来的网络;进阶是通过vim编辑器进行python脚本的编写,期间学会了python的相关语法和vim编辑器的安装,以及编辑器下一些指令的使用。总之,这次实验学会了不少知识。

以上是关于SDN架构:mininet的基础命令和四种基础拓扑创建的主要内容,如果未能解决你的问题,请参考以下文章

实验1:SDN拓扑实验

实验1:SDN拓扑实践

实验1:SDN拓扑实践

实验1:SDN拓扑实践

实验1:SDN拓扑实践

SDN第一次上机实验