目录

  • 实验名称
  • 实验目的
  • 实验内容
    • 1、结合Mininet及RYU组建SDN网络
    • 2、基于RYU及Mininet管理网络、开发简单网络管理程序
  • 实验步骤
    • 1、结合Mininet及RYU组建SDN网络
    • 2、基于RYU及Mininet管理网络、开发简单网络管理程序
  • 总结

实验名称

SDN网络简单管理及开发实验

实验目的

基于RYU及Mininet管理网络、开发管理网络应用程序

实验内容

1、结合Mininet及RYU组建SDN网络

运行RYU远程控制器,在mininet上开发实现如图1所示的一个包含两个交换机、两个客户端主机(每个交换机连接一个主机)的简单拓扑,并连接运行的RYU控制器。

2、基于RYU及Mininet管理网络、开发简单网络管理程序

使用mininet命令操作流表项,使主机h1和h2之间不能通信;使用RYU开发简单网络管理程序,使主机h1和h2之间不能通信。

实验步骤

1、结合Mininet及RYU组建SDN网络

1.1 开发基于mininet的网络,编写python程序。

import osfrom mininet.net import Mininet
from mininet.node import RemoteController
from mininet.cli import CLI
from mininet.log import setLogLevel
from mininet.link import TCLink
from mininet.topo import Topoclass linearTopo(Topo):def __init__(self):self.switchList = []self.hostList = []Topo.__init__(self)def create_topo(self):self.create_switch()self.create_host()self.create_link()def create_switch(self):self.switchList.append(self.addSwitch('s1'))self.switchList.append(self.addSwitch('s2'))def create_host(self):self.hostList.append(self.addHost('h1'))self.hostList.append(self.addHost('h2'))def create_link(self):self.addLink(self.switchList[0], self.switchList[1], bw=100, delay='5ms', loss=0)self.addLink(self.switchList[0], self.hostList[0], bw=100, delay='5ms', loss=0)self.addLink(self.switchList[1], self.hostList[1], bw=100, delay='5ms', loss=0)def create_topo():topo = linearTopo()topo.create_topo()net = Mininet(topo=topo, link=TCLink, controller=None, autoSetMacs=True)controller_ip = "127.0.0.1"controller_port = 6633net.addController('controller',controller=RemoteController,ip=controller_ip,port=controller_port)net.start()CLI(net)net.stop()if __name__ == '__main__':setLogLevel('info')if os.getuid() != 0:logger.debug("You are NOT root")elif os.getuid() == 0:create_topo()

1.2 运行RYU控制器
1.3 运行mininet程序

1.4 查看运行结果

(1)查看创建的网络的组成部分

(2)使用ICMP会话测试h1和h2之间的连通性,分析原因

2、基于RYU及Mininet管理网络、开发简单网络管理程序

2.1 使用mininet命令操作流表项,使主机h1和h2之间不能通信
(1)中断h1和h2之间的ICMP会话;
(2)查看交换机s1上的流表项;

xterm s1

ovs-ofctl dump-flows s1

(3)修改交换机s1上的流表项,使主机h1和h2之间不能通信:
所添加的流表项match域设置为:源IP地址为h1的IP地址,目的IP地址为h2的IP地址。同时,将该流表项优先级设置为最高(65535),actions设置为drop,使用的命令为:

ovs-ofctl add-flow s1 priority=65535,icmp,nw_src=10.0.0.1,nw_dst=10.0.0.2,actions=drop

注意:1、未打“空格”的地方不能输入空格!2、此命令需在交换机上运行!
(4)查看交换机s1上的流表项是否发生了变化;
(5)使用ICMP会话测试h1和h2之间的联通性;
(6)中断ICMP会话,再次查看交换机s1上的流表项,分析与上次抓获的流表项的不同点

分析2.1中抓获流表项的不同点:
修改后抓获的流表项
①增加了一条流表项
②增加的流表项额外设置了优先级(65535)和匹配协议类型(ICMP)
③增加的流表项中动作字段为丢弃,而不是从某端口转发

