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的易用性和扩展性,可以创建基于多种数据中心场景下的网络拓扑,达到更好更全面的实验效果。

相关推荐
长安11082 小时前
前后端、网关、协议方面补充
网络
hzyyyyyyyu5 小时前
隧道技术-tcp封装icmp出网
网络·网络协议·tcp/ip
南猿北者6 小时前
docker Network(网络)
网络·docker·容器
Hacker_Nightrain7 小时前
网络安全CTF比赛规则
网络·安全·web安全
网络安全指导员7 小时前
恶意PDF文档分析记录
网络·安全·web安全·pdf
co0t8 小时前
计算机网络(11)和流量控制补充
服务器·网络·计算机网络
白总Server8 小时前
JVM解说
网络·jvm·物联网·安全·web安全·架构·数据库架构
清尘沐歌8 小时前
有什么好用的 WebSocket 调试工具吗?
网络·websocket·网络协议
Li_0304069 小时前
Java第十四天(实训学习整理资料(十三)Java网络编程)
java·网络·笔记·学习·计算机网络
Tony聊跨境9 小时前
什么是 ISP:了解互联网服务提供商的作用
网络·人工智能·isp