mininet 系列文章链接归类:
【mininet 0x01】mininet环境搭建
【mininet 0x02】如何使用mn工具来操作mininet
【mininet 0x03】如何使用Python API来操作mininet
【mininet 0x04】使用ryu作为mininet的controller完成HUB功能
【mininet 0x05】使用ryu作为mininet的controller完成L2Switch功能
文章目录
前言
安装好了mininet
,我们就要尝试使用一下mininet
了
一、mininet mn工具初体验
mininet
内置了一个方便的工具 mn
sudo mn
输入mn
后,mininet
自动帮助创建了两个节点,并让它们与一台switch
相连:
如图所示:
ovs
中的状态如下:
创建了 三个 Port: s1, s1-eth1, s1-eth2
即如下部分信息:
Port s1
Interface s1
type: internal
Port s1-eth2
Interface s1-eth2
Port s1-eth1
Interface s1-eth1
在ifconfig
中的消息如下:
创建了 s1, s1-eth1, s1-eth2
二、mn 常用命令
mn
启动之后的一些常用命令:
序号 | 命令 | 功能 |
---|---|---|
0 | help | 打印帮助信息 |
1 | nodes | 查看所有节点信息 |
2 | net | 查看网络拓扑信息 |
3 | dump | 输出节点信息 |
4 | h1 ping h2 | 测试主机间的连通性 |
5 | iperf | TCP打流 |
6 | iperfudp | UDP打流 |
7 | xterm | 打开xterm窗口 |
8 | py | 运行py |
9 | sh | 运行shell |
10 | host cmd | 在主机内执行命令,如h1 ifconfig |
11 | exit/quit | 退出Mininet |
三、创建一些不一样的拓扑
mn
工具内置了--topo
的参数供生成不同类型的拓扑,下面是mn工具 help的表述:
--topo=TOPO linear|minimal|reversed|single|torus|tree[,param=value
...] linear=LinearTopo torus=TorusTopo tree=TreeTopo
single=SingleSwitchTopo
下图是mn工具的源码关于内置拓扑的部分:
使用表格总结一下:
序号 | 拓扑类型名称 | 含义 |
---|---|---|
0 | linear | 指直线,一个交换机配一个主机,而主机和交换机的个数都可以任意指定。拓扑呈直线型。 |
1 | minimal | 指最小的,是默认的mininet拓扑,默认一个 交换机挂两个主机,不跟参数。 |
2 | reversed | 指颠倒、反的,这种类型的拓扑与single的拓扑一致。 |
3 | single | 指单个,这种类型的拓扑只有一个交换机,而主机的个数可以任意指定。拓扑呈星型。 |
4 | torus | 较为复杂,适用于需要非常稳定,高冗余量的拓扑,具体解释看下方 |
5 | tree | 树,这种类型的拓扑显然呈数状,交换机呈树杈状分散开来,最下面一层的交换机挂两个主机。tree后面的参数是指树的个数。 |
实际效果
单纯看上方的表格,大家肯定云里雾里,所以画一下图,供大家理解:
0、linear
sudo mn --topo=linear,3
1、minimal
sudo mn --topo=minimal
2、reversed
sudo mn --topo=reversed,3
3、single
sudo mn --topo=single,3
4、torus
环形拓扑图的创建选项要用到参数n
,m
(n
,m
均要求大于等于 3),生成 n*m
个 openflow 交换机,每个交换机
连接一台主机,交换机之间
保持与另外 4
台交换机连接,生成不同于完全网络的双向环形网络结构
,主要为网络结构复杂,稳定性要求非常高的网络做冗余考虑。构建3*3的环形拓扑结构图的构造命令如下
mn --topo=torus,3,3
此图是从openDayLight截取:
5、tree
sudo mn --topo=tree,3
四、进行抓包分析流量走向
使用 h1 ping h2
,
在s1-eth1
上进行抓包
s1-eth2
上进行抓包:
使用 ovs-ofctl dump-flows s1 -O openflow13
查看流表:
➜ ~ ovs-ofctl dump-flows s1 -O openflow13
cookie=0x0, duration=100.609s, table=0, n_packets=77, n_bytes=7546, idle_timeout=60, reset_counts priority=65535,icmp,in_port="s1-eth2",vlan_tci=0x0000/0x1fff,dl_src=ee:3c:42:32:f6:f9,dl_dst=7a:2b:18:a4:53:f6,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,icmp_type=0,icmp_code=0 actions=output:"s1-eth1"
cookie=0x0, duration=99.609s, table=0, n_packets=77, n_bytes=7546, idle_timeout=60, reset_counts priority=65535,icmp,in_port="s1-eth1",vlan_tci=0x0000/0x1fff,dl_src=7a:2b:18:a4:53:f6,dl_dst=ee:3c:42:32:f6:f9,nw_src=10.0.0.1,nw_dst=10.0.0.2,nw_tos=0,icmp_type=8,icmp_code=0 actions=output:"s1-eth2"
cookie=0x0, duration=95.475s, table=0, n_packets=2, n_bytes=84, idle_timeout=60, reset_counts priority=65535,arp,in_port="s1-eth2",vlan_tci=0x0000/0x1fff,dl_src=ee:3c:42:32:f6:f9,dl_dst=7a:2b:18:a4:53:f6,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=1 actions=output:"s1-eth1"
cookie=0x0, duration=95.475s, table=0, n_packets=2, n_bytes=84, idle_timeout=60, reset_counts priority=65535,arp,in_port="s1-eth1",vlan_tci=0x0000/0x1fff,dl_src=7a:2b:18:a4:53:f6,dl_dst=ee:3c:42:32:f6:f9,arp_spa=10.0.0.1,arp_tpa=10.0.0.2,arp_op=1 actions=output:"s1-eth2"
cookie=0x0, duration=95.474s, table=0, n_packets=2, n_bytes=84, idle_timeout=60, reset_counts priority=65535,arp,in_port="s1-eth1",vlan_tci=0x0000/0x1fff,dl_src=7a:2b:18:a4:53:f6,dl_dst=ee:3c:42:32:f6:f9,arp_spa=10.0.0.1,arp_tpa=10.0.0.2,arp_op=2 actions=output:"s1-eth2"
cookie=0x0, duration=95.474s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, reset_counts priority=65535,arp,in_port="s1-eth2",vlan_tci=0x0000/0x1fff,dl_src=ee:3c:42:32:f6:f9,dl_dst=7a:2b:18:a4:53:f6,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=2 actions=output:"s1-eth1"
此处发现了一个有趣的现象,我在 ping
的过程中去dump流表,发现只有ip相关的流表(上表中0&1条流表)下发,关闭ping之后,再去dump流表,又多出了一些arp相关的流表,结合wireshark
的抓包记录,确实是这样的一个现象
此处留个坑,后面分析一下mininet
的源码,了解一下h1 ping h2
这个命令的具体实现。
五、通信原理:
h1
发送信息给s1
,s1
会上报给控制器
,由控制器
对数据进行处理,控制器
给交换机
下发流表
。相关的数据根据流表将数据包发送出去。当数据包到达s2
的时候,s2
也会给控制器
上报一个消息,这时候控制器
也会给s2
下发流表数据
总结
以上即为mininet
工具mn
的使用,以及简单的mininet内部通信原理介绍
参考
http://mininet.org/walkthrough/#display-startup-options
https://www.wi1s0n030.top/archives/69
https://www.jianshu.com/p/31511e691c65