OpenFlow1.3

OpenFlow1.3

1.OpenFlow端口

OpenFlow端口是OpenFlow处理进程和网络之间传递数据包的网络接口。OpenFlow交换机之间通过OpenFlow端口在逻辑上相互连接。
OpenFlow的数据包从入口端口接收,经过OpenFlow的流水线处理,可将它们转发到输出端口。输入端口是数据包的属性,贯穿整个OpenFlow流水线,代表数据包是从哪个端口接收的。在进行报文匹配的时候会用到入端口。OpenFlow流水线可以决定数据包通过输出行动发送到输出端口,它定义了数据包怎样传到网络中。
OpenFlow交换机必须支持的三种类型的标准端口:物理端口,逻辑端口,保留端口。

1.1 物理端口

OpenFlow的物理端口为交换机的一个硬件接口。在一些部署中,OpenFlow交换机可以实现硬件的虚拟化,在这种情况下,OpenFlow物理端口可以代表一个与交换机硬件接口对应的虚拟切片。

1.2 逻辑端口

OpenFlow的逻辑端口为交换机定义的端口,并不直接对应一个交换机的硬件接口,是一个更高层次的概念,可能包括报文封装,映射物理端口的功能,也可能是不使用的端口。相对于物理端口,逻辑端口的数据包中存在一个叫做隧道ID的额外的元数据字段与之关联;当逻辑端口接收的分组被发送的控制器时,其逻辑端口和相应底层的物理端口都要报告给控制器。

1.3 保留端口

OpenFlow的保留端口,通常用作转发动作,如:发送到控制器,泛洪,或使用非OpenFlow的方法转发,即正常交换机处理方式。

OpenFlow交换机的保留端口可以分为“Required”(必备)和“Optional”(可选)两种方式。

  • Required(必备)
动作 内容
ALL 转发特定的数据包到所有端口(包括数据包的入端口)
CONTROLLER OpenFlow控制器的控制通道,作为出端口时进行封装数据包消息并使用OpenFlow协议发送。作为入端口时,用来确认控制器的数据包
TABLE OpenFlow流水线的开始,仅在输出时有效
IN PORT 代表数据包的输入端口,用于输出时,仅能通过入端口发送的数据包
ANY 用于未指定端口的OpenFlow指令
  • Optional(可选)
动作 内容
LOCAL 交换机的本地网络堆栈和管理堆栈
NORMAL 代表传统的非OpenFlow流水线,仅用于一个输出端口
FLOOD 使用普通流水线处理进行泛洪(发往所有端口但不包括入端口)

2.OpenFlow表

2.1 流水线处理

每个OpenFlow交换机的流水线包含多个流表,每个流表包含多个流表项,OpenFlow的流水线处理顶一个数据包如何与那些流表进行交互。OpenFlow交换机至少具有一个流表。

  • 流水线流程

OpenFlow交换机流表按标号从0开始,且总是从第一个流表开始,数据包与流表0的流表项进行匹配,其他的流表根据第一个表的匹配结果进行调用。在对某个流表的流表项进行匹配时,如果匹配到了流表项,则该流表项内的指令集被执行,这些指令可能包括指导数据包传递到另一个流表的Goto指令,在那里进行同样的处理(流水线处理只能前进,即goto指令只能指向比它大的流表)。流水线的最后一个表项可以不包括GOTO指令。当数据包匹配到的流表项没有GOTO指令时,流水线处理停止,数据包将会进行转发操作。

若数据包在流表中没有匹配到流表项,这是一个table-miss行为,table-miss将会对数据包进行丢弃或传递到另一个表中取决于table-miss流表的配置。或者根据数据包的信息转发到控制器。

2.2 流表

一个流表中包含多个流表项,每个流表项包含:

Match Fields Priority Counters Instructions Timeouts Cookie
内容 说明
匹配字段 对数据包匹配,包括端口和数据包报头,及前一个表指定的可选元数据
优先级 流表项的匹配次序
计数器 更新匹配数据包的计数
指令 修改行动集或流水线处理
超时 最大时间计数或流有效时间
cookie 由控制器选择的不透明数据值。控制器用来过滤统计数据,流改变和删除

