本文由SDN原理视频而成:SDN原理

流表 FlowTable --- OpenFlow的核心

问题3 流表项 Flow Entry

单流表(OpenFlow 1.0版本) -> 多流表(OpenFlow 1.3版本)

组成1(OpenFlow 1.0):Header Fields | Counters | Actions

不同版本的OpenFlow协议的流表项 不一样。OpenFlow 1.0版本包括了包头域,计数器,动作三个部分。

流表项包头域 --- 匹配

可以看出来,除了进接口,传统OSI七层模型中2-4层的寻址信息都包含在报头域中了:目的IP地址,源IP地址,目的MAC地址,源MAC地址,端口号···

因此,流表约等于 路由表 + MAC地址表 + 端口号··· 包含了原有OSI七层所有的寻址信息。

也就是说:OpenFlow交换机 相比 传统网络的交换机 是一个比较模糊的概念,不再区分交换和路由;所以 OpenFlow交换机 可以广义理解为 OpenFlow转发设备 (路由器,交换机,防火墙)。

从小的方面来看,SDN交换机是一个传统意义上的OSI二层设备;从大的方面来看,它是一个”具有七层结构“(指的是 具有所有七层寻址信息)的交换机。

有新意的地方:取消了传统网络 中间路由 的分层结构 分层次进行匹配;把所有的信息一次性进行匹配。

计数器 --- 流量可视化

传统网络的计数器这一方面,是一个弱项;虽然TCP有 四个定时器:重传定时器,坚持定时器,2MSL定时器,保活定时器,IP有TTL字段,但是没有比较多的技术支持对数据流进行计数。

也就是说,在传统网络里面,你不知道通过每一个接口的流量具体有多少,在这条链路上已经跑了多少流量。

简单来说,就是流量可视化。

SDN需要支持流量可视化,方便管理人员和用户根据可视化的流量来指定一些策略:比如拥塞控制,提高链路带宽的利用率等等。

计数器 Counters 主要对每张表,每个端口,每个流进行计数:方便监管流量。

比如:经过这个端口已经有多少流量了?匹配这个流表项的数据报有多少了?这个表项 或者这张表 查找多少次了?

如果所有的交换机支持计数器,那么每一个交换机都根据计数器向控制器汇总流量信息,那么控制器就很容易生成一张全局的流量图,方便用户对流量进行监控和制定策略。

这是 SDN 中很核心的一点,很有新意的一点。

Actions 动作 流表项的关键 --- 按需修改

Action 动作 是对匹配该表项的流的操作

传统网络的动作,就两种:要么进行转发,要么进行丢弃。而SDN中的动作,非常的多。

原因:OpenFlow协议需要支持 源目IP地址,源目MAC地址等等的 按需修改

OpenFlow 1.0规定了必备动作(Required Actions),和可选动作(Optional Actions)。

必备行动1 -转发 Forward

  • 泛洪选项,ALL -转发到所有出口(但不包括入口),相当于往所有接口泛洪。
  • 给控制器,CONTROLLER -封装并转发给控制器
  • 找本地,LOCAL -转发给本地网络栈
  • 按表执行,TABLE -对要发出去的包执行流表内的动作
  • 从哪里来从哪里去,IN_PORT -从入口发出

必备行动2 -丢弃 Drop

没有明确指明 处理行动 的表项,将匹配的所有分组默认丢弃。

可选行动1 -转发 Forward

  • NORMAL -按照传统OSI七层模型中的第二层(源目MAC),或者是第三层(源目IP)进行转发。
  • FLOOD -通过最小生成树从出口泛洪发出,不包括入口。

可选行动2 -入列 Enqueue

将包转发到 绑定某个端口的队列 中去;常用于管道限速。

非常重要的 可选行动3 -修改域 Modify-field

修改报头内容 这是和传统网络最大的区别:OpenFlow能够对报头信息进行修改。

很明显,OpenFlow所提供的流表,表项比传统网络路由表等 更加丰富,操作,执行动作比以前更加繁多。

组成2(OpenFlow 1.3):Match Fields | Priority | Counters | Instructions | Timeouts | Cookie

在1.3版本中:流表项包头域 -> 匹配域;多了一个 优先级;动作 -> 指令;增加了 超时时间 和 缓存信息。

从1.0版本开始,OpenFlow支持多流表:每张流表都有独立的序号,从序号最小的流表开始匹配,每张表进行独立的处理操作。

匹配域 -匹配

匹配域是之前1.0包头域的拓展,匹配内容除了OSI二到四层的寻址信息(MAC,IP,PORT)之外,多了MPLS,IPv6,PBB,Tunnel ID 等支持;1.0版本能匹配12个信息,1.3版本能够匹配39个信息。

