功能


  • 1.0版本Openflow:控制器通过Openflow协议与交换机建立了安全通道(Sceure Channel),下发流表。

  • 1.3版本Openflow:多控制器,多流表。
  • 用于实现Controller和Switch之间的通信过程,定义了一系列标准术语。
  • 定义了Controller如何来控制Swithch以及Switch如何来反馈Ctroller。
  • 定义了Controller和Switch通信过程的消息类型和格式

版本


  • 版本升级功能升级。

流表


  • 相当于传统网络的路由表和CAM表。
  • 传统网络的表是死的,给我就按照上面的做,查找转发。
  • SDN的流表,很多张,可编程。

流(Flow)


  • 同一时间内,经过同一网络并且具有相同属性的数据包集合
  • 不同情况流的定义可以不同。一般基于端口以及源目IP。
  • SDN体系中,所有的数据都以“流”为单位进行处理。

流表(Flow Table)


  • 流过来就查表(基于序号查找)。
  • 每一张流表都有详细的流表项。
  • 每一个流表项中都有相应参数,根据参数做出相应的动作(要么转,要么丢,不转也不丢,下一张表处理)。
  • 虽然要递归似的查表,但是节约了计算的时间,总体上转发速度加快。

流表项-1.0版本(Flow Entry)


  • 不同版本的Openflow的流表项有些区别,下面是Openflow1.0版本的流表项。
  • 包含:包头域、计数器、动作三个部分。

包头域(Header Fields)


  • 除了进接口,传统的2-4层的寻址信息都出现在包头域中(MAC、IP、PORT)。
  • Openflow交换机相比传统网络交换机(路由器),是一个模糊的概念,不再区分二者,所以Openflow交换机可以广义的理解为Openflow转发设备(交换机、路由器、防火墙)。

计数器(Counters)


  • 计数器主要对每张表、每个端口、每个流等进行计数,方便流量监管。
  • 流量可视化奠定了基础。

动作(Actions)


  • 对匹配到的流进行处理,传统网络中要么转发要么丢弃,没有第三种选择。Openflow1.0中规定了必备动作(Required Actions)和可选动作(Optional Actions)。
  • 必备动作-转发(Forward):
    • ALL:转发到所有出口(不包括入口)。
    • CONTROLLER:封装并转发给控制器。
    • LOCAL:转发给本地网络栈。
    • TABLE:对要发出的包执行流表中的行动。
    • IN_PORT:从入口发出。
  • 必要行动-丢弃(Drop)
    • 没有明确指明处理行动的表项,所匹配的所有分组默认丢弃。
  • 可选行动-转发
    • NORMAL:按照传统交换机的2层或3层进行转发处理。
    • FLOOD:通过最小生成树从出口泛洪发出,注意不包括入口。传统网络只有在CAM表空或者满了的时候才会泛洪,现在更加灵活。
  • 可选行动-入队(Enqueue)
    • 将包转发到绑定到某个端口的队列中。(流控)
  • 可选行动-修改域(Modify-field)
    • 修改包头内容。
    • 这个动作是跟传统网络的最大区别,Openflow可以对数据包头部进行修改!(可修改2层-4层的信息)。

流表项—1.3版本


  • Openflow1.0之后都支持多流表,每张表都有独立的序号,从序号最小的开始匹配。
  • Openflow1.3版本包括了匹配域、优先级、计数器、指令、超时时间、附属属性。

匹配域(Match Fields)


  • 1.0包头域的拓展,除了2-4层的信息,多了MPLS、IPv6、PBB、Tunnel ID等支持。
  • 1.0能匹配12个信息,1.3能匹配39个信息。
  • Openflow正在覆盖传统网络协议。

优先级(Priority)


  • 用于标志流表项的匹配优先次序,越高越先匹配,默认为0。
  • 支持复杂的策略调度。

计数器(Counters)


  • 在1.0的基础上,加入了对每组,每个动作的计数。
  • 流量统计。

