OpenFlow protocol version 1.0 通信过程
参考
OpenFlow protocol version 1.0 通信过程
通信双方:
OpenFlow控制器,OpenFlow交换机。
通信模块:
Secure Channel(基于TCP)。
通信基础:
socket。
通信过程:
1.TCP三次握手(基于TCP协议)。
2.控制器交换机互发Hello包,也是三次,无论控制器还是交换机均可先发送。目的是为了协商OpenFlow协议的版本号。
3.控制器 => 交换机:Feature_Request
数据报,目的是为了获取交换机的信息。
4.交换机 => 控制器:Feature_Reply
数据报,主要是回复交换机的端口信息,长度与端口数成正比,存放port的信息。每一个port信息长度为48byte。
交换机和端口的配置信息在整一个通信过程起着至关的作用,因为所有关于的操作都需要从features里面提取相关的信息,如dpid,port_no,等在整个通信过程中多次被用到的重要数据。所以,对这两个数据结构了然于心,对于研究OpenFlow来说,至关重要。每一次交换机连到控制器,都会收到控制器的features_request,当sw将自己的features回复给控制器之后,控制器就对交换机有了一个全面的了解,从而为后面的控制提供的控制信息。
5.在控制器获取完交换机的信息之后,交换机就开始处理数据了,在遇到没有匹配到流表的流量时,交换机将该流的第一个数据报封装成packet-in发送至控制器端进行决策和处理。控制器基于网络拓扑进行计算,并返回packet-out决定交换机如何处理流量。
6.控制器下发Flow_Mod
,该类型的数据报是OpenFlow控制器用于配置OpenFlow交换机的数据报,非常重要。其结构由header+match+flow_mod+action[]
组成,具体细节请参考文首的参考博客。
7.控制器下发Packet_Out
,携带LLDP报文,用于发现底层网络链路情况,具体细节请参考:SDN控制器的拓扑管理与LLDP链路发现。
8.控制器下发BARRIER_REQUEST
,交换机返回...REPLY
,作用是在控制器下发Flow_Mod
之后,判断流表是否成功写入交换机,如果收到Reply则确认成功。
9.控制器下发STATS_REQUEST
,交换机返回...REPLY
,作用是获取交换机内部的统计信息。
10.控制器和交换机在运行时不断互相发心跳ECHO
包,确认连接存在。
2017.8
OpenFlow protocol version 1.0 通信过程的更多相关文章
- 安装Hive过程中报错:Unsupported major.minor version 52.0
在安装hive的过程中,我觉得我是按照教程走的,但是在启动hive时还是报错了,错误如下 Exception in thread "main" java.lang.Unsuppor ...
- 从wireshake分析http和https的通信过程
参考文章: Wireshark基本介绍和学习TCP三次握手 [技术流]Wireshark对HTTPS数据的解密 Wireshark/HTTPS Journey to HTTP/2 以TCP/IP协议为 ...
- Bittorrent Protocol Specification v1.0 中文
翻译:小马哥 日期:2004-5-22 BitTorrent 是一种分发文件的协议.它通过URL来识别内容,并且可以无缝的和web进行交互.它基于HTTP协议,它的优势是:如果有多个下载者并发的下载同 ...
- etcd命令说明 etcd Version: 3.0.15
etcd Version: 3.0.15Git SHA: fc00305Go Version: go1.6.3Go OS/Arch: linux/amd64 https://github.com/co ...
- WCF入门教程二[WCF应用的通信过程]
一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的 ...
- Portlet 通信过程详解
Portlet 通信过程详解 在 Portal 的开发过程中,Theme 与 portlet 之间的通信,以及 portlet 之间的通信是开发人员常常遇到的问题.通常 Portlet 之间需要能够互 ...
- WCF通信过程
无废话WCF入门教程二[WCF应用的通信过程] 一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Ser ...
- Oauth1.0认证过程
现今,已经有了Oauth2.0,写篇博客了解Oauth1.0的过程以及与2.0的区别. 在Oauth官网 关于1.0的介绍: 一.简介 OAuth authentication is the pro ...
- Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程
设备控制软件编程涉及到的基本通信方式主要有TCP/IP与串口,用到的数据通信协议有Fins与ModBus. 更高级别的通信如.net中的Remoting与WCF在进行C/S架构软件开发时会采用. 本篇 ...
随机推荐
- python 基础 内置函数
内置参数 print(all([5,-1,5])) # 非0都是真 true print(all([0,-1,5])) # false print(any([1,0,5])) # 有一个数据为真,就为 ...
- PythonWeb 开发记录(一)
安装Django Sudo apt-get install python-django 验证安装Django成功 创建Django应用程式的方式 创建的是解决方案 ,然后创建的是Hi 模块 运行项目: ...
- react-native run-android error: unknown host service
D:\rnworkspace\Hello>react-native run-android JS server already running.Running D:\Android\sdk/pl ...
- shell脚本变量$#,$*,$$,$@,$0,$1,$2,$?的含义
本文转录:https://blog.csdn.net/kejiaming/article/details/51859503 参数说明: $# 是传给脚本的参数个数 $ 是脚本本身的名字 $ 是传递给该 ...
- PAT 1103 Integer Factorization[难]
1103 Integer Factorization(30 分) The K−P factorization of a positive integer N is to write N as the ...
- Linux实验楼学习之一
查看当前所在目录 pwd 创建文件:1-1.txt touch 1-1.txt 进入统计目录下的etc目录 cd /etc 强行终止当前程序 Ctrl + c 常用快捷键 按键 作用 Ctrl+d 键 ...
- kvm日常管理
创建虚拟机 快速启动虚拟机 [root@localhost ~]# yum install kvm libvirt python-virtinst qemu-kvm virt-viewer bridg ...
- angular.element 动态添加和删除元素
addClass()-为每个匹配的元素添加指定的样式类名after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点append()-在每个匹配元素里面的末尾处插入参数内容att ...
- Qt QDataTime QString 两个类的使用
QDateTime now = QDateTime::currentDateTime(); QString nowStr; nowStr = now.toString("yyyyMMdd_h ...
- STA分析(七) sdc
STA分析前的环境设置,包括:setup clocks,specifying IO characteristics 1)定义一个master clock:create_clock -name .. - ...