Mininet虚拟网络拓扑的创建方法

1.通过Mininet命令行自动创建网络拓扑

通过--topo参数来指定Mininet自带的拓扑类型

可选参数

--topo=linear|single|tree: 指定SDN网路拓扑类型
--controller=remote,ip=xxx.xxx.xxx.xxx :指定接管SDN网络的控制器

Mininet简单网络拓扑创建举例

  • minimal拓扑
sudo mn #sudo mn --topo minimal
  • linear拓扑
sudo mn --topo=linear,5#创建线性拓扑模型,交换机个数为5

sudo mn --topo=linear,3,2 --controller=remote,ip=192.168.0.2
#创建线性拓扑模型,交换机个数为3,每个交换机下的主机数2
  • single拓扑
sudo mn --topo=single,3#创建单一拓扑网路,交换机数量为1,主机数量为3

sudo mn --topo=single,5 --controller=remote
  • tree拓扑
sudo mn --topo tree, fanout=2,depth=2
#depth代表深度,fanout代表扇出,即深度代表交换机的深度,扇出代表每个交换机下挂载主机数目

sudo mn --topo=tree,3,2 --controller=remote,ip=192.168.0.2 --mac
#--topo=tree,3,2:拓扑模型,交换机的深度或者层数,每层交换机下连接的主机或者交换机个数
#交换机深度(层数)为3层,第一层一个交换机,第二层2个交换机,第三层4个交换,主机:4 x 2 = 8
#--topo=tree,3,3: 三层,第一层一个交换机,第二层3个交换机,第三层9个交换, 主机:9 x 3 = 27

https://blog.csdn.net/wuliangtianzu/article/details/82689347

交互式界面创建主机、交换机
通过py命令执行Python表达式,例如添加网络设备。

py net.addHost('h3')#给当前网络net添加新的主机h3
py net.addLink(s1,net.get('h3'))#为主机h3和交换机s1之间添加一条链路
py s1.attach('s1-eth3')#给交换机s1添加端口eth3用于连接h3
py h3.cmd('ifconfig h3-eth0 10.3')#为主机h3配置端口及改端口的IP地址
#py net.get('h3').cmd('ifconfig h3-eth0 10.3')
h1 ping -c1 10.3# h1 ping h3
pingall#测试所有主机都是连通的

在这里插入图片描述

2.通过Python脚本自定义创建网络拓扑
自定义型,是指通过py文件自定义拓扑类型,通过--custom和--topo两个参数搭配指定。
使用简单的Python API轻松定义自定义拓扑,并在其中提供了一个在mininet/custom目录下示例代码
topo-2sw-2host.py
在这里插入图片描述

"""Custom topology example

Two directly connected switches plus a host for each switch:

   host --- switch --- switch --- host

Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""

from mininet.topo import Topo

class MyTopo( Topo ):
    "Simple topology example."

    def __init__( self ):
        "Create custom topo."

        # Initialize topology
        Topo.__init__( self )

        # Add hosts and switches
        leftHost = self.addHost( 'h1' )
        rightHost = self.addHost( 'h2' )
        leftSwitch = self.addSwitch( 's3' )
        rightSwitch = self.addSwitch( 's4' )

        # Add links
        self.addLink( leftHost, leftSwitch )
        self.addLink( leftSwitch, rightSwitch )
        self.addLink( rightSwitch, rightHost )


topos = { 'mytopo': ( lambda: MyTopo() ) }

提供自定义的mininet文件后,它可以向命令行添加新的拓扑,交换机类型和测试。

sudo mn --custom ~/mininet/custom/topo-2sw-2host.py

在这里插入图片描述

sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo --test pingall

退出mininet之后,使用sudo mn -c删除缓存

附:常用的mininet命令

nodes        #查看有哪些可用节点
net          #查看链路信息,两个设备之间的之间连线,称为一个链路,链路是双向的
links        #检测链路是否正常工作
ports
dump         #查看所有节点信息
link         #link s1 s2 down/up 禁用/开启s1和s2这两个节点之间的链路
iperf        #如iperf h1 h2测试两个主机h1和h2之间的TCP带宽
iperfupd     #iperfupd bw h1 h2 测试两个主机h1和h2之间的UDP带宽
pingall      #所有节点相互ping
pingallfull  #所有节点相互ping,返回详细x信息
xterm        #如xterm h1打开主机h1的操作口
py          #execute python expression
sh          #Run external shell command
posted @ 2020-04-26 13:34  realJianhao  阅读(3554)  评论(0编辑  收藏  举报