【云计算】Mininet--topo类型之py创建自定义拓扑网络
小标 2018-12-13 来源 : 阅读 2010 评论 0

摘要:本文主要向大家介绍了【云计算】Mininet--topo类型之py创建自定义拓扑网络,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】Mininet--topo类型之py创建自定义拓扑网络,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。


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/python
 
from mininet.topo import Topo
 
class MyTopo( Topo ):

    def __init__( self ):
 
       "Create custom topo."
 
       # Initialize topology
       Topo.__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


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程