Mininet网络划分

Minnet可以创建多种拓扑网络,主要分为两类,一类是自动型,是指Mininet自带的拓扑类型, 通过--topo参数来指定,分别是linear、minimal、reversed、single、torus以及tree共六种;另一类是自定义型,是指通过py文件自定义拓扑类型,通过--custom和--topo两个参数搭配指定。下面分别说下两类的功能以及使用。

Mininet自动创建网络拓扑

1.liner 单一拓扑

single定制的拓扑里只有一个交换机,主机数量自由指定,呈放射状,通过如下命令创建拓扑:

#--topo=single,5: 指定拓扑类型以及主机数量
#--controller=remote,ip=192.168.0.2 : 指定接管这个网络的控制器root@ubuntu:~# sudo mn --topo=single,5 --controller=remote,ip=192.168.0.2
*** Creating network
*** Adding controller
Connecting to remote controller at 192.168.0.2:6653
*** Adding hosts:
h1 h2 h3 h4 h5
*** Adding switches:
s1
*** Adding links: #可以发现,每个host都和交换机s1相连
(h1, s1) (h2, s1) (h3, s1) (h4, s1) (h5, s1)
*** Configuring hosts
h1 h2 h3 h4 h5
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet> nodes
available nodes are:
c0 h1 h2 h3 h4 h5 s1 #可以发现我们这里只有一个交换机s1,5个host
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
h3 h3-eth0:s1-eth3
h4 h4-eth0:s1-eth4
h5 h5-eth0:s1-eth5
s1 lo:  s1-eth1:h1-eth0 s1-eth2:h2-eth0 s1-eth3:h3-eth0 s1-eth4:h4-eth0 s1-eth5:h5-eth0
c0

拓扑图如下:


2.minimal最小化拓扑

只有一个交换机,交换机下面连接两个主机,是默认的拓扑方式,通过如下命令创建拓扑:

#--topo=minimal 才有最小化拓扑模型,只需要指定模型参数
root@ubuntu:~# sudo mn  --controller=remote,ip=192.168.0.2
*** Creating network
*** Adding controller
Connecting to remote controller at 192.168.0.2:6653
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet> nodes
available nodes are:
c0 h1 h2 s1 #只有一个交换机,两个host
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
s1 lo:  s1-eth1:h1-eth0 s1-eth2:h2-eth0
c0

拓扑如下:

3.line线性拓扑

交换机连接呈线形排列,且每一个交换机下只能挂一个主机,通过如下命令创建拓扑:

#--topo=linear,3,2 :拓扑模型,交换机个数,每个交换机下的主机数
root@ubuntu:~# sudo mn --topo=linear,3,2 --controller=remote,ip=192.168.0.2
*** Creating network
*** Adding controller
Connecting to remote controller at 192.168.0.2:6653
*** Adding hosts:
h1s1 h1s2 h1s3 h2s1 h2s2 h2s3  #主机
*** Adding switches:
s1 s2 s3 #交换机
*** Adding links:
(h1s1, s1) (h1s2, s2) (h1s3, s3) (h2s1, s1) (h2s2, s2) (h2s3, s3) (s2, s1) (s3, s2)
*** Configuring hosts
h1s1 h1s2 h1s3 h2s1 h2s2 h2s3
*** Starting controller
c0
*** Starting 3 switches
s1 s2 s3 ...
*** Starting CLI:
mininet> nodes
available nodes are:
c0 h1s1 h1s2 h1s3 h2s1 h2s2 h2s3 s1 s2 s3
mininet> net
h1s1 h1s1-eth0:s1-eth1
h1s2 h1s2-eth0:s2-eth1
h1s3 h1s3-eth0:s3-eth1
h2s1 h2s1-eth0:s1-eth2
h2s2 h2s2-eth0:s2-eth2
h2s3 h2s3-eth0:s3-eth2
s1 lo:  s1-eth1:h1s1-eth0 s1-eth2:h2s1-eth0 s1-eth3:s2-eth3
s2 lo:  s2-eth1:h1s2-eth0 s2-eth2:h2s2-eth0 s2-eth3:s1-eth3 s2-eth4:s3-eth3
s3 lo:  s3-eth1:h1s3-eth0 s3-eth2:h2s3-eth0 s3-eth3:s2-eth4
c0

