【博客450】OpenFlow学习

article/2025/10/25 6:52:05

OpenFlow

OpenFlow协议规范定义了OpenFlow交换机、流表、OpenFlow通道以及OpenFlow交换协议。

OpenFlow是第一个开放的南向接口协议,也是目前最流行的南向协议。它提出了控制与转发分离的架构,规定了SDN转发设备的基本组件和功能要求,以及与控制器通信的协议。

SDN与OpenFlow的关系

SDN与OpenFlow不是划等号的关系,而是SDN包含OpenFlow的关系。实际上,SDN有多种实现方案,在ONF SDN方案中OpenFlow充当南向接口的作用。
南向接口的定义是控制平面与数据平面之间进行交互的协议,南向接口除了可以采用OpenFlow外,还有许多别的协议,如OF-CONFIG、OVSDB、NETCONF、PCEP、XMPP等等

OpenFlow交换机

OpenFlow交换机转发面由两部分组成:端口和流表。一个交换机可以有很多种端口,也可以有很多级流表。

它主要由OpenFlow通道和数据平面组成,而数据平面又包括流表、端口、组表和Meter表等:
OpenFlow通道:用于交换机和控制器进行通信(基于OpenFlow交换协议)
流表:即存放流表项的表
端口:是OpenFlow与其他网络协议栈进行数据交换的网络接口,包括物理端口、逻辑端口以及预留端口等
组表:用于定义一组可被多个流表项共同使用的动作
Meter表:用于计量和限速

在这里插入图片描述

在这里插入图片描述

流表

流表用于存储流表项,多级流表以流水线的方式处理。

在这里插入图片描述

流表由若干条流表项(Flow Entry)组成,流表项结构如下图所示。
每个流表项由匹配域(包括输入端口、包头以及其他流表设置的元数据)、优先级、指令集、计数器、计时器、Cookie和用于管理流表项的flag组成:

在这里插入图片描述

匹配域(Match Fields):用于定义某条流,也是流表匹配的依据
指令(Instructions):表示对该条流应该如何处理
优先级(Priority):表示该流表项的优先匹配程度
计数器(Counters):用于统计该条流的信息
生存时间(Timeouts):表示流表项的有效存活时间
Cookie:控制器设置用来过滤被流统计、流修改和流删除操作请求影响的流表项
标志(Flags):用于流表项管理

流表项最为重要的两项为匹配域和指令与动作,当OpenFlow交换机收到一个数据包,将它包头解析后与流表中流表项匹配域进行匹配,匹配成功则执行指令,因此流表可以简化理解为key-value形式的{匹配域-指令}表。

匹配域:

OpenFlow提供丰富的匹配域字段来定义不同粒度的流,如可以基于目的IP地址定义一条流,也可以根据源IP地址 + 目的IP地址来定义一条流

在这里插入图片描述

指令与动作

一、指令(Instruction)是流表项匹配成功时的处理动作,分为三类

1、更新动作集(Action Set):添加、修改、清空动作集,前面两个对应Write-Actions指令,清空动作集对应Clear-Actions指令
2、修改流水线处理次序:从序号低的表跳转到序号高的表,对应Go-To-Table指令
3、其他:更新元数据以及设定触发器,分别对应Write-Metadata指令和Stat-Trigger指令

二、动作(Action)Action是指对数据包的具体处理动作,可分为两类

一类是定义数据包的转发,另一类是修改数据包包头字段

流表匹配过程

解析数据包得到的首部字段,用于与流表项匹配域进行匹配。若一个数据包与多个流表项匹配成功,最后只与优先级最高的流表项进行匹配。

匹配成功:

更新计数器,执行相应指令

匹配失败:

流表中没有设置Table-Miss流表项,匹配失败时,丢弃数据包
流表中设置有Table-Miss流表项(优先级为0且匹配域为ANY),则最后会匹配该表项,执行相应指令(如丢弃、交由控制器处理、交给下一张流表处理)

在这里插入图片描述

使用单流表转发数据包:

