这次我们着重详述来自于网络中的数据包在OpenFlow Switch中与Flow Entries的具体匹配过程,以及当出现Table Miss时的处理方式,下面就将从这两方面说起。

1、Matching

  当一个来自于外部网络的数据包进入到OpenFlow Switch中时,OpenFlow Switch将会按照如下图所示的方式来处理这些数据包,如前面的学习笔记中讲述的那样,会先从Pipeline的第一个Flow Table首先进行Lookup,然后可能继续进入到其他的Flow Table进行Lookup。匹配过程图如下:

  数据包的匹配值域来源于数据包头,这些匹配值域将会依据数据包的类型被用来与Flow Table进行匹配,比如源地址或者目标地址;另外,除了数据包头信息外,数据包的 ingress port 或者 从上一个Flow Table传递过来的 Metadata 值域(在Flow Table之间进行参数传递的载体)也可以充当匹配域。数据包的匹配值域表示了数据包当前的状态值,假若数据包在前一个Flow Table里应用了Apply Actions改变了数据包头信息,那么这么改变将会被立即反映到数据包头信息里。

  数据包与某个Flow Entry能成功匹配的前提是:数据包的匹配值域都必须落在Flow Entry匹配值域的范围内。假若一个Flow Entry的匹配值域是ANY,那么它将表示匹配数据包的所有可能的值域信息。当发现有多个Flow Entries匹配成功,那么仅仅具有最高优先权的Flow Entry将会被选择使用,同时该Flow Entry的Counters的值必须被更新。如果OpenFlow Switch配置了OFPC_FRAG_REASM,那么在进行Pipeline processing的时候,IP片段必须要被重组起来。OpenFlow Switch规范并没有定义当遇到格式不正确的或者损坏的数据包时该如何处理。

2、Table Miss

  如前面的学习笔记记录那样,每个Flow Table都必须支持Table Miss Flow Entry,用来处理当发生Table Miss 时如何处理数据包,或者将其发送回Remote Controller,或者将其直接丢弃,或者将其转发到后续的Flow Table里处理。

  如同其他正常的Flow Entry一样,Table Miss Flow Entry也是由Match Fields和Prioriy作为联合主健来唯一定位,它能够匹配所有的数据包值域,即能够匹配的值域范围要超出Flow Table的正常范围,并且拥有最低的优先级 0 ,但是其可能没有其他正常Flow Entry的能力。然而,Table Miss Flow Entry必须至少得能够通过CONTROLLER Reserved Port将数据包发送给Remote Controller,以及通过Clear-Actions直接丢弃数据包,但是为了与前面规范保持一致,推荐直接将数据包转发给后续的Flow Table处理。

  Table Miss Flow Entry的工作方式与其他正常的Flow Enety无异,默认情况下,Flow Table里并不存在Table Miss Flow Entry,但是在任何时候都可以通过Remote Controller来添加或者删除,它也如同其他正常Flow Entry可能会过期。它仅仅匹配其他正常Flow Entry无法成功匹配的数据包,并且其上得Instructions Set将会应用到数据包上。当经过Table Miss Flow Entry的Actions通过CONTROLLER Reserved Port将数据包发送给Remote Controller时,必须指明packet-in消息的原因是table miss。

  如果一个Flow Table并不存在Table Miss Flow Entry,那么其未能成功匹配的数据包就会被丢弃,但是基于不同的OpenFlow Switch实现策勒,可以覆盖其默认行为,以其他的方式来实现。  

OpenFlow Switch学习笔记(四)——Matching的更多相关文章

  1. OpenFlow Switch学习笔记(七)——Matching Fields

    Matching Fields in_port=port Matches OpenFlow port port dl_vlan=vlan Matches IEEE 802.1q Virtual LAN ...

  2. OpenFlow Switch学习笔记(一)——基础概念

    OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...

  3. OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters

    本文主要详述OpenFlow Switch的另外两个主要组件——Group Table和Meter Table,它们在整个OpenFlow Swtich Processing中也起到了重要作用. 1. ...

  4. OpenFlow Switch学习笔记(三)——Flow Tables

    这次我们主要讨论下OpenFlow Switch的核心组件之一——Flow Tables,以了解其内部的 matching 以及 action handling 机制.下文将会分为几个部分来逐步详述O ...

  5. OpenFlow Switch学习笔记(二)——OpenFlow Ports

    OpenFlow Ports是OpenFlow Switch与剩余网络之间传递Packet的网络接口.OpenFlow Switches之间通过OpenFlow Ports彼此相互逻辑连接.一个Ope ...

  6. OpenFlow Switch学习笔记(六)——Instructions和Actions

    本文主要重点讨论OpenFlow Switch规范的指令集,它们深刻影响着数据包在Switch中的处理行为,下面开始从以下几个部分谈起. 1.Instructions 每一个Flow Entry里都包 ...

  7. ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁

    作者:Grey 原文地址: ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 当多个进 ...

  8. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  9. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

随机推荐

  1. (转)onTouchEvent方法的使用

      (转)onTouchEvent方法的使用 手机屏幕事件的处理方法onTouchEvent.该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触 ...

  2. 牛场围栏(vijos 1054)

    题目大意: 给出N种木棍(每种木棍数量无限)的长度(<=3000),每根木棍可以把它切掉[1,M]的长度来得到新的木棍. 求最大的不能被组合出来的长度. 如果任何长度都能组合出来或者最大值没有上 ...

  3. 用PHP的socket实现客户端到服务端的通信

    服务端 <?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address = 'loca ...

  4. SDK(SoftWare Development Kit)介绍

    ctrl+alt+shift+s进入项目设置页面: SKDs的界面可以设置SDK. 点击到project 可以为project选择sdk 如上图标注 1 所示,IntelliJ IDEA 支持 6 种 ...

  5. 添加Sql作业,新建步骤出现:从IClassFactory为CLSID为{AA40D1D6-CAEF-4A56-B9BB-D0D3DC976BA2}的COM组件创建实例失败,原因是出现以下错误:c001f011。的解决方法

    32位操作系统: 打开运行(命令提示符), 一.输入 cd c:\windows\system32 进入到c:\windows\system32路径中 二.输入 regsvr32 "C:\P ...

  6. 获取一个 app 的 URL Scheme 的方法:

    获取一个 app 的 URL Scheme 的方法: 上这个网站 URL Schemes 查一下相应的 app 的 URL Scheme 是否有被收录 第一种方法没找到的话,把相应的 app 的 ip ...

  7. sql server手工注入

    sql server手工注入 测试网站testasp.vulnweb.com 1. http://testasp.vulnweb.com/showforum.asp?id=0 http://testa ...

  8. WebService的原理和过程

    转自:http://blog.csdn.net/xiaoqiang081387/article/details/5694304 (一).XML WebService作用  XML WebService ...

  9. Note_Master-Detail Application(iOS template)_04_ YJYMasterViewController.h

    //YJYMasterViewController.h #import <UIKit/UIKit.h> @classYJYDetailViewController; #import < ...

  10. 为自己的系统定制openstack ceilometer

    一.目的 最近研究了一下ceilometer,目的做一个监控系统,对系统中发生的事件进行处理.ceilometer对openstack各个组件信息的收集方式主要由 推 和  拉 两种. “推”: 就是 ...