Mininet应用实践

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脚本,拖拽组件。

  1. 运用mininet交互界面创建网络拓扑结构 创建4元Fat-Tree。py 命令。

  2. 运用python脚本构建网络拓扑结构 创建4元Fat-Tree。mn 命令。

  3. Ryu控制器运行及拓扑结构可视化 ryu-manager; gui_topolopy。

  4. 虚拟机间连通实验

(1)同一交换机内部的主机间连通性及通信带宽测试;

(2)相同汇聚交换机下不同机架的主机间测试;

(3)相同核心交换机不同汇聚交换机下的主机间测试。

(2)补充知识

(1)什么是Mininet?

 软件定义网络(SDN)的仿真工具。

 创建一个真实的虚拟网络,其中包含真实的工作组件,但运行在一台机器上,以便于测试。

 提供创建主机、交换机和控制器的能力。

(2)什么是Fat-Tree?

当前,Fat-Tree 是业界普遍认可的实现无阻塞网络的技术。其基本理念是:使用大量低性能的交换机,构建出大规模的无阻塞网络,对于任意的通信模式,总有路径让他们的通信带宽达到网卡带宽。Fat-Tree 的另一个好处是,它用到的所有交换机都是相同的,这让我们能够在整个数据中心网络架构中采用廉价的交换机。

Fat-Tree是以交换机为中心的拓扑。支持在横向拓展的同时拓展路径数目;且所有交换机均为相同端口数量的普通设备,降低了网络建设成本。

具体来说,Fat-Tree结构共分为三层:核心层、汇聚层、接入层。一个k元的Fat-Tree可以归纳为5个特征:

  1. 每台交换机都有k个端口;
  2. 核心层为顶层,一共有(k/2)^2个交换机;
  3. 一共有k个pod,每个pod有k台交换机组成。其中汇聚层和接入层各占k/2台交换机;
  4. 接入层每个交换机可以容纳k/2台服务器,因此,k元Fat-Tree一共有k个pod,每个pod容纳kk/4个服务器,所有pod共能容纳kk*k/4台服务器;
  5. 任意两个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的易用性和扩展性,可以创建基于多种数据中心场景下的网络拓扑,达到更好更全面的实验效果。

相关推荐
sec0nd_14 分钟前
1网络安全的基本概念
网络·安全·web安全
青柠视频云1 小时前
青柠视频云——视频丢包(卡顿、花屏、绿屏)排查
服务器·网络·音视频
网安CILLE1 小时前
2024年某大厂HW蓝队面试题分享
网络·安全·web安全
沐风ya1 小时前
Reactor介绍,如何从简易版本的epoll修改成Reactor模型(demo版本代码+详细介绍)
网络
SUGERBOOM1 小时前
【网络安全】网络基础第一阶段——第一节:网络协议基础---- OSI与TCP/IP协议
网络·网络协议·web安全
petaexpress1 小时前
常用的k8s容器网络模式有哪些?
网络·容器·kubernetes
m0_609000424 小时前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
suifen_6 小时前
RK3229_Android9.0_Box 4G模块EC200A调试
网络
铁松溜达py7 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络