这样做的原因,是为了尽量减小传统网络协议对SDN的影响;如果还有OpenFlow尚未支持的协议,那么就通过混合型网络来支持。当OpenFlow发展到支持匹配所有路由信息的时候,那么就可以摒弃掉原来传统网络路由转发的机制了。

趋势:传统路由选择协议 -> 混合协议(OpenFlow 与 传统路由选择协议 共存) -> OpenFlow协议 SDN时代。

优先级 -优先匹配

顾名思义,用于标志流表项匹配的优先次序,优先级越高 越早匹配,默认为0。

计数器 -流量可视化

和之前类似,主要对 流,表,端口 做统计,方便进行流量监管。

在原有基础上,加入了 每组,每个动作集的计数。

指令(这里只列举部分指令) 是之前动作的抽象 增加了非常多的内容

需要弄明白:动作,动作集,指令。

在新的版本中,指令相比动作增加了非常多的内容,因为引入了多流表的概念,所以多了很多的指令(动作,动作集,指令)。

必备指令:Write-Actions action(s):将指定的命令添加到命令集中。也就是说,命令不一定要马上执行,可以积累到命令集中,类似一个脚本,然后一起共同执行。

附加指令:Apply-Actions action(s):立即执行指定的动作,不改变行动集。

在1.3中,命令不一定马上执行:比如Drop,Next Table,Forward等等,它可以直接执行,也可以先 预缓存 到一个动作缓存中(或者说,动作集)。

附加指令:Clear-Actions:在动作集中 立即清除所有的行动。

举个例子,在 流 匹配了多个流表表项之后,通过指令积累了一定的动作,如果感觉到不是特别满意,就可以在下一个流匹配的表项中加入 Clear-Action 这个指令,清除掉之前积累的所有动作。

总的来说,1.3版本的流表项,所支持的逻辑需求 更加丰富。

在1.0版本的时候,动作是一个一个执行的,没办法集中处理;而1.3的话,允许动作集中执行,通过命令形成动作集,或者看这些动作不顺眼,用一个Clean-Actions清空命令集。

注意:

在1.3中,需要清楚的概念是:流表项中有指令Institution和动作Action之分,流表项中的指令 是用于影响动作的:比如通过指令将动作添加到动作集中,或者通过指令清空动作集。

而动作则是一系列对流的操作,比如丢弃,封装之后交给交换机,或者是转递到哪一条链路等等。

这也体现了SDN的一个理念:在原有平面上抽象出一个抽象层,比如我们这里就是从动作中抽象出指令,通过这个抽象层更加方便的进行管理与操作,就像图形界面之于命令行一样。

引用一段话,源自一篇博文SDN:软件定义网络

  1. 纵观计算机的发展历程,各方面都可以看到通过增加类似的虚拟化层次来提高生产效率的案例。比如高级语言之于汇编,比如图形界面之于命令行。这种添加层次的解决方案,总是能让问题得到更清晰的解决。

回到指令

在视频教学内,指令分成四块内容:第一块是指令,第二块是动作,它们之间的关系在上面的 注意 已经提及了。

那么第三块,是用来干嘛的呢?

既然,我们使用了第一块的指令,让第二块的动作添加或者是删除到动作集中,目的是为了更好的管理动作;那么当动作需要统一进行的时候,如何确定 动作集中的动作 的先后顺序呢

比如动作集中 有两个动作添加了进来,一个是将流A封装交给控制器,另外一个是将流B丢弃,哪一个先执行呢?

类比于BGP协议,动态选路确定最优路的时候,有那么多的影响因素,如何确定这些因素影响的优秀级?

指令的第三块内容,就是用来干这个的:它们确定了动作集中动作执行的优先顺序。

指令部分 总结

行动集与每个报文相关,默认为空。

一个流表项可以通过 Clear-Action 和 Write-Action 两个指令来对行动集进行操作。

当一个表项的指令集没有包含 Goto-Table 指令的时候,流水线就停止了(即不用再去查找另外一张流表),然后报文的行动集就被执行。

注意:多张表的查找,叫做流水线处理。

交换机可以通过 Apply-Actions 修改动作执行顺序。

行动集包括所有的行动,无论它们以什么样的顺序加入到集中,执行的顺序始终按照优先级来进行。

我的理解:流找到对应的表项 -> 表项的指令 将表项的动作添加到动作集中/将动作执行 -> 由表项中的优先顺序(上面的第三部分)确定动作的执行顺序 -> 指令集中没有遇到 Goto-Table指令 按照顺序执行动作集中的动作