拓扑如下:

4. tree 树形拓扑

交换机的连接呈树形,且每个交换机下可以挂多个交换机,通过如下命令创建拓扑:

#--topo=tree,3,2:拓扑模型,交换机的深度或者层数,每层交换机下连接的主机或者交换机个数
#--topo=tree,3,2: 三层,第一层一个交换机,第二层2个交换机,第三层4个交换,主机:4 x 2 = 8
#--topo=tree,3,3: 三层,第一层一个交换机,第二层3个交换机,第三层9个交换, 主机:9 x 3 = 27
#--mac 使主机mac尽量简单
root@ubuntu:~# sudo mn --topo=tree,3,2 --controller=remote,ip=192.168.0.2 --mac
*** Creating network
*** Adding controller
Connecting to remote controller at 192.168.0.2:6653
*** Adding hosts:
h1 h2 h3 h4 h5 h6 h7 h8
*** Adding switches:
s1 s2 s3 s4 s5 s6 s7
*** Adding links:
(s1, s2) (s1, s5) (s2, s3) (s2, s4) (s3, h1) (s3, h2) (s4, h3) (s4, h4) (s5, s6) (s5, s7) (s6, h5) (s6, h6) (s7, h7) (s7, h8)
*** Configuring hosts
h1 h2 h3 h4 h5 h6 h7 h8
*** Starting controller
c0
*** Starting 7 switches
s1 s2 s3 s4 s5 s6 s7 ...
*** Starting CLI:
mininet> nodes
available nodes are:
c0 h1 h2 h3 h4 h5 h6 h7 h8 s1 s2 s3 s4 s5 s6 s7
mininet> net
h1 h1-eth0:s3-eth1
h2 h2-eth0:s3-eth2
h3 h3-eth0:s4-eth1
h4 h4-eth0:s4-eth2
h5 h5-eth0:s6-eth1
h6 h6-eth0:s6-eth2
h7 h7-eth0:s7-eth1
h8 h8-eth0:s7-eth2
s1 lo:  s1-eth1:s2-eth3 s1-eth2:s5-eth3
s2 lo:  s2-eth1:s3-eth3 s2-eth2:s4-eth3 s2-eth3:s1-eth1
s3 lo:  s3-eth1:h1-eth0 s3-eth2:h2-eth0 s3-eth3:s2-eth1
s4 lo:  s4-eth1:h3-eth0 s4-eth2:h4-eth0 s4-eth3:s2-eth2
s5 lo:  s5-eth1:s6-eth3 s5-eth2:s7-eth3 s5-eth3:s1-eth2
s6 lo:  s6-eth1:h5-eth0 s6-eth2:h6-eth0 s6-eth3:s5-eth1
s7 lo:  s7-eth1:h7-eth0 s7-eth2:h8-eth0 s7-eth3:s5-eth2

拓扑如下:

5.reversed反向拓扑

这种拓扑类型与single单一拓扑类型相同,通过如下命令创建拓扑:

#--topo=reversed,4:拓扑类型,主机数(只有一个交换机)
#--mac 使主机mac尽量简单
root@ubuntu:~# sudo mn --topo=reversed,4 --controller=remote,ip=192.168.0.2 --mac
*** Creating network
*** Adding controller
Connecting to remote controller at 192.168.0.2:6653
*** Adding hosts:
h1 h2 h3 h4
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1) (h3, s1) (h4, s1)
*** Configuring hosts
h1 h2 h3 h4
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet> nodes
available nodes are:
c0 h1 h2 h3 h4 s1
mininet> net
h1 h1-eth0:s1-eth4
h2 h2-eth0:s1-eth3
h3 h3-eth0:s1-eth2
h4 h4-eth0:s1-eth1
s1 lo:  s1-eth1:h4-eth0 s1-eth2:h3-eth0 s1-eth3:h2-eth0 s1-eth4:h1-eth0
c0

拓扑如下:

6.turse环形拓扑

个人不是很理解也很少用到,这里不做介绍,有兴趣可以百度自查。

Mininet自定义拓扑--custom

现在有这样一个网络拓扑需求,如下:

很显然,这个网络拓扑并不能用Mininet自动创建网络拓扑模型,只能通过自己定制网络拓扑模型,定制py脚本如下:

