实验1: SDN拓扑实践

1. 使用Mininet可视化工具,生成下图所示的拓扑

2. 生成3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。

3. 生成3台主机,每个主机都连接到同1台交换机上

4. 在上一步基础上,Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性

5. 修改后的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(s1, s2)
    net.addLink(h1, s1, bw=10, delay='5ms', max_queue_size=1000, loss=50, use_htb=True)
    net.addLink(h2, s1)
    net.addLink(h3, s2)
    net.addLink(s2, h4)

    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()

6. 进阶代码及结果

#!/usr/bin/python
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 ):
    	 
        Topo.__init__( self ) 
        L1 = 2
        L2 = L1 * 2 
        L3 = L2 * 2
        c = [] #core
        a = [] #aggregation
        e = [] #edge
           
        for i in range( L1 ):
                sw = self.addSwitch( 's{}'.format( i + 1 ) )
                c.append( sw )
    
        for i in range( L2 ):
                sw = self.addSwitch( 's{}'.format( L1 + i + 1 ) )
                a.append( sw )
    
        for i in range( L3 ):
                sw = self.addSwitch( 's{}'.format( L1 + L2 + i + 1 ) )
                e.append( sw )
 
        for i in range( L1 ):
                sw1 = c[i]
                for sw2 in a[i//2::L1//2]:
                	self.addLink( sw2, sw1 )
 
        for i in range( 0, L2, 2 ):
                for sw1 in a[i:i+2]:
	                for sw2 in e[i:i+2]:
	                	self.addLink( sw2, sw1 )
 
        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() ) }




个人总结:

学习到的知识:

  • 使用mininet可视化工具生成拓扑

  • 生成交换机, 交换机与主机相连

    sudo mn --topo = linear,3

    sudo mn --topo = single,3

  • 新增1台主机并且连接到交换机上

    py net.addHost()//新增主机

    py net.addLink(s1,h4)

  • ping通后查看links的结果

    pingall

  • 用linux命令生成交换机

  • 让每个交换机连接主机

  • 交换机之间的连线

  • 新增交换机

感想:

通过这次实验,让我明白交换机与主句之间的连接方式,如何使用命令行操作已经创建好的拓扑,如何让用python语言来改变拓扑结构内部的关系,ping与pingall,addlink与addhost。让我加深对各种交换机主机等关系的了解,以及对minimet可视化工具的了解,这次实验难度还是比较适中,认真完成之后非常收益匪浅。

posted @ 2022-09-13 09:18  伱你  阅读(22)  评论(0编辑  收藏  举报