实验1:SDN拓扑实践

实验1:SDN拓扑实践

一、实验目的

  1. 能够使用源码安装Mininet;
  2. 能够使用Mininet的可视化工具生成拓扑;
  3. 能够使用Mininet的命令行生成特定拓扑;
  4. 能够使用Mininet交互界面管理SDN拓扑;
  5. 能够使用Python脚本构建SDN拓扑。

二、实验环境

下载虚拟机软件Oracle VisualBox 或 VMware;
在虚拟机中安装Ubuntu 20.04 Desktop amd64;

三、实验要求

(一)基本要求

  1. 在Ubuntu系统的home目录下创建一个目录,目录命名为学号。
     
  2. 在创建的目录下,完成Mininet的源码安装。
     

     
  3. 使用Mininet可视化工具,生成下图所示的拓扑,并保存拓扑文件名为学号.py。
  • 画出拓扑图

     
  • 配置四台主机ip地址、控制器、Edit Preferences

     

     
  • 验证连通性

     
  • 保存py文件 031902241.py

     
  1. 使用Mininet的命令行生成如下拓扑:
     
    a) 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。
    为线性拓扑(Linear) sudo mn --topo=linear,4 #主机数=交换机数=4

     
    b) 3台主机,每个主机都连接到同1台交换机上。
    为简单拓扑 sudo mn --topo=single,3 #主机数=3

    查看当前链路、网络状态

     
  2. 在4 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。
  • 添加主机h4、添加链路、配置s1端口号以及主机4IP地址

     
  • 查看添加完后的链路、网络状态

     
  • 测试新拓扑连通性

     
  1. 编辑(一)中第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安装上出现了许多问题,一共安装了三次才安装清楚,但每一次发现问题、解决问题都会让我觉得自己学到了一些东西。第一次实验这么做下来,觉得最有意思的是可视化实现拓扑的部分,这部分最容易,拓扑结构一目了然,少去了很多书写代码段、命令行控制的繁琐,用简单的方式就可以达到很好的效果。

遇到的一些问题:

  1. 在对原有拓扑新增主机和链路时,为了验证连通性还需要新配置主机的IP地址以及路由器端口。
  2. 拓展题需要编写python代码,这次编写的python代码设计到range()函数和数组,以及format格式化函数,由于之前没有真正的写过python代码,所以在编写的过程中也遇到了许多问题,比如range()函数的索引确定,数组下标的确定等等。
posted @ 2021-09-08 21:34  Eleven_955  阅读(267)  评论(0编辑  收藏  举报