【SDN控制器分析之一】ONOS架构概述

2023-05-16

ONOS 设计目标

ONOS是一个采用OSGI技术来管理子项目的SDN控制器开源项目,在最初设计时有这么几个目标是明确的:

  • 代码模块化:支持把新的功能作为新的独立单元引入
  • 特性可配置:无论是在启动还是运行时,支持动态加载和卸载特性
  • 协议无关:应用不需要和具体的协议库和实现绑定

模块化的实现:ONOS项目由一组子项目组成,每个项目都有自己的源代码树,可以独立构建。为此,ONOS的源码采用分层的方式来组织以方便利用Maven的级联POM文件组织。每个子项目都有自己的pom.xml文件和目录,子pom.xml文件会继承父Pom文件的共享依赖项和配置,使它们能够独立于不相关的子项目构建。Root目录包含用于建立完整的项目及其所有模块的顶层POM文件。

特性可配置:ONOS使用Karaf作为其OSGI框架,除了在运行时的动态模块加载和启动时的依赖解析,Karaf还支持以下几个特性。

  • 支持使用标准的JAX-RS API来开发安全的API接口
  • 支持将特性定义为一组Bundle来进行集中的自定义设置
  • 对代码包有严格的语义版本声明,包括第三方依赖
  • 有易扩展的命令行框架,支持本地和远端的SSH控制台登陆
  • 支持不同日志级别的记录

协议无关,ONOS 被划分为以下几个部分:

  • 和网络交互的协议感知模块
  • 协议无关的系统Core,跟踪和服务网络状态信息
  • 基于Core提供的系统信息来进行消费和操作的应用

上面的每一层都是分层体系结构,其中面向网络的模块通过一个南向(提供者)API与Core进行交互,Core与应用程序通过北向(消费者)API进行交互。南向API定义了协议中立的手段将网络状态信息传递给核心,Core通过面向网络的模块与网络设备交互。北向API为应用程序提供了描述网络组件和属性的抽象,以便它们可以根据策略定义其所需的动作。

这里写图片描述

系统组件

服务是一个功能单元,它由不同层的多个组件作为软件堆栈创建垂直切片。我们把组成服务的组件的集合称为子系统。

ONOS定义了不同的子系统:

  • 设备子系统-管理基础设施设备的库存。
  • 链路子系统-管理基础设施链接的库存。
  • 主机子系统-管理终端站主机及其在网络上的位置的库存。
  • 拓扑子系统-管理网络图视图的时间顺序快照。
  • path子系统计算/发现基础设施设备之间或端站的主机采用最新的拓扑图快照之间的路径。
  • FlowRule子系统-管理安装在基础设备的match/action流表项和统计流量。
  • Packet子系统-允许应用程序监听从网络设备接收到的数据包,并通过一个或多个网络设备向网络发送数据包。

下图阐述了现在ONOS所包含的各个子系统:
这里写图片描述

子系统结构

每个子系统的组件驻留在其中的三个主要层次,可以由一个或多个java所实现的接口标识。
下图概述了子系统组件之间的关系。图中的顶部和底部虚线表示分别由北向和南向API创建的层间边界。
这里写图片描述

Provider
该堆栈的最底层是Provider组件,Provider接口通过协议特定的库和底层设备打交道,并通过Provider Service接口与Core交互。
协议感知Providers负责使用各种控制和配置协议与网络环境交互,并向Core提供服务特定的感知数据。Provider也可以从其他子系统收集数据,将它们转换成特定于服务的数据。
Provider可能还需要从Core接受控制命令应用并通过适当的网络协议具体手段应用到网络中。这些都是通过Provider接口将这些内容送入Provider组件。

Provider ID
一个Provider与特定的Providerid相关。providerid的主要目的是提供一个Provider族的外部身份,这可以使设备和其他实体模型保持与负责他们的存在Provider相关联,甚至在Provider加载/卸载操作之后。
Providerid携带一个URI方案名称允许松散的配对与从另一个供应商的家庭提供设备,而这没有访问提供商本身是可能的。

