openflow控制器和交换机之间的消息

消息格式

openflow消息由64bit,8个字节组成

Openflow协议数据包由Openflow Header和Openflow Message两部分组成

Openflow头

所有的open flow消息都是从open flow头开始,其格式如下

wireshark分析如下

Openflow Message结构与具体消息类型有关:

Openflow消息类型:

安全通道的建立和初始化设置

安全通道建立的步骤

1.由OpenFlow交换机对OpenFlow控制器建立未加密的TCP连接或基于
TLS的连接
2.确定安全通道中要使用的OpenFlow版本
3.握手
4.交换其他必要的设置等(任意)

确定要使用的openflow版本

建立安全通道后,要确定通过安全通道进行交换的OpenFlow协议的版本。安全通道建立后的初始动作如下图

建立安全通道后,为了确定将要使用的版本,OpenFlow交换机和OpenFlow控制器都将发送Hello消息。Hello消息仅由OpenFlow头构成。

发送的Hello消息中携带各自支持的最大版本号。安全通道中要使用的版本号就是基于这些信息确定的。具体而言,就是将采用OpenFlow交换机和OpenFlow控制器所发送的版本号中较小的那一个版本。
对于要使用的OpenFlow版本未取得相一致的意见时,需要发送包含OFPET_HELLO_FAILED的Error 消息

握手

通过交换Hello消息建立安全通道后,执行OpenFlow 控制器和OpenFlow交换机的握手。OpenFlow 控制器通过握手掌握OpenFlow交换机的相关信息后,即可对OpenFlow交换机进行控制。握手之前的步骤皆为建立安全通道后的初始设置。

OpenFlow 控制器向OpenFlow交换机发送问询功能的Features请求消息,OpenFlow交换机返回Features响应消息,从而完成握手。与Hello消息相同,Features请求消息也仅由OpenFlow头构成。

Features响应消息中包含的各字段内容如表2.11所示。从表2.11可知,Features响应消息把与OpenFlow交换机相关的基本信息都提供给了OpenFlow控制器。OpenFlow控制器可获知OpenFlow交换机支持的行动、传输容量以及存在什么样的物理端口等信息。

SET_CONFIG、GET_CONFIG

请求消息规范中虽未规定握手后必须这样做,但OpenFlow控制器有时会向OpenFlow
交换机发送SET_CONFIG消息以发送设置信息,或发送GET_CONFIG请求消息以查询OpenFlow交换机的设置状态。

Flow-Mod消息

packet-in

packet-out

port-status

在OpenFlow交换机中添加、删除或修改物理端口时,需要发送Port-
Status 消息来通知OpenFlow 控制器。
Port-Status消息的结构如图2.20所示。作为表示发送该消息理由的reason,定义了OFPPR_ADD(0)、OFPPR_DELETE(1)、OFPPR_MODIFY(2)
这3种数值。ofp phy port结构体与图2.12所示相同。

Flow-Removed 消息

当OpenFlow交换机中设置的流表项超时时,OpenFlow交换机要向OpenFlow控制器发送Flow-Removed消息。为确保OpenFlow控制器收到该消息,仅在其发出请求时才发送。

Error 消息

Error 消息的作用是通知出现了某种错误。OpenFlow交换机和OpenFlow控制器都可发送Error消息

Barrier消息

在OpenFlow协议中,并非每一个通过安全通道进行交换的消息都需要响应。例如,初始设置后有时会使用的SETCONFIG消息就并不需要响应。因此,使用安全通道发送消息的一方有时并不知道接收信息方处理消息的程度。
为了解决类似问题,在OpenFlow协议中备有称为Barrier消息的机制。Barrier消息的目的是掌握消息的处理程度,虽然很普通,但却是OpenFlow协议的重要消息机制之一

Echo 消息

OpenFlow 控制器和OpenFlow交换机可通过发送Echo请求消息来确认二者之间是否连接、检测通信延迟、测量通信带宽等。接收Echo请求消息的一方会向对方返回Echo响应消息(图2.24)。

相关链接

OpenFlow 交换机与控制器交互步骤

Openflow协议详解