#!/usr/bin/pythonfrom mininet.topo import Topoclass MyTopo( Topo ):def __init__( self ):"Create custom topo."# Initialize topologyTopo.__init__( self )# 生成所需要的主机和交换机h1 = self.addHost( 'h1' )h2 = self.addHost( 'h2' )h3 = self.addHost( 'h3' )h4 = self.addHost( 'h4' )h5 = self.addHost( 'h5' )sw1= self.addSwitch( 'sw1' )sw2 = self.addSwitch( 'sw2' )sw3= self.addSwitch( 'sw3' )sw4= self.addSwitch( 'sw4' )sw5= self.addSwitch( 'sw5' )sw6= self.addSwitch( 'sw6' )# 添加连线,交换机和交换机之间,交换机和主机之间self.addLink( sw1, sw2)self.addLink( sw1, sw3)self.addLink( sw2, sw4)self.addLink( sw2, h2)self.addLink( sw3, sw5)self.addLink( sw3, sw6)self.addLink( sw4, h1)self.addLink( sw5, h3)self.addLink( sw5, h4)self.addLink( sw6, h5)#实例化类
topos = { 'mytopo': ( lambda: MyTopo() ) }
#注意:‘mytopo’这个参数必须和命令行--topo的参数一致,如果不一致,运行时报“Exception: Invalid topo name mytopo2”

一般定制化的py脚本主要就是实例化一个继承Topo的类,上述脚本的这个类就是:MyTopo

下面通过命令行利用上述脚本创建网络模型,如下:

#--custom ./mytopo_test.py :py文件
#--topo mytopo: py文件中实例化对象时指定的参数
root@ubuntu:~# sudo mn --controller=remote,ip=192.168.0.2 --custom ./mytopo_test.py --topo mytopo --mac
*** Creating network
*** Adding controller
Connecting to remote controller at 192.168.0.2:6653
*** Adding hosts:
h1 h2 h3 h4 h5
*** Adding switches:
sw1 sw2 sw3 sw4 sw5 sw6
*** Adding links:
(sw1, sw2) (sw1, sw3) (sw2, h2) (sw2, sw4) (sw3, sw5) (sw3, sw6) (sw4, h1) (sw5, h3) (sw5, h4) (sw6, h5)
*** Configuring hosts
h1 h2 h3 h4 h5 #5个host
*** Starting controller
c0
*** Starting 6 switches
sw1 sw2 sw3 sw4 sw5 sw6 ...#6个交换机
*** Starting CLI:
mininet> nodes
available nodes are:
c0 h1 h2 h3 h4 h5 sw1 sw2 sw3 sw4 sw5 sw6
mininet> net
h1 h1-eth0:sw4-eth2
h2 h2-eth0:sw2-eth3
h3 h3-eth0:sw5-eth2
h4 h4-eth0:sw5-eth3
h5 h5-eth0:sw6-eth2
sw1 lo:  sw1-eth1:sw2-eth1 sw1-eth2:sw3-eth1
sw2 lo:  sw2-eth1:sw1-eth1 sw2-eth2:sw4-eth1 sw2-eth3:h2-eth0
sw3 lo:  sw3-eth1:sw1-eth2 sw3-eth2:sw5-eth1 sw3-eth3:sw6-eth1
sw4 lo:  sw4-eth1:sw2-eth2 sw4-eth2:h1-eth0
sw5 lo:  sw5-eth1:sw3-eth2 sw5-eth2:h3-eth0 sw5-eth3:h4-eth0
sw6 lo:  sw6-eth1:sw3-eth3 sw6-eth2:h5-eth0
c0

拓扑图如下:

经对比,同我们的定制需求拓扑相同。

