当前位置: 首页 > 工具软件 > Mininet > 使用案例 >

Mininet,一个安装在你电脑上的虚拟网络

詹唯
2023-12-01

Mininet

Mininet创建了一个真实的虚拟网络,在一台机器(虚拟机、云或本机)上运行真正的内核、交换机和应用程序代码,只需几秒钟,只需一个命令:

> sudo mn

由于您可以使用Mininet CLI(和API)轻松与网络交互、自定义、与他人共享或将其部署在真实硬件上,因此Mininet对于开发、教学和研究非常有用。
Mininet也是使用OpenFlow和P4开发、共享和试验软件定义网络(SDN)系统的一种很好的方式。
Mininet得到了积极的开发和支持,并在许可的BSD开源许可下发布。我们鼓励您贡献代码、错误报告/修复、文档和其他任何可以改进系统的东西!

开始

下载/开始使用Mininet

最简单的入门方法是下载预打包的Mininet/Ubuntu虚拟机。该虚拟机包括Mininet本身、所有预先安装的OpenFlow二进制文件和工具,并调整内核配置以支持更大的Mininet网络。

选项1:Mininet虚拟机安装(简单,推荐)

VM安装是安装Mininet最简单、最简单的方法,因此我们建议从这开始。
按照以下步骤进行VM安装:
1.从 mininet-release下载Mininet虚拟机映像。
2.下载并安装虚拟化系统。我们推荐以下免费选项之一:

您还可以使用以下任一选项:

  • Qemu(free, GPL) for any platform
  • Microsoft Hyper-V(Windows)
  • KVM(free, GPL, Linux)

3.运行VM安装说明以登录VM并根据需要对其进行自定义。
4.按照演练进行操作,以熟悉Mininet命令和典型用法。
5.如果您对OpenFlow和软件定义的网络感兴趣,您可能也希望完成OpenFlow教程。

选项2:从源代码进行本机安装

此选项适用于本地VM、远程EC2和本机安装。它假设新的Ubuntu、Debian或(实验性的)Fedora为安装的起点。
我们强烈推荐更新的Ubuntu或Debian版本,因为它们包括更新版本的OpenVswitch。(Fedora还包括最新的OvS版本。)
要从源代码本地安装,首先需要获得源代码:

git clone https://github.com/mininet/mininet

请注意,上面的git命令将检查最新和最大的Mininet(我们推荐!)如果您想运行Mininet的最新标记/发布版本-或任何其他版本-您可以显式签出该版本:

cd mininet
git tag  # list available versions
git checkout -b mininet-2.3.0 2.3.0  # or whatever version you wish to install
cd ..

获得源代码树后,安装Mininet的命令为:

mininet/util/install.sh [options]

典型的 options 选项包括:
-a: 安装Mininet虚拟机中包含的所有内容,包括OpenVswitch等依赖项,以及OpenFlow wireshark解析器和POX等附加功能。默认情况下,这些工具将构建在主目录中创建的目录中。
-nfv: 安装Mininet、OpenFlow参考交换机和Open vSwitch。
-s mydir: 在其他选项之前使用此选项将源/生成树放置在指定目录中,而不是主目录中。
因此,您可能希望使用以下命令中的一个(且仅一个):

To install everything (using your home directory): install.sh -a
To install everything (using another directory for build): install.sh -s mydir -a
To install Mininet + user switch + OvS (using your home dir): install.sh -nfv
To install Mininet + user switch + OvS (using another dir:) install.sh -s mydir -nfv

您可以使用以下工具了解其他有用的选项(例如,如果您的wireshark版本中尚未包含OpenFlow Wireshard解析器,则安装该解析器)

install.sh -h

安装完成后,测试Mininet的基本功能:

sudo mn --switch ovsbr --test pingall

选项 3:从软件包安装

如果你运行的是最近的 Ubuntu 版本或 Debian 11+,你可以安装 Mininet 软件包。请注意,这可能会为您提供较旧版本的Mininet,但它可能是一种非常方便的入门方式。
若要确认正在运行的操作系统版本,请运行以下命令:

lsb_release -a

接下来,只需输入以下命令之一(对应于您正在运行的发行版)即可安装基本 Mininet 软件包:

Mininet 2.3.0 on Debian 11: sudo apt-get install mininet
Mininet 2.2.2 on Ubuntu 20.04 LTS: sudo apt-get install mininet
Mininet 2.2.2 on Ubuntu 18.04 LTS: sudo apt-get install mininet

如果您拥有的 Mininet 版本并不明显,您可以尝试:

mn --version

Mininet支持多个交换机和OpenFlow控制器。对于此测试,我们将在网桥/独立模式下使用开放式 vSwitch。

要对此进行测试,请尝试:

sudo mn --switch ovsbr --test pingall

如果 Mininet 报错 Open vSwitch 无法正常工作,请确保它已安装并正在运行:

sudo apt-get install openvswitch-switch
sudo service openvswitch-switch start

如果您希望完成 Mininet 演练,则需要安装其他软件。以下命令:

git clone https://github.com/mininet/mininet
mininet/util/install.sh -fw

将安装OpenFlow参考交换机,参考控制器和Wireshark解剖仪。

选项 4. 升级现有 Mininet 安装

有很多方法可以做到这一点。 如果您尚未对 Mininet 进行任何更改,您通常可以:
1.如果您还没有 Mininet 代码,请查看:

git clone https://github.com/mininet/mininet

2.删除旧的 Mininet 包,如果有的话:

sudo apt-get uninstall mininet       # if you have installed a Mininet apt package

sudo pip uninstall mininet           # if you are upgrading an older Mininet VM
                                     # where Mininet was installed with setuptools

3.安装新版本的 Mininet :

