OpenFlow协议简单介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenFlow协议简单介绍相关的知识,希望对你有一定的参考价值。
参考技术AOpenFlow流表由流表项构成,流表项的结构随着OpenFlow版本的不断演进不断变化,不同协议所包含的流表项结构不同,具体各版本如下表所示:
OpenFlow交换机只含有一个组表,组表中包含许多组表项,每条组表项的结构如下:
Meter表项用于关联流表项,对匹配流表项的报文实施QOS策略
其中Meter带又有如下组成:
OpenFlow流表项的匹配域支持丰富的匹配字段,OpenFlow1.0支持匹配的数据包头的12个字段,到OpenFlow1.3,已经扩展到39个字段,并规定了OpenFlow交换机必须实现的13个字段( 之后补充 )
OpenFlow1.0的12个字段如下:
当报文匹配上流表项时,执行表项包含的指令集,指令集类型如下所示:
当流表项的指令集中不包含GoTo-Table时,立即执行相关联的动作集,动作类型如下表所示:
动作列表存在于特定协议报文中,它与动作集的区别在于,动作列表中的动作按照列表顺序依次执行,且可以包含多个同类型动作,这些动作的执行效果可以叠加。
OpenFlow端口分为三类:物理端口,逻辑端口,保留端口
OpenFlow流水线将交换机内的一组流表串联起来,定义了每个流表怎样用于报文处理。
安全信道是控制器和其管理的每一台OpenFlow交换机间的可靠连接,具体流程如图所示:
1.同步消息
2.异步消息
3.控制器向交换机连接
OpenFlow各个协议版本之间的主要区别
实验OpenFlow协议分析
实验环境
- 虚拟机软件(vmware workstation)
- 装有 mininet、python2 的 Ubuntu20.04
实验目的
- 能够理解 OpenFlow 协议的工作原理;
- 能够通过 Wireshark 抓包软件对 OpenFlow 协议进行分析;
- 能够使用控制器 RYU 连接交换机,并对控制器与交换机的通信流程进行分析;
实验内容
- 基础技能
- 使用 mininet 的可视化工具创建网络拓扑,完成相关 IP 配置,并实现主机与主机之间的 IP 通信。用抓包软件 wireshark 获取控制器与交换机之间的通信数据包。
- 进阶技能
- 修改基础技能中创建的网络拓扑 python 文件,设置远程控制器连接,启动 wireshark 和控制器 RYU,运行 python 文件后,在 wireshark 中查看控制器与交换机的通信流程,对具体消息进行分析。
实验步骤
-
可视化界面搭建网络拓扑
在超级用户模式下,在目录/mininet/examples 下,运行 miniedit.py 文件
按照拓扑图,选择对应的设备进行连接,完成拓扑图的搭建
-
配置 PC 的 IP 信息
在主机、交换机、控制器上点击鼠标右键,选择 Properties 即可设置其属性
-
Wireshark 抓包并分析
在超级用户下,使用sudo wireshark 命令开启 wirshark 软件,点击“any”,让其获取全部的数据包,之后再通过过滤器输入“openflow_v1”或“openflow_v4”,过滤出 OpenFlowv1.0 或OpenFlowv1.3 的数据报文,进行分析。1. HELLO
HELLO 是使用来协商控制器和交换机之间openflow协议的版本号的消息。
0x01代表版本1,即 openflow1.0
Type类型为 HELLO,表示为02. FEATURE_REQUEST
FEATURE_REQUEST 消息是控制器用来查询交换机特性消息,如交换机ID,缓冲区数量,端口及端口属性等。
Type类型为 FEATURE_REQUEST,标识为5
Length 代表消息长度,除去消息报头
Transation ID 用来表示同一个事件3. FEATURE_REPLY
交换机收到feature_request消息之后会回复feature_reply消息来报告自己的特性。
Datapath id 数据通道标识符,用来表示交换机的身份。在每一个控制器中独一无二。
n_buffers 一次最多缓存的数据包数量,即交换机自己的缓存能力。
n_tables 表示交换机支持的流表数量。
capabilities 交换机端口所支持的功能,有流表,端口,STP,队列,ARP 等。
actions 该bitmask表示交换机所支持的 actions,有转发和修改包头两种。
Port 交换机连接的端口消息。端口MAC地址,链路数据等。4. SET_CONFIG
SET_CONFIG 消息是控制器对交换机进行配置的消息。控制器可以配置交换机的 MTU,报文分片处理等能力。
5. PACKET_IN
当交换机遇到不知道如何转发的报文时,使用 Packet_IN 消息将无法处理的报文封装起来发送给控制器,交给控制器去判断处理。并且交换机会将该数据包缓存。
Buffer_id Packet-IN 消息所携带的数据包在交换机中的缓存 ID。
Total length 帧的长度。
In port 数据包进入交换机的入端口号。
Reason packet-in事件的产生原因,分为两种:OFPR_NO_MATCH和OFPR_ACTION。6. PACKET_OUT
控制器可以使用 Packet_Out 消息,告诉交换机某一个数据包如何处理
In port 数据包进入交换机的入端口号。
Actions length 动作信息的长度。7. FLOW_MOD
FLOW_MOD 消息的作用是下发流表项。通过 Flow_Mod 消息可以对流表进行添加、删除、变更设置等操作
Command 表示flow-mod消息的动作。一共五种,实现对流表的增、删、改操作。
Idle time-out 流表匹配数据计时器,如果该时间内流表匹配信息还未到达则删除流表。
hard time-out 流表项老化时间。一项流表在交换机中存在的时间超过该时间则删除流表项。
Priroity 流表项优先级,数字越大越优先。
Buffer Id 交换机上保存的,发送至控制器请求处理的流表的编号。8. ECHO_REQUEST
控制器和交换机通过 ECHO_REQUEST 和 ECHO_REPLY 报文保持连接
9. ECHO_REPLY
以上是关于OpenFlow协议简单介绍的主要内容,如果未能解决你的问题,请参考以下文章