Mininet学习指南
State Key Laboratory of Networking and Switching Technology
Future Networking Laboratory
Cheng Li
Mininet
An Instant Virtual Network on your Laptop.
Mininet
Mininet creates a realistic virtual network, running real kernel, switch and application code, on a single
machine (VM, cloud or native), in seconds, with a single command:
http://mininet.org/
Mininet & OpenVSwitch
Mininet在/mininet/node.py中定义了Node、OVSSwitch和Controller等重要的类。在OVSSwitch类中,通过使用命令OVS
的命令创建交换机从而得到一个OVS实例。
Mininet创建的host,switch等实例实际上是运行在不同namespace下的某个进程。默认情况下Host运行在自己的
namespace中,交换节点运行在root namespace中。
Mininet
Host OpenVSwitch OpenVSwitch
OpenVSwitch
Open vSwitch is a production
quality, multilayer virtual
switch licensed under the
open source Apache
2.0 license. It is designed to
enable massive network
automation through
programmatic extension,
while still supporting standard
management interfaces and
protocols (e.g. NetFlow,
sFlow, IPFIX, RSPAN, CLI,
LACP, 802.1ag).
Installation
• Mininet VM Installation(easy, recommended)
http://mininet.org/download/#option-1-mininet-vm-installation-easy-recommended
• Native Installation form Source
http://mininet.org/download/#option-2-native-installation-from-source
http://www.muzixing.com/pages/2014/11/02/openvswitch230-and-mininet-install.html
• Installation form Packages
http://mininet.org/download/#option-3-installation-from-packages
Getting Started
Startup Options
● Help: sudo mn [-h] 通过-h可以查看到帮助信息。
● Connect to remote controller: sudo mn --controller=remote,ip=127.0.0.1,port=6633 端口可以省略,默认值是
6633,可指定。
● Topology: sudo mn --topo=
○ tree,n,m 第一个参数为深度,第二个位扇出系数。可以写成--tree,depth=2,fanout=8
○ single, n:单个交换机,n个交换机
○ liner, n: 线性拓扑,n个交换机
● Test:--test [pingall/pingpair..]
● Link:--link=tc, bw=10M, delay=10ms,loss=5%
● Custom Topo:--custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo
● ID=MAC: sudo mn --mac
● Xterm: sudo mn -x 启动xterm到每一个host和switch
● Switch type: sudo mn --switch ovsk/user,
● Clear: sudo mn -c
Getting Started
Command-Line Interface
● Help: help 查看帮助信息
● Exit: exit 退出mininet
● Python: py “hello” / py dir(s1) py hello.py 运行python文件:
● Link: link s1 h1 down/up 参数分别为link两端网元。
● Xterm: xterm s1/h1 xterm到某一个主机或交换机
● Node: nodes 查看节点
● Dump:dump 查看所有节点信息
● 节点命令:
○ s1 ifconfig
○ s1 ps -a
○ h1 arp -s
○ h1 ping -c 10 h2
● Iperf: iperf h1 h2 启用iperf功能
● Ping: h1 ping h2 pingall/pingpair 发送ping消息
● HTTPSERVER : h1 python -m SimpleHTTPServer 80 &
● HTTPCLIENT: h2 wget -O -h1
Custom Topology
Custom Topology
● 自定义拓扑脚本
o 完成mininet搭建脚本,并通过sudo mn --custom <file path>/yourtopo.py --
topo=mytopo mytopo是在脚本里定义的一个类型。
● 自定义拓扑程序
o 将mininet相关文件import
o 利用mininet的相关接口,创建拓扑
o 在python文件中,创建net类,并在使用net.start()函数运行拓扑。
o 直接python mytopo.py 运行topo文件即可运行对应 拓扑。
Custom Topology
自定义拓扑脚本
import Topo类用于派生Mytopo类
topo类中包含构建网络的函数
● addHost(“host name”): 添加主机
● addSwitch(“sw name”): 添加交换机
● addLink(node,node,port,port): 添加链
路
● ...
在topos中添加‘mytopo’, 值为MyTopo()类。
在启动mininet时将参数配置为本文件即可。
Custom Topology
自定义拓扑程序
import mininet对应的文件中相关类
继承Topo类创建Fattree类
● __init__函数初始化拓扑
● createTopo函数创建拓扑
● createLink函数用于添加链路
● 其他函数...
全局的createTopo函数用于创建拓扑:
● 创建Fattree类的对象
● 调用对应函数,创建拓扑
● 创建Mininet类的对象net并进行配置
● 调用net.start()函数启动net对象。
● 运行CLI(net),解析命令行
主函数用于调用全局的createTopo函数
在topos中添加‘mytopo’, 值为MyTopo()类。
在启动mininet时将参数配置为本文件即可。
Connect to Internet
Internet
Mininet
Host HostOVS
1010111001..
Connect to Internet
● NAT
Mininet中有nat.py示例,可参考:
https://github.com/mininet/mininet/blob/master/examples/nat.py
● Mininet与外部host通信
通过将网卡添加到ovs上,实现数据转发。如果虚拟机与外界为bridge,则需要设置网卡为nat,若
虚拟机本身为nat连接,则可以不进行设置。Intf的使用方法可参考examples/hwintf.py
http://www.muzixing.com/pages/2014/03/25/mininetyu-wai-bu-hosttong-xin.html
● Mininet host talking to Internet/the NCTUNS hosts
和Mininet与外部host通信方案相同
http://www.osedu.net/article/research/software-defined-network/2014-01-04/455.html
http://csie.nqu.edu.tw/smallko/sdn/MininetNCTUNS.htm
Mininet’s code
mininet
bin custom debian doc examples mininet util
bin/mn
Simple use class names as option help.
该脚本定义了一个 MininetRunner 类,用来表示模拟网络的主程序。主要过程是创建一个 MininetRunner() 实例,依次解
析传入参数,进行初始化后开启网络。整体过程如下图所示。
Ref:http://yeasy.gitbooks.io/mininet_book/content/runtime_and_example/mn.html
examples
These examples are intended to help you get started using Mininet's Python API.
hwintf.py:
This example shows how to add an interface (for example a real hardware interface) to a network after the network is
created.
nat.py:
This example shows how to connect a Mininet network to the Internet using NAT. It also answers the eternal question
"why can't I ping google.com?"
...
mininet/mininet
cli.py: 用于定义命令解析
link.py:定义了class link
log.py:log相关
net.py:定义了class net,是mininet的核心类
node.py:定义了class node, 是host,sw等类的父
类
topo.py:定义了class topo,用于创建topo
util.py:常用方法定义
mininet/cli
cli.py文件完成了参数解
析相关函数定义。当
mininet捕捉到输入的指
令时,使用对应的解析函
数则可以解析出正确参数
并执行函数。
命令类型解析在mn文件
下定义。
mininet/topo
mininet/topo
class topo中定义的:
• addNode,
• addHost,
• addSwitch,
• addLink,
• addPort
等函数会在自定义拓扑时频繁使用。
topo模块定义简单拓扑:
• SingleSwitchTopo
• SingleSwitchReversedTopo
• LinearTopo
mininet/node
Mininet’s extension
在net.py的
Mininet类中添
加函数实现
net.py cli.py mn install.sh
在cli.py的CLI类
中增加对应的
do_function函数
在bin/mn文件
中添加对应声明
./install.sh -n
重新安装mininet
Mininet’s extension
1:在net.py的Mininet类
中添加函数/方法,即拓
展功能的执行实体。
例:iperfMulti功能
iperfmulti是随机选取多个
S/C对进行打流。函数调
用了新定义的iperf_single
函数。
注:iperf_single函数细节
未展示
Mininet’s extension
2:在cli.py的CLI类中添
加对应参数解析函数,用
于解析输入参数,并调用
mininet类中对应执行实
体。
例:iperfMulti功能
iperfmulti函数输入参数若
为1个,则该参数为带宽,
若2个,则第一个为带宽,
第二个为打流周期。否则
报错。
Mininet’s extension
3:在bin/mn的TESTS列表
和ALTSPELLING字典中添
加对应的元素。用于识别
CLI的类型。
例:iperfMulti功能
在mininet中声明iperfmulti语
句是一个命令。且执行的函
数名字为do_iperfmulti函数。
注:在解析名字时,名字对
应的就是CLI中
do_functionname函数。
Mininet’s extension
4:重新安装mininet:
进入mininet/util目录,输入一下命
令重新编译安装mininet code。
例:iperfmulti
安装完成之后,启动mininet,可
以使用新定义的命令,如:
mininet> iperfmulti 10M,20
命令含义为在所有的主机中随机
选择C/S对进行打流,打流速率为
10Mbits/s,打流时长为20s.
Mininet’s extension
简单示例:print命令的添加
在mininet中输入print命令,可打
印对应信息。若print之后无参数,
则打印默认信息”talk is cheap,
show me your code”, 若携带参数,
则直接打印参数,如”No, a coder
need to learn speaking skill.”
Mininet & Sflow
Sflow是一个网络流量监控软件。
http://www.sflow.org/
Mininet & Sflow
http://www.sdnlab.com/3760.html
http://www.muzixing.com/pages/2014/11/21/sflowru-men-chu-she.html
What’s more...
links
http://mininet.org/
http://mininet.org/api/annotated.html
https://github.com/mininet/mininet/wiki/Introduction-to-Mininet
http://www.sdnlab.com/?searchType=playlist&s=mininet&x=0&y=0
http://www.muzixing.com/pages/2015/02/22/fattree-topo-and-iperfmulti-function-in-mininet.html
http://www.muzixing.com/search.html?q=mininet
http://man7.org/linux/man-pages/man7/namespaces.7.html
http://yeasy.gitbooks.io/mininet_book/content/runtime_and_example/mn.html
http://csie.nqu.edu.tw/smallko/sdn/sdn.htm
https://mailman.stanford.edu/mailman/listinfo/mininet-discuss
http://archive.openflow.org/wk/index.php/OpenFlow_Tutorial
http://sdnhub.cn/index.php/category/mininet/mininet-introduction/
http://www.ibm.com/developerworks/cn/cloud/library/1404_luojun_sdnmininet/index.html
http://www.sflow.org/
http://openvswitch.org/
Learn Mininet by Google
Q&A
Thank you
MUZIXING.COM
State Key Laboratory of Networking and Switching Technology
Future Networking Laboratory
Cheng Li