(7)分析h1和h2之间不能通信的原理。

分析h1和h2之间不能通信的原理:
匹配流表项时选择优先级最高的优先匹配,故进行h1、h2的ICMP会话时,一直与优先级最高的流表项匹配,并且该流表项的动作字段为丢弃,即ICMP报文一直被丢弃。故h1和h2之间不能通信。

2.2 使用RYU开发简单网络管理程序,使主机h1和h2之间不能通信
(1)关闭mininet、ryu程序;
(2)运行编写的mininet程序;
(3)阅读并分析ryu.ryu.app.simple_switch.py程序;

def _packet_in_handler(self, ev): #交换机向控制器上交packet-in消息msg = ev.msg #获取事件消息datapath = msg.datapath #获取数据通路ofproto = datapath.ofproto #获取数据通路的协议#提取数据包的信息pkt = packet.Packet(msg.data)eth = pkt.get_protocol(ethernet.ethernet)#获取以太网协议信息if eth.ethertype == ether_types.ETH_TYPE_LLDP:# 忽略 lldp packetreturndst = eth.dst #获取源MAC地址src = eth.src #获取目的MAC地址dpid = datapath.id #即交换机的idself.mac_to_port.setdefault(dpid, {}) #设置mac_to_port的默认值self.logger.info("packet in %s %s %s %s", dpid, src, dst, msg.in_port) #日志信息# learn a mac address to avoid FLOOD next time.self.mac_to_port[dpid][src] = msg.in_port
#交换机连接的主机的端口信息,即输入端口#若通往目的主机的端口号找得到,设置为输出端口号,即单播if dst in self.mac_to_port[dpid]: out_port = self.mac_to_port[dpid][dst]else:#找不到,设置输出端口为其他所有端口,即洪泛out_port = ofproto.OFPP_FLOOD  # 动作为从输出端口转发# actions = [datapath.ofproto_parser.OFPActionOutput(out_port)]actions = [] #动作为空# install a flow to avoid packet_in next time安装流表项if out_port != ofproto.OFPP_FLOOD: #不是洪泛的情况self.add_flow(datapath, msg.in_port, dst, src, actions)data = None #数据部分为空if msg.buffer_id == ofproto.OFP_NO_BUFFER:data = msg.data#下发流表项out = datapath.ofproto_parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id, in_port=msg.in_port,actions=actions, data=data)datapath.send_msg(out)

(4)阻断h1和h2之间的通信:将程序第81行的“actions = [datapath.ofproto_parser.OFPActionOutput(out_port)]”修改为“actions = []”;注:可先将原第81行的代码注释,另起一行再重新写“actions = []”。
(5)使用ICMP会话测试h1和h2之间的联通性;

(6)分析h1和h2之间不能通信的原理。

程序中action设为空,则在s1中无法安装流表项。由于交换机s1没有流表项,所有ping操作不可达,故h1和h2之间不能通信。

总结

此次实验初步学习RYU控制器,了解流表项的字段的设置和作用,主机之间无法通信的几种情况。