指令(Instructions)


  • 相当于1.0版本的动作(Actions),但是因为引入了多流表,多了很多复杂操作:
  • 行动集:查到行动后,不立即执行,放到一个集合(缓存)中去,最后一起执行。
  • 这一段讲述了动作的叠加,集成,清除。
  • Required Instruction:Write-Actions action(s):将指定的行动添加到正在运行的行动集中。
  • Required Instruction:Goto-Table next-table-id:指定流水线处理进程中的下一张表的ID。
  • Optional Instruction:Apply-Actions action(s):立即执行指定的行动,而不改变行动集。
  • Optional Instruction:Meter meter id:直接将包计量后丢弃。
  • Optional Instruction:Clear-Actions:在行动集中立即清除所有的行动。
  • Optional Instruction:Write-Metadata metadata / mask:在元数据区域记录元数据。
  • 这一段是动作
  • Required Actions:Output:报文传输到指定端口。
  • Required Actions:Drop:丢弃。
  • Required Actions:Group:用组表处理报文。
  • Optional Actions:Set-Queue:设置报文队列ID,为了Qos的需要。
  • Optional Actions:Push-Tag / Pop-Tag
  • Optional Actions:Set-Field:设置报文包头的类型和修改包头的值。
  • Optional Actions:Change-TTL:修改TTL的值。
  • 动作集顺序
  1. copy TTL inwards:apply copy TTL inward actions to the packet.
  2. pop:apply all tag pop actions to the packet.
  3. push-MPLS:apply MPLS tag push action to the packet.
  4. push-PBB:apply PBB tag push action to the packet.
  5. push-VLAN:apply VLAN tag push action to the packet.
  6. copy TTL outwards:apply copy TTL outwards action to the packet.
  7. decrement TTL:apply decrement TTL action to the packet.
  8. set:apply all set-field actions to the packet.
  9. qos:apply all QoS actions,such as set queue to the packet.
  10. group:如果指定了组行动,那么按照这个序列中的顺序执行组行动存储段里的行动。
  11. output:如果没有指定组行动,报文就会按照output行动中指定的端口转发。
  • 行动集与每个报文相关,默认情况下是空的。
  • 一个流表项可以使用Write-Action指令或者Clear-Action指令修改行动集。
  • 当一个表项的指令集没有包含Goto-Table指令时,流水线处理就停止了,然后报文的行动集就被执行。
  • 交换机可以通过Apply-Actions指令修改行动的执行顺序。
  • 行动集包含所有的行动,无论它们按照什么顺序加入到行动集中,行动的顺序均按照上一段顺序执行。

超时时间(Timeouts)


  • 用于标志该流表项的老化时间,到了超时时间就删除,节约资源保持准确性。

附属信息(Cookie)


  • 由控制器选择的不透明数据值。控制器用来过滤统计数据、流改变和流删除。但处理数据包时不能使用

流表匹配—1.1版本(Flow Match)


  • 引入了多流表,多流表的流表匹配称为流水线处理(Pipeline Process)。交换机从流表0开始查找,序号从小到大匹配。
  • 每个包按照优先级去匹配流表中的流表项,优先级高的先匹配(被匹配),一旦匹配成功,对应计数器将更新,动作立即执行;如果没能找到匹配的表项,则转发给控制器

流表匹配—1.3版本


  • 1.3版本引入了table-miss的处理和action-set的处理。
  • 之前的版本当交换机没有匹配到流表项的时候,直接丢给Controller处理。而table-miss则用于解决这个问题。
  • 通过table-miss参数,可以对数据包实现丢弃、给下一个表处理、转发给控制器。
  • 还多了一个逻辑层—动作集。动作的累加。
  • 多流表操作中,每个表都有独立的指令,这些指令(执行动作)可以在查表的时候执行,也可以通过指令汇总到action-set再叠加执行。
    • 行动集与每个报文相关,默认情况为空
    • 一个流表项可以使用Write-Action指令或者Clear-Action指令修改行动集。
    • 当一个表项的指令集没有包含Goto-Table指令时,流水线处理就停止了,然后报文的行动集就被执行。
    • 交换机可以通过Apply-Actions指令修改行动的执行顺序。
    • 行动集包含所有的行动,无论它们按照什么顺序加入到行动集中,行动按照指定顺序执行。
  • 单表时,只有action动作;多表环境下,多个action操作累加则为action-set动作集。
  • 决定action-set中的一堆动作如何工作,便是Instruction指令。指令可以将动作写入、修改到动作集action-set中,或者可以直接在读表时执行。
  • 多流表最核心的内容:叠加执行