流表项通过匹配字段和优先级决定,在一个流表中匹配字段和优先级共同确定唯一的流表项。所有字段通配和优先级为0的流表项为table-miss流表项。

2.3 匹配

  • 匹配流程
匹配流程.png

OpenFlow交换机在接收到一个数据包后,开始从第一个流表,并基于流水线的方式进行查找。
数据匹配字段从数据包中提取,用于表查找的数据包匹配字段依赖于数据包类型,这些类型通常包括各种数据包的报头字段,如:以太网源地址或IPV4地址。除了通过数据包报头中进行匹配,也可以通过入口端口和元数据字段进行匹配。元数据可以用来在一个交换机的不同表里面传递信息。报文匹配字段标识报文的当前状态,如果在前一个表中使用Apply-Actions改变了数据包的报头,那么这些变化也会在数据包匹配字段中反映。
数据包匹配字段中的值用于查找匹配的流表项,如果流表项字段具有值得ANY,他就可以匹配报头中的所有可能值。数据包与表进行匹配,优先级最高的表项必须被选择,且与选择流表项相关的计数器会更新,选定流表项的指令集也被执行。若多个匹配的流表项有相同的最高优先级,所选择的流表项被确定为未定义表项。

2.4 Table-miss

每一个流表必须能处理table-miss的流表项。table-miss表项指定在流表中如何处理与其他流表项未匹配的数据包。比如讲数据包发送到控制器,丢弃数据包或直接将包扔到后续的表。

table-miss的流表项也有他的匹配字段和优先级,它通配所有匹配字段,且优先级最低(0)。table-miss流表项的匹配可能会不属于正常范围内流表支持的匹配,例如精确匹配会不支持在其他流表项中使用通配符,但必须支持table-miss的通配符流表项。table-miss流表项的行为在许多方面像任何其他流表项,流表中不存在table-miss表项,控制器可以在任何时候添加或删除它,它也可能会超时失效。table-miss流表项能够匹配其他流表项不能匹配的数据,当数据包与table-miss表项匹配时,table-miss表项指令就会执行。如果该table-miss表项直接将数据包通过CONTROLLER端口发送到控制器,那么报文中的信息必须与一个table-miss表项匹配。

2.5 流表项删除

流表项可以通过两种方式在流表中删除,控制器的请求或交换机流超时机制。

2.6 组表

组表包括若干组表项,这也是一种openflow转发方法,就是若干流表项指向一组

Group Identifier Group Type Counters Action Buckets

每个组表项由组编号确定具体为:

内容 说明
组编号 一个32位的无符号整数,唯一标识该组
组类型 确定组语义
计数器 当报文被组表处理时更新数据
行动桶 包含一组要执行的动作和参数
  • 组类型(Group Types)

组类型包括必备(Required)选项和可选(Optional)选项。

必备选项(Required)

内容 说明
all 执行组中所有行动桶,用于多播或广播的转发
indirect 执行组中定义的一个动作桶,这个组只支持单一的动作桶,允许多个流表项或组指向一个组编号

可选选项(Optional)

内容 说明
select 执行组中的一个动作桶
fast failover 执行一个活跃的动作桶

2.7 计量表

一个计量表包含若干个计量表项,确定每个流量的计数,单位流量的计量可以使OpenFlow实现各种简单的QoS业务,如:限速,并且可以结合每个端口队列来实现复杂的QoS框架,如:DiffServ。

计量可以测试数据包的速率,使这些数据包可以实现速率控制。计量直接连接到流表项。任意的流表项可以在它的指令集中定义一个计量,计量测量和控制和它相连的所有流的速率,在同一个表中可以使用多个计量,但必须使用分离的流表项。

Meter Idertifier Meter Bands Counters

每个计量表项所含内容及说明:

内容 说明
计量的标识符 一个32位的无符号整数唯一识别符
计量带 无序列表,定义带的速度和处理数据包的方式
计数器 报文被计量表项处理时更新
  • Meter Bands(计量表带)
    每个计量表可能有一个或多个计量带,每个计量带指定适用的速率和数据被处理的方式。每个计量带包括:
Band Type Rate Counters Type specific arguments

内容和说明

