1 总述

一个Openflow交换机包括一个或者多个流表flow table和一个组表group table。每个流表中每个流条目包括三个部分:(1) 匹配match—使用ingress port,packet header以及前一个flow table传递过来的metadata;(2) 计数counter---对匹配成功的包进行计数;(3) 操作instruction—修改action set或者流水线处理.

数据包从第一个流表开始匹配,可能会经历多个流表,这叫做流水线处理pipeline processing。流水线处理的好处就是允许数据包被发送到接下来的流表中做进一步处理或者元数据信息在表中流动。首先,找到流表中优先级最高的流条目完成匹配,这将根据ingress port,包头packet header,以及有上一个流表指定的metadata三类匹配域进行。如果某个数据包成功匹配了流表中某个流条目,则更新这个流条目的conter计数,同时这个流条目中的instruction操作将被应用生效。

Pipeline processing终结于instruction中没有指定下一个流表,这时数据包通常会被所带有的动作集合action set处理后转发。

如果数据包发生table miss现象,通常会通过控制通道和packet-in消息发送给控制器。

组表里往往代表一组额外的处理,如flooding、multipath、fast reroute、link aggregation。

2 Openflow Port

Openflow支持三种类型的端口:物理端口(交换机端口),逻辑端口和预留端口。

3 Openflow Table

这一节主要讲述流表flow table和组表grouptable的组成,以及数据包的匹配和处理动作。

首先(a)图可以看出,每个数据包是经过流水线pipeline进行处理的,经历多个flow table的匹配,然后最后在执行action动作后被转发出去;

(事实上,现在的交换机貌似也是这种pipeline processing的,并且openflow交换机可以通过预留的NORMAL端口转向现有交换机的normal pipeline处理。)

那么在每个flow table中是如何处理的呢?主要分为三步:(1) 匹配match。找到流表中优先级最高的流条目完成匹配,这将根据ingress port,包头packet header,以及有上一个流表指定的metadata三类匹配域进行。(2) 指令instruction。根据匹配到的流条目增删改指令集,包括修改包、更新包的匹配域、更新动作集合action set、更新传递给下一个流表的metadata;(3) 发送。将匹配的数据和动作集发送给下一个流表。

4 Openflow counter

Counter不仅存在于flow entry中,openflow规范中指出,每个流表、流条目、端口、队列、组以及bucket都可以有counter。如下表所示。(个人感觉,如果统计网络总体流量则可以利用Port中的received bytes这个Counter,而统计特定业务或者应用的流量则可以利用Flow Entry中的received bytes这个Counter)

5 OpenFlow Instruction

当一个数据包匹配了某个流表条目时,需要执行这个flow entry中的instruction指令,这些instruction指令将改变数据包、action set动作集合或者流水线处理顺序。

典型的instruction指令包括以下五类:应用动作apply-action,清空动作clear-action,写动作write-action,写源数据write metadata以及转向动作goto。

6 OpenFlow Action

6.1 Action Set

首先每个数据包都有一个ActionSet.这个ActionSet初始为空,中间可能被每个匹配的flow entry中的Write-Action或Clear-Action指令instruction进行修改,最后在pipleline processing结束的时候被执行。

ActionSet中包含以下九类的action:copy TTL inwards, pop, push, copy TTL outwards, decrement TTL, set, qos,group, output。每个Action Set中只能一类只能有一个action,并且严格按照上述顺序执行。

6.2 Action List

其次,在Apply-Action指令以及Packet-out消息中都有ActionList,用于对数据包立即执行action,并且按照Action List里面指定的顺序执行,与action的类别无关。

6.3 Action

Action包含以下几类:output,set-queue,drop,group,push/pop,set-field,change-TTL

7 OpenFlow Message

Openflow支持三类消息:

1 Controller-to-Switch

控制器所发起的消息,又分为以下五类:

1)      Feature:查询交换机能力;

2)      Configuration:设置或者查询配置参数;

3)      Modify-State:增删改流表或者组表条目,设置交换机端口属性

4)      Read-State

5)      Packet-Out: 比较复杂一些。这个消息用于控制器指定从交换机的特定端口发送数据包,或者用于转发通过Packet-in消息接收到的数据包。

Packet-out消息中包含一个完整的数据包或者指针,以及action.

6)      Barrier:用于控制器保证消息的依赖关系或者接收notification

2 Asynchronous

交换机发起的消息,分为以下四类:

1)      Packet-In:对于出现flowentry mismatch的数据包,交换机向控制器发送packet-in事件。

数据包本身要么被完全包含在packet-in消息中,要么被buffer在交换机中,反正都是等着控制器的Packet-out事件来处理就对了。

2)      Flow-Removed: 交换机通知控制器已经没有了某个流表条目

