一:Ryu是主流SDN开源控制器之一

(一)推文(摘录自)

https://ryu.readthedocs.io/en/latest/

https://www.sdnlab.com/1785.html

(二)Ryu是什么

Ryu is a component-based software defined networking framework.  Ryu是一个基于组件的软件定义网络框架

Ryu provides software components with well defined API's that make it easy for developers to create new network management and control applications. 
Ryu为软件组件提供了定义良好的API,使开发人员能够轻松地创建新的网络管理和控制应用程序。 Ryu supports various protocols for managing network devices, such as OpenFlow, Netconf, OF-config, etc.  支持管理网络设备的多种协议
About OpenFlow, Ryu supports fully 1.0, 1.2, 1.3, 1.4, 1.5 and Nicira Extensions.  所支持的OpenFLow协议版本 All of the code is freely available under the Apache 2.0 license. Ryu is fully written in Python.  所有代码在Apache2.0许可下都是免费的,Ryu是使用Python开发的

(三)Ryu的架构

二:Ryu的安装

(一)git远程获取文件

git clone git://github.com/osrg/ryu.git

(二)安装Ryu依赖环境

cd ryu  需要先进入文件夹中
sudo pip install -r tools/pip-requires

(三)进行Ryu安装

sudo python setup.py install

(四)安装测试

1.常见问题及解决办法

2.安装测试

njzy@njzy-Inspiron-:/usr/local/bin$ ryu-manager

njzy@njzy-Inspiron-:/usr/local/bin$ sudo easy_install webob==1.2.3

这里有点尴尬了

参考:

https://blog.csdn.net/cyz14/article/details/79994548

https://ryu-devel.narkive.com/AvVCZ4OS/ryu-installation-error-the-ovs-distribution-was-not-found-and-is-required-by-ryu

https://blog.csdn.net/u012424148/article/details/88951559

实际:

因为Ubuntu下,还含有一个Python3版本安装的pip3,所以我将依赖和安装中pip全部改成pip3,就安装成功了

sudo pip3 install -r tools/pip-requires
sudo python3 setup.py install
ryu-manager

安装成功:

三:Ryu的源码目录

(一)base

base中有一个非常重要的文件:app_manager.py,其作用是RYU应用的管理中心。用于加载RYU应用程序,接受从APP发送过来的信息,同时也完成消息的路由。

其主要的函数有app注册、注销、查找、并定义了RYUAPP基类,定义了RYUAPP的基本属性。包含name, threads, events, event_handlers和observers等成员,以及对应的许多基本函数。如:start(), stop()等。

这个文件中还定义了AppManager基类,用于管理APP。定义了加载APP等函数。不过如果仅仅是开发APP的话,这个类可以不必关心。

(二)controller

controller文件夹中许多非常重要的文件,如events.py, ofp_handler.py, controller.py等。其中controller.py中定义了OpenFlowController基类。用于定义OpenFlow的控制器,用于处理交换机和控制器的连接等事件,同时还可以产生事件和路由事件。其事件系统的定义,可以查看events.py和ofp_events.py。

在ofp_handler.py中定义了基本的handler句柄,完成了基本的如:握手,错误信息处理和keep alive 等功能。更多的如packet_in_handler应该在app中定义。

在dpset.py文件中,定义了交换机端的一些消息,如端口状态信息等,用于描述和操作交换机。如添加端口,删除端口等操作。

其他文件以后再叙述

(三)lib

lib中定义了我们需要使用到的基本的数据结构,如dpid, mac和ip等数据结构。在lib/packet目录下,还定义了许多网络协议,如ICMP, DHCP, MPLS和IGMP等协议内容。而每一个数据包的类中都有parser和serialize两个函数。用于解析和序列化数据包。

lib目录下,还有ovs, netconf目录,对应的目录下有一些定义好的数据类型,不再赘述。

(四)ofproto

在这个目录下,基本分为两类文件,一类是协议的数据结构定义,另一类是协议解析,也即数据包处理函数文件。
如ofproto_v1_0.py是1.0版本的OpenFlow协议数据结构的定义,而ofproto_v1_0_parser.py则定义了1.0版本的协议编码和解码。具体内容不赘述,实现功能与协议相同。

(五)topology

包含了switches.py等文件,基本定义了一套交换机的数据结构。

event.py定义了交换上的事件。

dumper.py定义了获取网络拓扑的内容。

最后api.py向上提供了一套调用topology目录中定义函数的接口。

(六)contrib

这个文件夹主要存放的是开源社区贡献者的代码。

(七)cmd

定义了RYU的命令系统,具体不赘述。

(八)services

完成了BGP和vrrp的实现。

(九)tests

tests目录下存放了单元测试以及整合测试的代码

四:Ryu和Mininet联用

(一)开启控制器,使用二层交换

~/ryu/ryu/app$ ryu-manager simple_switch.py 

(二)开启Mininet