内容 说明
带类型 定义了数据包怎样被处理
计量率 选择计量带,定义了带可以运行的最低速率
计数器 当数据包被计量带处理时更新
类型参数 带类型的可选参数

带类型可选(Optional)参数

内容 说明
drop 丢弃数据包,可以用来定义的速率限制带
dscp remark 减少数据包的IP头中的DSCP字段丢弃的优先级。可用于定义一个简单的DiffServ策略

2.8 计数器

计数器可以进行如下计数:每一个流表,流量入口,端口队列,组,动作桶,计量表,计量带。主要用于统计流量信息,例如活动表项,查找次数,发送包数等。如下所示为OpenFlow规范中定义的计数器集:

  • Per Flow Table
Counter Bits
Reference count(active entries) 32 Required
Packet Lookups 64 Optional
Packet Matches 64 Optional
  • Per Flow Entry
Counter Bits
Received Packets 64 Optional
Received Bytes 64 Optional
Duration(second) 32 Required
Duration(nanoseconds) 32 Optional
  • Per Port
Counter Bits
Received Packets 64 Required
Transmitted Packets 64 Required
Received Bytes 64 Optional
Transmitted Bytes 64 Optional
Received Drops 64 Optional
Transmit Drops 64 Optional
Received Errors 64 Optional
Transmit Errors 64 Optional
Received Frame Alignment Errors 64 Optional
Received Overrun Errors 64 Optional
Receive CRC Errors 64 Optional
collisions 64 Optional
Duration(seconds) 32 Required
Druation(nanoseconds) 32 Optional
  • Per Queue
Counter Bits
Transmit Packets 64 Required
Transmit Bytes 64 Optional
Transmit Overrun Errors 64 Optional
Duration(seconds) 32 Required
Durqation(nanoseconds) 32 Optional
  • Per Group
Counter Bits
Reference Count(flow entries) 32 Optional
Packet Count 64 Optional
Byte Count 64 Optional
Duration(seconds) 32 Required
Durqation(nanoseconds) 32 Optional
  • Per Group Bucket
Counter Bits
Packet Count 64 Optional
Byte Count 64 Optional
  • Per Meter
Counter Bits
Flow Count 32 Optional
Input Packet Count 64 Optional
Input Byte Count 64 Optional
Duration(seconds) 32 Required
Durqation(nanoseconds) 32 Optional
  • Per Meter Band
Counter Bits
In Band Packet Count 64 Optional
In Band Byte Count 64 Optional

2.9 指令

每个流表项中包含一组指令,当一个数据包匹配流表项时指令会被执行,这些指令可以更改数据包,行动组或流水线处理。

OpenFlow中包含的指令如下:

  • 可选(Optional)
内容 说明
Meter meter id 直接将包计量后丢弃
Apply-Actions action 立即进行指定的行动,而不改变行动集,通常用来修改数据包
Clear-Actions 在行动集中立即清除所有的行动
Write-Metadata metadata/mask 在元数据区域记录元数据
  • 必备(Required)
内容 说明
Write-Actions action 将指定的行动添加到正在运行的行动集
Goto-Table next-table-id 指定流水线处理进程中下一张表的ID

2.10 行动集

行动集与每个报文相关,默认为空,一个流表项可以使用Write-Actions指令或者Clear-Action指令修改行动集。行动集在表间被累加。当一个表项的指令集没有包含Goto-Table指令时,流水线处理就停止,报文行动集被执行。
行动集包含所有的行动,无论他们以什么顺序加入到行动集中,行动集的顺序均按照下列顺序执行。如果行动集包含组行动,那么行动桶中的行动也按照下列顺序执行,交换机可以通过Apply-Actions指令修改行动执行顺序。

顺序 内容 说明
1 copy TTL inwards apply copy TTL inward actions to the packet
2 pop apply all tag pop actions to the packet
3 push-MPLS apply MPLS tag push action tothe packet
4 push-PBB apply PBB tag push action to the packet
5 push-VLAN apply VLAN tag push action to the packet
6 copy TTL outwards apply copy TTL outwards action to the packet
7 decrement TTL apply decrement TTL action to the packet
8 set apply all set-field actions to the packet
9 qos apply all QoS actions, such as set queue to the packet
10 group 如果指定了组行动,那么按照这个序列中的顺序执行组行动存储段里的行动
11 output 如果没有指定组行动,报文就会按照 output 行动中指定的端口转发

