51Openlab
上Mininet
入门
文章目录
都是来自
51Openlab
上的资料,因为要做有关的毕设,所以需要学习一下。
大多是复制的,但是其中也有我的一些理解和实验的截图
51Openlab
一、Mininet
简介
Mininet
是一个可以在有限资源的普通电脑上快速建立大规模SDN
原型系统的网络仿真工具。该系统由虚拟的终端节点(End-Host
)、OpenFlow
交换机、控制器(也支持远程控制器)组成,这使得它可以模拟真实网络,可对各种设想或网络协议等进行开发验证。目前Mininet
已经作为官方的演示平台对各个版本的OpenFlow
协议进行演示和测试。
Mininet
是基于Linux Container
这一内核虚拟化技术开发出的虚拟化平台,其实现虚拟化主要是用到了Linux
内核的Network namespace
资源隔离机制。Linux
的Network namespace
机制可以让每个namespace
拥有独立的网络设备、网络协议栈和端口等。Mininet
正是利用了Linux
这种Network namespace
机制,才可以在一台电脑上创建多台虚拟主机。此外,Mininet
建立的网络拓扑的交换节点可以是Open vSwitch、Linux Bridge
等软件交换机,交换节点之间的链路采用Linux
的veth pair(virtual Ethernet pair)
机制实现,控制器可以部署在网络可达的任意地方。因此,Mininet
可以定制任意灵活的SDN
网络拓扑,为实验用户提供快捷可靠的实验环境。
Mininet
架构按datapath
的运行权限不同,分为kernel datapath
和userspace datapath
两种,其中kernel datapath
把分组转发的逻辑编译进入Linux
内核,效率非常高;userspace datapath
把分组转发逻辑实现为一个应用程序,叫做ofdatapath
,效率虽不及kernel datapath
,但更为灵活,更容易重新编译。
Mininet
的kernel datapath
架构如下图所示,控制器和交换机的网络接口都在root
命名空间中,每个主机都在自己独立的命名空间里,这也就表明每个主机在自己的命名空间中都会有自己独立的虚拟网卡eth0
。控制器就是一个用户进程,它会在loopback
上预留的6633
端口监听来自交换机安全信道的连接。每个交换机对应几个网络接口,比如``s0-eth0、s0-eth1以及一个
ofprotocol`进程,它负责管理和维护同一控制器之间的安全信道。
Mininet
的userspace datapath
架构如下图所示,与kernel datapath
架构不同,网络的每个节点都拥有自己独立的namespace
。因为分组转发逻辑是实现在用户空间,所以多出了一个进程叫ofdatapath
。另外,Mininet
除了支持kernel datapath
和userspace datapath
这两种架构以外,还支持OVS
交换机。OVS
充分利用内核的高效处理能力,它的性能和kernel datapath
相差无几。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HxrG8qxN-1647761749137)(https://www.51openlab.com/site_media/media/course/bc49a3e27fa84c79835ad893864250cf/3/49cd355a-c740-4a42-8b3a-4ab72a163287)]
二、安装Mininet
之前我在自己的虚拟机上安装过
Mininet
,具体可以去看
按着
51Openlab
的实验指导书安装,再执行./install.sh -a
前先更新一下软件:apt-get update
1. 安装完成后的测试
mn --test pingall
三、拓扑构建和命令使用
Mininet
能实现如下功能:
- 为
OpenFlow
应用程序提供一个简单、便宜的网络测试平台- 启用复杂的拓扑测试,无需连接物理网络
- 具有拓扑感知和
OpenFlow
感知的CLI
,用于调试或运行网络范围的测试- 支持任意自定义拓扑,主机数可达
4096
,并包括一组基本的参数化拓扑- 提供用于网络创建和实验的可扩展
Python API
在基于
Mininet
的使用下,可以轻易的在自己的笔记本上测试一个软件定义网络(software-defined Networks
),对基于OpenFlow
、Open vSwitch
的各种协议等进行开发验证,或者验证自己的想法。且所有的代码几乎可以无缝迁移到真实的硬件环境中,在实验室里,一行命令就可以创建一个支持SDN
的任意拓扑的网络结构,并可以灵活的进行相关测试,验证了设计的正确后,可以轻松部署到真实的硬件环境中。
MininetEdit
可视化界面:Mininet 2.2.0+
内置miniedit
。在mininet/examples
下提供miniedit.py
脚本,执行脚本后显示可视化界面,可自定义拓扑及配置属性。
1. 一些命令:
(1)网络构建
-
topo
:用于指定网络拓扑,Mininet
支持创建的网络拓扑为:minimal
、single
、linear
和tree
。 -
minimal
:创建一个交换机和两个主机相连的简单拓扑。默认无—topo
参数的情况下就是这样。其内部实现就是调用了single,2
对应的函数。 -
single,n
:设置一个交换机和n个主机相连的拓扑。 -
linear,n
:创建n个交换机,每个交换机只连接一个主机,并且所有交换机成线型排列。 -
tree,depth=n,fanout=m
:创建深度为n,每层树枝为m的树型拓扑。因此形成的拓扑的交换机个数为(mn-1)/(m-1)
,主机个数为mn
。 -
—custom
:在上述已有拓扑的基础上,Mininet
支持自定义的拓扑,使用一个简单的Python API
即可。—custom
需和—topo
一起使用,如mn —custom file.py —topo mytopo
。
(2)选项
Mininet
常用命令总结:
命令 | 作用 |
---|---|
help |
默认列出所有命令文档,后面加命令名将介绍该命令用法 dump打印节点信息 |
gterm |
给定节点上开启gnome-terminal 注:可能导致mn崩溃 |
xterm |
给定节点上开启xterm |
intfs |
列出所有的网络接口 |
iperf |
两个节点之间进行简单的iPerf TCP测试 |
iperfudp |
两个节点之间用制定带宽UDP进行测试 |
net |
显示网络链接情况 |
noecho |
运行交互式窗口,关闭回应(echoing) |
pingpair |
在前两个主机之间互Ping测试 |
source |
从外部文件中读入命令 |
dpctl |
在所有交换机上用dptcl执行相关命令,本地为tcp 127.0.0.1:6634 |
link |
禁用或启用两个节点之间的链路 |
nodes |
列出所有的节点信息 |
pingall |
所有主机节点之间互Ping |
py |
执行Python表达式 |
sh |
运行外部shell命令 |
quit/exit |
退出 |
2. 创建拓扑实操
(1)单一拓扑
sudo mn --topo=single,3
单一(Single
)拓扑指整个网络拓扑中交换机有且只有一个,交换机可以下挂一个或多个主机,本例创建了一个交换机、3个主机,3个主机都下挂在一个交换机下。