我的安装环境:ubuntu 18.04

Mininet 安装

1. 安装git

sudo apt-get install git

 
2. 获取mininet.git

git clone http://github.com/mininet/mininet.git

 
3. 进入util文件夹(mininet文件夹默认在root文件夹下)

cd mininet/util 

 
4. 自定义安装(需要10分钟左右)

  • 默认安装全部特性
./install.sh -a
  • 自定义安装
    举例如下:此语句为安装支持OpenFlow 1.3版本协议、同时安装Open vswitch 组件的语句。
./install.sh -n3v

        其余自定义安装方式,可参照下表所示参数进行安装。

参数功能参数功能
-a默认的安装全部特性-p安装POX控制器
-b安装Benchmark:oflops-r删除已存在的Open vSwitch包
-c安装核心之后清空已有配置-s依赖源码/构建树存储位置
-d删除某些敏感文件-t完成其他Mininet虚拟机的创建任务
-e安装Mininet开发依赖-v安装Open vswitch
-f安装OpenFlow协议支持模块-V安装指定版本的Open vswitch
-h打印帮助信息-w安装Wireshark的OpenFlow解析器
-i安装Indigo Virtual Switch-y安装Ryu控制器
-k安装新的内核-x安装NOX Classic控制器
-m从源目录安装Open Switch内核模块-0(default) 安装OpenFlow 1.0版本
-n安装Mininet依赖和核心文件-3安装OpenFlow 1.3版本

 
5. 测试安装是否成功

sudo mn --test pingall

        如下图所示为安装成功

 
 

Mininet 使用教程

1. sudo mn 语句可以自动建立一个简单的拓扑网络,其结构为2个主机连接在一个交换机上。

sudo mn

 
2. 运行上述语句后进入到命令行界面,常用的命令如下表所示:

命令功能命令功能
help打印帮助信息nodes查看全部节点信息
xterm打开xterm窗口net查看网络拓扑信息
pingh1 ping h2 ,测试连通性dump输出节点信息
iperf指定节点间TCP测试iperdudp指定节点间UDP测试,可指定发送速率
py运行python语句sh执行shell脚本
host cmd在主机中执行命令,例:h1 ifconfigexit/quit退出Mininet

       以部分命令为例,具体运行结果如下图所示:

 

3. Mininet中自带多种拓扑结构,以三种常用拓扑为例。(图中s表示交换机,h表示主机)

(1)树形拓扑,后面的参数“2”表示2层交换机,“3”表示每个节点连接的下一层的节点数目。

sudo mn --topo=tree,2,3

(2)线性拓扑

sudo mn --topo=linear,5

(3)单一交换机拓扑

sudo mn --topo=single,5

 

4. Mininet中使用可视化编辑器Miniedit进行拓扑建立。
       进入到mininet/examples中,运行miniedit.py

cd mininet/examples/
sudo ./miniedit.py 

       如上图所示,出现可视化页面。可通过添加交换机,控制器,主机进行网络的建立。在相应设备上右键,可以进行配置。
       按照下图所示构建网络,并配置控制器。

       在Edit->perference页面进行配置,勾选start CLI选项,可以使得网络在运行时打开命令行,即"mininet> "页面。

       点击run,运行此网络,可以发现进入到了命令行界面。

       测试h1,h2是否连通,发现可以连通,网络建立成功。

       进入 File -> Export Level 2 Script可以将生成的网络拓扑保存为python文件,在之后想要使用此拓扑时,可以选择直接运行对应python文件,即“sudo python 文件名.py” 或者“sudo ./文件名.py”。

 

5. 使用python语言构建拓扑
       可以通过miniedit.py将构建的拓扑导出为python文件,观察example文件中已有的python例子和miniedit导出的文件,其实也可以自己编写python文件构建拓扑。

       以下为一个用python语言编写的可以运行的拓扑网络。

#!/usr/bin/python

from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call

def myNetwork():

    net = Mininet( topo=None,
                   build=False,
                   ipBase='10.0.0.0/8')

    info( '*** Adding controller\n' )
    c0=net.addController(name='c0',
                      controller=OVSController,
                      ip='127.0.0.1',
                      protocol='tcp',
                      port=6633)

    info( '*** Add switches\n')
    s1 = net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001')

    info( '*** Add hosts\n')
    h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
    h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)

    info( '*** Add links\n')
    net.addLink(h1, s1)
    net.addLink(h2, s1)

    info( '*** Starting network\n')
    net.start()
    info( '*** Starting controllers\n')
    #for controller in net.controllers:
    c0.start()

    info( '*** Starting switches\n')
    net.get('s1').start([c0])

    info( '*** Post configure switches and hosts\n')
    CLI(net)

if __name__ == '__main__':
    setLogLevel( 'info' )
    myNetwork()
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