《SDN核心技术剖析和实战指南》2.2OpenFlow交换机规范小结
这节的内容相当多,主要是介绍OpenFlow标准特别是流表的相关特性。
典型的OpenFlow标准由三部分组成:安全通道,流表和OpenFlow协议。注意这个标准是一份设备标准,并不单指OpenFlow协议。后来引入了流水线式的多流表以及组表(Group Tabel)。
(图摘自SDNAP的文章)
安全通道是交换机与控制器进行通讯的接口,在实现上推荐使用(在缺省情况下就是)TLS用来保证认证性和数据隐私。而OpenFlow协议是用来描述控制器和交换机之间交互信息的接口标准。OpenFlow协议支持三种类型的信息:controller-to-switch(控制器到交换机)、asynchronous(异步,实质上这更应该命名为switch-to-controller交换机到控制器)和symmetric(对称)。具体来说每种类型都包含了不少类型的信息,这里就不说了。
流表是可以看作是普通协议格式的一种抽象。在OpenFlow v1.3中,流表结构由匹配域、优先级、计数器、指令(改名前叫动作)、超时定时器和Cookie。(1)匹配域包含的内容非常多,而且还在不断地扩展,典型的有源MAC地址、目的MAC地址、源IP地址、目的IP地址以及端口等,反正这包括各种各样已知的协议所用到的域。而OpenFlow就是希望做到可以对任意域进行匹配。(2)优先级是指流表项在该流表的匹配相对匹配次序。值得注意的是,流表和流表之间也有优先级的概念,这指的是流水线上的相对匹配次序。另外,这个优先级并不是好像编程中优先队列那样的优先级,而是硬性的如插入排序那样优先级。指定了一个优先级,就硬性插入到该位置。这对于表项和表从概念上都是一样的。(3)计数器是指匹配这个流表项的数据包累计数目。(4)指令表示如何处理匹配这个流表项的数据包。这个指令有可能是对其动作集作出修改并传到下一个流表进行匹配,也有可能是立刻执行动作集的动作。动作集可以理解为经过多个流表后每个流表指定要做的动作的集合。(5)超时定时器是指这个流表项的最长有效时间。当超过有效时间后,OpenFlow交换机会删除该流表项并向控制器发送消息使其知道此情况。(6)Cookie在数据转发上不会用到,它是控制器用来操纵流的工具。
组表其实就是将多个流编成一个组,然后执行相同的操作集。这可以用于实现广播或组播,或者对某些流执行一些特别的操作。
在OpenFlow v1.2后提出了Openflow端口的概念。OpenFlow交换机支持三种类型的端口:物理端口、逻辑端口和保留端口。物理端口就是指交换机的硬件端口,而逻辑端口是指具有抽象意义的端口,例如全部物理端口,某些物理端口等,我认为这主要是为了一些转发行为的方便。保留端口是为了扩展的方便,例如使用非OpenFlow的方法转发等。这三种端口都统称为OpenFlow端口,在使用上一般不区分。
(图摘自SDNAP的文章)
最后说说数据包的匹配过程。当一个数据包从输入端口进入OpenFlow交换机后,会先在表0进行匹配,根据匹配的流表项执行下一步的操作,有可能是直接执行动作集或丢弃数据包,也可能是将动作加入动作集然后转到后续流表匹配。值得注意的是,在OpenFlow v1.3中增加了table-miss流表项,用于指示当整个流表都不匹配的时候执行的动作。这非常有利于定义缺省动作。另外,流表的操作顺序只能按优先级从前到后,不能转回前面,但应该可以跳到后面的某个表,这应该是加入某些值然后使后面的表都只将其传递直到目标。这个我还不肯定。
当然,这一节还包含很多其他的内容。但我认为以上是主干知识。
《SDN核心技术剖析和实战指南》2.2OpenFlow交换机规范小结的更多相关文章
- 《SDN核心技术剖析和实战指南》2.3 OF-CONFIG配置管理协议小结
OpenFlow协议定义了交换机和控制器交换数据的方式和规范,但并没有定义如何配置和管理必需的网络参数和网络资源,OF-CONFIG的提出就是为了对OpenFlow提供配置管理支持.如下图所示,OF- ...
- 《SDN核心技术剖析和实战指南》第一章小结
第一章主要是概况.新技术有一个特点是,每家都有不同的说法.这里我只说说我比较认同的部分. SDN的核心概念大概有两个:转发面与控制面分离.开发可编程化.书里还说逻辑上集中控制,其实这个就可以从转发与控 ...
- SDN核心技术剖析和实战指南---读书笔记
第一章 SDN定义如下: SDN是一种新兴的基于软件的网络架构及技术,其最大的特点在于具有松耦合的控制平面与数据平面.支持集中化的网络状态控制.实现底层网络设施对上层应用的透明. SDN和NFV: O ...
- 《SDN核心技术剖析和实战指南》3.3读书笔记
这一节主要是介绍几种开源的SDN控制器. NOX/POX.最初的NOX混合了C++和Python两种编程语言,现在演变为两个版本.NOX版本主要面向Linux平台,利用C++开发,目标是提供快速的控制 ...
- 《SDN核心技术剖析和实战指南》3.1控制器核心技术读书笔记
在SDN的架构中,控制器可以说是SDN的核心,它负责对底层转发设备的控制以及向上层应用提供可编程性的北向接口.从实现上看,主要分三个层面来考虑,南向接口技术,北向接口技术以及东西向的可扩展性能力.下面 ...
- 《SDN核心技术剖析和实战指南》2.1交换机核心技术小结
对于SDN交换机的技术,其实也适用于传统的交换机,只不过控制部分被分离出来而已.传统交换机的控制面主要是转发表的管理以及网络状态之类的各种表,现在这些都由控制器来担心.转发面主要由转发决策.背板和输出 ...
- 《SDN核心技术剖析和实战指南》2.4 OVS交换机实现分析小结
Open vSwitch(OVS)是一款基于软件实现的开源交换机.它能够支持多种标准的管理接口和协议以及跨多个物理服务器的分布式环境.特别地,OVS提供了对OpenFlow协议的支持,并且能够与众多开 ...
- 大数据存储:MongoDB实战指南——常见问题解答
锁粒度与并发性能怎么样? 数据库的读写并发性能与锁的粒度息息相关,不管是读操作还是写操作开始运行时,都会请求相应的锁资源,如果请求不到,操作就会被阻塞.读操作请求的是读锁,能够与其它读操作共享,但是当 ...
- Apache Beam实战指南 | 手把手教你玩转KafkaIO与Flink
https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&mid=2247492538&idx=2&sn=9a2bd9fe2d7fd6 ...
随机推荐
- ContentProvider简单介绍
1.什么是ContentProvider 数据库在Android其中是私有的,当然这些数据包含文件数据和数据库数据以及一些其它类型的数据. 不能将数据库设为WORLD_READABLE,每一个数据 ...
- Cadence 电源完整性仿真实践(一)
软件版本号:Cadence 16.5 使用工具:Allegro PCB PI Option XL Power Integrity 使用资源:仿真实例下载地址:http://download.csdn. ...
- 你的第一个Windows程序——绘制窗口
MSDN原文(英文) 绘制窗口 你已经创建了你的窗口,现在你想在它里面显示东西.在WIndows术语里,这就是所谓的绘制窗口.混合隐喻,一个窗口是一个空白画布,等待你去填充它. 有时你的程序将启动绘制 ...
- JAVA ,SSH中文及其乱码问题的解决 6大配置点 使用UTF-8编码
JSP,mysql,tomcat下(基于struts2)中文及其乱码问题的解决 6大配置点 使用UTF-8编码 目前对遇到J2EE 开发中 中文及其乱码问题,参考网上资料做个总结, 主要是6大配置点: ...
- Jetty开发指导:框架
Spring设置 你能嵌入Jetty到你的项目中,也能够使用差点儿全部的IoC类型框架,包含Spring.假设全部你想做的是在你的Spring中设置Jetty Server,那么以下的xml片段能够作 ...
- iis7 发布mvc 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容
iis 7上发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 提示里面的解决方法是: 如果不希望启用目录浏览,请确保配置了默认文档并且该文件存在. 使用 II ...
- JQuery 操作基本控件
根据控件的样式class获取控件 $(".className")...... //className代表的就是控件的样式 根据控件的ID获取控件 $(" ...
- Design Pattern ——Factory Method&Abstract Factory
今天开始复习设计模式.设计模式相关的资料有很多,概念性的东西就画个图就可以了.把关注点放在例子上,设计模式还是要使用中才有感受. 从Factory Method&Abstract Factor ...
- libthrift0.9.0解析(二)之TSimpleServer
TSimpleServer简单实现Tserver,代码如下. /** * Simple singlethreaded server for testing. * */ public class TSi ...
- 单点登录CAS使用记(六):单点登出、单点注销
单点登出基本上没有啥配置 直接在原来logout的时候,重定向到Cas-Server的logout方法 @RequestSecurity @RequestMapping(value = "l ...