Multiple Providers
子系统可以与多个Provider关联。在这种情况下,Provider被指定为主要的或附属的。主Provider拥有与服务相关联的实体,辅助提供者将其信息作为覆盖提供信息。如果任何覆盖导致与底层信息冲突,则此方法给予主Provider优先权。设备子系统是支持多个提供者的此类服务之一。

Manager
Manager是驻留在核心中的组件,其接收来自Provider的信息,并将其提供给应用程序和其他服务。它暴露了几个接口:

  • Northbound Service interface 应用程序或其他核心组件可以通过该接口了解特定方面的网络状态。
  • AdminService interface以管理员命令应用到网络或系统的状态。
  • Southbound ProviderRegistry interface 通过该接口Provider可以注册到Manager中,通过它可以和Manager进行交互。
  • Southbound ProviderService interface 提供给已经注册的Provider

Manager服务接口的消费者可以同步的查询Service的信息,也可以异步的作为一个事件侦听器(例如,通过使用listenerservice接口注册要监听的事件并实现相关的EventListener interface)。

Store
Store的具体实现和Core里面的Manager有很强的相关性,Store需要索引,持久化以及同步Manager收到的信息,这包括分布式ONOS多实例间的一致性和鲁棒性的保障,

Application
应用通过AdminService和Service接口来消费和操作Manager聚合的信息,应用程序具有广泛的功能,这里面就包括在Web浏览器中显示网络拓扑,为网络流量设置路径

Application ID
每个应用都有一个唯一的Application ID,这个标识用于追踪应用相关的上下文(任务和目标 比如Intent和FlowRule),为了获得一个有效的ID,应用需要注册到CoreService,注册他们的名字来进行反向域名解析,比如:org.onlab.onos.fwd

Events and Descriptions
两个在ONOS中分布的基本信息单元是事件和描述。与服务一样,事件和描述与特定的网络元素和概念相关联。两者都是一旦创建就不会改变的。

Descriptions
Descriptions用于在南向的API上传递关于元素的信息。例如,一个HostDescription包含一个主机的MAC和IP地址,在网络中的位置信息(VLAN ID和设备/端口的连接点)。Descriptions通常是由一个或多个模型对象组成。

Events
Manager使用Event通知其Listener关于网络中的变化,并通过Store通知相关的在分布式设置中的Peer。一个事件由一个事件类型和一个由对象模型构成的主题组成。例如,一个device event可通知devicelisteners,Device(主题)已经被发现(device_added),失去了(device_removed),或某一方面改变了(device_updated)。

Event dispatch
事件是由Store基于Manager的输入产生的。一旦产生,事件就会通过storedelegate接口被分发到感兴趣的听众,最终调用event deliveryservice。从本质上讲,Store Delegate把事件从Store中取出,event deliveryservice确保事件仅为感兴趣的听众接收。由于它们之间相互作用的方式,这两个组件驻留在Manager中并由那里的Manager提供storedelegate来做具体实现。

Event Listeners
Event Listener是实现EventListener接口的任何组件。 EventListener的子接口被按照监听事件的类型进一步的分类。典型的Event listener实现模式是将事件侦听器作为Manager或应用程序的内部类,从中从接收到的事件调用相应的服务。这限制了事件处理逻辑不需要对子系统外部进行暴露。

这里写图片描述

