OpenFlow概念学习
前言
OpenFlow交换机将原来完全由交换机/路由器控制的报文转发过程转化为由OpenFlow交换机和控制服务器来共同完成,目的交换机要通过of协议(OpenFlow Protocol)经安全通道(Secure Channel)连接到外部控制器(controller)从而实现数据的转发和路由控制的分离。
一、OpenFlow术语
二、OpenFlowSwitch
1. 通用转发抽象模型
2. Flow Table处理流程
3. 多机流表处理流程
4. 基于OpenFlow的SDN网络中网络设备的工作过程
假设主机A向主机B发送IP数据包,且所有流表有该数据包相应表项
- OpenFlow交换机查询流表来转发数据包,查表成功则基于匹配域(如目的IP地址+源IP地址)转发;查表失败时,则询问SDN控制器
- 流表由SDN控制器来构建
-假设主机A向主机B发送IP数据包,且OpenFlow交换机中流表为空OF交换机
- 接收IP数据包
- OF交换机解析数据包首部并查询流表,由于流表为空,不知道如何转发,因此需要询问控制器
- OF交换机向控制器发送Packet-In消息
- 控制器为主机A发送给主机B的IP数据包计算路由
- 控制器向OF交换机下发流表,使用FlowMod消息承载流表信息,OF交换机接收该消息后安装流表
- 控制器向OF交换机发送Packet-Out消息,指示OF交换机按照刚安装好的流表转发IP数据包
- OF交换机收到Packet-Out消息后转发数据包
5. 小结
- 路由计算、转发规则(流表)下发由控制器完成
- OF交换机只需要按照流表进行转发,查表失败时,通过Pacekt-In消息询问控制器
三、流表详细介绍
1. 流表
流表(Flow Table)是OpenFlow中最重要的一张表,它用于指导OpenFlow交换机对收到的数据包进行转发,相当于二层的MAC地址表和三层的路由表。在OpenFlow 1.1以后的版本中,每台交换机支持使用多张流表,构成流水线处理,从而完成对数据包更为复杂的处理。
2. 流表项
流表由若干条流表项(Flow Entry)组成,流表项结构如下图所示。
匹配域(Match Fields):用于定义某条流,也是流表匹配的依据
指令(Instructions):表示对该条流应该如何处理
优先级(Priority):表示该流表项的优先匹配程度
计数器(Counters):用于统计该条流的信息
生存时间(Timeouts):表示流表项的有效存活时间
Cookie:控制器设置用来过滤被流统计、流修改和流删除操作请求影响的流表项
标志(Flags):用于流表项管理
3. 流表项匹配域
OpenFlow提供丰富的匹配域字段来定义不同粒度的流,如可以基于目的IP地址定义一条流,也可以根据源IP地址 + 目的IP地址来定义一条流。
4. 流表项指令
指令(Instruction)是流表项匹配成功时的处理动作,分为三类:
更新动作集(Action Set):添加、修改、清空动作集,前面两个对应Write-Actions指令,清空动作集对应Clear-Actions指令
修改流水线处理次序:从序号低的表跳到序号高的表,对应Go-To-Table指令
其他:更新元数据以及设定触发器,分别对应Write-Metadata指令和Stat-Trigger指令
5. Action
]Action是指对数据包的具体处理动作,可分为两类,一类是定义数据包的转发,另一类是修改数据包包头字段
四、流表匹配过程
解析数据包得到的首部字段,用于与流表项匹配域进行匹配。若一个数据包与多个流表项匹配成功,最后只与优先级最高的流表项进行匹配。
匹配成功,更新计数器,执行相应指令
匹配失败
流表中没有设置Table-Miss流表项,匹配失败时,丢弃数据包
流表中设置有Table-Miss流表项(优先级为0且匹配域为ANY),则最后会匹配该表项,执行相应指令(如丢弃、交由控制器处理、交给下一张流表处理)
五、 多级流表与流水线处理
从OpenFlow1.1开始引入了多级流表和流水线处理机制,多级流表的出现一方面能够实现对数据包的复杂处理,另一方面又能有效降低单张流表的长度,提高查表效率。每张表都有序号,数据包通过跳转指令按照流表序号递增的方向在多个流表之间进行匹配,这样就构成了一条流水线,如下图所示,可见流水线处理是有方向的。流水线处理可以在OpenFlow交换机的入端口或出端口上进行,一般都在入端口出进行流水线处理。当流水线上只有一张流表时,就简化成单流表匹配的情况。
OpenFlow概念学习相关推荐
- COMET | 概念学习使机器具有人的思维方式
作者 | 李芬 审稿 | 涂心琪 本期介绍在斯坦福大学Jure Leskovec教授课题组于2020年7月发表的一篇论文"Concept Learners for Generalizable ...
- mininet报错解决:Exception: Could not find a default OpenFlow controller和Cannot find required executable
早上在使用mininet的时候报错如下: Traceback (most recent call last):File "simple.py", line 63, in myTes ...
- 《软件定义网络:基于OpenFlow的SDN》一一2.5 本章总结
本节书摘来自华章计算机<软件定义网络:基于OpenFlow的SDN>一书中的第2章,第2.5节,作者:Siamak Azodolmolky,更多章节内容可以访问云栖社区"华章计算 ...
- Zookeeper概念学习系列之分布式事务
不多说,直接上干货! 初学者来说,肯定会有这么一个疑问.为什么会在zookeeper里牵扯到分布式事务? zookeeper到底是什么? zookeeper实际上是yahoo开发的,用于分布式中一致性 ...
- ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总
一.设备OVS sudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath-source ( ...
- OpenFlow Switch —— 软件架构
目录 文章目录 目录 OpenFlow Switch 架构 OpenFlow Switch 架构 OpenFlow Controller:SDN 网络将传统的网络结构划分成了 Control Plan ...
- OpenFlow Switch — 1.3 规范
目录 文章目录 目录 OpenFlow 标准和规范 OpenFlow 的端口(Port) OpenFlow 的流表(Flow Table) OpenFlow 的组表(Group Table) Open ...
- OVS openflow(二十四)
OpenFlow 是用于管理交换机流表的协议,ovs-ofctl 则是 OVS 提供的命令行工具.在没有配置 OpenFlow controller 的模式下,用户可以使用 ovs-ofctl 命令通 ...
- pox 中 openflow.webservice 组建的学习与使用
Openflow的一个简单JSON-RPC-ish web service交互式接口,由of_service信息服务派生而来,依赖于webcore组件.可以使用HTTP POST方式发送JSON进行访 ...
最新文章
- C 语言编程 — uint8_t / uint16_t / uint32_t /uint64_t
- Java7中的ForkJoin并发框架初探(上)——需求背景和设计原理
- 公众号质量改进调查问卷
- 设置图的位置_消防泵房内设备、管网、阀门的设置及系统图
- Photoshop脚本指南——Hello World
- 黑马程序员-Java-面向对象篇上《二》
- 无心剑中译狄金森诗36首
- 需要知道的面向对象设计的基本原则
- php mysql bbs_BBS(php mysql)完整版(六)
- BZOJ3083: 遥远的国度
- android控件触摸事件传递,Android事件传递处理
- hive 旧版本版本下载
- 苹果计算机 win10,苹果windows10怎么安装_苹果电脑安装win10教程
- 禁忌搜索算法TS求解连续函数最值
- sim800a指令_SIM800A模块进行HTTP的GET和POST操作
- java动态字段排序_Java利用Stream来实现多字段排序功能
- 怎么将视频转换成mp4?
- html输入正确用户名和密码,为什么输入正确用户名和密码还会提示“用户名或密码错误”?...
- makefile if 使用
- Linux-虚拟网络设备-LinuxBridge
热门文章
- 万圣节如何“整鬼”?360智能科技现身欢乐谷
- android+wifi驱动移植,全志平台ap6476 wifi模组调试(2)驱动移植 配置文件修改
- Matlab画图乘号误区
- kubernete入门学习一
- 大主宰手游数据库修改
- 手动安装OpenStack-Murano和Murano-dashboard
- 阿里巴巴-菜鸟网络-集成中间件团队招聘,A轮,空间巨大
- vue启动项目8080端口被占用
- Photoshop自动导出各尺寸Android和Iphone图标,支持新版Android Studio
- 使用evo评测ekf_pose和ndt_pose