Mininet:SDN测试平台&Ryu:SDN控制器

  • Mininet:SDN测试平台&Ryu:SDN控制器(均是在64位Ubuntu 16.04.7虚拟机中安装)
    • 64位Ubuntu 16.04.7光盘映像文件
    • Mininet的安装
    • Ryu的安装
    • Mininet的使用
    • Ryu的使用

Mininet:SDN测试平台&Ryu:SDN控制器(均是在64位Ubuntu 16.04.7虚拟机中安装)

64位Ubuntu 16.04.7光盘映像文件

链接:https://pan.baidu.com/s/1epMw5oBSBWZW1IeBi0VQWw
提取码:1234

Mininet的安装

Step1(如果没有git需要安装,如果有则忽略): sudo apt install git
在获取Mininet源代码时,需要替换国内镜像,首先点击设置,接着如下操作,替换后请务必重启虚拟机

Step2(获取Mininet源代码): git clone http://github.com/mininet/mininet.git

Step3(安装Mininet,保守起见,这选择完整安装,标签-a,该过程时间较久): mininet/util/install.sh -a
Step4(测试安装是否成功): sudo mn --test pingall
Step5(查看版本): mn --version

Ryu的安装

Step1(检查python的版本): 需要使用python版本3.6以上,建议使用ubuntu20.04 LTS的虚拟机安装,自带的python版本就是可以安装ryu的

Step2(获取Ryu源代码): git clone https://github.com/osrg/ryu.git

Step3(获取安装所需要的库包): sudo pip3 install -r tools/pip-requires
Step4(开始安装): sudo python3 setup.py install
Step5(检查是否安装成功): ryu-manager

Mininet的使用

这里只介绍一种比较简单的方法(鄙人也只会这种),就是通过miniedit这个可视化工具,能够快速对mininet上手
首先将目录切到miniedit.py下:
cd mininet/mininet/examples
运行miniedit.py文件,记得要使用超级用户权限:
sudo ./miniedit/py
接着就会出现以下界面:

我们就可以通过在这里绘制拓扑图(topo.mn),搭建一个SDN的测试平台,比如以下一个拓扑图:

最上方的c0为控制器Controlller,它运行着某些程序,而在SDN中,这些程序我们可以自行手动编写,即SDN具有可编程性,灵活性高;将鼠标放置在器件上,长按右键选择properties,可以进入配置IP等
当控制器开启,开始运行应用程序后,我们才能开始运行我们的测试平台,在右下角有一个run:

而在拓扑中的每一个host图标都是一台虚拟终端,可以通过xterm 终端名(后面可跟多个,用逗号隔开)打开每一个终端的shell(且与本虚拟机的shell一致),可以在各自的shell中运行程序等
且在使用-a标签完整安装mininet时,同时也会安装wireshark抓包工具,当我们在虚拟终端运行网络应用程序,所发送的TCP报文段、UDP数据报都能被清楚地统计并呈现;通过wireshark中I/O graph选项,可以导出、获取网络流量数据,作为基于SDN的实验数据

Ryu的使用

Ryu作为SDN的Controller,即数据控制平面,我们可以在其下编写多样的应用程序,比如像一个自学习交换机的实现,我们可以基于ryu编写代码,能够表现出与传统网络设施相同的功能
我们编写的代码需要放置在app文件夹下,首先切换目录:
cd ryu/ryu/app
ryu很好的一点,是基于python编写应用代码,例如如下的自学习交换机的代码实现:

from ryu.base import app_manager
from ryu.ofproto import ofproto_v1_3
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER, CONFIG_DISPATCHER
from ryu.controller.handler import set_ev_cls
from ryu.lib.packet import packet
from ryu.lib.packet import ethernetclass Learning_switch(app_manager.RyuApp):# Example SwitchOFP_VERSIONS=[ofproto_v1_3.OFP_VERSION]def __init__(self, *args, **kwargs):super(Learning_switch, self).__init__(*args, **kwargs)self.mac_to_port={}@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)def switch_feathers_handler(self, ev):datapath=ev.msg.datapathofproto=datapath.ofprotoofp_parser=datapath.ofproto_parser# install flow table-miss flow entrymatch=ofp_parser.OFPMatch()actions=[ofp_parser.OFPActionOutput(ofproto.OFPP_CONTROLLER, ofproto.OFPCML_NO_BUFFER)]# 1\OUTPUT PORT, 2\BUFF IN SWITCH?self.add_flow(datapath, 0, match, actions)def add_flow(self, datapath, priority, match, actions):# 1\ datapath for the switch, 2\priority for flow entry, 3\match field, 4\action for packetofproto=datapath.ofprotoofp_parser=datapath.ofproto_parser# install flowinst=[ofp_parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions)]mod=ofp_parser.OFPFlowMod(datapath=datapath, priority=priority, match=match, instructions=inst)datapath.send_msg(mod)@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)def packet_in_handler(self, ev):msg=ev.msgdatapath=msg.datapathofproto=datapath.ofprotoofp_parser=datapath.ofproto_parser# get datapath id to identify openflow switchdpid=datapath.id         #dpid=datapath idself.mac_to_port.setdefault(dpid,{})# save info# parser and analyse the received packetspkt=packet.Packet(msg.data)eth_pkt=pkt.get_protocol(ethernet.ethernet)dst=eth_pkt.dstsrc=eth_pkt.srcin_port=msg.match['in_port']self.logger.info("packet in %s %s %s %s",dpid,src,dst,in_port)# learn the relationship between source mac address and ports to avoid Flood next timeself.mac_to_port[dpid][src]=in_port# if the dst mac address exists, decide which port to send the packet# otherwise Flood (Don't know which port lead to the dest port)if dst in self.mac_to_port[dpid]:out_port=self.mac_to_port[dpid][dst]else:out_port=ofproto.OFPP_FLOOD# build actionsactions=[ofp_parser.OFPActionOutput(out_port)]# install a new flow ruleif out_port != ofproto.OFPP_FLOOD:match=ofp_parser.OFPMatch(in_port=in_port,eth_dst=dst)self.add_flow(datapath, 1, match, actions)# send a packet-outout=ofp_parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id, in_port=in_port, actions=actions)datapath.send_msg(out)