软件定义网络实验之SDN网络简单管理及开发相关推荐

  1. 软件定义网络实验之SDN环境使用及OpenFLow协议流程分析

    文章目录 实验名称 实验目的及要求 实验内容 一.Mininet的基本操作应用 二.OpenFlow协议通信流程解析 实验步骤 一.Mininet基本操作应用实验 二.OpenFlow协议通信流程解析 ...

  2. python开发网络小工具_Python 实现简单网络应用程序开发

    最后一次更新于 2019/07/10 ICMP Ping 目的 此任务是重新创建第3讲(延迟,丢失和吞吐量)中讨论的ping客户端. Ping 是一个用于在计算机网络中测量延迟和丢失的工具. 在实际应 ...

  3. 开源技术分享:SDN网络浅析与选型

    SDN的概念已经流行了很多年了,从一开始的实验室产品到2012年谷歌宣布其主干网络已经全面运行在OpenFlow上,使广域线路的利用率从30%提升到接近饱和.从而证明了OpenFlow不再仅仅是停留在 ...

  4. 数据中心网络架构 — 云数据中心网络 — SDN 网络技术

    目录 文章目录 目录 SDN 网络技术 Overlay Controller Underlay Network 如何大一统的全域 SDN 管控? SDN 网络技术 通过 SDN 网络技术,可以将数据中 ...

  5. SDN网络的工作原理

    SDN的工作原理 一.SDN网络架构的三层模型 架构主要分为协同应用层,控制层,转发层三层,网络架构本身包括管理平面,控制平面和转发平面,与这三层对应. 传统的IP网络具有转发平面,控制平面和管理平面 ...

  6. 【深度学习】图像匹配Siamese网络实验记录

    图像匹配Siamese网络实验记录 Ⅰ. Siamese 网络介绍 Ⅱ. 数据集 AT&T 分拣行李匹配图像 Ⅲ. 实验记录 A. 模型1 1. 实验1 2. 实验2 3. 实验3 B. 模型 ...

  7. 基于模拟实验理解SDN与传统路由交换网络的关系

    [前言] 近年来,随着"云架构"或者"新基建"等概念不断被提及,以及与之相关的IT项目落地,SDN(软件定义网络)也随之被炒热,加上媒体或者许多培训机构因为各种 ...

  8. 软件定义网络基础(SDN①)

    1.SDN的产生: SDN(软件定义网络)的产生源于传统网络无法满足现代网络环境对网络灵活性.可扩展性和安全性等方面的要求.传统网络架构中,网络设备(如交换机和路由器)负责控制和转发数据流量,网络管理 ...

  9. 软件定义网络基础(SDN④)

    一:SDN控制平面 一个或多个SDN控制器组成,是网络的大脑. 对底层网络交换设备进行集中管理,状态监测.转发决策以及处理和调 度数据平面的流量:通过北向接口向上层应用开放多个层次的可编程能力. 1. ...

最新文章

  1. 用supervisord管理杂乱的服务
  2. 2019-2020-3 《Java 程序设计》第三周知识总结
  3. Webdriver定位不到元素的解决办法
  4. 文献记录(part44)--Skeletonisation algorithms with theoretical guarantees for unorganised point ...
  5. h3c s7506e 配置手册_H3C交换机s5500Web登录配置
  6. MySQL数据库视图(view),视图定义、创建视图、修改视图
  7. Vue 教程第九篇—— 动画和过度效果
  8. StringBuffer append整数0001的问题
  9. java被oracle收购,sun被oracle收购了,openoffice和virtualbox会不会死?
  10. 超星阅读器pdz文件转为xps文件或pdf文件说明
  11. Linux 常用的zip压缩和解压命令详解
  12. 优酷路由宝设置虚拟服务器,优酷路由宝设置步骤
  13. 医疗AI的dicom图像拉取模块设计
  14. html首页随机飘浮图片,jQuery 全屏随机漂浮图片广告
  15. 阿里云性能测试工具PTS
  16. 第二章 关系映射详解
  17. [转载](asp.net大型项目实践)
  18. 【Docker】Docker安装
  19. 主动/被动唤醒源与网络主动/被动唤醒
  20. python 多进程 提高运行效率

热门文章

  1. 2018届春招面试回顾(二)
  2. 动态3D特效壁纸软件Wallpaper Engine的免费获取及安装问题解决
  3. VB.net写的音乐播放器,带百度翻译歌词
  4. 使用 Node 开发一个多人对战的射击游戏
  5. php 自定义生成短链工具
  6. 数据库设计-多级栏目(标题)分类设计
  7. 《蛋仔派对》通关小技巧
  8. MMC,SD,TF各是什么
  9. 2022Mothercup建模比赛
  10. mysql获取汉字首字母拼音,包括复杂字