Mininet--topo类型-py创建自定义拓扑网络相关推荐

  1. coreldraw x8里线段显示尺寸_CorelDRAW X8快速更换纸张类型和创建自定义的页面尺寸...

    CorelDRAW中有两种指定页面尺寸的选择,包括选择预设页面尺寸,以及创建您自己的页面尺寸.可以从众多预设页面尺寸中进行选择,范围从法律公文纸与封套到海报与网页.如果预设页面尺寸不符合您的要求,可以 ...

  2. oracle 创建nchar类型,ORACLE创建自定义函数返回varchar类型

    select from tmp1; select from tmp2; 方法一: 好处:简单,直接sql展示 劣处:如果主表数据量太大,十几亿的话,性能会大大下降,此时建议第二种方法 select a ...

  3. django management扩展 manage.py 创建自定义命令

    django 使用中会常用到像 python manage.py runserver.python manage.py makemigrations.python manage.py migrate ...

  4. 软件定义网络SDN基础实验:MiniNet常用命令、创建网络拓扑、OpenFlow流表操作

    此实验基于<软件定义网络实验1-5>,主要内容为: MiniNet常用命令 如何创建网络拓扑 OpenFlow流表操作 00x1 搭建SDN环境 SDN 环境配置:Mininet + Ry ...

  5. SDN网络控制器Floodlight安装部署和结合Mininet实现多数据中心拓扑网络

    系统前提 系统:Ubuntu 16.04 安装环境:安装JDK 1.8,安装编译打包工具ant 安装Floodlight 1.下载Floodlight 方法一: 到http://www.project ...

  6. mininet在哪编写python脚本_【SDN专栏】Mininet下编写python,实现自定义的网络topo结构 | 学步园...

    Mininet虚拟机是基于Linux系统的,所以编写步骤与之无异 这里插一句,mininet中有自带的一些例子,在新建python时可以使用 cp 命令 1,打开MIninet,输入:即可看见例子 c ...

  7. python脚本创建拓扑_Mininet自定义拓扑总结

    1.实验目的 熟悉Mininet自定义拓扑三种实现方式:命令行创建.Python脚本编写.交互式界面创建. 2.实验原理 Mininet 是一个轻量级软件定义网络和测试平台:它采用轻量级的虚拟化技术使 ...

  8. mininet和ryu简单实现自定义topo

    mininet和ryu简单实现自定义topo 设备名称 软件 ubuntu16.04 host1 mininet ubuntu16.04 host1 ryu controller 远成连接xshell ...

  9. 【SAP技术】SAP MM 如何看一个自定义移动类型是复制哪个标准移动类型而创建的?

    [SAP技术]SAP MM 如何看一个自定义移动类型是复制哪个标准移动类型而创建的? 比如项目上有一个自定义移动类型Z59,是复制551移动类型而定义的. OMJJ配置界面里,是有一个Ref字段.如下 ...

最新文章

  1. linux写文本命令,一天一个shell命令 linux文本操作系列-chmod命令用法
  2. Hadoop 2.7.3 完全分布式维护-动态增加datanode篇
  3. 服务器被黑给我上了一课
  4. PHP ServerPush (推送) 技术的探讨
  5. sqoop 增量导入mysql_sqoop增量导入数据库
  6. JQuery.validate.js 表单验证
  7. hadoop免密钥配置
  8. 如何成为有效学习的高手(许岑)——思维导图
  9. 51单片机外部地址c语言,cx51与c语言对单片机内部和外部资源变量和地址的定义是否兼容?为什么...
  10. WebService学习总结——调用第三方提供的webService服务
  11. 【PAT - 甲级1024】Palindromic Number (25分)(大数,模拟)
  12. Java 9 ← 2017,2019 → Java 13 ,来看看Java两年来的变化
  13. # 异运算_一年级数学:3000道20内纯进、退位口算题,每天100道日新又月异
  14. 山东科技大学计算机网络_山东科技大学计算机网络共20讲视频
  15. 架构如何为业务和技术“服务”(2)
  16. 相亲交友小程序制作方案
  17. 思科网络工程师面试题
  18. SPSS学习(二)作图
  19. 移动热修复Sophix之初体验
  20. c语言中的布尔类型头文件,C语言的布尔类型(_Bool)

热门文章

  1. 【实战】OpenCV+Python项目实战--信用卡数字识别
  2. 精读《算法 - 动态规划》
  3. 量化投资分析:定量分析项目和交易分析指标
  4. [15元]人体行为检测和识别毕业论文讲述
  5. 【多元统计分析】09.独立性检验与正态性检验
  6. git push 报错 error: failed to push some refs to ‘git@xxx/xx.git‘
  7. 软件测试实例-如何测试一个杯子
  8. 带通滤波器幅频特性曲线图_滤波器知识,你所要的,都在这里
  9. Java微信开发(通过java程序获取用户个人信息)
  10. 天池大数据比赛,菜鸟仓库比赛,御膳房操作