实验1:SDN拓扑实践

实验1:SDN拓扑实践

一、实验目的

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

二、实验环境

Ubuntu 20.04 Desktop amd64

三、实验要求

(一)基本要求

 

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

2.使用Mininet的命令行生成如下拓扑:
    a) 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。

b) 3台主机,每个主机都连接到同1台交换机上。

3.在2 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。

4.编辑基本要求第1步保存的Python脚本,添加如下网络性能限制,生成拓扑:

    a) h1的cpu最高不超过50%;
    b) h1和s1之间的链路带宽为10,延迟为5ms,最大队列大小为1000,损耗率50。

    30# h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None, cpu=0.5)

    36# net.addLink(h1, s1, bw=10, delay='5ms', max_queue_size=1000, loss=50)

(二)进阶要求

编写Python脚本,生成如下数据中心网络拓扑,要求:

  • 编写.py拓扑文件,命名为“学号_fattree.py”;

  • 必须通过Mininet的custom参数载入上述文件,不得直接使用miniedit.py生成的.py文件;

  • 设备名称必须和下图一致;

    • 使用Python的循环功能实现,不得在代码中手工直接添加设备和链路。

    复制代码
     1 #!/usr/bin/python
     2 #创建网络拓扑
     3 """Custom topology example
     4 Adding the 'topos' dict with a key/value pair to generate our newly defined
     5 topology enables one to pass in '--topo=mytopo' from the command line.
     6 """
     7  
     8 from mininet.topo import Topo
     9 from mininet.net import Mininet
    10 from mininet.node import RemoteController,CPULimitedHost
    11 from mininet.link import TCLink
    12 from mininet.util import dumpNodeConnections
    13  
    14 class MyTopo( Topo ):
    15     "Simple topology example."
    16  
    17     def __init__( self ):
    18         "Create custom topo."
    19  
    20         # Initialize topology
    21         Topo.__init__( self )
    22         L1 = 2
    23         L2 = L1 * 2 
    24         L3 = L2 * 2
    25         a = []
    26         b = []
    27         c = []
    28           
    29         # add core ovs  
    30         for i in range( L1 ):
    31                 sw = self.addSwitch( 'a{}'.format( i + 1 ) )
    32                 a.append( sw )
    33     
    34         # add aggregation ovs
    35         for i in range( L2 ):
    36                 sw = self.addSwitch( 'b{}'.format( L1 + i + 1 ) )
    37                 b.append( sw )
    38     
    39         # add edge ovs
    40         for i in range( L3 ):
    41                 sw = self.addSwitch( 'c{}'.format( L1 + L2 + i + 1 ) )
    42                 c.append( sw )
    43  
    44         # add links between core and aggregation ovs
    45         for i in range( L1 ):
    46                 sw1 = a[i]
    47                 for sw2 in b[int(i/2)::int(L1/2)]:
    48                 # self.addLink(sw2, sw1, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
    49                     self.addLink( sw2, sw1 )
    50  
    51         # add links between aggregation and edge ovs
    52         for i in range( L2 ):
    53                 for sw1 in b[i:i+2]:
    54                     for sw2 in c[i*2:(i+2)*2]:
    55                         self.addLink( sw2, sw1 )
    56  
    57         #add hosts and its links with edge ovs
    58         count = 1
    59         for sw1 in c:
    60                 for i in range(2):
    61                     host = self.addHost( 'h{}'.format( count ) )
    62                     self.addLink( sw1, host )
    63                     count += 1
    64 topos = { 'mytopo': ( lambda: MyTopo() ) }
    复制代码

四、个人总结

 这次的实验虽然不是很难,但由于本身对计算机专业的知识积累不足,前期配置SDN实验环境花费了很多时间,出现了很多问题,最后总算完成了。我发现在完成基础内容的过程中经常出现在终端使用代码添加主机链接交换机之后使用pilngall进行测试,发现路径并没有成功连通依然回丢包,但是使用links进行测试缺能发现道路已经连通的情况,经过查阅问题得只3需要使用attach语句进行端口的增加才能进行数据的交换。这次实验,增加了我的动手能力,提高了我对计算机知识的认识。

posted @ 2022-09-22 12:54  212106672  阅读(29)  评论(0编辑  收藏  举报