实验1:SDN拓扑实践

实验1:SDN拓扑实践

基础要求

a) mininet运行结果图

实验1:SDN拓扑实践

b)2的执行结果截图

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

实验1:SDN拓扑实践
2.b)3台主机,每个主机都连接到同1台交换机上。

实验1:SDN拓扑实践

c)3修改过的”学号.py”代码、Mininet运行结果

#!/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(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(s2, h4)
    net.addLink(h3, s2)

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

执行结果

实验1:SDN拓扑实践

进阶要求

代码

#!/usr/bin/python
创建网络拓扑
"""Custom topology example
Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.

"""

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):
    "Simple topology example."

    def __init__(self):
        "Create custom topo."

        # Initialize topology
        Topo.__init__(self)
        L1 = 2
        L2 = L1 * 2
        L3 = L2 * 2
        c = []
        a = []
        e = []

        # add core ovs 第一层交换机 下标 1,2
        for i in range(L1):
            sw = self.addSwitch('s{}'.format(i + 1))
            c.append(sw)

        # add aggregation ovs 第二层交换机 下标3~6
        for i in range(L2):
            sw = self.addSwitch('s{}'.format(L1 + i + 1))
            a.append(sw)

        # add edge ovs 第三层交换机 下标7~14
        for i in range(L3):
            sw = self.addSwitch('s{}'.format(L1 + L2 + i + 1))
            e.append(sw)

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

        # add links between aggregation and edge ovs
        for i in range( L2 ):
            temp=i
            sw1=a[i]
            if (i%2)!=0:
                temp=temp-1
            temp=temp*2
            for sw2 in e[temp:temp+4]:
                self.addLink( sw1, sw2 )

        #add hosts and its links with edge ovs
        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())}

进阶要求执行结果

实验1:SDN拓扑实践

总结

本次实验是我对mininet的第一次实验,在操作有很多不熟练,还有一些比如pyhton语法遗忘的问题,所以又去翻以前的博客复习了一下。在运行进阶要求代码时,发现了默认是用python2版本,除号是//,还有比如出现缩进同时用空格和tab导致报错,还有一些其他问题,这些问题都是通过搜索引擎找到了解决方案。以上的经历使我对基础的mininet拓扑结构建立和操作有一定的了解,并且进一步培养了我发现问题,解决问题的能力。总体来说,本次实验难度不大,在有参考资料和指导手册的情况下,再辅以搜索引擎,就能解决绝大部分问题并完成实验。

Original: https://www.cnblogs.com/wojiuyishui/p/16687155.html
Author: 我就一水
Title: 实验1:SDN拓扑实践

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578648/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL-连接数据库

    连接数据库在操作数据库之前,需要连接它,输入命令:mysql -u用户名 -p密码。 在你自己本机上连接数据库用上述方式是可以的,不过在平台上连接数据库还需要加上一句-h127.0…

    Linux 2023年6月8日
    0103
  • FusionAccess桌面云安装(Lite AD方法)

    创建FusionAccess虚拟机 选择自定义 默认兼容 选择稍后安装操作系统 选择Linux SUSE Linux 名字位置自己选择 选择最少4个处理器 选择最少8G内存 选择仅…

    Linux 2023年6月8日
    0119
  • 单例模式也能玩出花

    一、单例模式 (1)单例模式 (2)单例模式实现要点 (3)使用场景当频繁创建、销毁某个对象时,可以考虑单例模式。当创建对象消耗资源过多时,但又经常使用时,可以考虑单例模式。 (1…

    Linux 2023年6月14日
    093
  • IDEA版本与MAVEN版本对应关系,及历史MAVEN版本下载【转】

    1、查看自己的IDEA版本 Help -> About 3、下载指定版本MAVEN Original: https://www.cnblogs.com/fb010001/p/…

    Linux 2023年6月8日
    0100
  • Powershell 测量命令执形时间

    powershell -Command (Measure-Command { "docker build –no-cache -f 2.2/Dockerfile 2.2…

    Linux 2023年5月28日
    083
  • Linux基础入门笔记

    Linux内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux是一套免费使用和自由传播的类Unix操作系统,是一…

    Linux 2023年6月14日
    071
  • 006 Linux 命令三剑客之-grep

    01 一起来认识 grep! Linux 命令三剑客,sed、grep、awk。 sed:擅长数据修改。 grep:擅长数据查找定位。 awk:擅长数据切片,数据格式化,功能最复杂…

    Linux 2023年5月27日
    0104
  • 2017年腾讯 秋招软件开发笔试编程题回忆版

    2017 年腾讯 秋招软件开发笔试编程题回忆版 (所有题目大致描述如下,并非完整的题目回忆,但意思大致一样) 1、又一个魔法城市,城市里面有n个魔法城堡,序号为0,1,2。。。n-…

    Linux 2023年6月6日
    098
  • NAT回流(Twice NAT)Hairping 参数详解

    内网用户需要通过域名访问内网的服务器,一般商用环境是无法访问的,需要经过以下配置,原理不说了,直接说配置。 nat (inside,inside) source dynamic i…

    Linux 2023年6月6日
    0107
  • Centos 6 DNS 配置 解决 Unknown host

    测试服务器Maven 打包时遇到了如下的错误 看上去应该是对 maven.aliyun.com的DNS 域名解析出问题了。 登录到服务器上 ping maven.aliyun.co…

    Linux 2023年5月27日
    0107
  • NoteOfMySQL-09-存储过程与函数

    常用的SQL语句在执行时需要先编译,然后执行;而存储过程(Store Procedure)是经编译后存储在数据库中的SQL语句集,在数据库中创建和保存。 一、存储过程与函数的区别 …

    Linux 2023年6月14日
    077
  • Redis实现延迟队列方法介绍

    延迟队列,顾名思义它是一种带有延迟功能的消息队列。那么,是在什么场景下我才需要这样的队列呢? 背景 我们先看看以下业务场景: 当订单一直处于未支付状态时,如何及时的关闭订单 如何定…

    Linux 2023年5月28日
    075
  • redis持久化存储

    redis持久化存储 redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,r…

    Linux 2023年6月7日
    0112
  • Seata-初体验以及避坑

    Seata是什么 这里引用官方解释 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 …

    Linux 2023年6月7日
    0102
  • algorithm 头文件参考

    定义执行算法的 C++ 标准库容器模板函数。 该 <algorithm></algorithm> 库还使用该 #include <initialize…

    Linux 2023年6月7日
    0118
  • NJU软件分析笔记(1)

    课程链接本次课程主要内容 Compilers and Static Analyzers AST vs. IR IR: Three-Address Code (3AC) 3AC in…

    Linux 2023年6月8日
    0117
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球