zoukankan      html  css  js  c++  java
  • 2019 SDN上机第3次作业

    1. 利用Mininet仿真平台构建如下图所示的网络拓扑,配置主机h1和h2的IP地址(h1:10.0.0.1,h2:10.0.0.2),测试两台主机之间的网络连通性

    创建拓扑并配置IP,并开启CLI,控制器类型先选择OpenFlow Reference

    测试其连通性

    h1 ping h2
    

    1. 利用Wireshark工具,捕获拓扑中交换机与控制器之间的通信数据,对OpenFlow协议类型的各类报文(hello, features_request, features_reply, set_config, packet_in, packet_out等)进行分析,对照wireshark截图写出你的分析内容。

    在any中捕获(要先打开wireshark,再进行拓扑的创建,否则有可能接收不到hello等包)

    • Hello消息

      控制器端口为6633,最高支持OpenFlow 1.0版本

      交换机端口为50032,最高支持OpenFlow 1.3版本

    建立连接,使用OpenFlow 1.0版本。
    在双方支持的最高版本号不一致的情况下,协商的结果将以较低的OpenFlow版本为准。如果双方协商不一致,还会产生Error消息。

    • Features消息

    • Features_request

      控制器6633端口,交换机50032端口,长度为8

    • Set_config

      知道了交换机的特性之后就要配置交换机了。OpenFlow 交换机只有两个属性需要控制器配置:
      Config flags:0x0000
      Max bytes of packet:0x0080

    • Features_reply

      交换机端口50032,控制器6633端口

    Features 消息包括 OpenFlow Header 和 Features Reply Message
    对照Features Reply Message结构

    struct ofp_switch_features{
        struct ofp_header header;
        uint64_t datapath_id; /*唯一标识 id 号*/
        uint32_t n_buffers; /*交缓冲区可以缓存的最大数据包个数*/
        uint8_t n_tables; /*流表数量*/
        uint8_t pad[3]; /*align to 64 bits*/
        uint32_t capabilities; /*支持的特殊功能,具体见 ofp_capabilities*/
        uint32_t actions; /*支持的动作,具体见 ofp_actions_type*/
        struct ofp_phy_port ports[0]; /*物理端口描述列表,具体见 ofp_phy_port*/
    };
    

    • Packet_in


    有两种情况会触发交换机向控制器发送 Packet-in 消息:
    1、当交换机收到一个数据包后,查找流表。如果流表中有匹配条目,则交换机按照流表所指示的 action 列表处理数据包。如果没有,则交换机将数据包封装在 Packet-in 消息中发送给控制器处理,注意这时候数据包仍然会被放进缓冲区等待处理而不是被丢弃。
    2、数据包在流表中有匹配的条目,但是其中所指示的 action 列表中包含转发给控制器的动作(Output = CONTROLLER),注意这时候数据包不会被放进缓冲区。
    Packet-in消息格式如下:

    struct ofp_packet_in {
        struct ofp_header header;
        uint32_t buffer_id; /*Packet-in消息所携带的数据包在交换机缓存区中的ID*/
        uint16_t total_len; /*data字段的长度*/
        uint16_t in_port; /*数据包进入交换机时的端口号*/
        uint8_t reason; /*发送Packet-in消息的原因,具体见 ofp_packet_in_reason*/
        uint8_t pad;
        uint8_t data[0]; /*携带的数据包*/
    };
    
    • Packet_out

      控制器6633端口,交换机50032端口。
      Packet_out消息格式如下:

      struct ofp_packet_out {
      struct ofp_header header;
      uint32_t buffer_id; /交换机缓存区id,如果为-1则指定的为packet-out消息携带的data字段/
      uint16_t in_port;
      uint16_t actions_len; /action列表的长度,可以用来区分actions和data段/
      struct ofp_action_header actions[0]; /动作列表/
      uint8_t data[0]; /数据缓存区,可以存储一个以太网帧,可选/
      };

    • Flow_mod

    查看Flow_mod,控制器通过6633端口向交换机50032端口、交换机50042端口下发流表项,指导数据的转发处理

    3.将控制器从OpenFlow reference改成OVS controller


    改成ovs,记得要将原先的拓扑清除

    在hello报文中可以发现控制器支持的OpenFlow版本从1.0变成了1.3,因此,经过协商交换机和控制器之间将通过1.3版本的OpenFlow协议进行通信

    • Flow_mod
  • 相关阅读:
    学习游戏设计
    AspectJ
    Spring AOP进行日志记录,管理 (使用Spring的拦截器功能获取对action中每个方法的调用情况,在方法调用前和调用后记录相关日志。)
    Java内存泄露测试及工具
    使用Tomcat插件开发WEB应用
    想学习建个网站?WAMP Server助你在Windows上快速搭建PHP集成环境
    UML 基础:类图
    Impala学习--Impala前端代码分析,Impala后端代码分析
    Impala学习--Impala概述,Impala系统架构
    图论--2-SAT--HDU/HDOJ 1814 Peaceful Commission
  • 原文地址:https://www.cnblogs.com/sayoko/p/11853546.html
Copyright © 2011-2022 走看看