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

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

背景

经过前几章的讲解,现在回过头来再看看SDN的架构
SDN的架构

自底向上看一遍:
1、网络设备就是交换机,也就是上一章提到的OVS。

2、南向协议就是OpenFlow协议。

3、SDN控制器有很多种,我们之前关注的是Ryu。

现在就剩北向协议和应用平面了。

这章会关注北向协议和意图驱动,下章会以网络测量为例子说一下应用平面。

北向协议

北向协议/接口的定义:

SDN北向接口是通过控制器向上层业务应用开放的接口,其目标是使得业务应用能够便利地调用底层的网络资源和能力。
通过北向接口,网络业务的开发者能以软件编程的形式调用各种网络资源;同时上层的网络资源管理系统可以通过控制器的北向接口全局把控整个网网络的资源状态,并对资源进行统一调度。
因为北向接口是直接为业务应用服务的,因此其设计需要密切联系业务应用需求,具有多样化的特征。
同时,北向接口的设计是否合理、便捷,以便能被业务应用广泛调用,会直接影响到SDN控制器厂商的市场前景。

来源:
https://zhuanlan.zhihu.com/p/74465580

打住!说了这么多其实可以总结为一句话:

北向协议就是用户与控制器沟通的渠道。

那怎么理解呢:

用户说我现在想删除一个交换机里面的一个流表项,具体的删除逻辑是控制器干的事情,用户只需要告诉控制器他想删掉交换机1的匹配域为“目的ip:10.0.0.1”的那个流表项。

好,用户只表达了三个需求:
1、交换机1
2、匹配域为“目的ip:10.0.0.1”
3、删除这个流表项

具体怎么干用户才懒得去弄,直接让控制器去决定怎么删除,具体的删除逻辑是什么样子的。

按前几章的比喻其实就是,甲方给领导提了三个要求,领导想怎么干就怎么干,只要最后完成了这三个要求就可以。

也就是说北向协议将底层的具体实现抽象化了。

北向协议有很多,也没有规定说是一定要用哪个,因为Ryu用的是REST API,而且REST API在当今的软件开发中也是一种很主流的风格,因此这里我只介绍一下REST API。

REST API

REST API不是一个什么新的技术,它只是一种风格,把之前章节的部分内容搬过来。

REST (Representational State Transfer) API,这是Roy Fielding在2000年提出的一种架构风格或设计原则。REST的原则是将系统中的所有事物抽象为URL表示的资源。客户端可以通过 HTTP 请求(如 GET、POST、PUT、DELETE等)来操作资源。服务器收到请求后会根据不同的方法采取不同的响应,最终将数据以XML、JSON等格式返回给客户端。

说白了就是用URL表示资源然后用GET/POST等常见的动作来对资源进行操作。

一些更详细的讨论可以看
https://www.zhihu.com/question/28557115

我认为REST API为什么被大家喜爱主要有两个优点:
1、简单:
这种设计风格十分简洁易懂,因为大家都接触过HTTP协议,对URL请求也不陌生,以上一章用过的http://127.0.0.1:8080/stats/flow/1为例,很容易就能理解这是对flow流表的查询,最后的1就表示是对交换机1的查询,结合起来就是对交换机1的流表进行查询,是不是很容易理解。

还有就是使用上的简单,大家已经习惯了client-server形式的资源请求,在使用相似的REST API的时候就很容易了。

2、通用性:
由于互联网的快速发展,各种客户端应用和服务器应用层出不穷,REST API可以通过一套一致的接口为各种应用提供服务。换到SDN这里来说就是不管上层应用是啥,只要你们按着我提供好的接口给我发http请求,我就帮你干活。

尽管在SDN里没有明确的client-server结构,但是也可以这么抽象地理解:

用户,也就是应用平面,是client
控制器,也就是帮用户干活的,是server

然后REST API就可以完美地契合进去:
SDN中的client-server结构

REST API在Ryu中的实现

ofctl_rest.py实现了很多REST API,上一章已经介绍过了,详情见
https://www.freesion.com/article/8090870623/

但是这些都是Ryu预定义好了的,我们如果想自己定义新的该怎么办?
比如说我的毕设需要我自己实现一些REST API来完成应用层与控制层的通信。

让我们看一下Ryu控制器给我们写好了的示例:simple_switch_rest_13.py
详情见
https://osrg.github.io/ryu-book/en/html/rest_api.html

# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import json

from ryu.app import simple_switch_13
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER
from ryu.controller.handler import set_ev_cls
from ryu.app.wsgi import ControllerBase
from ryu.app.wsgi import Response
from ryu.app.wsgi import route
from ryu.app.wsgi import WSGIApplication
from ryu.lib import dpid as dpid_lib

simple_switch_instance_name = 'simple_switch_api_app'
url = '/simpleswitch/mactable/{dpid}'


class SimpleSwitchRest13(simple_switch_13.SimpleSwitch13):

    _CONTEXTS = {
   'wsgi': WSGIApplication}

    def __init__
