Mininet应用实践
一、实验目的
(1)能够运用mininet可视化工具创建网络拓扑结构。
(2)能够运用mininet交互界面创建网络拓扑结构。
(3)能够运用python脚本构建网络拓扑结构。
二、实验原理或预习内容
(1)计算机网络基础理论知识
(2)软件定义网络基础知识及应用
三、实验环境
(1)硬件环境需求
个人PC设备或远程虚拟服务器一台。
(2)软件环境需求
Windows10系统,Ubuntu20.04虚拟机(要图形化界面),python运行环境
四、实验内容
(1)任务概述
在使用Openstack任意实现版本的云平台上搭建二层网络,设置子网和路由,并将虚拟机连入网络。
以下是8行2列的表格。
步骤 主要内容
1.安装Mininet 源码安装
2.安装Ryu控制器 源码安装
3.运用mininet可视化工具创建网络拓扑结构 创建4元Fat-Tree。运行Miniedit.py脚本,拖拽组件。
-
运用mininet交互界面创建网络拓扑结构 创建4元Fat-Tree。py 命令。
-
运用python脚本构建网络拓扑结构 创建4元Fat-Tree。mn 命令。
-
Ryu控制器运行及拓扑结构可视化 ryu-manager; gui_topolopy。
-
虚拟机间连通实验
(1)同一交换机内部的主机间连通性及通信带宽测试;
(2)相同汇聚交换机下不同机架的主机间测试;
(3)相同核心交换机不同汇聚交换机下的主机间测试。
(2)补充知识
(1)什么是Mininet?
软件定义网络(SDN)的仿真工具。
创建一个真实的虚拟网络,其中包含真实的工作组件,但运行在一台机器上,以便于测试。
提供创建主机、交换机和控制器的能力。
(2)什么是Fat-Tree?
当前,Fat-Tree 是业界普遍认可的实现无阻塞网络的技术。其基本理念是:使用大量低性能的交换机,构建出大规模的无阻塞网络,对于任意的通信模式,总有路径让他们的通信带宽达到网卡带宽。Fat-Tree 的另一个好处是,它用到的所有交换机都是相同的,这让我们能够在整个数据中心网络架构中采用廉价的交换机。
Fat-Tree是以交换机为中心的拓扑。支持在横向拓展的同时拓展路径数目;且所有交换机均为相同端口数量的普通设备,降低了网络建设成本。
具体来说,Fat-Tree结构共分为三层:核心层、汇聚层、接入层。一个k元的Fat-Tree可以归纳为5个特征:
- 每台交换机都有k个端口;
- 核心层为顶层,一共有(k/2)^2个交换机;
- 一共有k个pod,每个pod有k台交换机组成。其中汇聚层和接入层各占k/2台交换机;
- 接入层每个交换机可以容纳k/2台服务器,因此,k元Fat-Tree一共有k个pod,每个pod容纳kk/4个服务器,所有pod共能容纳kk*k/4台服务器;
- 任意两个pod之间存在k条路径。
(3)更多信息
http://mininet.org/
https://www.sdnlab.com/
五、实验步骤和实验过程描述
1. 安装Mininet
sudo git clone git://github.com/mininet/mininet
cat mininet/INSTALL
./mininet/mininet/util/install.sh -a
测试mininet是否安装成功
sudo mn --switch ovsbr --test pingall
mn --version
注意:
(1) "git://"可改为"https://"。
(2) 由于GitHub网络问题,有4个git仓库不易下载(见第六部分的截图)。可修改install.sh脚本,注释掉这几个git clone命令,以别的方式获取。
(3) 创建miniedit.py的快捷方式后可快速启动可视化工具。
ln -s mnedit mininet/examples/miniedit.py
python3 mnedit
2. 安装Ryu控制器
sudo git clone git://github.com/osrg/ryu.git
pip3 install -r ryu/tools/pip-requires
sudo pip3 install --upgrade six
sudo python3 ryu/setup.py install
# 测试ryu是否安装成功
ryu-manager
注意:
(1) eventlet:pip3 install eventlet==0.30.2,也可能是其他版本,参考报错信息调整。
3. 运用mininet可视化工具创建网络拓扑结构
最新的Mininet内置了一个Mininet可视化工具miniedit。miniedit在mininet/mininet/examples目录下提供miniedit.py脚本,执行脚本后将显示Mininet的可视化界面,在界面上可进行自定义拓扑和自定义设置。
# 执行脚本打开可视化工具(参考"注意"创建快捷方式更方便)
sudo python3 mininet/mininet/examples/miniedit.py
用鼠标选择左侧的对应的网络组件,然后在空白区域单击鼠标左键即可添加网络组件。
在主机、交换机、控制器上点击鼠标右键,选择Properties即可设置其属性。
可以通过"Controller Type"选择远程控制器(如选择Ryu控制器)进行试验,填写正确的IP地址和控制器监听端口即可。
在"Edit"中选择"Preferences"。勾选"Start CLI"后就可以在命令行界面直接对主机等进行命令操作。交换机支持的OpenFlow协议版本可多选。
点击左下角"run"按钮,即可启动mininet,运行设置好的网络拓扑,可在命令行界面显示出运行的拓扑信息。在命令行输入"quit"后才能点击"stop"按钮。
使用图形界面设置好拓扑后,可以通过选择File-save保存为.mn文件供下次打开。也可以通过选择File-Export Level 2 Script,将其保存为python脚本,以后直接运行python脚本即可重现拓扑,重现拓扑后可在命令行直接操作。
这里添加1个默认控制器,8个交换机(2个核心交换机、4个汇聚交换机、4个边缘交换机),8个主机,并连接成4元Fat-Tree结构。
注意:
(1) Exception: Error creating interface pair (aa-bbbb,cc-dddd): RTNETLINK answers: File
exists 是因为没有清除以前倒入的配置文件。
# 清除mininet配置缓存
sudo mn -c
4. 运用mininet交互界面创建网络拓扑结构
在步骤3的结构中,删除交换机e10和主机h8及对应连接,再通过交互界面添加回去。
py net.addSwitch('e10')
py e10.attach('e10-eth1') # eth2-eth4同理
py net.addLink(e5,e10) # e6到e10的连接同理
py net.addHost('h8')
py h8.cmd('ifconfig h8-eth0 10.0.0.8')
py h8.IP()
py net.addLink(e10,h8) # e10到h7的连接同理
注意:
(1) 在python脚本中,addSwitch可以通过cls参数指定交换机类型,但交互界面好像不行?没有成功,导致已有交换机如e9和e10的交换机类型不一样。
(2) 可以通过 py dir(e10) 或 py help(e10) 查看e10可调用的函数。
5. 运用python脚本构建网络拓扑结构
ryu-manager ryu/ryu/app/simple_switch_13.py
mn --custom /home/xhm/mininet/fattree.py --topo=mytopo --controller=remote
6. Ryu控制器运行及拓扑结构可视化
ryu-manager ryu/ryu/app/simple_switch_13.py ryu/ryu/app/gui_topology/gui_topology.py --observe-links
在浏览器中打开127.0.0.1:8080,查看可视化的4元Fat-Tree。
mininet> pingall
注意:
(1) 若你在启动Ryu时使用了--observe-links参数,则Ryu会收到非常大量的包含LLDP协议报文的PacketIn消息,如果不对这一PacketIn消息进行特殊处理的话,很容易导致Ryu奔溃,无法正常工作!建议在simple_switch_13.py增加如下代码。
from ryu.lib.packet import ether_types
# _packet_in_handler(self, ev):
if eth.ethertype == ether_types.ETH_TYPE_LLDP:
# ignore lldp packet
return
(2) pingall时,可能需要等待一段时间才能ping通。试试多pingall几次。
7. 虚拟机间连通实验
(1) 同一交换机内部的主机间连通性及通信带宽测试
以h1、h2为例:
h1 ping h2
iperf h1 h2
(2) 相同汇聚交换机下不同机架的主机间测试
以h1、h3为例:
h1 ping h3
iperf h1 h3
(3) 相同核心交换机不同汇聚交换机下的主机间测试
以h1、h5为例:
h1 ping h5
iperf h1 h5
六、运行结果截图
1.安装Mininet
由于GitHub网络问题,中间4个git仓库不易下载。可修改install.sh脚本,注释掉这几个git clone命令,以别的方式获取。
2.安装Ryu控制器
3.运用mininet可视化工具创建网络拓扑结构
4. 运用mininet交互界面创建网络拓扑结构
5. 运用python脚本构建网络拓扑结构
见6
6. Ryu控制器运行及拓扑结构可视化
7. 虚拟机间连通实验
(1) 同一交换机内部的主机间连通性及通信带宽测试
(2) 相同汇聚交换机下不同机架的主机间测试
(3) 相同核心交换机不同汇聚交换机下的主机间测试
七、实验结论与体会
运用Mininet可视化界面方便了用户自定义拓扑创建,为不熟悉python脚本的使用者创造了更简单的环境,界面直观,可操作性强。
运用Mininet交互界面创建网络拓扑结构比较不如其他两种创建方式方便,适合在网络已运行时做少量对网络的动态修改。
运用python脚本创建4元Fat-Tree时,可以通过改变代码中定义的L1变量来设置核心交换机的数量,并通过添加额外的交换机和链路来构成更复杂的数据中心网络拓扑。随着边缘交换机的增加,主机个数也随之增长,利用Mininet的易用性和扩展性,可以创建基于多种数据中心场景下的网络拓扑,达到更好更全面的实验效果。