3)      Port-Status:当端口配置或者状态变化时通知控制器

4)      Error

3 Sysmetic

两方都可以发起的消息,不用协商,分为以下三类:

1)      Hello:交换机和控制器建立起连接后的维护消息

2)      Echo:是Echorequest和reply的配对,常用语检查liveness,测量延迟和带宽

3) Experimenter:

8 Multiple Controller

一个交换机可以连接多个Equal状态的控制器,多个Slave状态的控制器以及最多一个Master状态的控制器。

为了确保在Master/Slave转换过程中出现消息乱序,引入了generation-id。

Openflow协议规范相关推荐

  1. OpenFlow网络基本介绍

    近期对SDN进行了初步的认识和学习,现将自己做的笔记进行简要整理. 目 录 目 录 OpenFlow交换机 安全通道 流表 OpenFlow协议 OpenFlow交换机分类 FlowVisor Con ...

  2. 【博客450】OpenFlow学习

    OpenFlow OpenFlow协议规范定义了OpenFlow交换机.流表.OpenFlow通道以及OpenFlow交换协议. OpenFlow是第一个开放的南向接口协议,也是目前最流行的南向协议. ...

  3. SDN/Openflow学习总结

    目录 1      起源 2      SDN简介 3      OpenFlow网络简介 3.1       OpenFlow架构 3.1.1 控制器(controller) 3.1.2 OpenF ...

  4. OpenFlow技术

    1.  概述 OpenFlow是由斯坦福大学的Nick McKeown教授在2008年4月ACM Communications Review上发表的一篇论文OpenFlow: enabling inn ...

  5. mininet报错解决:Exception: Could not find a default OpenFlow controller和Cannot find required executable

    早上在使用mininet的时候报错如下: Traceback (most recent call last):File "simple.py", line 63, in myTes ...

  6. 《软件定义网络:基于OpenFlow的SDN》一一2.5 本章总结

    本节书摘来自华章计算机<软件定义网络:基于OpenFlow的SDN>一书中的第2章,第2.5节,作者:Siamak Azodolmolky,更多章节内容可以访问云栖社区"华章计算 ...

  7. ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总

    一.设备OVS sudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath-source ( ...

  8. OpenFlow Switch —— 软件架构

    目录 文章目录 目录 OpenFlow Switch 架构 OpenFlow Switch 架构 OpenFlow Controller:SDN 网络将传统的网络结构划分成了 Control Plan ...

  9. OpenFlow Switch — 1.3 规范

    目录 文章目录 目录 OpenFlow 标准和规范 OpenFlow 的端口(Port) OpenFlow 的流表(Flow Table) OpenFlow 的组表(Group Table) Open ...

最新文章

  1. 句法依存分析_[NLP学习笔记]句法分析
  2. Kinect 骨骼追踪数据的处理方法
  3. linux设备驱动——andriod平台wlan驱动
  4. 《Invisible Inc.》游戏分析:如何在回合制中塑造紧张刺激的体验?
  5. 日志长度_Kafka 日志存储详解
  6. mysql与mangodb多租户_MongoDB多租户(Java):如何使用MongoClient在运行时切换具有不同数据库凭据的MongoDB数据库?...
  7. python pdf转txt保留全部信息_Python 将pdf转换成txt(不处理图片)
  8. BugkuCTF-Reverse题mobile1(gctf)
  9. 使用Bootstrap后,关于IE与Chrome显示字体的问题
  10. In和exists使用及性能分析(一):in的使用
  11. python 三分类的哑编码_python数据挖掘实战 -数据预处理篇(数据可视化-空值填充-哑变量编码)...
  12. vue-cil解决开发环境的跨域问题
  13. Windows PowerShell初体验——.NET对象支持
  14. Java面试题及答案2019_一般JAVA面试题及答案解析2019
  15. PYTHON面向对象编程基础知识
  16. 【优化算法】改进型的LMS算法-NLMS算法【含Matlab源码 631期】
  17. caj转pdf的方法
  18. 阿铭Linux_网站维护学习笔记20190412
  19. RCWL-0516微波雷达感应开关 人体感应传感器,迷你多普勒雷达
  20. 关于ArcGIS的入门建议

热门文章

  1. Linux 文件系统相关的命令
  2. 静态方法中调用spring容器中的对象
  3. Python去除字符串中的特殊字符(包括空格)
  4. Linux 比特币Bitcoin采集节点搭建
  5. 解决 java线上问题_Java应用线上问题排查思路
  6. php哈希取模,PHP取模hash和一致性hash操作Memcached分布式集群
  7. 洛谷P1494 [国家集训队]小Z的袜子
  8. 苹果机的时间格式转换为时间搓
  9. LNMP1.4环境中安装fileinfo插件
  10. java第一次作业计科2班马浩加