假设主机A发送数据包给主机B,使用单张流表的OF交换机处理数据包过程,如图所示
OF交换机从1端口接收数据包
OF交换机解析数据包首部,并查询流表进行流表匹配,匹配第一条流表项,并执行相应指令
将数据包转发到OF交换机的2端口

在这里插入图片描述

多级流表与流水线处理:

从OpenFlow1.1开始引入了多级流表和流水线处理机制,多级流表的出现一方面能够实现对数据包的复杂处理,另一方面又能有效降低单张流表的长度,提高查表效率。每张表都有序号,数据包通过跳转指令按照流表序号递增的方向在多个流表之间进行匹配,这样就构成了一条流水线,如下图所示,可见流水线处理是有方向的。流水线处理可以在OpenFlow交换机的入端口或出端口上进行,一般都在入端口出进行流水线处理。当流水线上只有一张流表时,就简化成单流表匹配的情况。

在这里插入图片描述

  • 流水线处理开始:OpenFlow交换机接收数据包后,执行入端口的流水线处理,同时给该流水线分配一个动作集(Action Set)
  • 流表匹配
    • 匹配成功

      更新相应流表项的计数器,完成对该条流的统计工作
      执行流表项对应的指令

    • 匹配失败:

      一个数据包可能在流表中与所有的流表项都不匹配或者匹配到Table-Miss流表项(优先级为0且匹配域为ANY),这两种情况都称为Table-Miss,对于前者,OpenFlow交换机将丢弃数据包;对于后者,OpenFlow交换机根据Table-Miss流表项,处理数据包(丢弃数据包、转发给控制器、交给下一个流表处理)

  • 流水线处理结束:若当前不是执行跳转指令,则执行动作集中的所有动作,完成对数据包的处理,然后结束流水线处理

在这里插入图片描述

多级流表实现对流的细粒度控制:

使用多级流表实现主机A发送到给主机B的所有TCP报文正常转发,UDP报文均丢弃,从而实现对不同流的细粒度控制

基本思想:

流表0中匹配主机A到主机B的IP流,然后跳转到其他流表,如流表2
流表2中在IP流的基础上进一步匹配TCP流或UDP流,根据要求将TCP流正常转发,UDP流丢弃

在这里插入图片描述

OpenFlow的两种下发流表方式

根据流表的安装时机,可分为Proactive方式和Reactive方式

Proactive

在数据包还未到达OpenFlow交换机前,SDN控制器就向OpenFlow交换机主动下发流表,这种方式相当于预置路由
例如Table-Miss表项,就需要采用Proactive方式在SDN控制器与OpenFlow交换机建立连接后下发,显示的指定数据包查表失败时,OpenFlow交换机的处理方式

Reactive

数据包到达OpenFlow交换机因查流表失败时,产生Packet-In消息询问SDN控制器,SDN控制器计算路由后下发流表到OpenFlow交换机,这种方式相当于按需下发路由,只有在有路由需求且查流表失败时,才会触发新的流表安装

组表

独立于流水线之外,每台OpenFlow交换机只有一张组表。组表(Group Table)由若干条组表项(Group Entry)组成,具有将多个端口定义为一个组的能力,从而实现广播、多播,负载均衡、链路聚合、故障转移等
组表项结构如图所示,定义了一到多个动作桶(Action Bucket),用于描述转发到指定端口前,对数据包的处理。

在这里插入图片描述

使用组表实现多播:

假设主机A使用多播方式向主机B和C发送IP数据包

在这里插入图片描述

计量表

对流进行测量,从而为流提供QoS功能,如限速、DiffServ
每台OpenFlow交换机只有一张计量表(Meter Table),由若干计量表项(Meter Entry)组成,每个计量表项可以定义一至多个计量带(Meter Band),计量带定义了带宽阈值和数据包处理方式(丢弃、DSCP标记)

在这里插入图片描述

对流进行限速:

假设对某条流X(目的IP地址:10.0.0.2)进行限速,且当前测得流X数据包的速率为1200kBps
流表匹配后,交由计量1处理
由于测得数据包速率1200kBps > 带宽阈值1000,根据计量带0定义的处理方式丢弃数据包,从而实现限速

