OpenFlow协议简单介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenFlow协议简单介绍相关的知识,希望对你有一定的参考价值。

参考技术A

OpenFlow流表由流表项构成,流表项的结构随着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 中查看控制器与交换机的通信流程,对具体消息进行分析。

实验步骤

  1. 可视化界面搭建网络拓扑
    在超级用户模式下,在目录/mininet/examples 下,运行 miniedit.py 文件
    技术图片
    按照拓扑图,选择对应的设备进行连接,完成拓扑图的搭建
    技术图片

  2. 配置 PC 的 IP 信息
    在主机、交换机、控制器上点击鼠标右键,选择 Properties 即可设置其属性
    技术图片

    技术图片

  3. Wireshark 抓包并分析
    在超级用户下,使用sudo wireshark 命令开启 wirshark 软件,点击“any”,让其获取全部的数据包,之后再通过过滤器输入“openflow_v1”或“openflow_v4”,过滤出 OpenFlowv1.0 或OpenFlowv1.3 的数据报文,进行分析。

    1. HELLO

    HELLO 是使用来协商控制器和交换机之间openflow协议的版本号的消息。
    技术图片

    0x01代表版本1,即 openflow1.0
    Type类型为 HELLO,表示为0

    2. 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协议简单介绍的主要内容,如果未能解决你的问题,请参考以下文章

OpenFlow和SDN的历史和原理介绍

TCP/IP协议简单介绍

OpenFlow交换机的实现总结

HTTP协议简单介绍

网络协议TCP协议简单介绍

HTTP协议简单介绍