欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实验一 Mininet应用实践

程序员文章站 2022-07-06 20:22:03
...

一、教学目的

  1. 能够运用 mininet 可视化工具创建计算机网络拓扑结构
  2. 能够运用 mininet 交互界面创建拓扑结构
  3. 能够运用 python 脚本构建计算机网络拓扑结构

二、实验环境

  1. 下载并安装虚拟机 VMware workstation
  2. 打开虚拟机镜像( SDNHub_tutorial_VM_64-bit[NEW](可直接导入 VMware).ova ),下载链接https://pan.baidu.com/s/1qYN_MtUboPmruHda1DgrTA 提取码:mhfi

三、技术背景

1. 什么是Mininet

Mininet是由一些虚拟的终端节点(end-hosts)、交换机、路由器连接而成的一个网络仿真器。

2.Mininet命令图谱

实验一 Mininet应用实践

3.网络构建参数——topo

3.1 单一(single)拓扑

整个网络拓扑中交换机只有一个,下面可以连接多个主机
实验一 Mininet应用实践

3.2 线性(linear)拓扑

可以有多个交换机,但是每个交换机下面只是连接一个主机
实验一 Mininet应用实践

3.3 树形(tree)拓扑

交换机连接成树形排列,且每个交换机所连接主机一般有多个
实验一 Mininet应用实践

3.4 自定义(custom)拓扑

Python编写文件file.py,执行此脚本即可创建定义的拓扑,–custom与–topo联用
实验一 Mininet应用实践

4.网络构建参数——switch

定义mininet要使用的交换机(默认使用OVSK,即OpenVSwitch交换机)
实验一 Mininet应用实践

  1. 定义网络拓扑要使用的交换机,后面可以接的参数有:ovsk、ovsbr、ivs、lxbr、user,前面三种均为OVS型交换机,后面两种分别为内核型(linux bridge)和用户型(user)交换机。
  2. 交换机分类3类:内核型、用户型、OVS型,其中内核型和OVS型的吞吐量比用户型大很多,因此一般采用后两种。
测试三者的TCP bandwidth

sudo mn --switch ovsk --test iperf        ovs型
sudo mn --switch user --test iperf    用户型
sudo mn --test iperf    内核型

5.网络构建参数——controller

  1. –controller定义要使用的控制器,如果没有指定则使用mininet中默认的控制器
  2. 连接远程控制器,可以指定存在于本机或者与之相连通设备上的控制器,指定远程控制器方法:
sudo mn --controller=remote,--ip=[controller IP],--port=[port]
如果--ip和--port省略的话,则默认使用本地ip地址,端口默认使用6653或6633端口号。

6. Mininet内部交互命令

实验一 Mininet应用实践
实验一 Mininet应用实践

四、内容与任务

4.1 使用命令行创建拓扑

aaa@qq.com:/home/ubuntu# mn
*** Creating network
*** Adding controller
*** 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> py net.addHost('h3')
<Host h3:  pid=8949> 
mininet> py net.addLink(s1,net.get('h3'))
<mininet.link.Link object at 0x7ff7df2d2e90>
mininet> dump
<Host h1: h1-eth0:10.0.0.1 pid=8857> 
<Host h2: h2-eth0:10.0.0.2 pid=8861> 
<Host h3: h3-eth0:None pid=8949> 
<OVSSwitch s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None,s1-eth3:None pid=8870> 
<Controller c0: 127.0.0.1:6653 pid=8850> 
mininet> py s1.attach('s1-eth3')
mininet> py net.get('h3').cmd('ifconfig h3-eth0 10.0.0.3')
mininet> dump
<Host h1: h1-eth0:10.0.0.1 pid=8857> 
<Host h2: h2-eth0:10.0.0.2 pid=8861> 
<Host h3: h3-eth0:None pid=8949> 
<OVSSwitch s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None,s1-eth3:None pid=8870> 
<Controller c0: 127.0.0.1:6653 pid=8850> 
mininet> h1 ping h3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=1.86 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.286 ms
64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.057 ms
64 bytes from 10.0.0.3: icmp_seq=4 ttl=64 time=0.062 ms
64 bytes from 10.0.0.3: icmp_seq=5 ttl=64 time=0.053 ms
^C
--- 10.0.0.3 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.053/0.465/1.869/0.707 ms
mininet> h2 ping h3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=1.63 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.247 ms
64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.045 ms
64 bytes from 10.0.0.3: icmp_seq=4 ttl=64 time=0.065 ms
^C
--- 10.0.0.3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.045/0.498/1.636/0.661 ms
mininet> pingall
*** Ping: testing ping reachability
h1 -> h2 h3 
h2 -> h1 h3 
h3 -> h1 h2 
*** Results: 0% dropped (6/6 received)
mininet>

步骤简述:

  1. 默认mn进入拓扑下已经创建好h1和h2
  2. 添加主机h3,出现进程
  3. 添加主机h3与s1之间的链路
  4. 添加s1的开放端口
  5. 添加h3的ip,使得其与网络中的其他主机能够进行通信

4.2 使用可视化工具创建拓扑

  1. 首先打开可视化工具Miniedit
aaa@qq.com:/home/ubuntu# ls
cgi-bin                          Downloads          mininet  onos      Public     trema
Desktop                          eclipse-workspace  Music    openflow  pyretic    Videos
distribution-karaf-0.6.3-Carbon  epoch-simulator    oflops   Pictures  ryu
Documents                        floodlight         oftest   pox       Templates
aaa@qq.com:/home/ubuntu# cd mininet/examples/
aaa@qq.com:/home/ubuntu/mininet/examples# python miniedit.py 
topo=none 
  1. 在可视化界面中创建拓扑
  2. 配置控制器
    实验一 Mininet应用实践
  3. 配置交换机
    实验一 Mininet应用实践
  4. 配置主机
    实验一 Mininet应用实践
  5. 全局配置
    实验一 Mininet应用实践
  6. 运行拓扑
    实验一 Mininet应用实践
  7. 命令行中查看拓扑情况
Getting Hosts and Switches.
Getting controller selection:ref 
Getting Links.
*** Configuring hosts
h1 h2 h3 
**** Starting 1 controllers
c0 
**** Starting 2 switches
s1 s2 
No NetFlow targets specified.
No sFlow targets specified.


 NOTE: PLEASE REMEMBER TO EXIT THE CLI BEFORE YOU PRESS THE STOP BUTTON. Not exiting will prevent MiniEdit from quitting and will prevent you from starting the network again during this sessoin.

*** Starting CLI:
mininet> 
mininet> dump
<Host h1: h1-eth0:10.0.0.1 pid=9349> 
<Host h2: h2-eth0:10.0.0.2 pid=9355> 
<Host h3: h3-eth0:10.0.0.3 pid=9375> 
<customOvs s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None,s1-eth3:None pid=9367> 
<customOvs s2: lo:127.0.0.1,s2-eth1:None,s2-eth2:None pid=9371> 
<Controller c0: 127.0.0.1:6633 pid=9384> 
mininet> links
s1-eth1<->h1-eth0 (OK OK) 
s1-eth2<->h2-eth0 (OK OK) 
s2-eth1<->h3-eth0 (OK OK) 
s1-eth3<->s2-eth2 (OK OK) 
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
h3 h3-eth0:s2-eth1
s1 lo:  s1-eth1:h1-eth0 s1-eth2:h2-eth0 s1-eth3:s2-eth2
s2 lo:  s2-eth1:h3-eth0 s2-eth2:s1-eth3
c0
mininet> 

  1. 保存脚本
    实验一 Mininet应用实践

4.3 脚本创建任意拓扑