SDN(软件定义网络),顾名思义,通过软件来控制或驱动整个网络。SDN的核心概念有两个,第一是转发面与控制面的分离;第二是开放的可编程接口。另外,SDN强调集中式控制,通过软件来控制整个网络,但这并不意味着只有一个Controller,在大型网络中,更多是使用分布式Controller的架构来管理,如Onix。

SDN是一个部署网络的框架,并不是具体的某个技术,更不是OpenFlow。OpenFlow协议只是Switch和Controller用来通信的应用比较广泛的一个协议,还有其他一些协议。

NV(网络虚拟化)不是SDN。网络虚拟化是指利用Tunnel技术将虚拟机连接起来实现一个运行在物理网络之上的虚拟网络。但NV的集中化控制要求非常适用于SDN技术。

在基于OpenFlow的SDN架构里,OpenFlow Switch负责数据的转发,OpenFlow Controller负责控制网络,实现了转发面与控制面的分离。

OpenFlow Switch主要由流表(包含多个流表项)和安全信道(与Controller通信),还有其他端口用作包转发。每条流表项相当于一条规则,匹配特定的流(一定时间内具有相同属性的报文集合),定义转发动作。OpenFlow1.1后支持多级流表,按优先级大小遍历流表集,匹配特定的流并做转发动作。另外,OpenFlow还定义了其转发动作。需要注意的是,由于流是动态变化的,大部分流表项都需要不断变化,这需要与Controller通信,让Controller下发流表项。目前Switch的流行容量还比较小。

OpenFlow Controller通过OpenFlow协议与Switch进行通信。在分布式Controller的模型下,对于同一台Switch连接的所有Controller,Controller有以下三种角色,第一是Master,对Switch拥有完全的操作权限;第二是Slave,对Switch只有读取状态和被动收取信息的权限,但若Master死掉了,其中一台Salve就会被选举为Master(OpenFlow没有具体定义如何做,这也可以看出其不成熟)。第三是Equal,可以看作所有Controller都拥有Master的权限。

总的来说,OpenFlow标准是一个灵活的简单的标准,没有任何状态,不认识任何协议和设备,它要做的只有一件事,Match——Action。但是它对芯片的要求很高,目前并没有专门的OpenFlow芯片。

提到OpenFlow,就不得不提OF-Config。OpenFlow只定义了Match和Action,但没有去管理涉及到的相关资源。OF-Config对OpenFlow所需要的最基本的资源进行了配置和管理,是OPenFlow的一个补充。但无论OpenFlow还是OF-Config,目前都很不成熟,需要完善和拓展。

最后说说基于OpenFlow的SDN现状。目前市面上出现的OpenFlow交换机大多是Hybrid交换机(既支持OpenFlow协议也支持传统功能)。一般做法是在原有交换机的基础上,将OpenFlow作为一个新功能加进去。还有的是纯OpenFlow交换机(只支持OpenFlow协议)。有些会在OpenFlow的基础上,在流匹配时引入缺省匹配,当所有流表项都不匹配时,匹配缺省匹配项,跳到传统功能上。

另外,不同厂商的Switch和Controller不一定兼容,因为现在还没有一个被广泛认可的协议,以后也可能没有。有的是开放的编程接口,这样每个用户都可以定制自己的Controller,一定程度上降低厂商的封锁。

总结,这周看的更多是全面地认识和了解SDN,并没有深入技术细节,这样的方式更适合本人的学习。

