SDN原理 OpenFlow协议 -4
通道 Channel
在前面的OpenFlow的内容中,我们提到了在交换层所采用的流表是控制层的Controller下发的,那么Controller是如何下发流表的呢?中间经过了哪些的流程和步骤?控制器和交换机的会话是如何建立的?
这就是我们今天要介绍的内容,Channel。
连接建立
Hello包会定期的交换,其中最核心的就是OpenFlow的版本号。
Hello1:Switch -> Controller 你支持版本1.3吗?
Hello2:Controller -> Switch 我支持啊
就像之前的OSPF的Hello报文要交换RID等等的信息一样,比较好理解。
Feature request:Controller -> Switch 你的OF支持哪一些特性?你的接口信息是什么?也就是询问交换机所能提供的功能。
Feature reply:Switch -> Controller 交换机回复一个非常大的包,把它的所有配置信息,所有接口信息都回复给Controller。
Set config:Controller -> Switch Controller下发命令,根据交换机提供的信息对交换机进行简单的设置。
至此,Controller和交换机建立起了一个联系。
packet in:Switch -> Controller 当交换机本地没有匹配到与流相符合的表项 或者说 没有FlowTable(默认)的时候,会将数据包丢给Controller。
packet out:Controller -> Switch Controller回复指示信息,给Switch处理该数据包提供了方法,或者说选择的路径。
port status:Switch -> Controller 当交换机的端口状态发生变化的时候,交换机通知Controller,告诉Controller这个变化,让Controller刷新路径信息。
消息列表
三类消息:
- Controller-to-Switch 消息:有控制器发起,用来管理或者获取Switch状态。例子:上面的 Feature Request 和 packet out。
- asynchronous 消息:由 Switch 发起,用来将网络事件或者交换机状态变化更新到控制器。例子:上面的 port status。
- symmetric 消息:有 Switch 或者 Controller 发起。
第一类消息顾名思义,是由控制器下发到交换机的,比如下发流表。
而第二类消息可以理解为由 交换机向控制器 发送的消息类型,比如端口状态辨认等等。asynchronous直译是 “异步的”。
第三类消息,这类消息是控制器和交换机的 交互,也就是说,既有控制器发送给交换机的消息,也有交换机发送给控制器的消息。symmetric 也就是 “同步的”。典型的第三类消息是Hello报文,你Hello来我Hello过去。
1、Controller‐to‐Switch
控制器至交换机消息此类消息由控制器主动发出
Features 用来获取交换机特性
Configuration 用来配置Openflow交换机
Modify‐State 用来修改交换机状态(修改流表)
Read‐Stats 用来读取交换机状态
Send‐Packet 用来发送数据包
Barrier 阻塞消息
2、Asynchronous
异步消息此类消息由交换机主动发出
Packet‐in 用来告知控制器交换机接收到数据包
Flow‐Removed 用来告知控制器交换机流表被删除
Port‐Status 用来告知控制器交换机端口状态更新
Error 用来告知控制器交换机发生错误
3、Symmetric
对称消息,可以由控制器或交换机主动发起
Hello 用来建立Openflow连接
Echo 用来确认交换机与控制器之间的连接状态
Vendor 厂商自定义消息
更进一步的细节,可以参考:OpenFlow消息
协议交互
我们选用的模拟器,首选Mininet,仅使用一条命令 sudo mn 直接就创建了一台控制器,一台交换机,两台电脑的网络拓扑。
甚至,我们可以用Mininet的一条指令,创建一个数据中心!It‘s amazing!
视频教程介绍了传统网络协议和OpenFlow交互的一个案例。
使用 sudo mn 建立一个 含有一个Controller,一个Switch,两个PC的简单网络拓扑。