openflow控制器和交换机之间的消息的更多相关文章

  1. OpenFlow 1.3 控制器与交换机的交互,以及拓扑发现

    前言 最近纠结于控制器如何发现拓扑,于是就翻起了OpenFlow 1.3进行查看,以及一些相关协议 OF 1.3 安全通道,即交互消息 OpenFlow Switch Specification 1. ...

  2. ASP.NET MVC 之控制器与视图之间的数据传递

    今天,我们来谈谈控制器与视图之间的数据传递. 数据传递,指的是视图与控制器之间的交互,包括两个方向上的数据交互,一个是把控制器的数据传到视图中,在视图中如何显示数据,一个是把视图数据传递到控制器中, ...

  3. 安卓中不同APP之间的消息通信

    昨天在腾讯实习生招聘初试面试时面试官问道我关于两个APP之间相互通信的方式,当时自己回道到了contentProvider与BroadcastReceiver.但他接着问还有没有其它的方式,我跟他说可 ...

  4. Asp.Net Core MVC控制器和视图之间传值

    一.Core MVC中控制器和视图之间传值方式和Asp.Net中非常类似 1.弱类型数据:ViewData,ViewBag 2.强类型数据:@model 二.代码 实例  1.ViewData pub ...

  5. 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

    实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...

  6. libuv的多线程之间传递消息

    官网上给出的例子http://nikhilm.github.io/uvbook/threads.html#inter-thread-communication,中文理解在后边 Inter-thread ...

  7. 配置交换机之间直连链路聚合-LACP模式

    组网图形 LACP模式链路聚合简介 以太网链路聚合是指将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的.链路聚合分为手工模式和LACP模式. LACP模式需要有链路聚合控制协 ...

  8. 交换机之间的通信 VLAN和trunk

    只有 PC0和PC2可通信,PC1和PC3可通信 将PC0和PC2加入同一个VLAN 将PC1和PC3加入同一个VLAN 将左边的交换机的Fa0/3口开启trunk模式即可(如下图)

  9. EventBus的使用详解,功能为在Fragment,Activity,Service,线程之间传递消息

    最近跟同事用到了EventBus的使用,之前不太了解EventBus,查阅资料发现EventBus还挺好用的,用法比较简单,下面就把我看到的关于EventBus的博客分享给大家,里面介绍了很多的使用详 ...

随机推荐

  1. 分享几个常见的CMD命令,可能会用的上

    win7快捷命令.CMD命令secpol.msc(设置开机启动提示信息)services.msc(打开服务)dxdiag(检查DirectX信息)winver(检查Windows版本)regedit( ...

  2. jQuery获取或设置元素的宽度和高度

    jQuery获取或设置元素的宽度和高度: 可使用以下3种方法: 1,jQuery width() 和 height() 方法: 2,innerWidth() 和 innerHeight() 方法: 3 ...

  3. (办公)springboot配置表单验证@Valid

    项目用到了springboot,本来很高兴,但是项目里什么东西都没有,验证,全局异常这些都需要自己区配置.最近springboot用的还是蛮多的,我还是做事情,把经验发表一下. SpringBoot提 ...

  4. c/c++ 继承与多态 文本查询的小例子(非智能指针版本)

    问题:在上一篇继承与多态 文本查询的小例子(智能指针版本)在Query类里使用的是智能指针,只把智能指针换成普通的指针,并不添加拷贝构造方法,会发生什么呢? 执行时,代码崩掉. 分析下面一行代码: Q ...

  5. java加载properties文件的六中基本方式实现

    java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过impo ...

  6. 小程序--scroll-view的横向滑动无效

  7. flask wtforms组件详解

    一.简介 在flask内部并没有提供全面的表单验证,所以当我们不借助第三方插件来处理时候代码会显得混乱,而官方推荐的一个表单验证插件就是wtforms.wtfroms是一个支持多种web框架的form ...

  8. Spire.XLS,生成Excel文件、加载Excel文件

    一.组件介绍 Spire.XLS是E-iceblue开发的一套基于企业级的专业Office文档处理的组件之一,全称Spire.Office for .NET.旗下有Spire.Doc,Spire XL ...

  9. 人生第一个过万 Star 的 github 项目诞生

    写 Spring Boot 开源项目走入第三个年头,终于有一个开源项目要破万 Star 了,请各位读者大人批评指正. Spring Boot 文章 2016年,我开始学习 Spring Boot 的时 ...

  10. redis 的过期策略都有哪些?内存淘汰机制都有哪些?

    面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当然的认为写进 r ...