功能


  • 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. jquery实现复选框的全选、全不选、反选

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. echarts踩坑---容器高度自适应

    在echarts中,若设置固定高度,当柱状图数据过多时会出现数据相互挤压,给用户的体验十分糟糕,可以通过给容器设置自适应高度,然后通过getDom()的方法解决此问题. 具体解决办法如下: <d ...

  3. python学习笔记(二)python基础知识(交作业)

    交作业 #!/usr/bin/env python # coding: utf-8 # # 1. 每个用户购买了多少不同种类的产品 # filename = 'train.txt' import sy ...

  4. django中的F和Q

    F查询 Django 提供 F() 来做这样的比较.F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值. 查询书id大于\小于价格的书籍 models.Book.ob ...

  5. 【树形DP】洛谷1122_最大子树和

    又是一道树形DP的入门题,思想非常简单  然而我最开始还是存了两个状态[传送门] 题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上 ...

  6. 20155213 《JAVA程序设计》实验二(JAVA面向对象程序设计)实验报告

    20155213 <JAVA程序设计>实验二(JAVA面向对象程序设计)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...

  7. 20155233 2006-2007-2 《Java程序设计》第3周学习总结

    20155233 2006-2007-2 <Java程序设计>第3周学习总结 教材学习内容总结 第四.五章主要学习Java如何产生对象,包括如何去定义一个类,如何去构造函数实现对象初始化流 ...

  8. 虚拟机安装&Linux初探

    学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统 安装虚拟机的过程还算顺利.除了在安装增强设备功能时需要将之前的硬盘弹出之外,没有遇到其他的问题. 通过实 ...

  9. 20155338 2006-2007-2 《Java程序设计》第2周学习总结

    20155338 2006-2007-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第三章内容,大体上都较好理解,有很多内容基本上都跟C语言的知识类似,学习的内 ...

  10. [BZOJ3218]a + b Problem-[主席树+网络流-最小割]

    Description 传送门 Solution 此处我们按最小割的思路考虑. 暴力:S->i表示该点选黑色的权值b[i]:i->T表示该点选白色的权值w[i].考虑如果某个点i受点j为白 ...