流表的生成


  • 传统路由技术中,建立一张路由表,需要路由器和路由器之间运行路由协议,然后相互交互路由条目,之后达到路由共享。这种架构是一种P2P架构(双方对等)。
  • SDN的想法是类似的,在控制器和交换机直接运行Openflow协议,不同的是,这里是一种C/S架构(客户端服务器架构)。由控制器统一计算后再下发给Openflow交换机流表项信息

OpenFlow协议的更多相关文章

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

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

  2. SDN学习之OpenFlow协议分析

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

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

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

  4. OpenFlow协议1.0及1.3版本分析

    OpenFlow是SDN控制器和交换之间交流的协议,在SDN领域有着十分重要的地位. OpenFlow协议发展到现在已经经过了1.0.1.3.1.4等版本.其中1.0和1.3版本使用的是最为广泛的. ...

  5. Openflow协议详解

    http://www.h3c.com/cn/d_201811/1131080_30005_0.htm# 1 OpenFlow背景 转发和控制分离是SDN网络的本质特点之一 .在SDN网络架构中,控制平 ...

  6. SDN原理 OpenFlow协议 -2

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

  7. SDN原理 OpenFlow协议 -1

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

  8. 对扩展openflow协议的一点思考

         软件定义X变得越来越火,正所谓,Software is eating the world. 软件定义网络也是如此.不论是在工业界还是学术界都将是一次伟大的革命,都在紧随着这个行业的方向,找自 ...

  9. 利用Wireshark抓取并分析OpenFlow协议报文

    OpenFlow 交换机与控制器交互步骤 1. 利用Mininet仿真平台构建如下图所示的网络拓扑,配置主机h1和h2的IP地址(h1:10.0.0.1,h2:10.0.0.2),测试两台主机之间的网 ...

随机推荐

  1. IE浏览器中找不到开发者工具

    ie浏览器不知道什么原因开发者工具不见了.打开以后在任务栏中显示打开了控制台,但是看不到. 解决方法 : F12 打开开发者工具后,按下 “ Ctrl + P ”

  2. 用户从地址栏输入url,按下enter键后,直到页面加载完成的这个过程都发生了什么?

    流程大概描述一下: 用户将url输入后,服务器接受到请求,然后将这个请求进行处理,然后将处理后的结果返回给浏览器,浏览器将该结果以页面的形式呈现给用户. 详细描述: 1:用户将url(例如www.ba ...

  3. SQL注入总结篇

    分类SQL注入的攻击方式根据应用程序处理数据库返回内容的不同,可以分为可显注入.报错注入和盲注. 可显注入攻击者可以直接在当前界面内容中获取想要获得的内容. 报错注入数据库查询返回结果并没有在页面中显 ...

  4. [Golang学习笔记] 06 程序实体3 类型断言和类型转换

    类型断言: 语法:<目标类型的值>,<布尔参数> := <表达式>.( 目标类型 ) // 安全类型断言<目标类型的值> := <表达式>. ...

  5. 155. Minimum Depth of Binary Tree【LintCode by java】

    Description Given a binary tree, find its minimum depth. The minimum depth is the number of nodes al ...

  6. 20155203 《信息安全技术》 实验2 Windows口令破解

    实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 系统环境 Windows 实验工具 LC5 SuperDic(密码字典生成器) 实验原理 口令破解方法 口 ...

  7. 《JAVA程序设计》20155214 实验一 Java开发环境的熟悉(Linux + IDEA)

    <JAVA程序设计> 实验一 Java开发环境的熟悉(Linux + IDEA) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Ja ...

  8. 20155319 2016-2017-2 《Java程序设计》第十周学习总结

    20155319 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 计算机网络编程概述 网络编程就是两个或多个设备之间的数据交换,其实更具体的说,网络编程就是两 ...

  9. 20155325《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    实验一Java开发环境的熟悉-1 提交 Linux或Window或macOS中命令行下运行Java的截图 运行结果包含自己学号等证明自己身份的信息 实验一Java开发环境的熟悉-2 提交 Linux或 ...

  10. Mybaits: MyBaits的xml文件中大于号和小于号的转义

    < 小于号  <     > 大于号  & & 和 & ' 单引号 &apos; " 双引号  "