这次我们着重详述来自于网络中的数据包在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. 克隆机器后eth1变为eth0问题

    1. 清空该文件 2.进入网络配置文件把HADDR 和UUID注释掉,并重启 3.成功修改eth0 4. 4.可以结合这篇帖子来看   http://www.cnblogs.com/zydev/p/4 ...

  2. S1 : 函数

    一.做为值的函数 例如,假设有一个对象数组,我们想要根据某个对象属性对数组进行排序.而传递给数组sort()方法的比较函数要接收两个参数,即要比较的值.可是,我们需要一种方式来指明按照哪个属性来排序. ...

  3. strstr strchr strrchr

    通过函数的定义来区分: 1.strstr: 返回子串出现的第一次位置 char *strstr(const char *haystack, const char *needle) 可见,strstr函 ...

  4. bzoj 2440 简单莫比乌斯反演

    题目大意: 找第k个非平方数,平方数定义为一个数存在一个因子可以用某个数的平方来表示 这里首先需要考虑到二分才可以接下来做 二分去查找[1 , x]区间内非平方数的个数,后面就是简单的莫比乌斯反演了 ...

  5. 20145338 《Java程序设计》第1周学习总结

    教材学习内容总结 第一章 java平台概论 1.1Java不只是语言 Java最早是Sun公司"绿色项目"中撰写Star应用程序的程序语言,当时叫Oak.1995年5月23日改名为 ...

  6. GPIO的8种工作模式

    1.浮空输入GPIO_IN_FLOATING ——浮空输入,可以做KEY识别,RX1 2.带上拉输入GPIO_IPU——IO内部上拉电阻输入 3.带下拉输入GPIO_IPD——IO内部下拉电阻输入 4 ...

  7. 一个完整的ansible实施目录示例

    当前目录:

  8. ios 检测应用程序升级问题

    app 上其实已经有自动检测我们版本的功能.  其实我也觉得对于一个程序员来说检测功能让,系统来维护更合适和合理.开发者只要告诉苹果即可. 然而今天老大非要实现自己版本更新的问题,因此也查找了相关的资 ...

  9. 指针属性直接赋值 最好先retain 否则内存释放导致crash

    //先释放之前的 YK_RELEASE_SAFELY(_selectedDate); //retain新的 _selectedDate = [aDate retain]; NSString 属性的好像 ...

  10. 机器翻译(noip2010)

    分析:该题是经典的队列题目,直接用队列实现就可以.如果数据范围大一些的话还可hash判重! 这可以说是一道送分的题目,但是还有粗心的学生会在这里失分,主要原因是数组的范围定义的不合适,因为空间足够用, ...