我对OpenFlow的理解
写下来,总结一下了解的东西。
谈到OpenFlow,首先不得不提一下软件定义网络(SDN),在SDN中有两个重要的元素一个是交换机,一个是控制器。在网络设备上还有一个“上帝”,也就是控制器,它知道所有网络信息,负责指挥设备如何工作,而交换机什么都不知道,只会按照控制器的命令进行工作,在SND中,网络设备之间不运行任何的网络协议,设备的转发表是由控制器产生的,那么问题来了,控制器和网络设备之间怎样进行通信呢,就是通过OpenFlow协议,属于南向协议,但是南向协议不只有OpenFlow协议,现在我们就知道了OpenFlow协议是干什么的了,就是用来让控制器与网络设备之间进行互相通信用的;用一个图表示:
OpenFlow交换机中的交换机成为流表(Flow table),其中包括数据包匹配特征和数据包的处理方法:
我们来看看OpenFlow1.0流表数据包匹配特征的结构:
第一层:交换机入端口,即消息在哪个端口进入交换机(Ingress Port);
第二层:源MAC地址(Ether source),目的MAC地址(Ether dst),以太网类型(Ether Type),VLAN标签(VLAN id),VLAN优先级(VLAN priority);
第三层:源IP(IP src),目的IP(IP dst),IP协议字段(IP Proto),IP服务类型(IP Tosbits);
第四层:TCP/UDP源端口号(TCP/UCP src port),TCP/UDP目的端口号(TCP/UDP dst port)。
数据包处理方法包括转发,修改包头,每一个处理叫做一个Action。
Openflow消息的类型可以总体分为三大类:
1. Controller-to-Switch(控制器到交换机的消息,由控制器主动发出)
- Features用来获取交换机特性
- Configuration用来配置OpenFlow交换机
- Modify-State用来修改交换机状态(修改流表)
- Read-Stats用来读取交换机状态
- Send-Packet用来发送数据包
- Barrier阻塞消息
- Packet-in用来告知控制器,交换机接收到数据包
- Flow-Removed用来告知控制器交换机流表被删除
- Port-Status用来告知控制器交换机端口状态更新
- Error用来告知控制器交换机发生错误
- Hello用来建立OpenFlow连接
- Echo用来确认交换机与控制器之间的连接状态
- Vendor厂商自定义消息
- 目的:协议协商。
- 内容:本方支持的最高版本的协议
- 成果:使用双方都支持的最低版本协议。
- 成功:建立连接
- 失败:OFPT_ERROR (TYPE:OFPT_HELLO_FAILED,CODE =0),终止连接。
端口及端口属性等等。控制器向交换机发送Features Request消息查询交换机特性,Features Request消息只包含Openflow Header。交换机在收到Features Request消息后返回Features Reply消息,Features Reply消息包括Openflow Header 和Features Reply Message;
- 发送时间:连接建立完成之后
- 发送数据:OFPT_FEATURES_REQUEST
- 对称数据:OFPT_FEATURES_REPLY
- 目的:获取交换机的信息
- datapath_id为交换机独一无二的ID号
- n_buffers为交换机可以同时缓存的最大数据包个数
- n_tables为交换机的流表数量
- Capabilities表示交换机支持的特殊功能
- Actions表示交换机支持的动作(见ofp_action_type)
- ofp_phy_ports为交换机的物理端口描述列表,具体结构如下图
- port_no为物理端口的编号
- hw_addr为端口的MAC地址
- name为端口的名称
- config为端口的配置
- State为端口状态
- curr, advertised supported,peer为端口物理属性
- OFPR_NO_MATCH:当交换机收到一个数据包后,会查找流表,找出与数据包包头相匹配的条目。如果流表中有匹配条目,则交换机按照流表所指示的action列表处理数据包。如果流表中没有匹配条目,则交换机会将数据包封装在Packet‐in消息中发送给控制器处理。此时数据包会被缓存在交换机中等待处理。
- OFPR_ACTION:交换机流表所指示的action列表中包含转发给控制器的动作(Output=CONTROLLER)。此时数据包不会被缓存在交换机中。
- buffer_id为packet‐in事件所携带的数据包在交换机中的缓存区ID
- total_len为data段的长度
- in_port数据包进入交换机的入接口号
- Reason为packet‐in事件产生的原因
缓存。控制器收到Packet-in消息后,可以发送flow-mod消向交换机写一个流表项。并且将flow-mod消息中的buffer_id字段设置为packet-in消息中的buffer_id值。从而
控制器向交换机写入了一条与数据包相关的流表项,并且指定该数据包按照此流表项的aciton列表处理。
- type:类型
- ength:整个数据包的长度
- xid:数据包的编号
比如ofp_flow_mod的type就是14。length最基本长度为72,每一个action长度为8。所以长度必定为8的倍数才是一个正确的数据长度。
在of1.0中这里的0,1意义跟我们平时接触的如子网掩码等意义相反,如OFPFW_NW_DST_MASK=0则表示全匹配目标IP。如果为63,则表示不匹配IP。为什么拿这个举例?原因就在于,他的长度是6bit,最大是63,需要将数值转变成对应2进制数值才是我们想要的匹配规则,且注意,1是忽略,0是匹配。如果wildcards全0,则表示由match精确指定,即所有12元组都匹配。
当然高兴的是,在1.3的时候,这个逻辑改成了正常的与逻辑。即1为使能匹配,0为默认不匹配。
- idle_timeout:如值为10,则某条流在10秒之内没有被匹配,则删除,可以称之为活跃时间吧。
- hard_timeout:如值为30,则30秒到达的时候,一定删除这条流,即使他还活跃,即被匹配。
- priority是流的优先级的字段,字数越大则优先级越高,存放在号数越小的table中。
- buffer_id是由交换机指定的buffei_id,准确的说是由dpid指定的。如果是手动下发的流,buffer_id应填-1,即0xffff,告诉交换机这个数据包并没有缓存在队列中。
- out_port为删除流表的flow_mod消息提供额外的匹配参数
- command用来指定操作的类型,共有五种类型:ADD、DELETE、DELETE‐STRICT、MODIFY、MODIFY‐STRICT
我对OpenFlow的理解相关推荐
- SDN和Openflow flowvisor NOX
目录(?)[-] 简介 编辑本段传统路由器的设计 设计思想 虚拟化的逆袭网络虚拟化之OpenFlow和SDN Open还是Flow OpenFlow对产业链的影响 OpenFlow面临的技术难点 结论 ...
- OpenFlow入门资料汇总(OpenFlow、SDN、NOX等,多为网络文章)
声明:此篇文章为转载,转载原文地址为:http://blog.csdn.net/jincm13/article/details/7825754 很好的OpenFlow方向的网络文章汇总,阅读通篇能够对 ...
- openflow交换机 ryu_关于OpenFlow协议
SDN中两个重要元素:控制器(掌控全局,指挥网络内的设备工作) 交换机(转发数据) 控制器与网络设备通过OpenFlow协议进行通信 OpenFlow交换机内有一个FlowTable,交换机按照流表转 ...
- 我看过的SDN方面的好文章
本文不定期更新,最后更新于2019-5-25 SDN 技术分享 | OpenShift网络之SDN 央行数字货币研究所姚前:SDN增添金融科技新动力 SDN 技术指南(一):架构概览 SDN 技术指南 ...
- SDN网络的本质特点
说到SDN,必然提到OpenFlow,但是SDN不等于OpenFlow,就如同互联网不等于IP协议,PSTN不等于7号信令,IMS不等于SIP,WEB体系不等于HTTP协议一样.OpenFlow仅仅是 ...
- Open vSwitch概述
转自https://blog.csdn.net/lizheng2300/article/details/54582310 Open vSwitch概述 Open vSwitch(下面简称OVS)是一个 ...
- 一种基于openflow的虚拟化层软件flowvisor的API测试
注明:本文并不对openflow进行分析,本人也是略略知道这个概念,对flowvisor也只是对其API有所测试,更深的源码并未涉及,只是希望该文能对以后的flowvisor研究者提供些许帮助. 一: ...
- 理解 neutron(15):Neutron Linux Bridge + VLAN/VXLAN 虚拟网络
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- Openflow协议通信流程解读
前言 接触了这么久的SDN,Openflow协议前前后后也读过好多遍,但是一直没有时间总结一下自己的一些见解.现在有时间了,就写一写自己对Openflow协议通信流程的一些理解. SDN中Switch ...
最新文章
- SpringBoot热部署之devtools案例(学习笔记)
- json格式数据,将数据库中查询的结果转换为json, 然后调用接口的方式返回json(方式一)...
- 物流行业解决方案:聚焦物流行业数据痛点,帮助企业搭建数据平台
- 使用JavaScript生成二维码教程-附qrcodejs中文文档
- Linux 信息的各种查询(系统发行版本、内核版本、系统位数)
- python结构体字节对齐_Python及字节对齐的问题
- Android Testing学习02 HelloTesting 项目建立与执行
- Drools规则引擎介绍及实践
- iwconfig工具
- 编写一个非常简单的 JavaScript 编辑器
- win10专业版激活(cmd方式)
- web学习(3)--别踩白块儿(HTML版)(web入门)
- PCB中产生电磁干扰的原因及消除干扰技巧
- deepin 20 推荐邮件客户端 Bluemail 邮箱
- 面剔除 Face culling
- redit高可用持久
- 删除播放器上的Flowplayer图标
- 查看路由器地址是否是公网ip
- 快速学习COSMIC软件规模度量方法
- 收藏这几个软件,让你轻松从视频里提取音频