学习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. golang http server分析(一)

    http:http请求过程实质上是一个tcp连接通信,具体通过socket接口编码实现 在go中是通过listenAndServer()方法对外提供了一个http服务,在该方法中完成了socket的通 ...

  2. Jsonql——给RESTful API插上一对翅膀

    RESTful API是目前比较成熟的一套互联网应用程序的API设计理论,规范了服务端资源的定义及访问.我们团队服务端就采用了RESTful. 可是在现实开发过程中,还是有些问题. 客户端在获取资源的 ...

  3. 第一章 开发简单Java应用程序

    1. 什么是程序?     程序一词来自生活,通常指完成某些事务的一种既定方式和过程(一组有序指令的集合). 2. Java的三个领域? Java SE:java技术核心(指桌面应用程序)如:QQ.百 ...

  4. java学习笔记 --- 面向对象2

    一.匿名对象 (1)没有名字的对象 (2)应用场景   A:调用方法,仅仅只调用一次的时候. class Car { //描述属性.颜色,轮胎数. String color; int number; ...

  5. centos登录时一闪而过,显示module is unknown

    原因是修改了在/etc/pam.d/login中加入了: session required /lib/security/pam_limits.so session required pam_limit ...

  6. vue渐变淡入淡出轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. CSS媒体查询适配范例

    /*orientation:portrait纵向*/ /*orientation:landscape横向*/ /*iPhone 4*/ @media only screen and (min-devi ...

  8. 【已解决】Windows下 MySQL大小写敏感 解决方案及分析

    Windows下 MySQL大小写敏感配置 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-3-27 最近在window ...

  9. MYSQL优化_MYSQL分区技术[转载]

    MySQL分区技术是用来减轻海量数据带来的负担,解决数据库性能下降问题的一种方式,其他的方式还有建立索引,大表拆小表等等.MySQL分区按照分区的参考方式来分有RANGE分区.LIST分区.HASH分 ...

  10. 老李分享:loadrunner 的86401错误

    老李分享:loadrunner 的86401错误   系统和软件配置: os:windows 2003loadruner版本:LoadRunner11loadrunner:协议:SMTP协议并发数:2 ...