OpenFlow Switch学习笔记(四)——Matching
这次我们着重详述来自于网络中的数据包在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的更多相关文章
- OpenFlow Switch学习笔记(七)——Matching Fields
Matching Fields in_port=port Matches OpenFlow port port dl_vlan=vlan Matches IEEE 802.1q Virtual LAN ...
- OpenFlow Switch学习笔记(一)——基础概念
OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...
- OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters
本文主要详述OpenFlow Switch的另外两个主要组件——Group Table和Meter Table,它们在整个OpenFlow Swtich Processing中也起到了重要作用. 1. ...
- OpenFlow Switch学习笔记(三)——Flow Tables
这次我们主要讨论下OpenFlow Switch的核心组件之一——Flow Tables,以了解其内部的 matching 以及 action handling 机制.下文将会分为几个部分来逐步详述O ...
- OpenFlow Switch学习笔记(二)——OpenFlow Ports
OpenFlow Ports是OpenFlow Switch与剩余网络之间传递Packet的网络接口.OpenFlow Switches之间通过OpenFlow Ports彼此相互逻辑连接.一个Ope ...
- OpenFlow Switch学习笔记(六)——Instructions和Actions
本文主要重点讨论OpenFlow Switch规范的指令集,它们深刻影响着数据包在Switch中的处理行为,下面开始从以下几个部分谈起. 1.Instructions 每一个Flow Entry里都包 ...
- ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁
作者:Grey 原文地址: ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 当多个进 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
随机推荐
- linux 安装 php
1. libxml2安装 tar -zxvf libxml2-2.6.26.tar.gz cd libxml2-2.6.26 ./configure --prefix=/usr ...
- C#入门篇6-11:字符串操作 查找与替换
#region 查找与替换 public class C4 { //查找 public static void StrFind() { //目标字符串 string str1 = "~awe ...
- 可伸缩的textview。
在一些应用中,比如腾讯的应用市场APP应用宝,关于某款应用的介绍文字,如果介绍文字过长,那么不是全部展现出来,而是显示三四行的开始部分(摘要),预知全部的内容,用户点击展开按钮即可查阅全部内容. 这样 ...
- lucene 过滤结果
package cn.itcast.h_filter; import java.util.ArrayList; import java.util.List; import org.apache.luc ...
- 【个人使用.Net类库】前言
个人接触.Net是在2013年8月份到了一家新的公司开始的. 目前为止,发现自己的知识储备如下: 基本的WinForm编程,但没做过对应项目. 基本的Asp.Net页面,做过查询.树形菜单.登录的小功 ...
- HighAvailability和LoadBalancer
HighAvailability LoadBalancer 红帽RHCS lvs(三种工作 ...
- Problem K 栈
Description A math instructor is too lazy to grade a question in the exam papers in which students a ...
- 踏着前人的脚印学hadoop——ipc中的Client
1.Client有五个内部类,分别是Call,ParallelCall,ParallelResult,Connetion,ConnectionId 其实这五个类就是去完成两件事情的,一件事情是连接,另 ...
- Deployment failed due to an error in FastDev assembly synchronization.
在编译的时候发生Assembly synchronization error,显示信息为:Deployment failed due to an error in FastDev assembly s ...
- php练习题:投票
通过连接数据库,对数据库的增删改来实现一个投票的进行与结果的显示: 方法一: 主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...