OpenFlow:简述对OpenFlow协议的认识
OpenFlow:简述OpenFlow协议的演进
OpenFlow:简述对OpenFlow协议1.0的认识
OpenFlow:简述对OpenFlow协议1.3的认识
一个支持OpenFlow 1.0的交换机有一张流表(FlowTable)和一个安全通道(Secure Channel)。 流表(FlowTable)向交换机提供执行数据包的查找和转发工作的依据;安全通道(Secure Channel)向交换机提供到外部控制器的安全连接,如下图所示。控制器使用OpenFlow 1.0这一南向协议对交换机进行控制。
一、流表(FlowTable)
一个流表包含一个流表项的集合、一个活动计数器、一个待作用至匹配数据包的操作集(可能包含0个或多个操作)。所有交换机处理的数据都要经过流表的比对。若发现一个匹配的流表项,则这个表项中所有的操作都将在这个数据表上执行。若没有匹配任何流表项,则数据包将通过安全通道转发给控制器。控制器负责在没有有效流表项的情况下决定如何处理数据包,并向交换机的流表添加或删除流表项。
一个流表项由 Header Fields(包头域)、 Counters(计数器) 、Actions(操作集)组成。如下图所示:
1.1 Header Fields(包头域)
交换机根据 Header Fields(包头域)对接收的数据包进行匹配, Open Flow1.0的 Header Fields(包头域)由12元组组成。SDN交换机解析数据包后逐一对这12元组进行匹配,每一元组的匹配分为固定值匹配和掩码匹配。12元组详情如下:
元组 | 英文 | 适用环境 | 位(比特) |
---|---|---|---|
入口 | Ingress Port | 所有数据包 | 依赖具体实现 |
以太网源地址 | Ethernet source address | 可用端口的所有数据包 | 48 |
以太网目的地址 | Ethernet destination address | 可用端口的所有数据包 | 48 |
以太网类型 | Ethernet Type | 可用端口的所有数据包 | 16 |
VLAN的ID | VLAN ID | 以太网类型为0x8100的所有数据包 | 12 |
VLAN的优先级 | VLAN Priority | 以太网类型为0x8100的所有数据包 | 3 |
IP源地址 | IP source address | 所有IP和ARP的数据包 | 32 |
IP目的地址 | IP dst | 所有IP和ARP的数据包 | 32 |
IP协议 | IP Protocal | 所有IP数据包,以太网上的IP,ARP数据包 | 8 |
IP ToS位 | IP ToS Bits | 所有IP数据包 | 6 |
TCP/UDP源地址 | TCP/UDP src port | 所有的TCP,UDP,ICMP数据包 | 16 |
TCP/UDP目标地址 | TCP/UDP dst port | 所有的TCP,UDP,ICMP数据包 | 16 |
1.2 Counters(计数器)
交换机使用 Counters(计数器)来对匹配的数据包进行更新,Come(计数器)可根据每流表、每个流、每个端口、每个队列进行维护。统计信息所需的计数器分为如下四种:
计数器1【每一流表】 | 位(比特) |
---|---|
Active Entries | 32 |
Packet Lookups | 64 |
Packet Matches | 64 |
计数器2【每一流表项flow】 | 位(比特) |
---|---|
Received Packets | 64 |
Received Bytes | 64 |
Duration(Seconds) | 32 |
Duration(NanoSeconds) | 32 |
计数器3【每一端口】 | 位(比特) |
---|---|
Collisions | 64 |
Received Packets | 64 |
Received Bytes | 64 |
Received Drops | 64 |
Received Errors | 64 |
Transmit Packets | 64 |
Transmit Bytes | 64 |
Transmit Drops | 64 |
Transmit Errors | 64 |
Receive CRC Errors | 64 |
Receive Overrun Errors | 64 |
Receive Frame Alignment Errors | 64 |
计数器4【每一队列】 | 位(比特) |
---|---|
Transmit Packets | 64 |
Transmit Bytes | 64 |
Transmit Overrun Errors | 64 |
1.3 Actions(操作集)
交换机对匹配成功的数据包执行相应的 Actions(操作集),每个操作集可能包含0个或多个操作。若发现一个匹配的流表项,则这个表项中所有的操作将在这个数据表上执行。若没有匹配任何流表项,也没有包含任何转发操作,交换机将丢弃数据包,用户必须按指定的顺序(如根据优先级编号)来执行待操作列表,但不保证一个端口中数据包的输出顺序。
若一个流表项不能按指定的顺序来对数据包执行列表中的操作,则交换机可能将这个流表项驳回,并立即返回一个不支持流的错误值。不同供应商提供的交换机端口中的顺序可能不同。
操作分为两种,一种为 Required Actions必需操作、另一种为 Optional Action可选操作。注意交换机不需要支持所有的操作类型,只需要支持 Required Actions必需操作即可。交换机连接到控制器时将告知哪些是可选操作。
1.3.1 Required Actions必需操作
每台交换机都必须支持这些操作,包括转发操作中的必需操作和丢弃,其中转发操作中的必需操作包括以下几项。
- ALL:将数据转发至不包括进入接口的所有接口。
- CONTROLLER:将数据包封装并传输至控制器。
- LOCAL:将数据包发送至本地交换机网络栈。
- TABLE:仅向 packet-out消息执行流表中的操作。
- IN PORT:将数据包从其进入的接口发出。
- 丢弃:若数据包不匹配所有的流表项,则交换机将丢弃此数据包。
1.3.2 Optional Action可选操作
可选操作包括转发操作中的可选操作,入队,修改域。
转发操作中的可选操作包括以下几项:
- NORMAL:执行传统交换机支持的转发路径。
- FLOOD:使用最小生成树的原理将数据包泛洪至除入口之外的所有接口。
入队:入队操作是将数据包转发至一个端口所对应的队列中。
修改域的操作是SDN最强大的功能之一。允许修改数据包的包头内容包括以下几项:
- 修改VLAN标签。
- 修改VLAN优先级。
- 弹出VLAN标签。
- 修改源MAC地址。
- 修改目的MAC地址。
- 修改源IP地址。
- 修改目的IP地址。
- 修改IP服务类型字段。
- 修改源端口号。
- 修改目的端口号。
1.4 匹配流表
交换机接收到一个数据包后,执行匹配流程。其中对于数据包的包头进行解析,以用于交换机基于数据包的类型来查找流表。根据数据包是否属于VLAN(以太网类型0x8100)、是否为ARP数据包(以太网类型0x0806)、是否为IP数据包(以太网类型0x0800)、是否为TCP或UDP包(IP协议为6或7)、是否为ICMP(IP协议为1)来提取关键信息进行比对。
数据包基于优先级(优先级越高,其数字也越高)来对众多流表项进行匹配。若一个流表项指定了精确的匹配(即没有通用符),则它是最高优先级的,其他带有通用符的流表项有其相应的优先级。先匹配优先级高的流表项,如果两个流表项优先级相同,那么由具体的交换机自行决定。
当数据包匹配到一条流表项时,流表项对应的计数器更新。若没有匹配到任何流表项,则交换机将这个数据包通过安全通道发送给控制器。另外注意,若某个域的值为ANNY,则它匹配包头对应这条域中所有可能值的数据包。
二、安全通道(Secure Channel)
安全通道是连接交换机和控制器的接口,所有的安全通道消息都必须遵守OpenFow协议。OpenFlow协议支持3种消息类型: controller-to-switch(交换机到控制器)、 asynchronous(异步)和 symmetric(对称),每一类消息又有多个子消息类型。
- controller-to-switch:消息由控制器发起,用于直接管理或监视交换机的状态,包括 Features(获取交换机特性)、 Configuration(配置 OpenFlow交换机)、 Modify-State(修改交换机状态,即修改流表)、 Read-State(读取交换机状态)、Send- Packet(发送数据包)、Barrier(阻塞消息)。
- synchronous(异步)消息:由交换机发起,用以提醒控制器更新网络事件和交换机状态变化的状态,包括 Packet-In(告知控制器交换机接收到数据包,注意此数据包为交换机无法处理的数据包)、 Flow-Removed(告知控制器交换机流表被删除)、 Port-Status(告知控制器交换机端口状态更新)、Error(告知控制器交换机发生错误,如控制器给交换机下发了一些无法执行的命令)。
- symmetric(对称)消息:可以由交换机或控制器发起而无须邀请,包括Hello(建立Open Flow连接),Echo(确认交换机与控制器之间的连接状态,互相探测对方是否存在)、 Vendor(由厂商自定义消息)。