也就是说,表项中(1)有指令集,指令集中有 将动作抽象成逻辑层集中处理的指令(Write-Action & Clear-Action) 还有 定义先后顺序的指令;(2)有匹配执行的动作

超时时间 Timeout

用于标志该流表项的 老化时间,到了超时时间限制就删除,目的:节省内存资源。

附属信息 Cookies

由控制器选择的 不透明数据值,控制器使用Cookies来进行 过滤流的统计数据(计数器的相关信息),流改变,流删除。

但是,当处理单个数据报的时候,不能使用。

2016/9/7

SDN原理 OpenFlow协议 -2的更多相关文章

  1. SDN原理 OpenFlow协议 -1

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

  2. SDN原理 OpenFlow协议 -4

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

  3. SDN原理 OpenFlow协议 -3

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

  4. SDN学习之OpenFlow协议分析

    学习SDN相关的学习也已经有快半年了,期间从一无所知到懵懵懂懂,再到现在的有所熟悉,经历了许多,也走了不少弯路,其中,最为忌讳的便是,我在学习过程中,尚未搞明白OpenFlow协议的情况下,便开始对S ...

  5. 传统二三层转发融合SDN Openflow协议的Hybrid交换机转发流程

    Hybrid 交换系统(以下简称Hybrid 交换机)是交换机融合了OVS(Openflow vswitch)原生代码,集传统和Openflow 技术于一体的转发系统.主要解决纯Openflow 基于 ...

  6. SDN学习之Mininet验证OpenFlow协议版本

    最近学习如何使用mininet,但是,刚刚开始时一直无法知道如何查看OpenFlow协议的版本,通过查阅网上的资料,从SDNLAB中,学习到了如何验证,mininet自身基于OpenFlow13版本的 ...

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

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

  8. SDN原理 控制层 Controller控制器

    本文参照SDN原理视频而成:SDN原理 Controller 概念 从上面这个图片,我们能够知道,Controller 是一个非常重要的东西:承上启下,左右拓展. 从整个SDN的架构来看,控制器 处在 ...

  9. 实战录 | 基于openflow协议的抓包分析

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全SDN工程师宋飞虎,将带来基于 ...

随机推荐

  1. linux下nproc的作用

    文章来源: http://blog.csdn.net/odailidong/article/details/50561257 nproc是操作系统级别对每个用户创建的进程数的限制,在Linux下运行多 ...

  2. ssh-keygen 不是内部或外部命令解决办法!

    在使用 git 的远程仓库的时候,生成秘钥的使用,会遇到ssh-keygen不是内部命令也不是外部命令的问题: 具体解决: 第一步:找到:Git/usr/bin目录下的ssh-keygen.exe(一 ...

  3. VS2012编译FFmpeg 2.1.4

    这次的目标是完整编译FFmpeg包括汇编代码,并且尽量少修改源代码. 环境是WIN7 64位,VS2012, Intel.Parallel.Studio.XE.2013.SP1 一. 安装MinGW, ...

  4. 磁盘 I/O 性能监控的指标

    指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和.当传输小块不连续数据时,该 ...

  5. My Emacs Writing Setup

    My Emacs Writing Setup Table of Contents 1. About this Document 1.1. Related Materials 1.2. Change H ...

  6. Disruptor的伪共享解决方案

    1.术语 术语 英文单词 描述 内存屏障 Memory Barriers 是一组处理器指令,用于实现对内存操作的顺序限制. In the Java Memory Model a volatile fi ...

  7. 第1章 1.2计算机网络概述--Intenet和广域网

    1.ISP Internet服务提供商,也称ISP运营商.如:在中国,电信.网通.长城宽带. ISP运营商内部的网络连接十分发达,但是不同ISP运营商之间的连接的线路非常有限,这就导致了跨运营商访问网 ...

  8. Mirror--自增键在镜像中的影响

    测试环境: OS: Windows Server 2008 R2 Enterprise SQL: SQL Server 2012 Enterprise 测试场景: 有SERVER A上数据库 DB10 ...

  9. php源码编译常见错误解决方案大全

    php源码编译常见错误解决方案大全http://www.cnlvzi.com/index.php/Index/article/id/143 在CentOS编译PHP5的时候有时会遇到以下的一些错误信息 ...

  10. C# 反双曲余弦函数

    反双曲余弦函数的定义是: T1 = Math.Log(t + Math.Sqrt(t * t - 1)); 1. 叉乘(cross product),也叫向量的外积.向量积.顾名思义,求下来的结果是一 ...