学习SDN相关的学习也已经有快半年了,期间从一无所知到懵懵懂懂,再到现在的有所熟悉,经历了许多,也走了不少弯路,其中,最为忌讳的便是,我在学习过程中,尚未搞明白OpenFlow协议的情况下,便开始对SDN进行相关操作,今天写这篇博客,一方面是为了巩固我以前所学的东西,另一方面,重新学习SDN相关的协议,以改正我之前的错误认知,当然,由于还是初学者,仍会存在一些错误的认识,欢迎各位留言指正。

OpenFlow协议的思路,即使网络设备维护一个FlowTable,并且只通过FlowTable对报文进行处理,FlowTable本身的生成、维护和下发完全由外置的控制器Controller来实现。

此外,OpenFlow交换机把传统网络中,完全由交换机/路由器控制的报文转换为由交换机和控制器来共同完成数据的

转发操作,从而实现数据的转发与路由控制的分离。控制器则通过事先规定好的接口操作OpenFlow交换机中的流表,从而达到数据转发的目的。

OpenFlow控制器与交换机的交互通信图

在OpenFlow交换机中,包含安全通道,多级流表和组表。通过安全通道,OpenFlow交换机可以和控制器建立基于OpenFlow协议的连接;而流表则用来匹配OpenFlow交换机收到的报文;组表用来定义流表需要执行的动作。

本文基于mininet和ryu,对OpenFlow协议报文进行分析。

OpenFlow协议主要是通过对不同类型消息的处理来实现控制器与交换机之间的路由控制的。目前OpenFlow协议主要支持三种消息类型,分别是controller-to-switch、symmetric(对称型消息)以及asynchronous(异步消息类型)。每种消息类型分别对应多种事件,如异步消息类型中我们最常见的PacketIn事件,也是我们等下所主要阐述的事件。

OpenFlow协议所支持的三种消息类型

常用的消息主要是Hello消息、Feature消息,Echo消息,以及Packet_in、Packet_out和Flow_mod等。其中Hello、Feature、Echo消息分别包含REQUEST与REPLY消息,每一个消息REQUEST与REPLY的Transaction ID相同,交换机通过ID进行识别对应事件端口。

在通常的交换机事件发生时,主要经过如下几个交互步骤:

OpenFlow协议下的交换机与控制器交互流程

其中,Hello消息是在OpenFlow初始化中就已经实现,基于ryu的消息获取,在我目前这个阶段尚未获知如何截获。而交换机特征报文以及PacketIn报文均可获取。OpenFlow协议的报文一般为如下格式:

OpenFlow协议基本报文格式

正如图中看到的,报文分为协议版本、消息类型、消息包(包括头部)长度、与包有关的事件ID(回复配对请求时使用相同的ID)以及所对应消息类型的报文信息。其中,不同的消息类型所对应的 报文信息是不同的。

为了更好的说明这一点,本文分别截获了PacketIn以及switch_features两种报文格式:

PacketIn报文

switch_features报文

显然,两种报文总的来看,形式相同,唯有最后一部分的格式不同,这是由于不同事件所导致的。报文的截取,可以通过在ryu控制器中,输出经OpenFlow协议描述后的msg消息得到。

而在总的消息报文中,触发的不同事件,其最后一部分所对应的报文亦是不同,以PacketIn报文为例,它的基本格式为:

PacketIn报文格式

PacketIn报文包含缓存ID号、控制器的标识符、数据、匹配字段、包被发送的原因、被查询流表的标识符以及帧的全长。不同的消息类型的报文,由于触发的消息不同,所描述的信息不同,故导致这部分报文存在差异,这一点通过比较所截获的两种报文信息可以看出。

报文的定义格式可以在相应的RYU源码中看到。

