实验1:SDN拓扑实践
实验1:SDN拓扑实践
一、实验目的
- 能够使用源码安装Mininet;
- 能够使用Mininet的可视化工具生成拓扑;
- 能够使用Mininet的命令行生成特定拓扑;
- 能够使用Mininet交互界面管理SDN拓扑;
- 能够使用Python脚本构建SDN拓扑。
二、实验环境
下载虚拟机软件Oracle VisualBox 或 VMware;
在虚拟机中安装Ubuntu 20.04 Desktop amd64;
三、实验要求
(一)基本要求
- 在Ubuntu系统的home目录下创建一个目录,目录命名为学号。
- 在创建的目录下,完成Mininet的源码安装。
- 使用Mininet可视化工具,生成下图所示的拓扑,并保存拓扑文件名为学号.py。
- 画出拓扑图
- 配置四台主机ip地址、控制器、Edit Preferences
- 验证连通性
- 保存py文件 031902241.py
- 使用Mininet的命令行生成如下拓扑:
a) 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。
为线性拓扑(Linear) sudo mn --topo=linear,4 #主机数=交换机数=4
b) 3台主机,每个主机都连接到同1台交换机上。
为简单拓扑 sudo mn --topo=single,3 #主机数=3
查看当前链路、网络状态
- 在4 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。
- 添加主机h4、添加链路、配置s1端口号以及主机4IP地址
- 查看添加完后的链路、网络状态
- 测试新拓扑连通性
- 编辑(一)中第3步保存的Python脚本,添加如下网络性能限制,生成拓扑:
a) h1的cpu最高不超过50%;
b) h1和s1之间的链路带宽为10,延迟为5ms,最大队列大小为1000,损耗率50。
- 直接执行Python代码
- 添加网络性能限制(方法1)
- 添加网络性能限制(方法2)
- 性能测试
(二)进阶要求
- 生成的指定拓扑结构
- 编写.py拓扑文件,命名为“学号_fattree.py”;
- 编写代码如下:
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 ):
# Initialize topology
Topo.__init__( self )
L1 = 2
L2 = L1 * 2
L3 = L2 * 2
s = []
h = []
# add ovs
for i in range( L1+L2+L3 ):
sw = self.addSwitch( 's{}'.format( i + 1 ) )
s.append( sw )
# add links between core and aggregation ovs
for i in range( L1 ):
sw1 = s[i]
for sw2 in s[L1:L2+L1]:
self.addLink( sw2, sw1 )
# add links between aggregation and edge ovs
for i in range( L1, L2+L1, 2 ):
for sw1 in s[i:i+2]:
for sw2 in s[2*i+2:2*i+6]:
self.addLink( sw2, sw1 )
#add hosts and its links with edge ovs
count = 1
for sw1 in s[L1+L2:]:
for i in range(2):
host = self.addHost( 'h{}'.format( count ) )
self.addLink( sw1, host )
count += 1
topos = { 'mytopo': ( lambda: MyTopo() ) }
- 运行结果如下
四.实验心得
这次实验是第一次SDN实验,老师上课讲的很详细,实验内容也并没有特别复杂。但是由于本次实验是第一次实验,对于我来说,大多数的操作还很生疏,对于虚拟机也并不熟悉,在mininet安装上出现了许多问题,一共安装了三次才安装清楚,但每一次发现问题、解决问题都会让我觉得自己学到了一些东西。第一次实验这么做下来,觉得最有意思的是可视化实现拓扑的部分,这部分最容易,拓扑结构一目了然,少去了很多书写代码段、命令行控制的繁琐,用简单的方式就可以达到很好的效果。
遇到的一些问题:
- 在对原有拓扑新增主机和链路时,为了验证连通性还需要新配置主机的IP地址以及路由器端口。
- 拓展题需要编写python代码,这次编写的python代码设计到range()函数和数组,以及format格式化函数,由于之前没有真正的写过python代码,所以在编写的过程中也遇到了许多问题,比如range()函数的索引确定,数组下标的确定等等。