Network representations
模型对象是ONOS 协议无关方式来表示各种网络元素和属性。事件将这些表示作为它们的主体。这些表示是由Core从Description中找到的信息来构建的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【SDN控制器分析之一】ONOS架构概述 的相关文章

  • Ubuntu 16.04 安装onos 2.2.0

    之前使用了别人分享的安装好的p4虚拟机 xff0c 应该是这个人的 xff0c 不过我记得的是用的谷永普的 xff0c 当时还是从微云上下载的 xff0c 但是找不到了 不过无所谓 xff0c 本文不讲p4的安装 xff0c 有需要的 xf
  • IntelliJ IDEA 架构概述(面向插件开发者)

    原文未定稿 2014 11 这篇文章的目的是从插件开发者的视角描述IntelliJ IDEA的结构 文章将以一种任务驱动的方式组织 xff1a 相比列出所有你可以对各组件对象进行的操作并描述这些操作它们的实现方式 xff0c 这篇文章将尽可
  • onos实现driver的自动加载

    AbstractDriverLoader 已知driverAdminServer 根据path读取配置文件的内容 1 进入到XMLDriverLoader里 xff0c 根据XML 创建Provider gt XMLDriverLoader
  • ONOS-ifwd-app源码分析总结

    ONOS ifwd源码分析 xff0c 参考资料 xff1a https www sdnlab com 10297 html 在之前的文章中 xff0c 介绍了ONOS sample apps的获取 xff0c 但是将其生成的oar文件导入
  • SDN的HUB实验

    SDN的hub实验 首先需要搭建ryu控制器环境和mininet环境 使用winscp将hub的py代码上传到服务器啊贝云 使用命令搭建拓扑环境 mn topo 61 single xff0c 3 controller 61 remote
  • ONOS简介

    一 与ODL区别 ONOS与OpenDayLight 两个控制器之间的较量 ODL 立场 xff1a 设备厂商 xff1a Cisco Citrix Systems Red Hat Brocade Ericsson ClearPath HP
  • 集群源码安装ONOS

    集群源码安装ONOS 1 每一台待安装onos的配置 bin bash sudo mv apache karaf 3 0 3 tar gz opt sudo mv apache maven 3 3 1 bin tar gz opt cd o
  • SDN 中 DDoS 攻击问题(论文方法总结)

    SDN 中 DDoS 攻击类型 1 数据平面DDoS攻击 数据平面由多个启用OpenFlow的转发设备组成 这些设备被称为OpenFlow交换机 每个交换机都有一个有限的流表大小来存储规则和有限的处理能力来处理不匹配的数据包 xff0c 因
  • Mininet连接ONOS的一些问题

    Mininet连接ONOS的一些问题 一 启动ONOS二 简单小问题1 Mininet创建最简拓扑后连接不上远程控制器2 Mininet创建最简拓扑后主机之间ping不通3 不启动fwd应用自己通过REST API下发流表发现两台主机间pi
  • SDN你必须知道的十大问题——SDN有哪些开源项目

    SDN之所以能够发展的如此之快 xff0c 其中开源社区的贡献不容忽视 随着SDN 各类社区的不断发展状大 xff0c 开源项目也在不断增多 xff0c 从控制器到交换机再到网络虚拟化 xff0c 开源项目一度让小编眼花缭乱 可能你熟悉Op
  • 【SDN控制器】odl:0.6.4集群搭建遇到的问题

    一 环境 ubuntu16 04虚拟机 xff0c 使用odl的docker镜像 xff0c 建立三个odl容器 xff0c 进行端口映射 odl 1 sudo docker run it name odl 1 p 10001 8181 P
  • P4连接ONOS——导入ONOS虚拟机

    补充 xff1a 2020年5月11日 13点07分 近期有同学私信我安装过程中有这个报错 xff0c 如下图 根据报错信息 xff0c 似乎是下载这个包服务器501出错 xff0c 很可能是因为内网无法下载这个包 我忘记说了 xff0c
  • 基于IDEA分析ONOS源码

    1 安装Java依赖 sudo apt get install software properties common y amp amp sudo add apt repository ppa webupd8team java y amp
  • SDN介绍(什么是SDN)

    SDN介绍 一 xff0e 什么是SDN 二 xff0e SDN解决什么问题 xff1f 三 xff0e 传统网络概念和结构体系传统网络数据控制与转发 xff1a 传统网络架构 xff1a 四 xff0e SDN概述SDN xff08 So
  • OpenVSwitch数据面流表cache机制浅谈

    稍许笔墨写了一篇关于OpenVSwitch 以下简称OVS 的文章 https blog csdn net dog250 article details 103492099 但有些事情并没有说清楚 关于OVS的流表是如何映射成数据平面的Fl
  • OpenDaylight 控制器应用程序 (Sodium SR1) 缺少依赖项

    我按照此处的说明编写一个简单的 hello world RPC https docs opendaylight org en stable sodium developer guide developing apps on the open
  • SDN前沿技术【SMaRT-5G项目】

    目录 引言 节能方法 快速了解投资回报率 ROI ONF SMaRT 5G Initiative RAN 能量优化 方法 电池开 关方法 MIMO 睡眠和 RF 通道打开 关闭 高级睡眠模式 ASM RAN节能解决方案的
  • SDN前沿技术【SMaRT-5G项目】

    目录 引言 节能方法 快速了解投资回报率 ROI ONF SMaRT 5G Initiative RAN 能量优化 方法 电池开 关方法 MIMO 睡眠和 RF 通道打开 关闭 高级睡眠模式 ASM RAN节能解决方案的
  • 如何向 OpenDayLight Karaf 添加新功能?

    如何将新功能添加到 ODL Oxygen SR3 0 8 3 作为 Karaf 模块 例如 我从以下位置下载了预构建的 ODL 官方网站 https nexus opendaylight org content repositories p
  • java.lang.NoSuchFieldError:DEF_CONTENT_CHARSET

    我正在尝试运行 java 程序 但收到以下运行时错误 错误如下所示 Exception in thread main java lang NoSuchFieldError DEF CONTENT CHARSET at org apache

