OpenFlow协议初探——OpenFLow中的流和流表

OpenFlow交换机转发面由两部分组成:端口和流表。一个交换机可以有很多种端口,也可以有很多级流表。下图是思科提供的OpenFlow交换机总体架构。

可以将Controller Channel视为OpenFlow交换机和和OpenFlow控制器通信的端口。控制器告诉交换机,当数据报文从哪个端口进入,需要去查哪张流表,然后具体匹配到哪张流表项,并执行该流表项所规定的指令,转发或者丢弃。

下面来介绍OpenFlow中的Flow和Flow Table:

流:流这个概念在计算机网络领域十分常见。所谓的流就是在一段时间内经过同一个网络的一系列具有相同属性的顺序发送的报文集合。流是一个相对的概念,并没有绝对的定义。随着coflow等概念的引入,流调度这个问题在现有的研究中较为普遍。下面举个例子,例子来源[1],

主机A应用层FTP协议向主机B传输文件,该文件在网络层分为10万个报文,源IP为A,目的IP为B。传输层协议为TCP,源端口号2000,目的端口号21.

同一时间段,主机C应用层FTP协议向主机B传输文件,该文件在网络层分为20万个报文源IP为C,目的IP为B。传输层协议为TCP,源端口号3000,目的端口号21.

如果管理员只对目的IP是B、目的TCP端口号是21的报文感兴趣,那么这30万报文就是一条流,因为他们具有相同的感兴趣的属性。那么管理员如果还对源IP感兴趣的话,那么就是两条流。因为源IP不一样。

学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,久学习,或点击这里加qun免费
领取,关注我持续更新哦! !

流表:流表是芯片中一张张转发表(Forwarding Table),每张流表都是由很多流表项(Flow Entry)组成。

流表项:是流表的最小单位,每条流表对应了网络传输的一条流。流表项的字段数据结构为:

图片摘自于[Overview of OpenFlow v1.3.0]

Flow Entry共有6个字段。分别为:匹配字段(Match Field),优先级(Priority),计数器(counter),指令(instruction),超时时间(timeout)和cookie。每个字段具体多少bit暂时也不是很清楚,如果有人知道的话可以告诉我和出处。

匹配字段:包括报文本身的信息(比如源mac,目的mac,源IP,目的IP等)以及和报文相关联的字段(报文进入的port,前一张flow table传入的属性数据)。上图中还提到了MPLS Label这是一个不同的协议,介于二三层之间,应用比较广泛。

指令集:OpenFlow的指令有很多种,图中提到了有1.修改/删除/增添 VLAN tag;2.修改/删除/增添 MPLS Label;3.转发包;4.删除。但是不完善,这里参考[1]来详细学习一下。

1. Meter——用来测量该Flow的速率并执行相应的动作。每个meter包含几个Band,每个Band对应一个Rate和动作。Band指如果所测量的Flow速率超过指定的Rate,那么就执行动作。这个动作可能是丢包或者改写IP中的dscp值。如果一个Meter里面只有一个band并且动作是丢弃,那么其实就相当于我们平时所说的SrTCM policing。如果有两个Band,低速率的Band不丢包,那么其实就类似于我们平时所说的TrTCM policing。

2. Apply-Action——对报文执行一个Actiion List。一个例子:每条流都对匹配该流的报文量进行统计;

3. Write-Action——并不立即对报文进行动作,吧一个Action List的多个Action放在一个Action Set中。等到所有的流表都处理完了,在一次性处理这个Action Set里面的所有Action。如果第一个流表匹配到的流表项放了一个Action要将dIP改成1.2.3.4,另一个说要改成3.4.5.6.那么第二个流表项的动作就会覆盖第一个流表项的动作。只支持单流表的时候这个指令等同于Apply Action

4. Clear-action——如果某条流想把前面所有流表处理后产生的Action Set都清除。

5. Write-Metadata——描述元信息;

6. GoTo-Table——继续下一级指定流表的处理。

优先级:报文在流表中进行匹配查找的时候,是从上到下顺序查找的,谁放在前面就可能被优先匹配到,优先级就是用来表示流表之间的优先级关系的。优先级相同的流表没有顺序关系。

计数器:计数器是管理员用来观察监控网络负载情况的非常重要的工具,每条流表项都要维护一个计数器,来表示属于这条流的报文已经收到了多少个和其他统计数据(多少字节,多少出错的包)。

超时时间:每条流表项都可能老化,Timeout表示该流的老化时间。有两种老化时间,Hard timeout和idle timeout。前者表示从该流表项创建开始,到这个时间之后无条件删除;后者表示如果在规定时间内没有任何报文匹配该流表项,就把它删除。前者可以靠软件来做,后者必须要硬件协助。

Cookie:用作Controller向switch来传递流表项相关的操作信息,比如修改Flow、删除Flow,这个属性不会在报文转发的时候被使用,仅仅用于Controller和交换机之间传递消息。

