SDN实验-Mininet常用命令和Mininet创建网络拓扑
SDN实验-Mininet常用命令和Mininet创建网络拓扑
- Mininet是一个开源的网络仿真器,是一个轻量级软件定义网络和测试平台,支持OpenFlow、
OpenvSwith 等各种协议。 - 使用Mininet可以很方便地创建一个支持SDN的网络。用户可以自定义网络拓扑,灵活地为网络添加新的功能并进行相关测试,从而缩短开发测试周期。在Mininet 上运行的代码可以轻松移植到支持OpenFlow的硬件设备上。
- Mininet可以在自己的电脑,或服务器,或虚拟机,或者云(例如AmazonEC2)上运行。
- Mininet提供 python APl,简单易用。
1.Mininet创建网络拓扑的常用的命令
-c 释放之前创建拓扑时占用的未释放的资源
-h 查看帮助
–topo 在mininet启动时通过命令行定义拓扑
–custom 用于创建自定义拓扑
–switch 定义要使用的交换机,默认使用OVSK交换机
–controller 定义要使用的控制器,如果没有指定则使用mininet中默认的控制器
–mac 自动设置设备的MAC地址,从而使MAC地址更易读
2.Mininet部分命令
1 | mininet> help 获取帮助列表 |
3.常用命令用法举例
(1)--confroller
sudo mn --controller=remote, --ip=[controller IP], --port=[port]
其中ip指的是远程控制器的IP,port指的是监听端口。IP和port可忽略不写,不写默认使用本机IP和6633或6653端口。
(2)--mac
自动设置设备的MAC地址,从而使MAC地址更易读。
设置交换机的MAC、主机MAC及IP地址从小到大排列,在拓扑比较复杂的情况容易识别机器ID。如果不设置,默认下主机随机分配MAC地址,且每次执行mn,MAC都会改变,有些调试比较困难。
用例
1 | cd ryu |
1 | cd mininet |
Ryu运行界面:
Mininet运行界面:
输入pingall查看所有主机的连通性
这里应该是我之前建立的网络拓扑有问题,都不通,哈哈哈哈~~
应该是链路被down了。
输入net 显示网络拓扑
输入links 显示链路健壮性信息
输入dump 显示每个节点的接口设置和表示每个节点的进程的PID
输入iperf h1 h2,对h1和h2进行网络的带宽测试
这里出错了,应该是没有连通。
下面是示例跑的结果:
4.Mininet创建网络拓扑的三种方式
4.1 通过交互界面(命令行)创建
(1)单一(single)拓扑
整个网络拓扑中有且只有一个交换机,交换机可下挂一个或多个主机
举例:
sudo mn --topo=single,3 表示创建了一台交换机,交换机下挂3台主机
(2)线性(linear)拓扑
交换机连接呈线性排列,且每个交换机所连接主机数目只有一个(交换机与主机数相同)
举例:sudo mn --topo=linear,3
(3)树形(tree)拓扑
交换机连接呈树形排列,且每个交换机下挂的主机一般有多个,类似于数据结构的二叉树。其中,depth指的是交换机的深度,depth=2表示交换机有两层,fanout表示广度/扇出,fanout=3表示每台交换机均下挂3台设备。
举例: sudo mn --topo=tree,depth=2,fanout=3
(4)自定义(custom)拓扑
可以直接执行编写好的Python脚本创建拓扑。
举例:
py net.addSwitch(‘s3’) 添加交换机s3
py net.addHost(‘h3’) 添加主机h3
py net.addLink(s1,net.get(‘h3’)) 添加s1和s3之间的链接
py s1.attach(‘s1-eth3’) s1上添加eth3接口(端口)
py net.get(‘h3’).cmd(‘ifconfig h3-eth0 10.3’) 给h3配置ip地址为10.0.0.3
4.2 通过可视化界面创建
首先打开miniedit
先画一个简单的网络拓扑。
然后点击左上角的Edit,选择Preferences。
默认交换机选这个。
openflow的版本可以选1.0和1.3
点击OK。
然后是设备的配置
鼠标右键选中控制器,选择Properties,Name控制器的名字,Controller Port监听端口,Controller Type选择Remote Controller也就是远程控制器,如果你的控制器是安装在虚拟机上的话,它默认的是本机地址也就是127.0.0.1点击ok。
交换机的设置也是类似的。
Hostname交换机的名字。DPID指的是在 Mininet 中,DPID 指的是数据通路 ID(Datapath ID)。它是 OpenFlow 协议中用于识别交换机的唯一标识符。每个 OpenFlow 交换机都有一个唯一的 DPID,它是一个 64 位的整数。
这里可以设置s1的DPID为000000000000001
S2的DPID为000000000000002
Switch Type选择内核模式,Open vSwitch Knernel Mode。
其他的可以不勾选。
在 Mininet 中,可以通过在构建拓扑时使用 dpid
参数来指定交换机的 DPID。例如,在 Python 脚本中创建一个包含两个交换机的拓扑,可以使用以下代码:
1 | from mininet.topo import Topo |
在这个例子中,使用 dpid
参数为交换机指定了 DPID。使用 0000000000000001
和 0000000000000002
作为示例 DPID,您可以根据需要替换它们。
需要注意的是,如果没有为交换机指定 DPID,则 Mininet 会生成一个随机的 DPID。在编写 OpenFlow 控制器代码时,需要使用正确的 DPID 来识别 Mininet 中的交换机。
最后是主机的配置,IP Address需要和Miniedit的IP base的网段对应起来,h1的IP Address设置为10.0.0.1,h2 10.0.0.2 , h3 10.0.0.3
这样网络拓扑就设置完了。
回到执行mininet的终端,可以看到我们在miniedit执行的所有设置在mininet都有反馈。
我们再运行这个网络拓扑,在运行网络拓扑之前我们需要先开启Ryu,也就是控制器。
sudo ryu-manager simple_switch.py
选这个执行
然后在MiniEdit中点击左下角的run。
可以看到在Ryu已经检测到了这个网络拓扑,在Mininet中可以看到创建了网络拓扑。
下面测试一下网络的连通性等。
发现没有问题,接下来我们把这个网络拓扑保存成python文件方便以后随时使用。
首先点击stop,将运行停止。
看到文件已经保存了。
我们可以运行这个文件,看结果是否相同。
4.3 如何编写python脚本创建网络拓扑
先修改文件权限,然后编辑3.py文件。
比如增加一台主机h4与s2交换机进行连接。
仿照修改即可。
保存退出即可。
执行文件查看效果。