随机推荐

  • 信息化与数字化的区别

    数字化与信息化的区别 今日看到一篇文章 信息化与数字化的核心差异 xff0c 让我重新思考了这两个即熟悉又陌生的名词 xff0c 通过这篇文章和在B站上搜相对应的视频 xff0c 使我大致懂了一些 1 信息化是什么 xff1f 信息化是数据
  • 开启快乐之旅—【C#Winform&认识篇】

    入门学习 简单了解熟悉界简单操作1 xff1a 修改窗体标题2 xff1a 修改窗体图标3 xff1a 窗体出现位置4 xff1a 最大化 xff0c 最小化操作5 xff1a 是否任务栏显示form窗体6 xff1a 窗口大小 简单了解
  • ubuntu磁盘清理

    打开ubuntu software 搜索Bleachbit 安装即可 系统清理工具BleachBit使用 ubuntu清理磁盘空间的多种方法 Ubuntu上释放磁盘空间的几种简单方法 Ubuntu 安装 BleachBit 也可 1 查看电
  • 一些网站资源分享

    链接地址 网站地址 1 博客就是这个博客 2 音乐是我网易云歌单 3 图床是我保存的图库 4 西瓜导航里面有各种网站 5 钟馗之眼是一个爬虫全网某些特征的网站 6 罗马盘是资源网站 7 AI引擎 xff0c 体验智能的感觉 8 优店 xff
  • 软件工程的完整生命周期

    生命周期大体上分为11个步骤 xff0c 如下图 xff1a 第一步 xff1a 概念 创意 需求 产生 xff0c 这个环节一般是项目发起人完成 xff0c 也有可能由产品经理或收到反馈后发起 xff0c 很多时候是会带有这个项目的期望或
  • Qt-设置背景色的几种方式

    最近设置背景色 xff0c 被背景色搞得晕头转向 xff0c 然后总结了一下用过的方法与踩过的坑 xff0c 希望大家有所帮助 QLabel label 61 new QLabel CSS样式 xff0c 直接设置样式 xff0c 该方法对
  • C++ 如何获取数组/容器的长度?

    文章目录 一 获取数组的长度1 sizeof a sizeof a 2 end a begin a 二 获取标准库容器的长度三 数组作为函数参数时 xff0c 在函数中无法获取其长度 一 获取数组的长度 1 sizeof a sizeof
  • 计算机网络期末复习题

    1 请简述在划分子网的情况下 xff0c 路由器转发IP数据报的基本过程 答 xff1a 在划分子网的情况下 xff0c 路由器转发分组的算法如下 xff1a 1 从收到的数据报首部提取目的IP地址D xff08 1分 xff09 2 先判
  • Jetson TX1 TX2 IO 引脚设置

    有朋友问我引脚问题 xff0c 我就把一段文档摘抄在这里了 希望对大家有用 配置40引脚扩展接头 主屏幕 兼容的硬件屏幕 40引脚扩展标题屏幕 命令行界面 设备树覆盖 创建简单的设备树覆盖 为40针接头连接器创建自定义设备树覆盖 启动Jet
  • Android手机怎样投屏到win10(无需联网)

    一 前言 适用场景 xff1a 无可用wifi 想获得大屏观影体验 x1f601 二 具体操作 PC端 在Cortana处搜索 投影设置 投影到此电脑 处的设置如下如图 xff08 也可根据自己习惯调整 xff09 安卓端 华为手机为例 打
  • Windows远程控制ubuntu16.04的vnc教程(附灰屏和无鼠标只显示叉号的解决方案)

    VNC可远程Linux的桌面 xff0c 不仅仅只可以远程终端窗口 xff0c 操作起来要比ssh好用 xff0c 效果如图 VNC介绍 xff1a VNC Virtual Network Console xff0c 即虚拟网络控制台 xf
  • 联邦学习安全与隐私保护

    一 FL隐私保护方法 1 1 加密方法 通过将明文编码为密文的方式 xff0c 只允许特定人员解码 xff0c 为数据隐私保护提供了有效手段 xff0c 但往往需要较大的计算开销 xff0c 较难应用于实际场景中 安全多方计算 SMC研究的
  • vue - vue项目对axios请求的封装

    axios介绍 axios是基于promise的网络请求库 xff0c 可以在nodejs和浏览器中运行 在服务端axios使用原生的nodejs的http模块 xff0c 在客户端浏览器中则而是用xmlhttprequests xff0c
  • C++总结——语法篇

    Static关键字1 静态全局变量2 静态局部变量3 静态函数4 静态数据成员5 静态成员函数 引用引用与指针的区别 左值 右值 左值引用 右值引用 new delete与malloc free Static关键字 1 静态全局变量 sta
  • Android开发快速入门及导出apk

    环境及工具准备 jdk安装配置安装android studio或idea xff08 推荐直接使用idea xff0c android studio其实也是基于idea开发的 xff09 配置android sdk安装一个安卓模拟器 xff
  • 在阿里云搭建CENTOS7系统以及图形界面

    1 搭建CentOS7操作系统服务器 首先要购买服务器 xff0c 推荐学生认证可以获得好几个月的免费服务器 略去具体的过程 阿里云默认的系统不是CentOS7 xff0c 所以需要先将操作系统改成CentOS7 在实例的基本信息中 xff
  • linux基础学习,有相应的笔记文件XMind和Word(基于centos8(主要的)和Ubuntu20),里面有linux基本操作指令和JavaEE,大数据相关的shell。2021年4月26日

    前面的话 这篇文章是我学习linux的一个记录 xff0c 我是用XMind记笔记的 xff0c 然后转换为Word最后粘贴到这里的 xff0c 如果感兴趣的话 xff0c 可以下载我上传的文件 xff0c 都是免费的 xff0c 大家共同
  • MapReduce的详细使用

    MapReduce 文章目录 MapReduce1 常用数据序列化类型2 编程规范 xff08 三个阶段 xff09 Mapper阶段Reducer阶段Driver阶段 3 编程环境准备4 简单案例 单词统计 5 序列化序列化概述自定义 b
  • STM32-串口通信详解

    目录 前言 一 通信接口背景知识 1 并行通信和串行通信 2 串行通信的分类 二 STM32的串口通信基础 1 串口通信接口 2 串口通信框图 3 串口通信相关寄存器 4 波特率计算方法 三 库函数配置 1 串口配置一般步骤 总结 前言 众
  • 【SDN控制器分析之一】ONOS架构概述

    ONOS 设计目标 ONOS是一个采用OSGI技术来管理子项目的SDN控制器开源项目 xff0c 在最初设计时有这么几个目标是明确的 xff1a 代码模块化 xff1a 支持把新的功能作为新的独立单元引入特性可配置 xff1a 无论是在启动