实验1:SDN拓扑实践

实验1:SDN拓扑实践

一、基础实验

1)使用Mininet可视化工具生成拓扑

image

2)使用Mininet的命令行生成拓扑

a)三台交换机,每台交换机链接一台主机,三台交换机连成一条线
image

b)三台主机,每个主机都连接到同一台交换机上

image

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

结果:

image

4.编辑(一)中第一步保存的Python脚本,添加网络性能,再测试新拓扑的联通性

a) h1的cpu最高不超过50%

b)h1和s1之间的链路带宽为10,延迟为5ms,最大队列大小为1000,损耗率50

    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)
    net.addLink(s2, h4)
    net.addLink(s2, h3)
    net.addLink(s1, h2)

检测连通信并测试带宽:

image

二、进阶实验

拓扑要求:
image

实验代码:

from mininet.topo import Topo

class MyTopo(Topo):
    def __init__(self):

        Topo.__init__(self)
        L1 = 2
        L2 = L1 * 2
        L3 = L2 * 2

        core_sw = []
        aggregation_sw = []
        edge_sw = []

        # add core ovs
        for i in range(L1):
            sw = self.addSwitch('s{}'.format(i + 1))
            core_sw.append(sw)

        for i in core_sw:
            print(i);

        # add aggregation ovs
        for i in range(L2):
            sw = self.addSwitch('s{}'.format(L1 + i + 1))
            aggregation_sw.append(sw)


        # add edge ovs
        for i in range(L3):
            sw = self.addSwitch('s{}'.format(L1 + L2 + i + 1))
            edge_sw.append(sw)

        # add links between core and aggregation ovs
        for i in range(L1):
            sw1 = core_sw[i]
            for sw2 in aggregation_sw:
                self.addLink(sw1, sw2)

        # add links between aggregation and edge ovs
        for i in range(L2):
            sw1 = aggregation_sw[i]
            for j in range(L2):
                sw2 = edge_sw[int(i/2) * L2 + j]
                self.addLink(sw1, sw2)

        #add hosts and its links with edge ovs
        count = 1;
        for sw in edge_sw:
            for i in range(2):
                host = self.addHost('h{}'.format(count))
                self.addLink(sw, host)
                count += 1

topos = {'mytopo': (lambda: MyTopo())}









实验结果:

image


三、知识归纳

拓扑生成

最简拓扑:

sudo mn
sudo mn --topo minimal

image

简单拓扑

sudo mn --topo=single,3

image

线性拓扑

sudo mn --topo=linear,4

image

树形拓扑

sudo mn --topo=tree, depth=2, fanout=2 #深度为2,设备下挂主机数为2

mininet交互式命令

py net.addHost('h3')
py net.addSwitch('s2')
py net.addLink(h3, s1, 0, 1)
py net.addLink(h1, h2, 3, 2) #端口号
addHost()可对主机cpu进行设置,以百分数的形式;
addLink()可以设置带宽bw、延迟delay、最大队列的大小max_queue_size、损耗率loss。

net.addHost('h1', cpu=0.5)
net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)

性能测试

iPerf测试链路带宽

net.iperf((h1, h3))

利用python生成拓扑

code:

from mininet.topo import Topo

class MyTopo(Topo):
    def __init__(self):
        
        Topo.__init__(self)

        host1 = self.addHost('h1')
        host2 = self.addHost('h2')
        host3 = self.addHost('h3')
        host4 = self.addHost('h4')

        switch1 = self.addSwitch('s1')
        switch2 = self.addSwitch('s2')

        self.addLink(host1, switch1, 1, 1)
        self.addLink(host2, switch1, 1, 2)
        self.addLink(host3, switch2, 1, 1)
        self.addLink(host4, switch2, 1, 2)

topos = {'mytopo':(lambda:MyTopo())}

命令行:

sudo mn --custom yourtopo.py --topo mytopo --mac

四、总结

错误归纳

最开始在完成“在2b)的基础上,在Mininet交互界面上新增一台主机并且链接到交换机上,再测试新拓扑的连通信”任务时,由于没有为新增的h4分配IP,因此在pingall的时候会出现丢包现象。通过观察并为h4分配IP地址后,能够正常ping通。

实验总结

  • 这次实验学习了如何生成自定义拓扑,并且学会了如何使用命令来观察网络中的拓扑情况,如:检测带宽、连通信等
  • 这次实验提升了我的动手能力,编程能力,使我对网络知识有了更进一步的了解。
posted @ 2022-09-13 20:34  盒什么饭  阅读(117)  评论(0编辑  收藏  举报