而运行的方法也很简单,如下命令行(一定要切到ryu/ryu/app下):
ryu-manager learning_switch.py --verbose

!!!编写的应用代码一定要放置在ryu/ryu/app文件夹下

SDN初步:Mininet(SDN测试平台)Ryu(SDN控制器)相关推荐

  1. 基于Mininet平台的SDN拓扑实现

    文章目录 环境搭建 mininet介绍 使用可视化创建网络拓扑 通过命令行创建网络拓扑 通过python创建网络拓扑 使用mininet创建网络拓扑 基于可视化 基于命令行 基于python 环境搭建 ...

  2. SDN 与 Mininet 概述

    SDN 全名为(Software Defined Network)即软件定义网络,是现互联网中一种新型的网络创新架构,其核心技术 OpenFlow 通过网络设备控制面与数据面分离开来,从而实现网络流量 ...

  3. SDN的Mininet使用

    SDN的Mininet使用 1.基本使用 a.使用MOOC指定的虚拟机导入到VM WorkStatation b.进入命令行测试mininet 因为该虚拟机的环境已经安装好了,我们只需要使用即可. 2 ...

  4. SDN你必须知道的十大问题——SDN有哪些开源项目

    SDN之所以能够发展的如此之快,其中开源社区的贡献不容忽视.随着SDN 各类社区的不断发展状大,开源项目也在不断增多,从控制器到交换机再到网络虚拟化,开源项目一度让小编眼花缭乱.可能你熟悉OpenDa ...

  5. 生动的SDN基础内容介绍(五)--SDN北向协议/接口和意图驱动

    生动的SDN基础内容介绍(五)--SDN北向协议/接口和意图驱动 背景 北向协议 REST API REST API在Ryu中的实现 意图驱动 总结 背景 经过前几章的讲解,现在回过头来再看看SDN的 ...

  6. SDN你必须知道的十大问题——SDN明星级研究团队

    编者按:近年来SDN市场增长势头日益强劲,学术界也一直为SDN部署和网络管理进行更加深入的研究,从网络编程语言到控制器架构设计,再到网络监测和故障解决,SDN的研究者们决心通过SDN来改变网络的未来. ...

  7. 生动的SDN基础内容介绍(六)--SDN应用平面和网络测量

    生动的SDN基础内容介绍(六)--SDN应用平面和网络测量 背景 网络测量 网络测量的定义 网络测量的对象 网络状态参数 网络性能参数 网络流量参数 Heavy Hitter和Hierarchical ...

  8. sdn主要包含哪些接口_解读SDN的东西、南北向接口

    北向接口(Northbound Interface)是为厂家或运营商进行接入和管理网络的接口,即向上提供的接口. 南向接口(Southbound Interface)是提供对其他厂家网元的管理功能,支 ...

  9. Java微信公众号开发之初步认识微信公众平台

    一. 初步认识微信公众平台 1.微信公众号是什么? 官网的介绍:再小的个体也有品牌. 2.微信公众平台,就是我们平时所说的"公众号",在我刚接触微信开发时,微信公众平台的开发已经是 ...

最新文章

  1. 【深度好文】我们的未来在哪里?
  2. 字符输入流读取字符数据
  3. java wmi_WMI依赖服务使用WMI查询
  4. webpack钩子调用shell笔记
  5. 计算机二级晓云是企业人力,全国计算机二级Ms-Office精选真题试卷
  6. 2016年最值得学习的五大开源项目
  7. python爬取付费音乐包_python爬虫如何下载QQ音乐付费歌曲2020最新版
  8. html 打开 app,h5页面打开app
  9. 值得学习17个C/C++ 超经典开源项目,面试加分
  10. 软件开发人员转型指南
  11. python中Could not find module “...atari_py\ale_interface\ale_c.dll‘ (or one of its dependence)
  12. 移动开发视频资源百度网盘地址分享
  13. 手机app开发需要哪些技术?
  14. 悦联 android auto,马自达6兼容Apple CarPlay和Android Auto系统 三款车载屏幕吸睛
  15. 项管行知05--可交付成果
  16. 沈阳师范大学大一上册C语言PTA题目集以及答案(第三章 循环结构程序设计 编程题篇)
  17. 菜鸟教程 + Java基础课程 + part2
  18. 妙不可言,Sklearn 做异常检测这么简单
  19. 对象数组根据多个属性排序
  20. 2014迅雷校园招聘笔试题

热门文章

  1. 【愚公系列】2023年01月 Java教学课程 030-static关键字
  2. shell脚本之正则表达式与文本编辑器(一)
  3. dokuwiki常用操作
  4. 欧美、日韩经典歌曲推荐(收藏)
  5. xilinx mmult
  6. VBA实现矩阵快速求幂
  7. openid和unionid的区别
  8. Fast spectral clustering learning with hierarchical bipartite graph for large-scale data
  9. emmc tuning test-sw tuning
  10. [数据压缩]WAV文件格式分析及AVI数据结构分析