sudo mn --controller=remote  //不指定拓扑--默认是一个交换机下面挂两个主机  --controller=remote  是将mininet的控制器指向远端控制器 未指定ip,默认0.0.0.0或者本地IP 端口默认是在6635

SDN实验---Ryu的安装的更多相关文章

  1. SDN实验---Ryu的应用开发(二)Learning Switch

    一:自学习交换机(二层MAC交换机)的编程思路 (一)明确问题 如何实现软件定义的自学习交换机? (二)设计解决方案 通过控制器来实现自学习交换算法,然后指导数据平面实现交换机操作 (三)确定具体的技 ...

  2. SDN实验---Ryu的应用开发(一)Hub实现

    补充: (一)Ubuntu下安装Notepadqq 背景:为什么安装Notepadqq Notepad++ 不仅有语法高亮度显示,也有语法折叠功能,并且支持宏以及扩充基本功能的外挂模组.但是可惜的是N ...

  3. SDN实验---Ryu的应用开发(四)北向接口RESTAPI

    一:推文 软件定义网络基础---REST API概述 软件定义网络基础---REST API的设计规范 二:掌握Ryu基本RESTAPI使用方法 (一)Ryu的RESTAPI (二) REST应用样例 ...

  4. SDN实验---Ryu的应用开发(四)基于跳数的最短路径转发原理

    一:实现最短跳数转发 (一)原理 推文:迪杰斯特拉算法和弗洛伊德算法 二:代码实现 (一)全部代码 from ryu.base import app_manager from ryu.controll ...

  5. SDN实验---Ryu的源码分析

    一:安装Pycharm https://www.cnblogs.com/huozf/p/9304396.html(有可取之处) https://www.jetbrains.com/idea/buy/# ...

  6. SDN实验---Ryu的应用开发(三)流量监控

    一:实现流量监控 (一)流量监控原理 其中控制器向交换机周期下发获取统计消息,请求交换机消息------是主动下发过程 流速公式:是(t1时刻的流量-t0时刻的流量)/(t1-t0) 剩余带宽公式:链 ...

  7. SDN实验---使用git安装Mininet

    0:补充Ubuntu截屏 截全屏 printscreen 截取当前窗口 alt + printscreen 截取任意矩形 shift + printscreen 截取全屏到剪切板 ctrl + pri ...

  8. SDN实验---Mininet实验(玩转流表)

    一:实验目的 (一)案例目的 (二)实验内容 (三)网络拓扑结构 二:OpenFlow流表实验准备 (一)使用Python设置网络拓扑 --- tree_topo.py from mininet.to ...

  9. 汇编实验15:安装新的int 9中断例程

    汇编实验15:安装新的int 9中断例程 任务 安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不在松开,一旦松开后,就显示满屏幕的“A”,其他键照常处理. 预备知识概要 这次实 ...

随机推荐

  1. Gerrit 服务器入门使用-项目的创建与克隆

    Gerrit 服务器入门使用-项目的创建与克隆 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.创建克隆项目 1>.点击"BROWSE" 2>.点 ...

  2. LeetCode LCP 3 机器人大冒险

    题目解析: 对于本题主要的核心是对于一个指令字符串如“RURUU”,如果我们假设它的终点坐标为(8,8),其实只要统计指令字符串中的R的个数和U的个数(对于我给出的例子而言,num_R == 2,nu ...

  3. Alpha冲刺(7/10)——追光的人

    1.队友信息 队员学号 队员博客 221600219 小墨 https://www.cnblogs.com/hengyumo/ 221600240 真·大能猫 https://www.cnblogs. ...

  4. 项目Alpha冲刺 9

    作业描述 课程: 软件工程1916|W(福州大学) 作业要求: 项目Alpha冲刺(团队) 团队名称: 火鸡堂 作业目标: 介绍第9天冲刺的项目进展.问题困难和心得体会 1.团队信息 队名:火鸡堂 队 ...

  5. Python应用-完成简单邮件发送功能

    项目中有时候需要用脚本来自动发送邮件,而用Python来发送邮件十分的方便,代码如下: #!/usr/bin/python #coding:utf-8 import smtplib from emai ...

  6. 学习Microsoft Visio(1)

    基础篇 一.认识Visio 1.Visio是什么 Visio最初属于Visio公司,该公司成立于1990年9月.1992年,公司更名为Shapeware.同年11月,它发布了他们公司的第一个产品:Vi ...

  7. Hive中的SQL执行计划--几乎所有的SQL都有

    explain SQL 会解释SQL的执行过程

  8. xrange和range的区别?

    range: 函数说明,range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个列表. xrange:函数说明,xrange 用法与 ...

  9. Jmeter扩展自定义函数

    步骤1.导入lib\ext下ApacheJMeter_core.jar和ApacheJMeter_functions.jar 步骤2.新建function的类的package声明必须已".f ...

  10. LOJ P10011 愤怒的牛 题解

    每日一题 day36 打卡 Analysis 非常水的二分模板,就直接二分答案,用贪心策略check就好了 #include<iostream> #include<cstdio> ...