在这里插入图片描述

OpenFlow消息

消息按照发送的位置可分为三大类,每一大类中有若干子消息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Flow-Mod消息

Flow-Mod消息用于流表操作,包括添加、删除、修改流表项。该消息由控制器下发给交换机,从而指导交换机对数据包的处理

在这里插入图片描述

在这里插入图片描述

Packet-In消息

在这里插入图片描述

Packet-Out消息

在这里插入图片描述

基于OpenFlow的SDN网络工作原理

传统网络中网络设备的工作过程

假设主机A向主机B发送IP数据包,且所有路由表和MAC地址表中都有该数据包的相应表项
路由器之间运行分布式路由协议构建路由表。查表成功则基于目的IP地址转发;查表失败时,丢弃数据包
交换机根据自学习算法构建MAC地址表。查表成功则基于目的MAC地址转发;查表失败时,除入端口外其余所有端口转发出去

在这里插入图片描述

基于OpenFlow的SDN网络中网络设备的工作过程

路由计算、转发规则(流表)下发由控制器完成
OF交换机只需要按照流表进行转发,查表失败时,通过Pacekt-In消息询问控制器

假设主机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消息后转发数据包

在这里插入图片描述

路由器,交换机,OpenFlow交换机对包的转发处理

在这里插入图片描述


http://chatgpt.dhexx.cn/article/cI3tNklw.shtml

相关文章

OpenFlow交换机【ACM SIGCOMM顶会论文笔记】

目录 写在前面的话OpenFlow交换机基本思想与工作原理专用OpenFlow交换机(Dedicated OpenFlow switches) 启用OpenFlow的交换机(OpenFlow-enabled switches)其他功能(Additional features)控制器&#xff08…

关于ns-3中安装openflow的问题,解决openflow not found

官网 官网里面并没有明确的描述,这里结合自己的安装过程讲解一下 首先下载源码,记住这一步最好在ns-3目录下,就是运行waf命名的目录 $ hg clone http://code.nsnam.org/jpelkey3/openflow $ cd openflow进行编译,会提示缺少文件…

OpenFlow基础入门知识

本文进行讨论的是OpenFlow 1.0和OpenFlow 1.3的基本知识 Overview: Openflow 1.0: 安全通道单张流表ipv4 Openflow 1.3: 安全通道多级流表(流水线pipeline)组表测量表ipv6..... 流(flow) …

Openflow流表学习

Openflow流表学习 OpenFlow是一种新型的网络协议,它是控制器和交换机之间的标准协议。自2009年底发布1.0版本后,OpenFlow协议又经历了1.1、1.2、1.3及1.4版本的演进过程,目前使用和支持最多的是1.0和1.3版本。 OpenFlow1.3在1.0版的基础上进…

SDN与OPENFLOW 简介

本文对Openflow的发展、规范、应用和SDN的提出及相关应用做出较为客观全面的介绍。笔者希望通过本文对OpenFlow/SDN做一个初步介绍,以期帮助大家能够进一步深入了解和学习OpenFlow/SDN。 序言:从网络虚拟化说起 云计算的发展,是以虚拟化技术…

OpenFlow协议分析

实验环境:CentOS OpenDayLight-Carbon mininet WireShark 本实验通过wireshark抓包分析openflow1.3协议的各种报文与字段。 抓包 首先安装好实验所需的软件,这里不多赘述,需要的可以点击查看:mininet多方法安装,控制…

openflow简介

openflow交换机包含一些流表,流表负责具体包查找和转发 控制器通过of协议对流表查询和管理 一、流表 流表组成: 包头域、活动计数器、0个或多个执行行动 包头域: 计数器: 可以针对每张表、每个流、每个端口、每个队列来维护。…

SDN-OpenFlow1.0协议分析