Mininet Learning Guide(Mininet 学习指南)

Editor's Notes

  • #2 outline: 什么是Mininet 如何安装mininet 如何启动mininet -启动参数 CLI介绍 自定义拓扑 与Internet通信 源码分析。 拓展mininet Part 1: Everyday Mininet Usage Display Startup Options Start Wireshark Interact with Hosts and Switches Test connectivity between hosts Run a simple web server and client Cleanup Part 2: Advanced Startup Options Run a Regression Test Changing Topology Size and Type Link variations Adjustable Verbosity Custom Topologies ID = MAC XTerm Display Other Switch Types Mininet Benchmark Everything in its own Namespace (user switch only) Part 3: Mininet Command-Line Interface (CLI) Commands Display Options Python Interpreter Link Up/Down XTerm Display Part 4: Python API Examples SSH daemon per host Part 5: Walkthrough Complete! Next Steps to mastering Mininet Appendix: Supplementary Information Using a Remote Controller NOX Classic http://csie.nqu.edu.tw/smallko/sdn/sdn.htm Sflow
  • #4 Mninet是一个网络虚拟程序,可以快速得在你的电脑上模拟出网络环境。 仅仅需要一条命令就可以启动一个网络,而且具有真实的转发流程,真实的主机。运行mininet却只需要一个机器就可以。 mininet的官网非常有用,大家可以在官网上找到很多游泳的信息。
  • #5 http://man7.org/linux/man-pages/man7/namespaces.7.html
  • #6 http://openvswitch.org/
  • #7 http://mininet.org/download/ 安装过程非常简单,相关链接已经放在PPT中,后续会分享出来。
  • #8 介绍其他启动参数
  • #9 介绍其他启动参数
  • #11 介绍其他启动参数
  • #12 入门:
  • #13 其他函数为截图方便,已删除
  • #14 mininet与外部通信并不难,课下同学们可以自行研究。
  • #15 mininet与外部通信并不难,课下同学们可以自行研究。
  • #16 看代码刚开始我是拒绝的,后来才发现好简单,就顺便看完了。(美化细节)
  • #17 Ref.http: //yeasy.gitbooks.io/mininet_book/content/runtime_and_example/mn.html
  • #18 举例提一下,不做详细介绍
  • #23 http://mininet.org/api/classmininet_1_1node_1_1Node.html api:http://mininet.org/api/annotated.html
  • #24 (图 + 动画)看代码刚开始我是拒绝的,后来才发现好简单,就顺便看完了。 在mininet中增加新功能其实不难。主要分为3步: 修改net.py增加函数实体; 修改cli.py,增加对应do_function函数,用于命令解析; 修改mn函数,用于声明命令。
  • #25 (图 + 动画)看代码刚开始我是拒绝的,后来才发现好简单,就顺便看完了。 在mininet中增加新功能其实不难。主要分为3步: 修改net.py增加函数实体; 修改cli.py,增加对应do_function函数,用于命令解析; 修改mn函数,用于声明命令。
  • #26 (图 + 动画)看代码刚开始我是拒绝的,后来才发现好简单,就顺便看完了。 在mininet中增加新功能其实不难。主要分为3步: 修改net.py增加函数实体; 修改cli.py,增加对应do_function函数,用于命令解析; 修改mn函数,用于声明命令。
  • #27 (图 + 动画)看代码刚开始我是拒绝的,后来才发现好简单,就顺便看完了。 在mininet中增加新功能其实不难。主要分为3步: 修改net.py增加函数实体; 修改cli.py,增加对应do_function函数,用于命令解析; 修改mn函数,用于声明命令。
  • #28 (图 + 动画)看代码刚开始我是拒绝的,后来才发现好简单,就顺便看完了。 在mininet中增加新功能其实不难。主要分为3步: 修改net.py增加函数实体; 修改cli.py,增加对应do_function函数,用于命令解析; 修改mn函数,用于声明命令。
  • #29 (图 + 动画)看代码刚开始我是拒绝的,后来才发现好简单,就顺便看完了。 在mininet中增加新功能其实不难。主要分为3步: 修改net.py增加函数实体; 修改cli.py,增加对应do_function函数,用于命令解析; 修改mn函数,用于声明命令。
  • #31 http://www.sdnlab.com/11079.html
  • #32 http://www.sdnlab.com/11079.html
  • #33 http://www.sdnlab.com/11079.html