第1 章 概述 .............................................................................. 1 第1.1 节 关于OpenFlow ....................................................................................................... 1 第1.2 节 关于本文 ................................................................................................................. 2 第2 章 Openflow ...................................................................... 3 第2.1 节 概述 ......................................................................................................................... 3 第2.2 节 交换机组成 ............................................................................................................. 3 第2.3 节 流表 ......................................................................................................................... 3 2.3.1 包头域 ..................................................................................................................... 4 2.3.2 计数器(counter) ................................................................................................ 5 2.3.3 行动(action) ....................................................................................................... 6 2.3.4 匹配 ......................................................................................................................... 8 第2.4 节 安全通道 ................................................................................................................. 9 2.4.1 of 协议 .................................................................................................................... 9 2.4.2 连接建立 ............................................................................................................... 10 2.4.3 连接中断 ............................................................................................................... 10 2.4.4 加密 ....................................................................................................................... 10 2.4.5 生成树 ................................................................................................................... 10 2.4.6 流表修改 ............................................................................................................... 11 2.4.7 流超时 ................................................................................................................... 12 第2.5 节 of 协议 .................................................................................................................. 12 2.5.1 of 协议头 ............................................................................................................. 12 2.5.2 常用数据结构 ....................................................................................................... 14 2.5.3 Controller‐to‐Switch 消息 .................................................................................... 23 2.5.4 Asynchronous 消息 ............................................................................................... 35 2.5.5 Symmetric 消息 .................................................................................................... 40 第2.6 节 规范1.1 更新内容 .................................................... Error! Bookmark not defined. 第3 章 OpenvSwitch ............................................................... 42 第3.1 节 概述 ....................................................................................................................... 42 第3.2 节 特性 ....................................................................................................................... 42 第3.3 节 代码 ....................................................................................................................... 42 第3.4 节 命令 ....................................................................................................................... 43 第4 章 NOX ............................................................................ 44 第4.1 节 网络操作系统 ....................................................................................................... 44 II 第4.2 节 模型 ....................................................................................................................... 44 第4.3 节 架构 ....................................................................................................................... 45 4.3.1 组件 ....................................................................................................................... 45 4.3.2 操作 ....................................................................................................................... 45 4.3.3 多粒度处理 ........................................................................................................... 46 4.3.4 开发实现 ............................................................................................................... 46 第4.4 节 安装 ....................................................................................................................... 47 4.4.1 步骤 ....................................................................................................................... 47 4.4.2 依赖 ....................................................................................................................... 48 4.4.3 选项 ....................................................................................................................... 48 4.4.4 校验 ....................................................................................................................... 49 第4.5 节 应用 ....................................................................................................................... 49 4.5.1 框架 ....................................................................................................................... 49 4.5.2 运行与接口 ........................................................................................................... 50 4.5.3 例程 ....................................................................................................................... 50 第4.6 节 开发 ....................................................................................................................... 51 4.6.1 组件 ....................................................................................................................... 51 4.6.2 事件 ....................................................................................................................... 54 4.6.3 开发例程 ............................................................................................................... 57 第4.7 节 GUI ......................................................................................................................... 58 4.7.1 运行GUI ................................................................................................................ 58 4.7.2 扩展GUI ................................................................................................................ 59 第4.8 节 相关工作 ............................................................................................................... 61 第5 章 Mininet ....................................................................... 62 第5.1 节 概述 ....................................................................................................................... 62 第5.2 节 主要特性 ............................................................................................................... 62 第5.3 节 镜像获取使用 ................................................................................................... 62 5.3.1 获取镜像 ............................................................................................................... 62 5.3.2 使用镜像 ............................................................................................................... 63 5.3.3 更新 ....................................................................................................................... 63 第5.4 节 简单测试 ............................................................................................................... 63 5.4.1 创建网络 ............................................................................................................... 63 5.4.2 查看信息 ............................................................................................................... 64 5.4.3 对节点进行单独操作 ........................................................................................... 64 第5.5 节 常用操作 ............................................................................................................... 65 5.5.1 快捷测试 ............................................................................................................... 65 5.5.2 自定义拓扑 ........................................................................................................... 65 5.5.3 使用友好的mac 编号 .......................................................................................... 66 5.5.4 使用XTerm ........................................................................................................... 66 5.5.5 链路操作 ............................................................................................................... 67 III 5.5.6 指定交换机跟控制器类型 ................................................................................... 67 5.5.7 名字空间 ............................................................................................................... 67 5.5.8 启动参数总结 ....................................................................................................... 68 5.5.9 常用命令总结 ....................................................................................................... 68 5.5.10 其他操作 ............................................................................................................... 69 第5.6 节 高级功能 ............................................................................................................... 69 5.6.1 dpctl ...................................................................................................................... 69 5.6.2 控制器 ................................................................................................................... 70 5.6.3 交换机与控制器交互 ........................................................................................... 70 5.6.4 使用NOX............................................................................................................... 71 5.6.5 多条配置命令 ....................................................................................................... 72 第5.7 节 代码分析 ............................................................................................................... 72 5.7.1 bin 子目录 ............................................................................................................. 72 5.7.2 mininet 子目录 ..................................................................................................... 73 5.7.3 custom 子目录 ...................................................................................................... 74 5.7.4 examples 子目录 .................................................................................................. 74 5.7.5 其他文件 ............................................................................................................... 75 第6 章 相关项目 .................................................................... 77 第6.1 节 Openflow ............................................................................................................... 77 第6.2 节 OpenvSwitch ......................................................................................................... 77 第6.3 节 NOX ....................................................................................................................... 77 第6.4 节 Mininet .................................................................................................................. 77
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值