SDN学习之OpenFlow协议分析的更多相关文章

  1. 实验3:OpenFlow协议分析实践

    作业链接:实验3:OpenFlow协议分析实践 一.实验目的 能够运用 wireshark 对 OpenFlow 协议数据交互过程进行抓包: 能够借助包解析工具,分析与解释 OpenFlow协议的数据 ...

  2. OpenFlow协议分析

    OpenFlow协议分析实验手册 启动虚拟机mininet 和 控制器 ODL 启动wireshark,在控制器的ens32 网卡抓包 使用mininet创建简单拓扑,并连接控制器,指定交换机为ovs ...

  3. 实验 5 :OpenFlow 协议分析和 OpenDaylight 安装

    实验 5 :OpenFlow 协议分析和 OpenDaylight 安装 一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接: 通过抓包获 ...

  4. 软件定义网络实验记录⑤--OpenFlow 协议分析和 OpenDaylight 安装

    一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接: 通过抓包获取 OpenFlow 协议,验证 OpenFlow 协议和版本,了解协议内 ...

  5. 实验 5:OpenFlow 协议分析和 OpenDaylight 安装

    一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接;通过抓包获取 OpenFlow 协议,验证 OpenFlow 协议和版本,了解协议内容 ...

  6. 实验 5:OpenFlow 协议分析和 OpenDaylight 安装

    一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接:通过抓包获取 OpenFlow 协议,验证 OpenFlow 协议和版本,了解协议内容 ...

  7. SDN学习之Mininet验证OpenFlow协议版本

    最近学习如何使用mininet,但是,刚刚开始时一直无法知道如何查看OpenFlow协议的版本,通过查阅网上的资料,从SDNLAB中,学习到了如何验证,mininet自身基于OpenFlow13版本的 ...

  8. 实战录 | 基于openflow协议的抓包分析

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全SDN工程师宋飞虎,将带来基于 ...

  9. OpenFlow协议1.0及1.3版本分析

    OpenFlow是SDN控制器和交换之间交流的协议,在SDN领域有着十分重要的地位. OpenFlow协议发展到现在已经经过了1.0.1.3.1.4等版本.其中1.0和1.3版本使用的是最为广泛的. ...

随机推荐

  1. 【转】Objective-C Runtime

    之前在找Runtime资料,这篇条理是相对比较清晰,对我最有启发的一篇,转载以作记录. 对于iOS小白,值得多看几遍,会有不少收获. --------------------------------- ...

  2. UIImageView帧动画相关属性和方法

    @property(nonatomic,copy) NSArray *animationImages; 需要播放的序列帧图片数组(里面都是UIImage对象,会按顺序显示里面的图片) @propert ...

  3. [编织消息框架][JAVA核心技术]jdk动态代理

    需要用到的工具  jdk : javac javap class 反编译 :JD-GUI http://jd.benow.ca/ import java.lang.reflect.Invocation ...

  4. spring boot访问数据库

    1. Spring JAP 基本使用说明: Spring boot 访问数据库基本上都是通过Spring JPA封装的Bean作为API的,Spring JPA 将访问数据库通过封装,只要你的类实现了 ...

  5. Java进阶之多线程

    多线程 多线程(multiple thread)是计算机实现多任务并行处理的一种方式. 在单线程情况下,计算机中存在一个控制权,并按照顺序依次执行指令.单线程好像是一个只有一个队长指挥的小队,整个小队 ...

  6. Html5 Canvas笔记(2)-Canvas绘图

    用Canvas API绘图,需要画图形的边线并设置内部区域填充,边线英文语法对应stroke,填充对应fill,在后面我们会频繁看到这2个英文单词的出现.Canvas API内置的形状绘图函数比较少, ...

  7. 老李分享:《Linux Shell脚本攻略》 要点(六)

    老李分享:<Linux Shell脚本攻略> 要点(六)   1.打印网络接口列表 [root@localhost touch_more]# ifconfig | cut -c-10 | ...

  8. Hibernate(二)之Hibernate-api详解

    一.Hibernate体系结构 二.Hibernate-api详解 2.1.Configuration配置对象 Configuration是用来加载配置文件的 我们Hibernate中主要有两个配置文 ...

  9. Win10专业版下图片拖到PS无法打开的解决技巧

    PS这个软件是用户最常用的软件之一,其强大的图形处理能力毋庸置疑.有用户表示在Win10专业版系统中使用PS发现图片不能直接拖动到PS中打开,这个问题本身不是特别大的问题,但这一小小的毛病会打破用户习 ...

  10. B/S 和 C/S两种架构

    一: 什么是B/S(Browser/Server)架构? 应用系统完全放在应用服务器上, 并通过应用服务器同数据库服务器进行通信,系统界面 是通过浏览器来展现的. T是浏览器模式. 优点: 1)客户端 ...