cd mininet
git fetch  # to fetch the latest and greatest branches and tags
git tag    # to see what versions are available

git checkout -b mininet-2.3.0 2.3.0  # or whatever version/branch you want, or
                                     # master if you want the latest

sudo make install   # only install new mnexec and mininet packages

请注意, sudo make install 仅安装 mnexec 和 Mininet 软件包。 如果您希望安装 Mininet 及其依赖项,请执行以下操作:

   sudo apt-get update   # make sure apt works
   util/install.sh -n    # install mininet and dependencies

如果你想指定一个特定的 Python 版本,你可以这样做:

  sudo PYTHON=python3 make install

或者:

  PYTHON=python3 util/install.sh -a

作为 sudo make install 的替代方法,您还可以执行 sudo make develop,这将创建从 /usr/lib/python… 到源代码树的符号链接。
请注意,这只会升级 Mininet 本身 - 任何其他组件,例如 Open vSwitch 等,都可以根据需要单独升级。

重要提示:Python 2 和 Python 3 Mininet

Mininet 2.3.0 和更高版本支持 Python 3 和 Python 2。

官方 Mininet VM 镜像包括 Python 2 和 Python 3 Mininet。

从源代码安装时,您可以选择要安装的版本。 例如:

sudo PYTHON=python2 mininet/util/install.sh -n   # install Python 2 Mininet
sudo PYTHON=python3 mininet/util/install.sh -n   # install Python 3 Mininet

您可以并排安装两个版本(就像在 Mininet VM 映像中所做的那样)并选择要用于 mn 的 Python 版本:

sudo python2 `which mn` ...
sudo python3 `which mn` ...

要找出 mn 默认使用的 Python 版本:

echo py sys.version | sudo mn -v output

请注意,Python 3(不幸的是!)通常不向后兼容旧版 Python 2 代码,因此较旧的 Python 2 Mininet 脚本可能需要进行一些更改才能与 Python 3 一起使用。由于 CPython 项目和大多数操作系统不再正式支持 Python 2 版本,我们建议迁移到 Python 3(尽管这可能很痛苦。)

如果您在 Mininet 中遇到 Python 3 不兼容问题,请在 GitHub 上提交问题。

Mininet 示例工作流程

Mininet 使您能够快速创建、交互、自定义和共享软件定义的网络原型,并提供在硬件上运行的顺畅路径。 此页面说明了基本的 Mininet 工作流程,Mininet 演练、OpenFlow 教程和 Mininet 文档中提供了许多其他详细信息。

创建网络

您可以使用单个命令创建网络。 例如,

sudo mn --switch ovs --controller ref --topo tree,depth=2,fanout=8 --test pingall

使用 OpenFlow/Stanford 参考控制器控制下的 Open vSwitch 交换机启动具有深度 2 和扇出 8 的树形拓扑(即 64 台主机连接到 9 台交换机)的网络,并运行 pingall 测试以检查每对节点之间的连接性。

与网络交互

Mininet 的 CLI 允许您从单个控制台控制和管理整个虚拟网络。 例如,CLI 命令

mininet> h2 ping h3

告诉主机 h2 ping 主机 h3 的 IP 地址。

任何可用的 Linux 命令或程序都可以在任何虚拟主机上运行。 您可以轻松地在一台主机上启动 Web 服务器并从另一台主机发出 HTTP 请求:

mininet> h2 python -m SimpleHTTPServer 80 >& /tmp/http.log &
mininet> h3 wget -O - h2

自定义网络

Mininet 的 API 允许您使用几行 Python 创建自定义网络。 例如,以下脚本

from mininet.net import Mininet
from mininet.topolib import TreeTopo
tree4 = TreeTopo(depth=2,fanout=2)
net = Mininet(topo=tree4)
net.start()
h1, h4  = net.hosts[0], net.hosts[3]
print h1.cmd('ping -c1 %s' % h4.IP())
net.stop()

创建一个小型网络(4 台主机,3 台交换机),并从另一台主机 ping 通(使用当前版本大约需要 4 秒。)
Mininet 发行版包括几个基于文本和图形(见上文)的应用程序,我们希望这些应用程序具有指导意义,并激发您为自己的网络设计创建酷炫且有用的应用程序。

共享网络

Mininet 以虚拟机 (VM) 映像的形式分发,其中预装了所有依赖项,可在 VMware、Xen 和 VirtualBox 等常见虚拟机监视器上运行。 这为分发提供了方便的容器; 一旦开发了原型,VM 映像就可以分发给其他人运行、检查和修改。 一个完整的、压缩的 Mininet VM 大约为 1GB。 (Mininet 也可以本地安装 - Ubuntu 上的 apt-get install mininet。)如果您正在阅读关于软件定义网络的精彩 SIGCOMM(或其他)论文,您是否希望能够单击、下载和运行 系统的活生生的例子? 如果是这样,请考虑开发您自己的系统的 Mininet 版本,您可以与他人共享!

在硬件上运行

一旦设计在 Mininet 上运行,它就可以部署在硬件上以供实际使用、测试和测量。

为了在第一次尝试时成功移植到硬件,每个 Mininet 模拟组件都必须以与其对应的物理组件相同的方式运行。 虚拟拓扑应与物理拓扑匹配; 虚拟以太网对必须替换为链路级以太网连接。 模拟为进程的主机应替换为具有自己操作系统映像的主机。 此外,每个模拟的 OpenFlow 交换机都应替换为配置为指向控制器的物理交换机。 然而,控制器不需要改变。 当 Mininet 运行时,控制器“看到”交换机的物理网络,通过具有明确定义的状态语义的接口使之成为可能。


(翻译自Mininet官网,持续完善中)

 类似资料: