《深度解析SDN》学习小结
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》学习小结的更多相关文章
- 深度解析SDN——利益、战略、技术、实践(实战派专家力作,业内众多专家推荐)
深度解析SDN——利益.战略.技术.实践(实战派专家力作,业内众多专家推荐) 张卫峰 编 ISBN 978-7-121-21821-7 2013年11月出版 定价:59.00元 232页 16开 ...
- 《Spring源码深度解析》学习笔记——Spring的整体架构与容器的基本实现
pring框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块,如下图所示 这些模块被总结为以下几个部分: Core Container Core Container(核心容器)包含有C ...
- C++深度解析教程学习笔记(6)对象的构造和销毁
1. 对象的初始化 (1)从程序设计的角度看,对象只是变量,因此: ①在栈上创建对象时,成员变量初始化为随机值 ②在堆上创建对象时,成员变量初始化为随机值 ③在静态存储区创建对象时,成员变量初始化为 ...
- C++深度解析教程学习笔记(5)面向对象
1. 面向对象基本概念 (1)面向对象的意义在于 ①将日常生活中习惯的思维方式引入程序设计中 ②将需求中的概念直观的映射到解决方案中 ③以模块为中心构建可复用的软件系统 ④提高软件产品的可维护性和可扩 ...
- C++深度解析教程学习笔记(4)C++中的新成员
1. 动态内存分配 (1)C++通过 new 关键字进行动态内存申请,是以类型为单位来申请空间大小的 (2)delete 关键字用于内存释放 ▲注意释放数组时要加[],否则只释放这个数组中的第 1 个 ...
- C++深度解析教程学习笔记(3)函数的扩展
1.内联函数 1.1.常量与宏的回顾 (1)C++中的 const 常量可以替代宏常数定义,如: ; //等价于 #define A 3 (2)C++中是否有解决方案,可以用来替代宏代码片段呢? 1. ...
- C++深度解析教程学习笔记(2)C++中的引用
1.C++中的引用 (1)变量名的回顾 ①变量是一段实际连续存储空间的别名,程序中通过变量来申请并命名存储空间 ②通过变量的名字可以使用存储空间.(变量的名字就是变量的值,&变量名是取地址操作 ...
- C++深度解析教程学习笔记(1)C到C++的升级
1.现代软件产品架构图 比如商场收银系统 2.C 到 C++ 的升级 2.1变量的定义 C++中所有的变量都可以在需要使用时再定义,而 C 语言中的变量都必须在作用域开始位置定义. 2.2 regis ...
- 深度估计&平面检测小结
https://yq.aliyun.com/ziliao/582885 最近一段时间已知忙着赶图像分析与理解的项目,在三个星期内强行接触了CNN,MRF,Caffe,openCV在内的很多东西.现在项 ...
随机推荐
- [Javascript] Advanced Reduce: Flatten, Flatmap and ReduceRight
Learn a few advanced reduction patterns: flatten allows you to merge a set of arrays into a single a ...
- ios开发应用内实现多语言自由切换
需求描述:应用内部有一按钮,点击切换语言(如中英文切换).说起来这个是好久以前做的一个功能点了,刚开始也是没有头绪,后来解决了发现很简单,把方法分享一下.1.原理.查看NSLocalizedStrin ...
- POJ 1556 The Doors 线段判交+Dijkstra
The Doors Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6734 Accepted: 2670 Descrip ...
- Myeclipse中点(.)不出来方法或者属性?
- JavaScript中几个可以转化为false的值
1.[0,NaN,“”,null,undefined]都可以直接转化为false,但这几个值不是完全相等的 var arr = [0,"",false,null,undefined ...
- 类名.this与类名.class
1..当在内部类中使用this指的就是内部类的对象, 为了访问外层类对象,就可以使用外层类名.this来访问. 2.在java中,每个class都有一个相应的Class对象,当编写好一个类,编译完成后 ...
- SQL 查询字段为值不为空
方法一sql="select * from table where id<>null " or sql="select ...
- 有关phpmailer的详细介绍及使用方法
第一,需要下载PHPMailer文件包phpmailer. http://phpmailer.sourceforge.net/第二,确认你的服务器系统已经支持socket ,通过phpinfo();查 ...
- Lesson 7: Responsive Typography In Action
Lesson 7: Responsive Typography In Action 排版一直都是设计和传达的基础.虽然现在的设计和印刷品设计差别很大,但核心原则还是不变的. Article 1: Bo ...
- php中bindValue的批量提交sql语句
php预编译sql语句,可以批量提交sql,也可以实现防注入 <?php $dsn='mysql:host=127.0.0.1;port=3306;dbname=bisai'; $usernam ...