一,为什么需要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架构--初识的更多相关文章

  1. [转]SDN与OpenFlow技术简介

    http://blog.163.com/s_zhchluo/blog/static/15014708201411144727961/ 本文是2012年文章,对Openflow的发展.规范.应用和SDN ...

  2. 《软件定义网络:SDN与OpenFlow解析》

    <软件定义网络:SDN与OpenFlow解析> 基本信息 原书名:SDN: Software Defined Networks 原出版社: O'Reilly Media 作者: (美)Th ...

  3. OpenvSwitch/OpenFlow 架构解析与实践案例

    目录 文章目录 目录 前言 软件定义网络(SDN) 虚拟交换机(vSwitch) 为什么说云计算时代的 SDN 非常重要 OpenFlow 简介 Open vSwitch Open vSwitch 的 ...

  4. SDN原理 OpenFlow协议 -1

    本文基于SDN原理视频而成:SDN原理 OpenFlow OpenFlow 协议 和 传统的路由选择协议 有很多相似的地方,同时在某些地方也具有一定的颠覆性. 路由表,由IP地址和子网掩码组成.MAC ...

  5. [cloud][sdn] openstack openflow opendaylight openvswitch

    https://www.quora.com/What-is-the-relation-between-OpenStack-OpenDaylight-OpenFlow-and-Open-vSwitch- ...

  6. SDN原理 OpenFlow协议 -3

    问题4:流表匹配 OF1.1版本 这是OF1.1版本的操作,引入了多流表,1.0版本并没有多流表. 多流表的匹配称为 流水线处理:交换机从流表0开始查找,按照流表序号从小到大匹配. 每个包按照优先级去 ...

  7. SDN原理 OpenFlow协议 -2

    本文由SDN原理视频而成:SDN原理 流表 FlowTable --- OpenFlow的核心 问题3 流表项 Flow Entry 单流表(OpenFlow 1.0版本) -> 多流表(Ope ...

  8. SDN原理 OpenFlow协议 -4

    通道 Channel 在前面的OpenFlow的内容中,我们提到了在交换层所采用的流表是控制层的Controller下发的,那么Controller是如何下发流表的呢?中间经过了哪些的流程和步骤?控制 ...

  9. SDP架构初识

    实现零信任的框架主要有SDP和Google Beyondcorp模型,前者出现在乙方的安全解决方案中,后者多作为甲方落地零信任的参考.本文主要记录对SDP技术的一些初步认识. 一.SDP简介 SDP是 ...

随机推荐

  1. jvm调优的几种场景

    假定你已经了解了运行时的数据区域和常用的垃圾回收算法,也了解了Hotspot支持的垃圾回收器. 一.cpu占用过高 cpu占用过高要分情况讨论,是不是业务上在搞活动,突然有大批的流量进来,而且活动结束 ...

  2. JSP三大指令是什么?

    JSP页面中的指令JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言等.语法规则:<%@ 指令名 属性=值 属性=值 ... %>指令可以有很多个属性,它们以键值对的形 ...

  3. 面试总被问到HTTP缓存机制及原理?看完你就彻底明白了

    前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能. 但是对于很多前端 ...

  4. Linux关闭打开防火墙命令

    Linux下打开和关闭防火墙 1.及时生效,重启后复原 关闭:service iptables stop  开启:service iptalbes start  查看状态:service iptabl ...

  5. 老公 今晚还玩“丝袜哥”Swagger 么?

    大家都知道Swagger是一个常用的Spring Boot接口文档生成工具,但是我们今天再介绍另外一个无需额外注解的 Spring Boot API文档生成神器,非常方便好用! JApiDocs是一个 ...

  6. .net core AES加密解密及RSA 签名验签

    引用 using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; using System; using Sy ...

  7. 详细解释 使用FileReference类加载和保存本地文件

    一般而言,用户不希望web浏览器中运行的应用程序访问电脑硬盘里的文件.然而,随着基于浏览器(browser-based)的富因特网应用程序的增多,一些应用程序迫切需要访问用户所选择的文件,或者将文件保 ...

  8. 腾讯互动白板+即时通讯+实时音视频,Android学生端接入

    腾讯互动白板+即时通讯+实时音视频,Android学生端接入 一.简介 线上教学方案:腾讯云互动白板(Tencent Interactive Whiteboard,TIW)+即时通信(Instant ...

  9. POJ 1410 判断线段与矩形交点或在矩形内

    这个题目要注意的是:给出的矩形坐标不一定是按照左上,右下这个顺序的 #include <iostream> #include <cstdio> #include <cst ...

  10. inux下查看最消耗CPU、内存的进程

    1.CPU占用最多的前10个进程: ps auxw|head -1;ps auxw|sort -rn -k3|head -10 2.内存消耗最多的前10个进程 ps auxw|head -1;ps a ...