1、是什么:进程虚拟化网络仿真工具
2、具有拓扑感知和OpenFlow感知的CLI,用于调试或运行网络范围内的测试
3、提供用于网络创建和实验的可扩展Python API
4、只能安装在Linux
5、远程虚拟机需要将两边防火墙关闭、开启SSH服务
6、源代码安装
源代码安装Mininet需要高版本ubuntu
获取源代码:git clone http://github.com/mininet/mininet.git
mininet/util/install.sh -h选择参数进行安装
mininet/util/install.sh -n3V 2.5.0
7、测试Mininet是否安装成功
mn --test pingall 测试mininet网络设备连通性
8、删除Mininet、ovs版本痕迹方法
sudo rm -rf /usr/local/bin/mn
sudo rm -rf /usr/local/bin/mnexec
sudo rm -rf /usr/local/lib/python*//mininet
sudo rm -rf /usr/local/bin/ovs-
sudo rm -rf /usr/local/sbin/ovs-*
9、Mininet文件结构
mininet
bin
mn(主运行文件,应用Python程序编写,定义了MininetRunner类,执行sudo mn即调用本程序,是模拟网络的主程序,为整个测试创建基础平台)
util(放置辅助文件,包括安装脚本,文档辅助生成等)
vm
Openflow-patchs
build
debian
source
mininet(核心代码都在mininet子目录)
test
examples(含有很多案例,包括miniedit可视化)
test
custom(放置自定义的Python文件,用来自定义拓扑)
10、Mininet命令图谱
Mininet
网络构建启动参数
–topo
–custom
–switch
–controller
–mac
…
内部交互命令
–dump
–net
–nodes
–links
–dpctl
–iperf
…
外部运行参数
-c 清除配置信息
-h 帮助
11、–topo
单一拓扑sudo mn --topo=single,3
线形拓扑sudo mn --topo=linear,4
树形拓扑sudo mn --topo=tree,depth=2(交换机深度),fanout=2(广度)
自定义拓扑(custom)拓扑,Python编写文件file.py,执行此脚本即可创建定义的拓扑,–custom与–topo联用
sudo mn --custom file.py(需要写绝对路径) --topo mytopo(是file.py文件编写的一个类)
12、–switch 定义mininet要使用的交换机,默认使用OVSK,即OpenVSwitch交换机
ivs——ovsk
lxbr——内核态
user——用户态
ovsbr
13、–controller 定义要使用的控制器,如果没有指定则使用mininet中默认的控制器
连接远程控制器,可以指定存在于本机或者与之相连通设备上的控制器
指定远程控制器方法:sudo mn --controller=remote,–ip=[controller IP],–port=[port]
14、–mac 自动设置设备的mac地址
让MAC地址易读,即设置交换机的MAC、主机MAC及IP地址从小到大排序,且设置简单唯一,不仅让机器容易获取,也容易让肉眼很容易识别其ID
sudo mn --topo=tree,depth=2,fanout=2,–mac
15、内部交换命令,查看并验证网络系统的链路健壮性
16、net 查看链路信息
17、nodes 查看网络节点
18、links 查看链路健壮性
19、pingall 查看网络连通性
20、常用内部交互命令(设备查看)
help 显示一系列命令帮助信息
dump 节点信息
intfs 网络接口信息
nodes 节点信息
net 显示链路信息
links 链路健壮性信息
pingpair 只验证前两个host连通性
pingall 验证所有主机间通信
21、常用内部交互命令(设备操作)
iperf 两节点间进行iperftcp带宽测试 iperf h1 h2
iperfudp 两节点间进行iperfudp带宽测试 iperfudp bw h1 h2
link 禁用或开始节点间链路 link s1 s2 up
dpctl 所有交换机上增删改查流表 dpctl dump-flows
xterm 节点开启xterm进入可视化操作界面 xterm h1
py 执行Python表达式 py net.addSwitch(“s3”)
22、迷你网络添加一台设备操作
py net.addHost(‘h3’) 添加主机h3
py net.addLink(s1,net.get(‘h3’)) 添加链路
py s1.attach(‘s1-eth3’) 交换机s1添加端口
py net.get(‘h3’).cmd(‘ifconfig h3-eth0 10.3’) 主机配置IP地址
dump
h1 ping h3 主机互ping,用于控制器发现网络拓扑
23、 py help(s1) 查看命令帮助信息
py dir(s1) 更简洁地查看命令信息
py h1.setIP(‘10.0.0.5’,24) 设置IP地址
exit 退出当前迷你网拓扑
24、Mininet可视化–MiniEdit
Mininet 2.2.0+内置miniedit
mininet/examples下提供miniedit.py脚本,执行脚本后显示可视化界面,可自定义拓扑及配置属性
25、启动miniedit
cd mininet/examples
sudo ./miniedit.py
注意:需要在桌面版系统下或支持X11的情况下使用
Linux桌面版系统下可以直接执行,远程使用Mininet虚拟机需要使用Xmanager或Xming
26、miniedit自定义拓扑,设置设备信息
27、运行拓扑并生成拓扑脚本
保存脚本后要使用需要给脚本赋权 chmod - R 777 zijian.py
或者直接python运行脚本 python zijian.py
28、open v switch
没有设定安全模式(secure,用于支持openFlow协议)或者没有远程控制器的话支持使用传统二层
29、应用一 Mininet中流表应用实战
掌握Open vSwitch下发流表操作
添加、删除流表命令以及设备通信原理
Mininet创建一个默认树形拓扑并指定Mininet的控制器进行基本的添加、删除流表操作,使网络实现网络通信和不通信
30、自定义拓扑脚本
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
class MyTopo(Topo):
def init(self):
Topo.init(self)
Host1 = self.addHost(‘h1’)
Host2 = self.addHost(‘h2’)
Host3 = self.addHost(‘h3’)
Switch1 = self.addSwitch(‘s1’)
Switch2 = self.addSwitch(‘s2’)
self.addLink(Host1, Switch1)
self.addLink(Host2, Switch1)
self.addLink(Host3, Switch2)
self.addLink(Switch1, Switch2)
# 修改类名
topos = {‘mytopo’: (lambda: MyTopo())}
31、创建拓扑并连接RYU控制器
启动RYU:
cd ~/ryu/ryu/app
ryu-manager simple_switch.py
Mininet远程连接ryu控制器
mn --custom experl.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633
32、查看静态流表 dpctl dump-flows
自定义拓扑之后,如果没有主动去ping全网,openflow交换机是没有学习到流表的(流表为空)
pingall后再次查看流表(流表不为空)
有了流表后交换机根据流表进行数据包的转发使其通信
33、流表操作
dpctl del-flows 删除流表(删除所有流表)
dpctl手动添加流表项(同样可以使h1和h2之间通信)
dpctl add-flow in_port=1,actions=output:2
dpctl add-flow in_port=2,actions=output:1
sh ovs-ofctl del-flows s1 in_port=2(单独删除s1的流表)
dpctl del-flows in_port=1(删除所有符合条件的流表)
dpctl del-flows in_port=2(删除所有符合条件的流表)
34、添加丢弃数据包的流表
dpctl add-flow in_port=2,actions=drop
35、流表具有一定存活时间
36、默认情况下控制器下发的动态流表优先级高于手动添加的静态流表
手动添加静态流表时,可以设置流表的优先级高于动态流表
37、应用二 Mininet模拟多数据中心流量带宽
通过Mininet模拟搭建基于不同数据中心的网络拓扑
网络性能测试工具Iperf,根据实验测试SDN网络性能
通过程序生成真实网络流量
38、数据中心拓扑常叫做胖树拓扑fattree
39、流量随机模型在Mininet中的应用
流量随机模型:主机向在网络中的另一任意主机以等概率发送数据包
需要将批处理流的自定义命令添加到mininet中,在mininet中使用此定义命令实现流量随机模型功能
40、Mininet自定义命令实现
a、功能代码实现 修改mininet/net.py
b、注册命令 修改mininet/cli.py
c、加入到可执行文件中 修改bin/mn
d、重新安装Mininet核心文件 ~/mininet/util/install.sh -n
41、流量随机模型功能代码实现
a、mininet/net.py中定义iperf_single()函数
在两个主机间进行iperf udp测试,并且在server端记录(区别原有命令iperfudp的地方)
b、mininet/net.py中定义iperfmulti()函数
依次为每一台主机随机选择另一台主机作为iperf的服务器端,通过调用iperf_single,自身以客户端按照指定参数发送UDP流
42、流量随机模型注册iperfmulti命令
解析用户输入的iperfmulti命令,net.py定义的iperfmulti命令需要在CLI类中注册
43、流量随机模型在bin/mn中加入iperfmulti可执行命令
将iperfmulti加入到对应的列表中
44、最后重新编译mininet
~/mininet/util/install.sh -n
重新创建网络,输入iperf,可用Tab键补全iperfmulti,从而使用iperfmulti进行流量随机模型测试
45、数据中心拓扑创建(脚本)
# 添加库
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController, CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
# 定义拓扑类
class MyTopo(Topo):
def __init__(self):
Topo.__init__(self)
# 为创建交换机主机定义变量
L1 = 2
L2 = L1 * 2
L3 = L2
c = []
a = []
e = []
# 添加核心交换机
for i in range(L1):
sw = self.addSwitch('c{}'.format(i+1))
c.append(sw)
# 添加聚合交换机
for i in range(L2):
sw = self.addSwitch('a{}'.format(L1+i+1))
a.append(sw)
# 添加边缘交换机
for i in range(L3):
sw = self.addSwitch('e{}'.format(L1+L2+i+1))
e.append(sw)
# 添加核心交换机c与聚合交换机a间的链路
for i in range(L1):
sw1 = c[i]
for sw2 in a[i/2::L1/2]:
self.addLink(sw2, sw1)
# 添加聚合交换机a和边缘交换机e之间的链路
for i in range(0, L2, 2):
for sw1 in a[i:i+2]:
for sw2 in e[i:i+2]:
self.addLink(sw2, sw1)
# 添加主机,并添加主机与边缘交换机间的链路
count = 1
for sw1 in e:
for i in range(2):
host = self.addHost('h{}'.format(count))
self.addLink(sw1, host)
count += 1
# 调用拓扑函数MyTopo()
topos = {'mytopo': {lambda: MyTopo()}}
46、数据中兴拓扑脚本执行
启动Mininet,生成测试拓扑结构
mn --custom /home/sanlab/mininet/custom/fattree.py --topo mytopo --controller=remote,ip=10.0.0.20,port=6633
注:使用的是ryu控制器,监听端口为6633,进入/ryu/ryu/app目录,执行命令:ryu-manager simple_switch_stp.py(需要使用stp功能,因为是环形拓扑,防止广播风暴)
–custom指定自定义拓扑文件
–topo指定加载拓扑的名字
47、数据中心拓扑网络测试
TCP带宽测试
iperf h1 h2 测试两点tcp带宽
UDP带宽测试
iperfmulti 0.025M(设置带宽参数)
48、查看端口号 os-opctl listbridge
49、UDP带宽测试比TCP带宽测试小原因:UDP发包没有TCP大
50、ryu控制器具有界面
51、控制器通过lldp链路发现协议感知拓扑
52、mininet可以模拟多控制器情况
多控制器控制同一台交换机建议使用虚拟化的方式
53、多控制器之间同步信息:通过东西向接口
54、mininet使用的内存命名空间是有限制的
55、https://www.bilibili.com/video/BV11t411g7dV?from=search&seid=9358640801090861250