实验1:SDN拓扑实践

实验1:SDN拓扑实践

(一)基本要求

  • 1.Mininet运行结果截图

  • 2的执行结果截图

    • a) 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。
    • b) 3台主机,每个主机都连接到同1台交换机上。
  • 3.在2 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。

  • 4.编辑(一)中第1步保存的Python脚本,添加如下网络性能限制,生成拓扑:

    • 代码
点击查看代码
#!/usr/bin/env python

from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call

def myNetwork():

    net = Mininet( topo=None,
                   build=False,
                   ipBase='10.0.0.0/8')

    info( '*** Adding controller\n' )
    c0=net.addController(name='c0',
                      controller=Controller,
                      protocol='tcp',
                      port=6633)

    info( '*** Add switches\n')
    s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
    s2 = net.addSwitch('s2', cls=OVSKernelSwitch)

    info( '*** Add hosts\n')
    h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None, cpu=0.5)
    h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
    h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
    h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)

    info( '*** Add links\n')
    net.addLink(h1, s1,bw =10, delay='5ms', max_queue_size=1000, loss=50, use_htb=True)
    net.addLink(s1, h2)
    net.addLink(h3, s2)
    net.addLink(s2, h4)
    net.addLink(s1, s2)

    info( '*** Starting network\n')
    net.build()
    info( '*** Starting controllers\n')
    for controller in net.controllers:
        controller.start()

    info( '*** Starting switches\n')
    net.get('s1').start([c0])
    net.get('s2').start([c0])

    info( '*** Post configure switches and hosts\n')

    CLI(net)
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    myNetwork()


  • 运行结果

(二)进阶要求

  • 编写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
	#2个核心交换机,4个汇聚交换机,8个边缘交换机
      
        s = []
          
        # add core ovs  核心交换机
        for i in range( L1 ):
                sw = self.addSwitch( 's{}'.format( i + 1 ) )#格式化命名交换机
                s.append( sw )#启用交换机
    
        # add aggregation ovs
        for i in range( L2 ):
                sw = self.addSwitch( 's{}'.format( L1 + i + 1 ) )
                s.append( sw )
    
        # add edge ovs
        for i in range( L3 ):
                sw = self.addSwitch( 's{}'.format( L1 + L2 + 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:L1+L2]:
                # self.addLink(sw2, sw1, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
			            self.addLink( sw1, sw2 )
 
        # add links between aggregation and edge ovs 汇聚交换机与边缘交换机链路
        for i in range( L2):
                sw1 = s[L1+i]
                j=i/2
	   	for sw2 in s[L1+L2+4*j:L1+L2+(j+1)*4]:
			self.addLink( sw1, sw2 )
 
        #add hosts and its links with edge ovs 主机与边缘交换机链路
        count = 1
        for sw1 in s[L1+L2:L1+L2+L3]:
                for i in range(2):
                	host = self.addHost( 'h{}'.format( count ) )
                	self.addLink( sw1, host )
                	count += 1
topos = { 'mytopo': ( lambda: MyTopo() ) }

  • 运行结果

个人总结

  • 使用mininet可视化工具时出现Traceback回溯错误
    • 解决方法:此错误为内部文件错误,重启系统后可使用
  • 采用命令行创建拓扑时不清楚各个命令的作用,查阅资料后掌握基本使用mininet命令
  • 编写python脚本创建自建拓扑无从下手
    • 查看资料以及样例python脚本,学习如何创建自建拓扑
    • 自学python语言基本使用
    • 采用循环法创建时,遇到循环错误,重新设计算法

个人感想

  • 对照实验手册pdf基本能够完成任务,但遇到一些特殊问题要多上网查阅资料
  • 需要自学python
  • 需要加强Ubuntu系统使用
posted @ 2022-09-14 13:37  橘倾  阅读(39)  评论(0编辑  收藏  举报