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

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 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenFlow协议是一种用于SDN网络控制数据平面的协议。在OpenFlow,交换机将流表的匹配规则与数据包进行比较,并根据规则将数据包转发到相应的端口或控制器上进行处理。以下是OpenFlow流表的CheatSheet: 1. 匹配字段 - Ingress Port:数据包的进入端口 - Ethernet Source/Destination Address:以太网源/目的地址 - VLAN ID:VLAN标识符 - VLAN Priority:VLAN优先级 - Ethernet Type:以太网类型 - IP Source/Destination Address:IP源/目的地址 - IP Protocol:IP协议类型 - IP DSCP:IP差分服务代码点 - IP ECN:IP显式拥塞通告 - TCP/UDP Source/Destination Port:TCP/UDP源/目的端口 2. 动作 - Output Port:输出端口 - Set VLAN ID/Priority:设置VLAN标识符/优先级 - Set Ethernet Source/Destination Address:设置以太网源/目的地址 - Set IP Source/Destination Address:设置IP源/目的地址 - Set IP DSCP/ECN:设置IP差分服务代码点/显式拥塞通告 - Set TCP/UDP Source/Destination Port:设置TCP/UDP源/目的端口 - Drop:丢弃数据包 - Group:将数据包发送到组播组 3. 匹配类型 - Exact Match:精确匹配 - Longest Prefix Match:最长前缀匹配 - Wildcard Match:通配符匹配 4. 表类型 - Flow Table:流表,用于匹配和处理数据包 - Group Table:组表,用于定义组播组 - Meter Table:计量表,用于限制量速率 总之,OpenFlow流表是SDN网络非常重要的组成部分,它定义了如何匹配和处理数据包,从而实现网络控制的灵活性和可编程性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值