参考文献:

[1]张卫峰. 深度解析SDN--利益、战略、技术、实践[M]. 电子工业出版社, 2014.

原文链接:https://zhuanlan.zhihu.com/p/57201400

OpenFlow协议初探——OpenFLow中的流和流表相关推荐

  1. 初识OpenFlow协议

    OpenFlow是一种交换技术,刚开始它是2008年斯坦福大学的一个研究项目,但现在它已经引起了网络设备供应商和大型交换网络管理员的广泛关注.使用OpenFlow协议建立软件定义网络,可以将网络作为一 ...

  2. OpenFlow交换机 之 OpenFlow协议

    转载地址:3. OpenFlow协议_SDN核心技术剖析和实战指南_红黑联盟读书频道http://book.2cto.com/201310/34138.html OpenFlow协议是用来描述控制器和 ...

  3. 五、南向接口协议(二)—— OpenFlow协议

    文章目录 1 OpenFlow协议概述 2 OpenFlow消息类型 2.1 controller-to-switch消息 2.2 asynchronous信息(异步) 2.3 symmtric消息( ...

  4. 【重识云原生】第四章云网络4.8.2.2节——OpenFlow协议详解

    2 OpenFlow协议详解 2.1 OpenFlow协议简介 OpenFlow协议是基于网络中"流"的概念设计的南向接口协议.在OpenFlow引入了"流"的 ...

  5. 生动的SDN基础内容介绍(二)--OpenFlow协议

    生动的SDN基础内容介绍(二)--OpenFlow协议 背景 OpenFlow OpenFlow的基础概念 流表项 流表 漏表 流表项的下发 流表项的删除 计量表 组表 控制器与交换机的通信 总结 背 ...

  6. OpenFlow网络、OpenFlow交换机及OpenFlow协议的知识总结

    目录 OpenFlow起源与发展 OpenFlow网络 1.OpenFlow交换机: 2.FlowVisor: 3.Controller: OpenFlow交换机 分类 安全通道 流表 OpenFlo ...

  7. OpenFlow协议Open Flow交换机跟流表(FlowTable)

    Open Flow协议.Open Flow交换机跟流表(FlowTable) 传统网络:传统网络的缺陷或者催生SDN的背景请参考链接https://www.cnblogs.com/031602523l ...

  8. openflow协议的工作原理及流表的基本操作

    openflow协议的工作原理及流表的基本操作 1.openflow协议的工作原理 首先看一下python文件中的拓扑图,主机h1如果要与h3进行通信,h1向网络发送数据包,这里数据包发送给交换机s1 ...

  9. Openflow协议通信流程解读

    前言 接触了这么久的SDN,Openflow协议前前后后也读过好多遍,但是一直没有时间总结一下自己的一些见解.现在有时间了,就写一写自己对Openflow协议通信流程的一些理解. SDN中Switch ...

最新文章

  1. 剖析今日头条技术面试过程以及应该如何准备?
  2. java.util.ConcurrentModificationException(并发修改错...
  3. 【竞赛方案】2020腾讯广告算法大赛:高分进阶
  4. mybatis plus generator配置
  5. 【目录】 网络瑞士军刀-netcat的秘诀
  6. Python小练习2:pandas.Dataframe使用方法示例demo
  7. java程序服务不能启动不了_JavaService.exe注册的windows服务无法启动问题
  8. 关系型数据库与NoSQL数据库简述
  9. 虚拟化服务器内存容量与数量,虚拟化服务器内存容量与数量
  10. 西工大18秋《C语言程序设计》平时作业,西工大18秋C语言程序设计平时作业答案...
  11. 电脑开机svchost.exe报错
  12. 计算机基础与网络在线试题,计算机网络基础期末考试试题
  13. 彻底清除计算机磁盘上的病毒,电脑硬盘病毒无法彻底删除怎么办
  14. httpclient基本get用法
  15. kettle调度监控平台(kettle-scheduler)开源
  16. 三国演义-(01不打不相识)
  17. 动态域名解析概述及操作步骤讲解
  18. 【OKHTTP3】OKHTTP3使用GET和POST
  19. python——常用功能之文本处理
  20. 飞鸽传书如何在VMware下进行通信

热门文章

  1. 论文小技巧-pdf转eps使色彩保持RGB不变及去边框
  2. 2D草图实时3D建模,可跑可跳无需手动绑定骨骼丨开源
  3. # 会员注册与登录模块
  4. UOJ #141. 【UER #4】量子态的棋盘
  5. increment java_Java LongAdder increment()用法及代码示例
  6. mysql auto_increment 重置_如何重置MySQL中的AUTO_INCREMENT?
  7. Mysql的AUTO_INCREMENT
  8. 线性代数1:向量、线性组合、张成的空间和基
  9. scp命令上传文件到服务器
  10. Given no hashes to check 131 links for project 'pip': discarding no candidates