《深度解析SDN》学习小结的更多相关文章

  1. 深度解析SDN——利益、战略、技术、实践(实战派专家力作,业内众多专家推荐)

    深度解析SDN——利益.战略.技术.实践(实战派专家力作,业内众多专家推荐) 张卫峰 编   ISBN 978-7-121-21821-7 2013年11月出版 定价:59.00元 232页 16开 ...

  2. 《Spring源码深度解析》学习笔记——Spring的整体架构与容器的基本实现

    pring框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块,如下图所示 这些模块被总结为以下几个部分: Core Container Core Container(核心容器)包含有C ...

  3. C++深度解析教程学习笔记(6)对象的构造和销毁

    1. 对象的初始化 (1)从程序设计的角度看,对象只是变量,因此: ①在栈上创建对象时,成员变量初始化为随机值 ②在堆上创建对象时,成员变量初始化为随机值 ③在静态存储区创建对象时,成员变量初始化为 ...

  4. C++深度解析教程学习笔记(5)面向对象

    1. 面向对象基本概念 (1)面向对象的意义在于 ①将日常生活中习惯的思维方式引入程序设计中 ②将需求中的概念直观的映射到解决方案中 ③以模块为中心构建可复用的软件系统 ④提高软件产品的可维护性和可扩 ...

  5. C++深度解析教程学习笔记(4)C++中的新成员

    1. 动态内存分配 (1)C++通过 new 关键字进行动态内存申请,是以类型为单位来申请空间大小的 (2)delete 关键字用于内存释放 ▲注意释放数组时要加[],否则只释放这个数组中的第 1 个 ...

  6. C++深度解析教程学习笔记(3)函数的扩展

    1.内联函数 1.1.常量与宏的回顾 (1)C++中的 const 常量可以替代宏常数定义,如: ; //等价于 #define A 3 (2)C++中是否有解决方案,可以用来替代宏代码片段呢? 1. ...

  7. C++深度解析教程学习笔记(2)C++中的引用

    1.C++中的引用 (1)变量名的回顾 ①变量是一段实际连续存储空间的别名,程序中通过变量来申请并命名存储空间 ②通过变量的名字可以使用存储空间.(变量的名字就是变量的值,&变量名是取地址操作 ...

  8. C++深度解析教程学习笔记(1)C到C++的升级

    1.现代软件产品架构图 比如商场收银系统 2.C 到 C++ 的升级 2.1变量的定义 C++中所有的变量都可以在需要使用时再定义,而 C 语言中的变量都必须在作用域开始位置定义. 2.2 regis ...

  9. 深度估计&平面检测小结

    https://yq.aliyun.com/ziliao/582885 最近一段时间已知忙着赶图像分析与理解的项目,在三个星期内强行接触了CNN,MRF,Caffe,openCV在内的很多东西.现在项 ...

随机推荐

  1. [Redux] Avoiding Array Mutations with concat(), slice(), and ...spread

    For Redux, you cannot use mutable methods like push, splice. Need to use immutable methods such as c ...

  2. 苹果Swift编程语言新手教程【中国版】

    Swift代码语言教程:在刚刚过去的WWDC2014大会上,苹果公司新公布了一种编程语言Swift.据悉.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.对于广 ...

  3. Linux命令之查找

    在Linux中,有非常多方法能够做到这一点.国外站点LinuxHaxor总结了五条命令,你能够看看自己知道几条.大多数程序猿,可能常常使用当中的2到3条,对这5条命令都非常熟悉的人应该是不多的. 1. ...

  4. 使用 Spring 2.5 基于注解驱动的 Spring MVC--转

    概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...

  5. Android android-common 常用功能和工具集合

    本文内容 环境 android-common 项目结构 演示 android-common 参考资料 android-common 主要包括如下内容: 缓存,包括图片缓存.预取缓存.网络缓存. 公共 ...

  6. 阿里云ECS安全改造:改用AWS EC2私钥方式登录

    阿里云ECS有多烂,用过AWS的人都知道,ECS有什么问题呢,简单总结一下: 1)ubuntu居然root直接访问 2)端口全开 3)WEB控制台无法定义安全组及关闭端口 4)云盾黑洞 的确用起来很糟 ...

  7. ASP.NET 2.0服务器控件开发的基本概念(转载)

    利用ASP.NET 2.0技术,创建Web自定义服务器控件并不是一件轻松的事情.因为,这需要开发人员了解并能够灵活应用多种Web开发技术,例如,CSS样式表.客户端 脚本语言..NET开发语言.服务器 ...

  8. css布局之三栏布局

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  9. 武汉科技大学ACM:1003: 华科版C语言程序设计教程(第二版)例题6.6.改编

    Problem Description 小明明最喜欢学英语了,英语课从来不翘课,但是英语却一直没学好,因为上课一直在睡觉.为什么会睡觉呢,因为他觉得英文单词太长了.现在小明明有一个很长很长很长的单词, ...

  10. 堆/栈的比较 以及 malloc/new动态内存的开辟

    堆与栈的比较:1.申请方式(1)栈(satck):由系统自动分配.(2)堆(heap):需程序员自己申请(c:调用malloc,realloc,calloc申请 free 来释放),并指明大小,并由程 ...