注:Output行动最后执行,如果行动组和输出行动均存在,行动组优先级最高,两个均不存在,报文被丢弃。

2.11 行动列表

Apply-Actions指令和Packet-out消息中存在行动列表,行动效果累加,全部都会执行。

2.12 行动

  • 必备动作
动作 说明
Output 报文输出到指定端口
Drop 丢弃
Group 用组表处理报文
  • 可选行动
动作 说明
Set-Queue 设置报文的队列ID,为了Qos需求
Push-Tag/Pop-Tag
Set-Field 设置报文包头的类型和修改包头的值
Change-TTL 修改TTL值

3.OpenFlow通道

OpenFlow通道是交换机连接控制器的接口,通过这个接口,控制器可以对交换机进行管理和配置,接收交换机信息并向交换机发送数据包。
消息被封装为openflow协议中规定的格式在交换机和控制器之间传输,运行在安全传输层协议和无保护的tcp连接上。

3.1 OpenFlow协议

OpenFlow协议支持三种消息类型:controller-to-switch,asynchronous(异步)和symmetric(对称),三种消息类型又有多个子消息类型。

controller-to-switch消息由控制器发出,主要用于管理和获取switch状态;asynchronous消息由switch发出,用于网络事件和交换机状态变化更新发送到控制器;symmetric消息可以由交换机或控制器发出。

  • controller-to-switch
内容 说明
Features 建立传输安全会话时,控制器发送给交换机,交换机应答交换机所支持的功能
Configuration 控制器用于设置或查询交换机上的配置信息,交换机需应答查询信息
Modify-state 控制器管理交换机流表项和端口状态
Read-state 控制器想交换机请求关于流或数据包的统计信息
Packet-out 控制器通过交换机向指定端口发送数据包
Barrier 控制器确保消息依赖满足,接收完成操作通知
  • asynchronous
内容 说明
Packet-in 数据包在交换机中没有匹配项时,通过Packet-in消息发送给控制器
Flow-removed 交换机的流表项因为超时或修改等原因被删除掉,会触发此消息
Port-status 交换机端口状态发生变化时触发
Error 交换机发生问题时触发
  • symmetric
内容 说明
Hello 交换机和控制器用于建立连接
Echo 交换机和控制器均可以发送Echo,接收者需回复Echo reply。用于测量延迟,是否保持连接
Vendor 交换机提供附加信息

3.2 建立连接

OpenFlow连接建立后,交换机和控制器必须先要发送OFPT_HELLO消息给对方,该消息携带双方支持的最高版本号,接收方将采用双方都支持的最低协议版本进行通信。发现共同支持的协议版本,则进行连接,否则发送OFPT_ERROR消息,中断连接。

3.3 加密

安全通道用TLS连接加密,交换机启动后通过6633端口进行TCP连接,双方交换证书进行认证。

3.4 中断连接

连接异常时,交换机尝试去连接备份的控制器。当多次连接失败后,交换机进入紧急模式,重置所有的TCP连接。此后,数据包匹配指定的紧急模式流表项,删除其他正常流表项。

3.5 多控制器

交换机可以与多台控制器建立连接,进行故障转移和负载均衡。

3.5.1 Role

与多台控制器建立连接时,各个控制器具有名为Role(角色)的作用,Role可以分为:

  • EQUAL
  • MASTER
  • SLAVE

默认的Role为EQUAL。当为EQUAL时,各个控制器具有相同的作用,也可以对OpenFlow交换机进行完全访问。EQUAL控制器可以对交换机发送Flow-Mod消息,变更交换机设置,在默认设置中,OpenFlow交换机向EQUAL控制器发送所有的异步消息。

对于MASTER控制器,具有和EQUAL相同的权限,但是一个拓扑中只能存在一个MASTER,一个OpenFlow交换机只能与一个MASTER控制器连接,同时,其他的控制器被置为SLAVE。

当交换机为SLAVE时,OpenFlow控制器只能对OpenFlow交换机进行Read-Only访问,只要不指定异步消息,将不能向SLAVE发送除Port-Status消息之外的消息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容