简单的介绍一下名称:两台PC,h1和h2;连接在h1上的接口eth0;连接在h2上的接口eth0;Switch,S1;在S1上和h1连接的接口eth1;在S1上和h2连接的接口eth2;Controller,简称C;在S1上和C连接的接口L0.
h1想向h2发送一个数据报文,但是不知道MAC地址;传统网络的解决方法是ARP泛洪获知MAC地址,那么在SDN是如何实现的呢?
(1)h1通过ARP协议,向所有接口泛洪ARP请求:报文通过eth1接口来到了S1。
(2)S1不知道这个报文要发到哪里去,并没有合适的表项让它匹配;于是乎,将请求报文转给了控制器:Packet-in消息。
(3)控制器也不知道这个报文要到哪里去(可能是因为刚刚建立连接,还没有建立一个合适的网络拓扑),于是向交换机S1下发指令,向所有接口(除了eth1)泛洪该数据报:Packet-out消息。
(4)S1向eth2接口发送该ARP请求报文,来到了h2.
(5)SDN原理 OpenFlow协议 -4的更多相关文章
- SDN原理 OpenFlow协议 -1
本文基于SDN原理视频而成:SDN原理 OpenFlow OpenFlow 协议 和 传统的路由选择协议 有很多相似的地方,同时在某些地方也具有一定的颠覆性. 路由表,由IP地址和子网掩码组成.MAC ...
- SDN原理 OpenFlow协议 -2
本文由SDN原理视频而成:SDN原理 流表 FlowTable --- OpenFlow的核心 问题3 流表项 Flow Entry 单流表(OpenFlow 1.0版本) -> 多流表(Ope ...
- SDN原理 OpenFlow协议 -3
问题4:流表匹配 OF1.1版本 这是OF1.1版本的操作,引入了多流表,1.0版本并没有多流表. 多流表的匹配称为 流水线处理:交换机从流表0开始查找,按照流表序号从小到大匹配. 每个包按照优先级去 ...
- SDN学习之OpenFlow协议分析
学习SDN相关的学习也已经有快半年了,期间从一无所知到懵懵懂懂,再到现在的有所熟悉,经历了许多,也走了不少弯路,其中,最为忌讳的便是,我在学习过程中,尚未搞明白OpenFlow协议的情况下,便开始对S ...
- 传统二三层转发融合SDN Openflow协议的Hybrid交换机转发流程
Hybrid 交换系统(以下简称Hybrid 交换机)是交换机融合了OVS(Openflow vswitch)原生代码,集传统和Openflow 技术于一体的转发系统.主要解决纯Openflow 基于 ...
- SDN学习之Mininet验证OpenFlow协议版本
最近学习如何使用mininet,但是,刚刚开始时一直无法知道如何查看OpenFlow协议的版本,通过查阅网上的资料,从SDNLAB中,学习到了如何验证,mininet自身基于OpenFlow13版本的 ...
- [转]SDN与OpenFlow技术简介
http://blog.163.com/s_zhchluo/blog/static/15014708201411144727961/ 本文是2012年文章,对Openflow的发展.规范.应用和SDN ...
- SDN原理 控制层 Controller控制器
本文参照SDN原理视频而成:SDN原理 Controller 概念 从上面这个图片,我们能够知道,Controller 是一个非常重要的东西:承上启下,左右拓展. 从整个SDN的架构来看,控制器 处在 ...
- 实战录 | 基于openflow协议的抓包分析
<实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全SDN工程师宋飞虎,将带来基于 ...
随机推荐
- 1.Math函数对象
// 属性 Math.E //自然对数的底数(2.718281828459045) Math.PI //圆周率(3.141592653589793) Math.LN2 //2的自然对数(0.69314 ...
- Egret置于后台时,暂停游戏逻辑 (Egret 5 )
官网教程-生命周期:http://developer.egret.com/cn/2d/lifecycle 主要是在游戏置于后台时,关闭游戏逻辑.渲染逻辑和背景音乐,保证更好的用户体验. 一 Egret ...
- oracle rank over partition by
转自:https://www.cnblogs.com/wingsless/archive/2012/02/04/2338292.html rank() over(partition)的使用 有的时 ...
- scikit_learn 中文说明入门
原文:http://www.cnblogs.com/taceywong/p/4568806.html 原文地址:http://scikit-learn.org/stable/tutorial/basi ...
- vue 缓存的keepalive页面刷新数据
用到这个的业务场景是这样的: a页面点击新建列表按钮进入到新建的页面b,填写b页面并点击b页面确认添加按钮,把这些数据带到a页面,填充到列表(数组),可以添加多条, 点击这条的时候进入到编辑页面,确认 ...
- spring的AOP个人理解和使用
1什么是AOP:AOP是面向切面编程,也就是说面向某个功能模块编程,典型的应用就是Spring的声明式事务, Spring的AOP事务解析: 在以前的事务管理是要融合在逻辑代码中的,在逻辑代码中决定事 ...
- php版本管理工具composer安装及使用
类似于web前端有gulp,webpack,grunt.php也有专门的包安装管理和安装工具,即composer. composer官网:https://getcomposer.org 中文 ...
- 爬虫基础 - Robots协议
Robots协议 指定一个robots.txt文件,告诉爬虫引擎怎么爬取 https://www.taobao.com/robots.txt User-agent: Baiduspider Allow ...
- centos7 安装Mariadb
MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可.开发这个分支的原因之一是:甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因 ...
- 基于Sql Server 2008的分布式数据库的实践
配置Sql Server 2008(Win7) 1.打开SQL server2012,使用windows身份登录 2.登录后,右键选择“属性”.左侧选择“安全性”,选中右侧的“SQL Server 和 ...
