实验1:SDN拓扑实践

一、在Ubuntu系统的home目录下创建一个目录,目录命名为学号

二、在创建的目录下,完成Mininet的源码安装

三、使用Mininet可视化工具,生成下图所示的拓扑,并保存拓扑文件名为学号.py


四、使用Mininet的命令行生成如下拓扑:

a)3台交换机,每个交换机连接1台主机,3台交换机连接成一条线

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

五、在四 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性

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

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

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

进阶要求

# !/usr/bin/python

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import CPULimitedHost, RemoteController, Controller
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
from mininet.log import setLogLevel
from mininet.cli import CLI

class MyTopo(Topo):
    def __init__(self):
        Topo.__init__(self)
        L1 = 2
        L2 = 4
        L3 = 8
        L4 = 16
        c = []
        a = []
        e= []
        b = []

        for i in range(L1):
            sw = self.addSwitch('s{}'.format(i + 1))
            a.append(sw)

        for i in range(L2):
            sw = self.addSwitch('s{}'.format(L1 + i + 1))
            e.append(sw)
        for i in range(L3):
            sw = self.addSwitch('s{}'.format(L1 + L2 + i + 1))
            c.append(sw)

        for i in range(L1):
            sw1 = a[i]
            for sw2 in e:
                self.addLink(sw2, sw1)

        for i in range(L2):
            sw1 = e[i]
            if i < L2 / 2:
                for sw2 in c[0:L3 // 2]:
                    self.addLink(sw1, sw2)
            else:
                for sw2 in c[L3 // 2:L3]:
                    self.addLink(sw1, sw2)

        for i in range(L4):
            h = self.addHost('h{}'.format(i + 1))
            b.append(h)

        for i in range(L3):
            sw1 = c[i]
            h1 = b[i * 2]
            h2 = b[i * 2 + 1]
            self.addLink(sw1, h1)
            self.addLink(sw1, h2)

        float = 1
	for sw1 in e:
	    for i in range(2):
		host=self.addHost('h{}'.format(count))
		self.addLink(sw1,h)
		float+=1

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


def simpleTest():
    topo = MyTopo()
    net = Mininet(topo,build=False,ipBase='10.0.0.0/8')
    c0 = net.addController('c0', controller=Controller, protocal='tcp', port=6633)
    c0.start()
    net.build()
    dumpNodeConnections(net.hosts)
    CLI(net)
    net.stop()

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

实验总结

个人总结与感想

实验难度适中,对于想要快速了解到SDN拓扑简单搭建的新手是一个良好的开端。我个人第一次接触这些还是感到有点小困难,但相信之后慢慢深入学习能对SDN这门课的难度有所改观。

困难与解决办法

1.对于相关命令、指令的了解程度很浅显,每一步都要查询对照学习,效率低。后通过多次反复练习来记忆,以求达到学以致用。

2.安装mininet源码时多次安装失败(ERROR 404:Not Found.)以及安装一半只有openfile组件和网络问题无法从源码仓库下载mininet源码的问题。通过安装指导解决办法(执行 mininet 报错 No module named pip)以及彻底删除文件夹换时段重装mininet解决了99%的问题。

3.完成新增1台主机实验时无法ping通。感谢同学提出的解决方法(主机与交换机连线,配置IP),对今后再出现相似问题提供了一种解决思路。

4.进阶要求有去尝试完成,但写好的python代码在终端报错,修改正确后接连运行失败,无法正常执行命令运行测试脚本。想要解决还需从代码编写能力上多加努力。

posted @ 2021-09-02 17:02  楚御  阅读(82)  评论(0编辑  收藏  举报