实验1:SDN拓扑实践

作业提交

  1. 第1步Mininet运行结果截图
    image
  2. 第2步的执行结果截图
  • 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。
    image
  • 3台主机,每个主机都连接到同1台交换机上。
    image
  1. 第3步提交修改过的“学号.py”代码、Mininet运行结果
  • 032002129.py
#!/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(s1, s2)
    net.addLink(s2, h4)
    net.addLink(s2, h3)

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

  • Mininet运行结果

image
4. 进阶

  • 032002129_fattree.py
#!/usr/bin/env python

from mininet.topo import Topo



class MyTopo(Topo):

    def __init__(self):

        #初始化拓扑

        Topo.__init__(self)

        host = []

        switch = []

        for i in range(1, 17):

            ho=self.addHost("h" + str(i))

            host.append(ho)

        for i in range(1, 15):

            sw=self.addSwitch("s" + str(i))

            switch.append(sw)

            #连接s1,s2和s3,s4,s5,s6

        for i in range(0, 2):

            for j in range(2, 6):

                self.addLink(switch[i], switch[j])



            #连接s3,s4和s7,s8,s9,s10

        for i in range(2, 4):

            for j in range(6, 10):

                self.addLink(switch[i], switch[j])



            #s5,s6和s11,s12,s13,s14

        for i in range(4, 6):

            for j in range(10, 14):

                self.addLink(switch[i], switch[j])



            #把主机和交换机连起来

        for i in range(0,8):

            self.addLink(switch[i+6],host[2*i])

            self.addLink(switch[i+6],host[2*i+1])

topos = {'mytopo': (lambda: MyTopo())}
  • 执行结果
    image

个人总结

  1. 这次实验个人感觉难度适中,也可能是实验指导给的足够详细,一开始感觉并不难,但是在命令 行手动添加主机并测试连通性时遇到了问题,pingall指令失败,新加入的主机ping不通,后来才知道是因为只添加了物理链路,没有为其分配IP地址以及交换机端口,逻辑上没有接通。
  2. 刚开始做进阶实验时,对python并不太了解,所以去了解了一些python的基本语法。然后结合步骤一生成的python代码,并上网查看相关资料,然后通过几个循环来生成了目的结果。
  3. 通过本次实验了解了mininet的简单使用,学习了一些minninet的基本指令。利用mininet搭建sdn的实验拓扑,还有一点就是感觉到了python的强大。
posted @ 2022-09-15 19:27  _ham  阅读(75)  评论(0)    收藏  举报