SDN与OpenFlow架构--初识
一,为什么需要SDN
1,传统网络的缺点:
a,传统网络及其设备的只可配置,不可编程,只能按照已定义好的协议处理或转发数据,不能适应需求新变化,不能自主开发新功能。
如购买一个电饭煲,可以煮饭,煲汤。但是我突然想煮玉米,这就不行了。
b,网络的分布式控制与管理架构带来的制约。如果在网络中新增加一个设备,其流经链路上的网络设备在规划和配置上可能都要发生变化。
网络的部署,配置与管理需要落到每台设备上去手工完成,每个设备都紧耦合了三个层面,分别是管理平面,控制平面,数据平面。
- 管理平面:配置和管理网络设备提供用户访问界面或窗口(命令行或图形界面)。
- 控制平面:路由表,MAC表和MPLS标签表等控制表是数据平面数据转发的依据。
- 数据平面:根据控制平面相关控制表给出的信息,进行具体的报文处理或转发。
2,SDN的出现:
a,SDN的设计思想:
- 解耦:将控制平面和管理平面提取出来,在转发设备上只留下数据平面;实现了控制平面和数据平面的解耦,通过控制器管理其所属的转发设备,这些转发设备没有路由器,交换机之分。
- 抽象:将SDN架构按照计算机模型抽象成SDN模型,OpenFlow交换机模型,NOS(网络操作系统)操纵下的全局网络视图。
- 可编程:除了传统的命令行接口和网关协议,还可以通过Shell脚本,Python脚本对整个网络进行管理。
控制逻辑和数据转发分离和网络可编程是SDN最为显见的优势。
b,SDN三层架构:SDN将传统转发设备中的控制平面提取成控制器,将管理平面提取成各类应用
三层架构是如何运作的:如果我只想让基础设施层的设备实现集线器的功能,我可以在应用层编写一个Python脚本,交给控制器,每当基础设备有数据不知道怎么处理时,它会把这个包交给控制器处理,控制器执行脚本后将会回复这个基础设备应该向哪里转发,似乎就是一个数据包经过了一个集线器一样。
所以我们可以在应用层编写不同的脚本去自定义数据报的处理方法。
二,OpenFlow架构
OpenFlow三层架构是ONF定义的SDN主流技术架构,对转发面进行了标准化,控制层与转发层采用OpenFlow协议。
OpenFlow架构如下:
4大平面和2大接口
~~四大平面:
- 应用平面:主要处理负载均衡,访问控制,应用加速等问题
- 控制平面:核心是控制器(也叫网络操作系统NOS),主要将SDN应用层请求转换到SDN Datapath(如上面所说的Python脚本)和为SDN应用提供底层网络抽象模型(通过不断与底层交换机的交互保持实时更新)
- 数据平面:网元和它所包含的SND数据通路就像是传统网络中,二级交换级和MAC表。区别在于MAC表是二级交换机自己生成的,而SDN数据通路是控制器下发的
- 管理平面:负责静态工作,如网元初始化配置,指定控制器和定义控制器应用范围等
~~两大接口:
- 北向接口:向应用层提供抽象的网络视图,使应用能直接控制网络的行为;
控制器将网络能力封装后开放接口,供上层应用调用。
直到目前,还没有一个标准的北向接口协议,REST API成为SDN北向接口的主流设计。
- 南向接口:实现转发行为控制,设备性能查询,同级报告,事件通知等功能。最流行的南向接口协议是OpenFlow协议。下图是控制器通过OpenFlow1.0协议和交换机交互
顺便,也说一下东西向接口
因为控制器为了提高处理效率和减轻控制器的压力,类似于DNS服务器,采取的分布式布局(如Google B4网络架构)。借助东西接口,可以选举和协同控制器,切换主备控制器等。
~~ OpenFlow架构需要理解的三个组成部分:
- 流表:指示交换机如和进行流的处理。
- 安全通道:负责控制器与交换机之间的交互,也就是走一些相关的OpenFlow协议。
- OpenFlow协议:定义了一种南向接口标准。
三,OpenFlow协议详解
1,OpenFlow协议的版本:
到目前为止一共有1.0到1.5这6个版本,其中1.0和1.3版本是最常用,稳定的版本。
- OpenFlow1.0=》只支持 Ip4,和以下各个版本不兼容
- OpenFlow1.1:流水线,组表,形成流水线处理流表匹配的各个过程,能避免单流表过度膨胀的问题
- OpenFlow1.2 :可扩展匹配,多控制器,IP6
- OpenFlow1.3 :计量表(控制关联流表的数据包的传输效率),IP6扩展头,支持的匹配关键字增加到40个
- OpenFlow1.4 :在1.3增加流表同步机制(多个流表可以共享相同的匹配字段,还可以定义不同的动作)
- OpenFlow1.5 :在入向匹配的基础上增加出向流表
1.3版本及以后控制器通过OpenFlow协议与交换机交互
2,流表项:
每个流表都有特定条目的流表项(Flow entry),每个流表项里包括动作(丢弃,转发,交给下一个流表等)。传统网络对匹配到的流只有两种处理,丢弃或转发。
当然,流表中不会只有动作这一个流表项,以OpenFlow1.0为例,还有源目IP,MAC地址等,这些数据放在包头域中,它们决定了交换机执行怎样的动作;同时还有计数器,以监测流的动向,实现流量可视化,充分利用链路。
OpenFloqw1.0中的动作
OpenFlow可以对数据包头部进行修改,这是跟传统网络最大的区别
到了OpenFlow1.3版本,流表项变成了
- 包头域改为匹配域,增加优先级,动作改为指令,增加超时时间和cookie)
- 优先级用于标志流表项匹配的优先次序,优先级越高越早匹配,默认优先级为0
- 计数器主要对每张表,每个端口,每个流等进行计数,方便流量监管(如多少流量流经这个端口,这张表查找了多少次)
- 通过指令可以生成动作集(动作集里的动作按顺序执行)
3,流表匹配:
OpenFlow1.1版本:多流表的流表匹配称为流水线处理,交换机从流表0开始查找,序号从小到大;每个包按照流表的优先级依次去匹配流表中表项,优先级高的优先匹配,一但匹配成功,对应的计数器将立即更新;如果没能找到匹配的表项,则转发给控制器。
1.3版本及以后的
区别:a,之前匹配到表直接执行动作,现在可能会先丢到动作集里去
b,没有表匹配,之前是交给控制器,丢弃或交给下一个流表。现在,table-miss是一个参数(即流表项只要存在这个参数,就算未匹配也
会往动作集里加动作),用于解决未匹配流的丢弃和转发问题 。table-miss是通过将匹配域的所有字段(所有网络字段都可能作为匹配域)
均改为通配符ANY来实现的。
c,当流表项的指令集中不包含GoTo-Table时,才执行动作集里的动作。
另一种表示:
Tip:对动作集的相关操作
由于流水线匹配是按照流的特征据决定处理的方法,所以流表项都有相应的指令集。但是有些指令集对不同流都是适用的,例如:不同的流可能会有相同的下一条IP地址
这时如果每个流表项都添加这个动作,则会在一定程度上造成资源的浪费,影响数据平面转发的效率。于是就是有了=》
组表:OpenFlow交换机只含有一个组表,独立与流水线之外。组表中包含许多组表项,每条组表项的结构如下:
4,如何生成流表
首先需要了解交换机与控制器之间的交互
- Hello:建立连接用Hello初始化
- Features Request就是控制器问交换机有什么功能。如接口,配置,地址,宽带信息等
- set config,控制器做一个简单的适合交换机的设置 =》至此,交换机和控制器相互认识
- packet in 如果交换机缓存足够,只会将分组头信息和在缓存里的序号发给控制器;如果缓存不足,则会将整个数据分组封装进Packet-in消息发送给控制器
如:pc1 ping pc2,但是交换机没有流表,不知道往哪个接口发,就需要先把这个包打包好向控制器申请流表
- packet out 封装好数据分组传给OF交换机
- port status 如端口被shot down掉,端口寻址到新的mac地址,维持网络视图的实时更新。
Flow-mod:下发流表项如(match *,output all)广播数据包=》这样就让交换机变成了集线器。也可以删除和修改流表。
OpneFlow v1.0中的Flow-mod消息格式
OpenFlow协议三类消息:
5,举个例子:
假设初始化一个最为简单SDN模型,主机h1想 ping 一下h2,会经历哪些过程?
- h1向交换机发送arp包
- 交换机将arp包封装packet-in给控制器
- 控制器packet out给交换机一个流表项,因为这个模型是刚初始化的,所以交换机里没有流表,控制器将会命令这个交换机广播这个数据包来寻找h2
- h2收到交换级转发的arp request,回复自己的mac和ip等信息
- 交换机收到h2发来的arp reply,交换机不知道怎么转发,再次packet-in
- 控制器更新,下发流表项
- 交换机从控制器所指定的端口将arp reply发送给h1
6,OF-CONFIG协议:
提供一个开放接口用于远程管理和配置OF交换机
作为OpenFlow协议的伴侣协议,构建流表和控制流的走向等由OpenFlow控制,但在交换机上配置控制器IP地址,如何配置交换机端口上的队列则由OF-CONGIF协议完成。
OF-CONFIG提供配置OF交换机的能力,这里所指的OF交换机可以是一个物理交换机,也可以是一个虚拟的网络转发设备。
四,SDN的发展现状
- 现阶段多数厂商推出的SDN硬件交换机都是支持混合模式的,利用本身已有的操作系统优势,在系统里增加对OpenFlow协议的支持。
具体思路是数据分组进入混合模式交换机后,交换机根据端口或VLAN进行区分,亦或经过一级流表的处理,以决定是传统模式还是SDN模式。
- 加速商业化,使得传统网络设施支出比例缩水;朝着流量可视化的方向发展。
- 目前面对的挑战:组织机构上的障碍:将SDN控制重构视为对控制命令乃至工作的威胁;复杂的社会性挑战:角色和权力的改变。
SDN与OpenFlow架构--初识的更多相关文章
- [转]SDN与OpenFlow技术简介
http://blog.163.com/s_zhchluo/blog/static/15014708201411144727961/ 本文是2012年文章,对Openflow的发展.规范.应用和SDN ...
- 《软件定义网络:SDN与OpenFlow解析》
<软件定义网络:SDN与OpenFlow解析> 基本信息 原书名:SDN: Software Defined Networks 原出版社: O'Reilly Media 作者: (美)Th ...
- OpenvSwitch/OpenFlow 架构解析与实践案例
目录 文章目录 目录 前言 软件定义网络(SDN) 虚拟交换机(vSwitch) 为什么说云计算时代的 SDN 非常重要 OpenFlow 简介 Open vSwitch Open vSwitch 的 ...
- SDN原理 OpenFlow协议 -1
本文基于SDN原理视频而成:SDN原理 OpenFlow OpenFlow 协议 和 传统的路由选择协议 有很多相似的地方,同时在某些地方也具有一定的颠覆性. 路由表,由IP地址和子网掩码组成.MAC ...
- [cloud][sdn] openstack openflow opendaylight openvswitch
https://www.quora.com/What-is-the-relation-between-OpenStack-OpenDaylight-OpenFlow-and-Open-vSwitch- ...
- SDN原理 OpenFlow协议 -3
问题4:流表匹配 OF1.1版本 这是OF1.1版本的操作,引入了多流表,1.0版本并没有多流表. 多流表的匹配称为 流水线处理:交换机从流表0开始查找,按照流表序号从小到大匹配. 每个包按照优先级去 ...
- SDN原理 OpenFlow协议 -2
本文由SDN原理视频而成:SDN原理 流表 FlowTable --- OpenFlow的核心 问题3 流表项 Flow Entry 单流表(OpenFlow 1.0版本) -> 多流表(Ope ...
- SDN原理 OpenFlow协议 -4
通道 Channel 在前面的OpenFlow的内容中,我们提到了在交换层所采用的流表是控制层的Controller下发的,那么Controller是如何下发流表的呢?中间经过了哪些的流程和步骤?控制 ...
- SDP架构初识
实现零信任的框架主要有SDP和Google Beyondcorp模型,前者出现在乙方的安全解决方案中,后者多作为甲方落地零信任的参考.本文主要记录对SDP技术的一些初步认识. 一.SDP简介 SDP是 ...
随机推荐
- 28.qt quick-ListView高仿微信好友列表和聊天列表
1.视图模型介绍 在Qml中.常见的View视图有: ListView: 列表视图,视图中数据来自ListModel.XmlListModel或c++中继承自QAbstractItemModel或Q ...
- Redis事务操作
Redis事务操作 Redis事务本质: 一组命令的集合 , 一个事务中的所有命令都会被序列化 , 在事务执行过程中 , 会按照顺序执行 一次性 : 事务之间的事情,会一次性执行,而不是立刻执行 ...
- MySQL的可重复读级别能解决幻读问题吗?
之前在深入了解数据库理论的时候,了解到事务的不同隔离级别可能存在的问题.为了更好的理解所以在MySQL数据库中测试复现这些问题.关于脏读和不可重复读在相应的隔离级别下都很容易的复现了. 但是对于幻读, ...
- csp-s模拟测试52-53
留坑.... 改完题再说吧. 留坑....最近考得什么鬼??模拟53T1 u(差分) 一道差分题????然而考场没有想到如何维护斜率上的差分,事后经miemeng和cyf的生(xuan)动(xue)讲 ...
- C#调百度通用翻译API翻译HALCON的示例描述
目录 准备工作 参数简介 输入参数 输出参数 使用HttpClient 翻译工具类 应用:翻译HALCON的示例描述 准备工作 HALCON示例程序的描述部分一直是英文的,看起来很不方便.我决定汉化一 ...
- vscode中html和vue没有自动补全,需要怎么配置
先安装HTML Snippets插件 点击 文件-首选项-设置,然后根据以下操作 然后在setting.json中加入以下代码 然后就有提示了
- Java并发之Semaphore源码解析(一)
Semaphore 前情提要:在学习本章前,需要先了解笔者先前讲解过的ReentrantLock源码解析,ReentrantLock源码解析里介绍的方法有很多是本章的铺垫.下面,我们进入本章正题Sem ...
- 38、mysql数据库(pymysql及事务)
38.1.python之pymysql模块: 1.说明: pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 2.模块安装: pip install pym ...
- 使用Flash Builder 4.6出现 新建配置 失败 java.lang.NullPointerException错误
当看到这个错误的时候有点莫名奇妙的感觉,随后的第一反应是: 这跟我前些天安装的java的jre 1.8 有没有关联性.修改了设定,方法如下 "运行" -> "外部工 ...
- js 正则表达式 验证数字或字母
let reg= /^(^[0-9]*$)|(^[A-Za-z]+$)/ /*reg= /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]$/*/ if(!reg.test( ...