Mininet实验

Mininet是由一些虚拟的终端节点、交换机、路由器连接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美。 Mininet可以很方便地创建一个支持SDN的网络:host就像真实的电脑一样工作,可以使用ssh登录,启动应用程序,程序可以向以太网端口发送数据包,数据包会被交换机、路由器接收并处理。有了这个网络,就可以灵活地为网络添加新的功能并进行相关测试,然后轻松部署到真实的硬件环境中。

0x1 Mininet源码安装与验证

  • Mininet架构按datapath的运行权限不同,分为kernel datapath和userspace datapath两种,其中kernel datapath把分组转发的逻辑编译进入Linux内核,效率非常高;userspace datapath把分组转发逻辑实现为一个应用程序,叫做ofdatapath,效率虽不及kernel datapath,但更为灵活,更容易重新编译。

  • ofprotocol进程,它负责管理和维护同一控制器之间的安全信道。

安装方法:在本地安装Mininet源代码。该安装方法在安装过程中可以设置Open vSwitch的版本

进入mininet/util使用./install.sh [options]安装

  • -a 完整安装
  • -s [dir]指定目录安装(默认在home下)
  • -nfv安装Mininet核心文件及依赖、OpenFlow和Open vSwitch。

安装完成后使用指令

# mn --version查看版本号,安装成功

0x2 Mininet拓扑构建与命令使用

Miniedit可视化,直接在界面上编辑任意拓扑,生成python自定义拓扑脚本,使用Mininet可视化界面方便了用户自定义拓扑创建,为不熟悉python脚本的使用者创造了更简单的环境,界面直观,可操作性强。

Mininet 2.2.0+内置miniedit 。在mininet/examples下提供miniedit.py脚本,执行脚本后显示可视化界面,可自定义拓扑及配置属性。 MiniEdit使用主要分三个步骤:Miniedit启动→自定义创建拓扑,设置设备信息→运行拓扑并生成拓扑脚本。

Mininet支持创建的网络拓扑为:minimal、single、linear和tree。

  • minimal:创建一个交换机和两个主机相连的简单拓扑。默认无—topo参数的情况下就是这样。其内部实现就是调用了single,2对应的函数。
  • single,n:设置一个交换机和n个主机相连的拓扑。
  • linear,n:创建n个交换机,每个交换机只连接一个主机,并且所有交换机成线型排列。
  • tree,depth=n,fanout=m:创建深度为n,每层树枝为m的树型拓扑。因此形成的拓扑的交换机个数为(mn-1)/(m-1),主机个数为mn。
  • —custom:在上述已有拓扑的基础上,Mininet支持自定义的拓扑,使用一个简单的Python API即可。—custom需和—topo一起使用,如mn —custom file.py —topo mytopo。

Mininet启动参数

  • --topo = TOPO指定拓扑类型,例如mn --topo=single,n=5

  • –switch 定义网络拓扑要使用的交换机,后面可以接的参数有:ovskovsbrivslxbruser,前面三种均为OVS型交换机,后面两种分别为内核型(linux bridge)和用户型(user)交换机。

  • –controller 一般我们不用mininet自带的控制器,而是自己制定一个远程控制器,代码如下:如果–ip和–port省略的话,则默认使用本地ip地址,端口默认使用6653或6633端口号

     mn --controller = remote,
          --ip = [控制器的IP地址]
          --port = [控制器的端口号]
    

Mininet中的常用命令

命令作用
help
xterm指定节点打开xterm
iperf进行iperf tcp测试
iperfudp进行udp测试
net显示网络连接情况
pingpair前两个主机互相ping(不能指定)
link禁用或启用两个节点之间的链路
pingall
py执行python表达式
sh运行shell命令
quit退出
nodes列出所有节点信息
links查看链路健壮性信息

使用

mn --custom [file.py] --topo mytopo创建自定义拓扑、

执行mn -c清除释放Mininet构造的交换机和主机。

可以通过miniedit可视化界面创建自定义拓扑并保存为python脚本

0x3 调用API拓展自定义拓扑

topo包含的函数有

  • addHost(“host name”): 添加主机
  • addSwitch(“sw name”): 添加交换机
  • addLink(node,node): 添加链路
  • attach(port):添加端口

打开mininet后

  • py net.addHost('h3')添加主机
  • py net.addLink(s3,net.get('h3'))在s3和h3之间添加一条链路
  • py s3.attach('s3-eth3')添加接口
  • py net.get(‘h3’).cmd(‘ifconfig h3-eth0 10.3’) 给h3配置ip地址

0x4 Mininet可视化构建网络拓扑

使用Miniedit。

0x5 Mininet流表应用实战1——手动添加流表

执行dpctl dump-flows查看交换机流表信息。

若拓扑里没有sdn控制器,也没有流表,主机之间ping不通。

dpctl add-flow in_port=1,actions=output:2

dpctl del-flows删除所有流表

0x7多数据中心网络拓扑流量宽带实验

Licensed under CC BY-NC-SA 4.0