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

posted @ 2020-08-01 16:49  cyquen  阅读(1040)  评论(0编辑  收藏  举报