目录 OpenFlow1.0代码 OpenFlow交换机流表 包头域 计数器 行动 流表匹配 OpenFlow消息 OpenFlow消息格式 对称消息 建立OpenFlow连接(OFPT_HELLO消息) 报告错误(OFPT_ERROR消息) 获取交换机特性信息(Featu…

OpenFlow概述

OpenFlow简介 通俗的讲,OpenFlow是使用类似于API进程配置网络交换机的协议。OpenFlow的思路很简单,网络设备维护一个FlowTable并且只按照FlowTable进行转发,FlowTable本身的生成、维护、下发完全由外置的Controller来实现,注意这里…

OpenFlow了解

openflow的核心思想是将所有的协议都抽象出来,抽象成公共的flow概念。协议抽象:数据,函数(对数据的处理方式),逻辑(数据与处理的对应关系,函数之间的交互行为与时序) pu…

OpenFlow交换机概述

1 交换机组成 OpenFlow交换机包括一个或多个流表和一个组表,执行分组查找和转发,和到一个外部控制器OpenFlow的信道。 控制器使用OpenFlow的协议,可添加、更新和删除流表中表项,既主动或被动响应数据包。 每个流表项包含匹配字段&…

openflow阅读感悟

一、背景 随着网络的快速发展和普及,设备和协议的复杂性导致了网络实验的困难。当时,几乎没有实际方法可以在足够现实的环境中尝试新的网络协议,来自网络学术、产业界的大多数新想法都未经试用和测试。因此,人们普遍认为网络基础设…

OpenFlow概念

OpenFlow是一种网络通信协议,应用于SDN架构中控制器和转发器之间的通信。软件定义网络SDN的一个核心思想就是“转发、控制分离”,要实现转、控分离,就需要在控制器与转发器之间建立一个通信接口标准,允许控制器直接访问和控制转发…

OpenFlow总结

OpenFlow总结 OpenFlow体系结构OpenFlow端口1.1、物理端口1.2、逻辑端口1.3、预定端口(OpenFlow1.5中文版) OpenFlow流表(FlowTable)2.1、概念2.2、流表结构 OpenFlow通信通道3.1、消息类型3.2 、消息交换 OpenFlow体系结构 Open…

Openflow

1.Openflow是啥 OpenFlow是第一个开放的南向接口协议,也是目前最流行的南向协议。 它提出了控制与转发分离的架构,规定了SDN转发设备的基本组件和功能要求,以及与控制器通信的协议。 2.OpenFlow组件 2.1. OpenFlow交换协议 2.2 OpenFlow网…

[学习笔记]OpenFlow概述(1)

个人学习笔记,出问题请指出下。摘取《图解OpenFLow》 Openflow协议是由斯坦福大学提出,最初的出发点是为了更加轻松地构建用于研究的网络。 Openflow的初期设计思想:无需设计新的硬件,只对现有硬件更新其软件。因此,O…

OpenFlow 协议详解(干货)

OpenFlow是一种新型的网络协议,它是控制器和交换机之间的标准协议。自2009年底发布1.0版本后,OpenFlow协议又经历了1.1、1.2、1.3及1.4版本的演进过程,目前使用和支持最多的是1.0和1.3版本。OpenFlow1.3在1.0版的基础上进一步优化及升级&…

OpenFlow概念学习

前言 OpenFlow交换机将原来完全由交换机/路由器控制的报文转发过程转化为由OpenFlow交换机和控制服务器来共同完成,目的交换机要通过of协议(OpenFlow Protocol)经安全通道(Secure Channel)连接到外部控制器&#xff08…

Openflow协议详解

来自:http://www.h3c.com/cn/d_201811/1131080_30005_0.htm 1 OpenFlow背景 转发和控制分离是SDN网络的本质特点之一 。在SDN网络架构中,控制平面与转发平面分离,网络的管理和状态在逻辑上集中到一起,底层的网络基础从应用中独立出来&#…

深入分析OpenFlow协议

文章目录 OpenFlow是什么???OpenFlow的起源与发展OpenFlow工作原理OpenFlow组件OpenFlow控制器1、NOX/POX2、ONOS3、OpenDaylight OpenFlow安全通道OpenFlow交换机流表项的组成多级流表与流水线处理流表下发方式 OpenFlow的应用场景OpenFlow的…