实验1:SDN拓扑实践

一、基础要求


* a) 第1步Mininet运行结果截图

* b) 第2步的执行结果截图


* c) 第3步提交修改过的“学号.py”代码、Mininet运行结果

二、进阶要求


代码

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              # 核心层交换机个数
        core = []           # 核心层交换数组
        L2 = 4              # 汇聚层交换机个数
        aggregation = []    # 汇聚层交换数组
        L3 = 8              # 边缘层交换机个数
        edge = []           # 边缘层交换数组
        
        # 添加核心层交换机
        for i in range(L1):
            sw =  self.addSwitch( 's{}'.format(i + 1))
            core.append(sw)
        # 添加汇聚层交换机
        for i in range(L2):
            sw = self.addSwitch( 's{}'.format(L1 + i + 1) )
            aggregation.append(sw)
        # 添加边缘层交换机
        for i in range(L3):
            sw = self.addSwitch( 's{}'.format(L1 + L2 + i + 1) )
            edge.append(sw)

        # 连接核心层、汇聚层
        for i in range(L2):
            sw = aggregation[i]
            self.addLink(sw,core[0])
            self.addLink(sw,core[1])
        # 连接汇聚层、边缘层
        for i in range(L3):
            sw = edge[i]
            if (i < 4):
                self.addLink(sw,aggregation[0])
                self.addLink(sw,aggregation[1])
            else:
                self.addLink(sw,aggregation[2])
                self.addLink(sw,aggregation[3])
        
        # 在边缘交换机中,添加其连接的主机
        count = 1
        for i in range(L3):
            sw = edge[i]
            for j in range(2):
                host = self.addHost('h{}'.format(count))
                self.addLink(sw,host)
                count +=1
topos = { 'mytopo': ( lambda: MyTopo() ) }

运行截图

三、个人心得


1.实验总结

        本次实验的基础要求除了第三步代码不完全之外,其他几步可以正常完成。
        在进阶要求中,如果复制参考资源的代码会有报错(语法错误),但这里bug找不到问题所在(不是缩进问题)。
               

2.问题分享

   1.命令行直接添加设备、连接链路,导致pingall报错

        在基础要求的第三步中,如果直接按照PPT执行以下命令

    mininet> py net.addHost('h4')
    mininet> py net.addLink(h4,s1,0,4)

        这样虽然可以在links,和dump中可以看见h4和s1的接口状态是OK(事实上,dump中显示h4和s1相连的接口没有IP地址),但在pingall中h1、h2、h3会找不到h4的域名。
        如果h4要正常连接上拓扑网络、不使其他设备报错,需要设置h4的IP地址,并把这个IP绑定到h4-s1相连的接口,还需要额外执行以下代码

    mininet> py s1.attach('s1-eth4')                  #开启s1的eth4
    mininet> py h4.setIP('10.0.0.4',24)               #设置h4 IP
    mininet> py h4.cmd('ifconfig h4-eth0 10.0.0.4')   #将h4的IP地址分给和s1相连的接口

   2.Gedit没有配置环境下,不标识语法

        (VS Code天下第一)

   3.参考资料中的代码语法报错

        主要是后面的self.addLink会标识self无法查找问题(但前面可以找到)。并且对于资料中的这种语法不是很熟悉,于是索性把后面的连线部分改了下。

posted @ 2022-09-18 21:54  NullPointerDailytion  阅读(31)  评论(0编辑  收藏  举报
@format