我的安装环境:ubuntu 18.04
Mininet 安装
1. 安装git
sudo apt-get install git
2. 获取mininet.git
git clone http://github.com/mininet/mininet.git
3. 进入util文件夹(mininet文件夹默认在root文件夹下)
cd mininet/util
4. 自定义安装(需要10分钟左右)
- 默认安装全部特性
./install.sh -a
- 自定义安装
举例如下:此语句为安装支持OpenFlow 1.3版本协议、同时安装Open vswitch 组件的语句。
./install.sh -n3v
其余自定义安装方式,可参照下表所示参数进行安装。
参数 | 功能 | 参数 | 功能 |
---|---|---|---|
-a | 默认的安装全部特性 | -p | 安装POX控制器 |
-b | 安装Benchmark:oflops | -r | 删除已存在的Open vSwitch包 |
-c | 安装核心之后清空已有配置 | -s | 依赖源码/构建树存储位置 |
-d | 删除某些敏感文件 | -t | 完成其他Mininet虚拟机的创建任务 |
-e | 安装Mininet开发依赖 | -v | 安装Open vswitch |
-f | 安装OpenFlow协议支持模块 | -V | 安装指定版本的Open vswitch |
-h | 打印帮助信息 | -w | 安装Wireshark的OpenFlow解析器 |
-i | 安装Indigo Virtual Switch | -y | 安装Ryu控制器 |
-k | 安装新的内核 | -x | 安装NOX Classic控制器 |
-m | 从源目录安装Open Switch内核模块 | -0 | (default) 安装OpenFlow 1.0版本 |
-n | 安装Mininet依赖和核心文件 | -3 | 安装OpenFlow 1.3版本 |
5. 测试安装是否成功
sudo mn --test pingall
如下图所示为安装成功
![](https://i-blog.csdnimg.cn/blog_migrate/ee2777e7915ea17aad6b7b77d201046b.png)
Mininet 使用教程
1. sudo mn 语句可以自动建立一个简单的拓扑网络,其结构为2个主机连接在一个交换机上。
sudo mn
2. 运行上述语句后进入到命令行界面,常用的命令如下表所示:
命令 | 功能 | 命令 | 功能 |
---|---|---|---|
help | 打印帮助信息 | nodes | 查看全部节点信息 |
xterm | 打开xterm窗口 | net | 查看网络拓扑信息 |
ping | h1 ping h2 ,测试连通性 | dump | 输出节点信息 |
iperf | 指定节点间TCP测试 | iperdudp | 指定节点间UDP测试,可指定发送速率 |
py | 运行python语句 | sh | 执行shell脚本 |
host cmd | 在主机中执行命令,例:h1 ifconfig | exit/quit | 退出Mininet |
以部分命令为例,具体运行结果如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/2b94c5542e8d32f82fc00d2f51e3af84.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a8249d52e63e7f52d00b41cc2243bfd9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8073a21ff41a8485cd77e78d1c3453bb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3f15a2053979279918e1a0433a5235bf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/33833c7183aece3ac51af306eb6d0183.png)
3. Mininet中自带多种拓扑结构,以三种常用拓扑为例。(图中s表示交换机,h表示主机)
(1)树形拓扑,后面的参数“2”表示2层交换机,“3”表示每个节点连接的下一层的节点数目。
sudo mn --topo=tree,2,3
![](https://i-blog.csdnimg.cn/blog_migrate/400cd6cfd9672147b8ca140295ab4940.png)
(2)线性拓扑
sudo mn --topo=linear,5
![](https://i-blog.csdnimg.cn/blog_migrate/a1bc81178e06bf1c83f22a07b318a31e.png)
(3)单一交换机拓扑
sudo mn --topo=single,5
![](https://i-blog.csdnimg.cn/blog_migrate/a83870ade85a5db429086315688d9039.png)
4. Mininet中使用可视化编辑器Miniedit进行拓扑建立。
进入到mininet/examples中,运行miniedit.py
cd mininet/examples/
sudo ./miniedit.py
![](https://i-blog.csdnimg.cn/blog_migrate/66347a1cd43253602bc6b4cd24a89751.png)
如上图所示,出现可视化页面。可通过添加交换机,控制器,主机进行网络的建立。在相应设备上右键,可以进行配置。
按照下图所示构建网络,并配置控制器。
![](https://i-blog.csdnimg.cn/blog_migrate/b1e4824965d63464e7e551bfc0cf8efd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1f81cf16d610faf9a8412edc633d9cfb.png)
在Edit->perference页面进行配置,勾选start CLI选项,可以使得网络在运行时打开命令行,即"mininet> "页面。
![](https://i-blog.csdnimg.cn/blog_migrate/496957e822ce03d5056bb75a72aa9c05.png)
点击run,运行此网络,可以发现进入到了命令行界面。
![](https://i-blog.csdnimg.cn/blog_migrate/1ab3a97d018a8d8db3bfd5ac69e41562.png)
测试h1,h2是否连通,发现可以连通,网络建立成功。
![](https://i-blog.csdnimg.cn/blog_migrate/431b91adccec9613400bfe8234bf0172.png)
进入 File -> Export Level 2 Script可以将生成的网络拓扑保存为python文件,在之后想要使用此拓扑时,可以选择直接运行对应python文件,即“sudo python 文件名.py” 或者“sudo ./文件名.py”。
![](https://i-blog.csdnimg.cn/blog_migrate/681771c35ff7eac253cfbca1bffada96.png)
5. 使用python语言构建拓扑
可以通过miniedit.py将构建的拓扑导出为python文件,观察example文件中已有的python例子和miniedit导出的文件,其实也可以自己编写python文件构建拓扑。
以下为一个用python语言编写的可以运行的拓扑网络。
#!/usr/bin/python
from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call
def myNetwork():
net = Mininet( topo=None,
build=False,
ipBase='10.0.0.0/8')
info( '*** Adding controller\n' )
c0=net.addController(name='c0',
controller=OVSController,
ip='127.0.0.1',
protocol='tcp',
port=6633)
info( '*** Add switches\n')
s1 = net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001')
info( '*** Add hosts\n')
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
info( '*** Add links\n')
net.addLink(h1, s1)
net.addLink(h2, s1)
info( '*** Starting network\n')
net.start()
info( '*** Starting controllers\n')
#for controller in net.controllers:
c0.start()
info( '*** Starting switches\n')
net.get('s1').start([c0])
info( '*** Post configure switches and hosts\n')
CLI(net)
if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()