实验1:SDN拓扑实践
实验1:SDN拓扑实践
(一)基本要求
- 使用Mininet可视化工具,生成下图所示的拓扑,并保存拓扑文件名为学号.py。
 ![]() 
 2.a) 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。
 ![]() 
 b) 3台主机,每个主机都连接到同1台交换机上。
 ![]() 
 3.在2 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。
 ![]() 
 4.编辑(一)中第1步保存的Python脚本,添加如下网络性能限制,生成拓扑:
 ![]() 
 程序执行结果:
 ![]() 
 带宽测试:
 ![]() 
(二)进阶要求
#!/usr/bin/python
#创建网络拓扑
"""Custom topology example
Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""
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 ):
    "Simple topology example."
    def __init__( self ):
        "Create custom topo."
        # Initialize topology
        Topo.__init__( self )
        L1 = 2 #核心交换机数量
        L2 = L1 * 2 #每台聚合交换机挂两台边缘交换机
        L3 = L2 * 2 #每台边缘交换机挂两台主机
        c = []
        a = []
        e = []
          
        # add core ovs  
        for i in range( L1 ):
                sw = self.addSwitch( 's{}'.format( i + 1 ) )#依照题目将c{}修改为是s{}
                c.append( sw )
    
        # add aggregation ovs
        for i in range( L2 ):
                sw = self.addSwitch( 's{}'.format( L1 + i + 1 ) )#依照题目将a{}修改为是s{}
                a.append( sw )
    
        # add edge ovs
        for i in range( L3 ):
                sw = self.addSwitch( 's{}'.format( L1 + L2 + i + 1 ) )#依照题目将e{}修改为是s{}
                e.append( sw )
        # add links between core and aggregation ovs
        for i in range( L1 ):
                sw1 = c[i]
                for sw2 in a[i/2::L1/2]:
                # self.addLink(sw2, sw1, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
			            self.addLink( sw2, sw1 )
        # add links between aggregation and edge ovs
        for i in range( 0, L2, 2 ):
                for sw1 in a[i:i+2]:
	                for sw2 in e[i*2:i*2+4]:#修改为*2
			            self.addLink( sw2, sw1 )
        #add hosts and its links with edge ovs
        count = 1
        for sw1 in e:
                for i in range(2):
                	host = self.addHost( 'h{}'.format( count ) )
                	self.addLink( sw1, host )
                	count += 1
topos = { 'mytopo': ( lambda: MyTopo() ) }
代码运行结果:


个人总结
第一次做这种类型的实验,在拿到题目的第一时间不知道从哪里下手,但对照着实验指导书一步步做,其实还好,不会太难,就是在过程中还是遇到了一些小问题,在查找资料及观看已经提交了作业的同学的报告后也都找到了解决方法,最后虽然成功完成了全部的实验内容,但也了解到自己对于python的不熟悉,代码能力还是有待提高,本次实验后收获颇丰!
实验遇到的问题:
- 
运行sudo mn –-topo=single,3时用addHost添加h4主机后与s1连接后,执行pingall有50%的dropped

查阅资料后才知道要为再执行py h4.setIP('10.0.0.4',8)和py s1.attach('s1-eth4')才能有0%的dropped

- 
使用 sudo python 032002240.py无法执行程序查找资料后,使用 sudo python3 032002240.py才能顺利运行
- 
在用touch建立032002240_fattree.py文件后运行 sudo mn --custom 032002240_fattree.py --topo mytopo --mac后无法运行在文件夹中查看发现文件依旧不是可执行文件,在尝试运行 sudo chmod -R 777 032002240_fattree.py后才可运行
 
                    
                







 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号