OpenFlow协议解读
【个人总结系列-11】Openflow协议的理解-学习及总结

Openflow协议的理解-学习及总结Openflow协议概述OpenFlow协议是斯坦福大学的Nick McKeown提出的,随着OpenFlow协议的提出,SDN(Software Defined Network)也逐渐得到人们以及网络设备运营商的关注。
OpenFlow协议的主要思想就是将传统网络交换机数据包转发的过程分离开来,原来由交换机一步完成的转发动作现由2种设备协作完成,分别是支持openflow协议的交换机(假设为OVS)和控制器(以下称controller)。
OVS 里面维护了一个叫做流表(flow table)的东西,用来指定转发的策略,流表是在controller的控制下生成的,并且controller随时可以维护流表(删除、添加、修改流表项)。
所以网络管理人员可以很容易自己定义网络的行为,这也是SDN的原因。
在OpenFlow网络中数据包的转发流程是这样的:OVS接收到数据以后,通过和流表项进行匹配决定这个包的走向(转发、丢弃还是传给controller等),所以流表就相当于控制的策略,定义网络的行为只要在controller端对流表进行操作即可。
这就涉及到controller和OVS之间通信和交流的问题,而Controller和OVS之间通信的消息格式、内容及种类就是OpenFlow协议的主要内容。
OVS通过secure channel和controller进行通信,而且通信内容是通过TLS加密的,从secure channel发出和接收到的信息是和交换机接收到的数据包(到达的数据包)是不一样的,他们不经过流表的处理,OVS和controller的关系如下图所示[1]:图2-1-1 OVS和控制器的关系所以OpenFlow网络中最重要的就是流表(流表的结构和匹配的过程)和controller与OVS之间的通信。
下面主要介绍一下自己理解的这两块的内容。
流表每个交换机包括许多流表和一个组表,流表从0开始进行编号。
openflow流表原理

openflow流表原理OpenFlow流表原理OpenFlow是一种网络通信协议,它可以为网络中的交换机和路由器提供可编程控制的功能。
它的核心思想是将数据包转发和控制平面分离,使得网络管理员可以通过控制器对网络流量进行灵活的管理和控制。
而OpenFlow流表则是OpenFlow协议中的重要概念,它用于定义网络中数据包的处理规则和转发策略。
一、OpenFlow流表的基本结构OpenFlow流表由多个流表项组成,每个流表项都包含了一条数据包处理规则。
每个流表项包含了匹配域、优先级、动作集合等字段。
匹配域用于指定数据包匹配的条件,例如源IP地址、目的IP地址、源端口号、目的端口号等。
优先级字段用于指定流表项的优先级,当一个数据包匹配多条流表项时,优先级高的流表项将被选择。
动作集合字段用于指定数据包匹配后的处理动作,例如转发到指定端口、丢弃等。
二、OpenFlow流表的匹配规则OpenFlow流表的匹配规则可以非常灵活,可以根据不同的需求进行定制。
通常,流表项的匹配规则可以基于以下几个方面:1. 数据包的源和目的地址:可以指定源IP地址和目的IP地址,也可以指定源端口号和目的端口号。
这样可以实现基于源和目的地址的流量控制。
2. VLAN标签:可以指定数据包的VLAN标签,以实现VLAN的隔离和管理。
3. 协议类型:可以指定数据包的协议类型,例如TCP、UDP、ICMP等。
这样可以实现对不同协议类型的流量进行不同的处理。
4. 包头字段:可以指定数据包的各个包头字段的值,例如TTL、DSCP等。
这样可以实现对具体字段的流量控制。
三、OpenFlow流表的处理动作OpenFlow流表的处理动作可以根据需要进行灵活配置。
常见的处理动作包括:1. 转发到指定端口:可以将数据包转发到指定的端口,以实现数据包的转发功能。
2. 丢弃:可以丢弃匹配的数据包,以实现对某些特定流量的丢弃。
3. 修改包头字段:可以修改数据包的某些包头字段的值,例如修改源IP地址、目的IP地址等。
SDN软件定义网络之南向协议——OpenFlow协议

SDN软件定义网络之南向协议——OpenFlow协议一、背景介绍随着网络规模的不断扩大和网络应用的不断增加,传统的网络架构已经无法满足对网络灵活性、可编程性和可管理性的要求。
SDN(Software Defined Networking)软件定义网络作为一种新兴的网络架构,通过将网络控制平面与数据平面分离,提供了更高级别的网络控制和管理能力。
南向协议是SDN架构中用于控制数据平面设备的协议,其中OpenFlow协议是目前应用最广泛的南向协议之一。
二、协议目的本协议旨在规范SDN中OpenFlow协议的标准格式,确保网络设备之间的互操作性,实现网络控制和管理的统一。
三、协议范围本协议适用于支持OpenFlow协议的SDN网络设备,包括交换机、路由器等。
四、术语定义1. SDN(Software Defined Networking):软件定义网络,一种通过将网络控制平面与数据平面分离的网络架构。
2. 南向协议:用于控制数据平面设备的协议,与北向协议相对应。
3. OpenFlow协议:一种用于控制SDN网络设备的开放标准协议。
五、协议要求1. OpenFlow协议版本:本协议基于OpenFlow协议版本X.X.X进行规范。
2. 消息格式:OpenFlow协议中定义了多种消息类型,包括控制器向交换机发送的消息和交换机向控制器发送的消息。
每种消息类型都有特定的格式和字段定义,详见OpenFlow协议规范。
3. 控制器与交换机连接建立:控制器与交换机之间的连接建立需要遵循OpenFlow协议中的握手过程,包括版本协商、安全认证等步骤。
4. 流表项匹配规则:交换机根据流表项中的匹配规则来决定数据包的处理方式。
匹配规则可以包括源MAC地址、目的MAC地址、源IP地址、目的IP地址、协议类型等字段。
5. 流表项动作规则:交换机根据流表项中的动作规则来决定数据包的转发方式。
动作规则可以包括转发到指定端口、修改数据包头部字段、丢弃数据包等操作。
openflow协议的工作原理与流程

openflow协议的工作原理与流程OpenFlow协议是一种应用在软件定义网络技术上的标准化协议,它将传统的网络管理任务行分配给网络控制器,允许网络控制器以更灵活、更自动化的方式来操作网络设备和流量,开发出更加灵活的网络环境。
OpenFlow协议的工作原理与流程可以分为四个步骤:1、网络控制器发起一个消息,将它的流表更新消息发给OpenFlow 交换机;2、OpenFlow交换机将收到的消息存入其内部的流表中;3、OpenFlow交换机检测网络中的流量,并根据存储的流表信息对其进行分析;4、OpenFlow交换机根据流量分析结果,执行相应的动作,将流量转发给相应的设备或端口。
OpenFlow协议的工作原理相对比较简单,但要全面地理解它,仍需了解其实现过程中的详细信息。
首先,OpenFlow协议使用一个专有消息格式,即OpenFlow消息。
这个消息封装了从网络控制器发给OpenFlow交换机的所有信息。
这个消息包括网络控制器中定义的规则,以及所有其他消息,如更新和请求。
其次,OpenFlow协议中的流表也是非常重要的组成部分,它是由网络控制器设置的一组规则,它定义了OpenFlow交换机如何根据流量分析结果执行相应的动作。
在流表中,每个表项包括源IP地址、目的IP地址、协议类型,以及网络控制器中定义的要求行为,如转发流量到特定端口、限制流量速度等。
在这里,需要注意的是,每个OpenFlow交换机的流表可以由多个控制器定义,即同一个交换机可以有多个不同的控制器对其进行控制。
Finally, OpenFlow网络可以使用一种叫做“Groups”的机制,来实现多个端口间的流量聚合,以及“Action Set”功能,来实现多个不同动作的应用,从而更加智能和灵活地管理网络流量。
通过以上介绍,我们可以得出结论:OpenFlow协议的工作原理与流程是,网络控制器将流表更新信息发给OpenFlow交换机,OpenFlow交换机将收到的信息存入流表中,进而检测网络中的流量,并根据流表中的信息进行分析,最终根据流量分析结果执行相应的动作,将流量转发给相应的设备或端口。
SDN软件定义网络之南向协议——OpenFlow协议

SDN软件定义网络之南向协议——OpenFlow协议一、协议目的本协议旨在规范SDN软件定义网络中的南向协议——OpenFlow协议的标准格式和通信规范,确保网络设备之间的互操作性和数据交换的一致性。
二、协议范围本协议适用于SDN软件定义网络中使用OpenFlow协议进行通信的网络设备,包括但不限于交换机、路由器等。
三、术语定义1. SDN软件定义网络:一种网络架构,通过将网络控制平面与数据转发平面分离,实现网络资源的集中管理和灵活配置。
2. 南向协议:指SDN控制器与网络设备之间的通信协议,用于控制和管理网络设备的行为。
3. OpenFlow协议:一种SDN南向协议,用于控制和管理OpenFlow交换机。
四、协议内容1. 协议版本本协议基于OpenFlow协议的版本X.X进行规范。
2. 协议通信2.1 协议端口OpenFlow协议使用TCP或TLS协议进行通信,协议端口号为6633(非加密连接)和6653(加密连接)。
2.2 连接建立SDN控制器与OpenFlow交换机之间的连接建立遵循以下步骤:a. SDN控制器向OpenFlow交换机发送连接请求。
b. OpenFlow交换机收到连接请求后,验证请求的合法性。
c. OpenFlow交换机向SDN控制器发送连接回应。
2.3 消息交互SDN控制器与OpenFlow交换机之间的消息交互遵循以下规则:a. 消息格式:消息由消息头和消息体组成,消息头包含消息类型、消息长度等信息,消息体包含具体的操作指令。
b. 消息分类:根据消息类型的不同,消息可分为控制消息、配置消息、状态消息和统计消息等。
c. 消息处理:SDN控制器根据接收到的消息类型进行相应的处理,并向OpenFlow交换机发送相应的响应消息。
2.4 连接维护SDN控制器与OpenFlow交换机之间的连接维护遵循以下规则:a. 心跳机制:SDN控制器和OpenFlow交换机定期发送心跳消息以保持连接的存活状态。
openflow 协议报文格式

openflow 协议报文格式(实用版)目录1.OpenFlow 协议简介2.OpenFlow 协议报文格式3.OpenFlow 协议的应用4.OpenFlow 协议的未来发展正文1.OpenFlow 协议简介OpenFlow 协议是一种用于描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。
它的核心部分是用于 OpenFlow 协议信息结构的集合。
OpenFlow 协议旨在实现网络设备的自动化配置和管理,从而提高网络的灵活性和可编程性。
2.OpenFlow 协议报文格式OpenFlow 协议报文是在控制器和交换机之间传递的信息。
它包括以下几种类型的报文:(1)Hello 报文:用于在控制器和交换机之间建立和维护连接,以及传递双方的支持能力和状态信息。
(2)Discover 报文:用于控制器发现交换机上的流表项,从而实现对交换机端口和流表项的动态管理。
(3)Open 报文:用于建立控制器和交换机之间的会话,以便进行更高级别的通信。
(4)Update 报文:用于控制器向交换机发送流表项的更新指令,以及实现对交换机端口的动态配置。
(5)Delete 报文:用于控制器向交换机发送流表项的删除指令。
3.OpenFlow 协议的应用OpenFlow 协议主要应用于以下场景:(1)虚拟私有网络(VPN):通过 OpenFlow 协议,可以实现对虚拟私有网络的动态配置和管理,提高网络的灵活性和可编程性。
(2)负载均衡:OpenFlow 协议可以用于实现网络设备的负载均衡,从而提高网络的性能和可靠性。
(3)流量工程:通过 OpenFlow 协议,可以实现对网络流量的动态控制和管理,从而提高网络的性能和可编程性。
4.OpenFlow 协议的未来发展随着网络技术的不断发展,OpenFlow 协议也在不断完善和扩展。
未来,OpenFlow 协议将更加关注以下几个方面的发展:(1)提高网络的可编程性:通过引入更多的编程语言和抽象层,实现对网络设备的更加灵活和可编程的管理。
openflow协议的工作原理与流程
openflow协议的工作原理与流程OpenFlow协议是由Stanford大学交换机项目研发的一种可以实现交换机和控制器之间的通信方式,具有很好的灵活性和可扩展性。
它是一种基于TCP/IP协议来处理设备间传输控制报文的北向协议,可用于控制交换机把数据包从一个端口转发到另一个端口的过程,它的出现彻底改变了传统网络中的网络拓扑控制,使得网络管理者可以通过简单的控制,实现网络的更加高效的运行。
OpenFlow协议的工作原理和流程可以分为三部分,即控制器、交换机和用户。
控制器是OpenFlow协议的核心,它负责接收用户请求,根据用户的要求构建流表,并将流表发送给交换机;交换机是OpenFlow协议的基础平台,它负责接收控制器发送的流表,并将流表应用于数据包的转发;最后,用户是OpenFlow协议的最终使用者,它负责发送控制命令给控制器,以便控制器能够构建流表,此外,用户也可以接收到交换机的转发结果。
OpenFlow协议的工作流程如下:1. 用户发出控制命令:用户发出对交换机的控制命令,以便在控制器上构建流表,以便控制数据包的转发。
2. 控制器构建流表:控制器根据用户的控制命令,构建流表,并将流表发送给交换机。
3. 交换机应用流表:交换机接收到控制器发送的流表,然后根据流表中的指令对数据包进行转发。
4. 用户接收结果:用户接收到交换机的转发结果,以便确定网络的转发情况。
OpenFlow协议的优点:1. 灵活性:OpenFlow协议可以让网络管理者更加灵活的控制网络的拓扑,而不受传统网络限制。
2. 可扩展性:OpenFlow协议可以实现网络的无缝扩展,可以更加高效的扩展网络。
3. 安全性:OpenFlow协议可以避免ddos攻击,保护网络的安全性。
OpenFlow协议的缺点:1. 复杂性:OpenFlow协议比较复杂,需要具备一定的技术能力才能正确的控制网络拓扑。
2. 成本:OpenFlow协议需要使用支持OpenFlow协议的硬件设备,因此成本比较高。
OPENFLOW协议介绍
OPENFLOW协议介绍篇一:Openflow协议通信流程解读Openflow协议通信流程解读分类: openflow协议分析 2013-12-30 19:01887人阅读评论(1)收藏举报目录(?)[-] ?controller组成OFPT_FEATURES_REPLY篇二:Openflow及SDN技术简介Openflow及SDN1.网络虚拟化之SDN和OPENFLOW云计算的发展,是以虚拟化技术为基础的。
云计算服务商以按需分配为原则,为客户提供具有高可用性、高扩展性的计算、存储和网络等IT资源。
虚拟化技术将各种物理资源抽象为逻辑上的资源,隐藏了各种物理上的限制,为在更细粒度上对其进行管理和应用提供了可能性。
近些年,计算的虚拟化技术(主要指x86平台的虚拟化)取得了长足的发展;相比较而言,尽管存储和网络的虚拟化也得到了诸多发展,但是还有很多问题亟需解决,在云计算环境中尤其如此。
OpenFlow和SDN尽管不是专门为网络虚拟化而生,但是它们带来的标准化和灵活性却给网络虚拟化的发展带来无限可能。
OpenFlow起源于斯坦福大学的Clean Slate项目组 [1] 。
CleanSlate项目的最终目的是要重新发明英特网,旨在改变设计已略显不合时宜,且难以进化发展的现有网络基础架构。
在2006年,斯坦福的学生Martin Casado领导了一个关于网络安全与管理的项目Ethane[2],该项目试图通过一个集中式的控制器,让网络管理员可以方便地定义基于网络流的安全控制策略,并将这些安全策略应用到各种网络设备中,从而实现对整个网络通讯的安全控制。
受此项目(及Ethane的前续项目Sane[3])启发,Martin和他的导师Nick McKeown教授(时任Clean Slate项目的Faculty Director)发现,如果将Ethane的设计更一般化,将传统网络设备的数据转发(data plane)和路由控制(control plane)两个功能模块相分离,通过集中式的控制器(Controller)以标准化的接口对各种网络设备进行管理和配置,那么这将为网络资源的设计、管理和使用提供更多的可能性,从而更容易推动网络的革新与发展。
openflow协议书
openflow协议书OpenFlow协议是一种为软件定义网络(SDN)架构设计的开放通信协议。
通过OpenFlow协议,网络管理员可以通过集中控制器对网络设备进行管理和控制,实现网络的灵活性、可编程性和可自动化的特性。
下面将对OpenFlow协议的设计原理、工作流程和应用场景进行详细介绍。
OpenFlow协议的设计原理是将网络设备的控制平面(Control Plane)与数据平面(Data Plane)分离。
在传统网络中,控制平面和数据平面是紧密耦合的,网络设备负责处理数据包的转发和处理,以及控制平面的任务。
而在OpenFlow网络中,网络设备只负责数据转发和处理,所有的控制任务由集中控制器来完成。
这种分离的设计使得网络设备更加简单和高效,并且实现了网络控制的灵活性和可编程性。
OpenFlow协议的工作流程主要包括三个部分:控制器发出控制消息、网络设备进行数据转发和处理、网络设备将数据包转发到指定的端口。
当控制器发出控制消息时,它会根据网络的需求来编写和配置数据转发规则(Flow Rules),并将这些规则发送到网络设备的Flow Table中。
网络设备依照Flow Table中的规则对数据包进行操作,例如转发、丢弃或修改。
最后,网络设备将数据包发送到指定的端口,完成数据传输。
OpenFlow协议的应用场景非常广泛。
首先,它可以用于数据中心网络的管理和控制。
在传统的数据中心网络中,需要手动配置网络设备,而OpenFlow可以实现自动化配置和管理,提高网络的可靠性和可扩展性。
其次,OpenFlow可用于网络安全。
通过集中控制器可以对数据包进行深度检测和策略管理,提供更加灵活和可靠的安全措施。
此外,OpenFlow还可以应用于无线网络、广域网和云计算等领域。
尽管OpenFlow协议在网络技术中有诸多优点,但也存在一些挑战和限制。
首先,协议的安全性是一个关键问题。
由于控制器和网络设备之间的通信是基于网络的,因此需要采取必要的安全措施来防止恶意攻击和非法访问。
openflow协议的工作原理与流程
openflow协议的工作原理与流程OpenFlow协议是一种新型的网络交换协议,它可以让管理者灵活地定义网络中的流行行为,为网络开发者提供更大的灵活性。
Openflow协议于2008年被Stanford University首次发布,经过近十年的发展,它已经成为一种流行的网络交换协议,被广泛应用于云计算和虚拟化网络中。
OpenFlow协议的核心是一种分布式控制器,该控制器可以与网络中的多个设备进行交互,包括交换机、路由器、防火墙和NAT设备等。
OpenFlow协议允许管理员灵活地控制网络中的流量,而无需重新设计网络架构,从而实现网络的自动化管理和安全性。
OpenFlow协议的工作原理是每一个网络设备(如交换机)建立一个控制连接,通过控制连接与控制器进行通信。
OpenFlow协议下的每一个网络设备都会发出报文,该报文中包含发送者、接收者、以及传输内容,以发送到控制器上。
控制器在收到报文后,会根据规则匹配和决策,并将控制指令下发到接收设备上,以实现网络中的流量控制。
OpenFlow协议的工作流程可以分为四个主要的步骤:1.网络设备发出报文:网络设备发出的报文中包括流入报文源、流出报文目的地以及传输内容。
2.控制器接受报文:控制器收到报文后,会根据规则匹配和决策,然后将控制指令下发到接收设备上。
3.接收设备收到控制指令:接收设备收到来自控制器的控制指令后,会根据控制指令重新定向流量,以实现流量控制。
4.网络流量控制:网络流量经过重新定向之后,即可实现对数据流的控制,从而提高网络的效率和安全性。
OpenFlow协议的出现标志着一种新的网络交换模式,可以让管理者灵活地定义网络的流行行为,具备更高的灵活性和更强的安全性,是网络管理技术革新的一个重要里程碑。
OpenFlow协议已经被广泛应用于虚拟化网络,云计算,SDN技术,它不仅能更好地满足企业和用户的需求,还能帮助管理者更加迅速、灵活、安全地管理网络。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OpenFlow通信流程解读前言接触了这么久的SDN,OpenFlow协议前前后后也读过好多遍,但是一直没有时间总结一下自己的一些见解。
现在有时间了,就写一写自己对OpenFlow协议通信流程的一些理解。
SDN中Switch和controller在SDN中很重要的两个实体是Switch跟Controller。
Controller在网络中相当于上帝,可以知道网络中所有的消息,可以给交换机下发指令。
Switch就是一个实现Controller指令的实体,只不过这个交换机跟传统的交换机不一样,他的转发规则由流表指定,而流表由控制器发送。
switch组成与传统交换机的差异switch组成switch由一个Secure Channel和一个flow table组成,of1.3之后table变成多级流表,有256级。
而of1.0中table只在table0中。
∙Secure Channel是与控制器通信的模块,switch和controller之间的连接时通过socket 连接实现。
∙Flow table里面存放这数据的转发规则,是switch的交换转发模块。
数据进入switch 之后,在table中寻找对应的flow进行匹配,并执行相应的action,若无匹配的flow 则产生packet_in(后面有讲)of中sw与传统交换机的差异∙匹配层次高达4层,可以匹配到端口,而传统交换机只是2层的设备。
∙运行of协议,实现许多路由器的功能,比如组播。
∙求补充!!(如果你知道,请告诉我,非常感谢!)OpenFlow的switch可以从以下方式获得∙实体of交换机,目前市场上有一些厂商已经制造出of交换机,但是普遍反映价格较贵!性能最好。
∙在实体机上安装OVS,OVS可以使计算机变成一个OpenFlow交换机。
性能相对稳定。
∙使用mininet模拟环境。
可以搭建许多交换机,任意拓扑,搭建拓扑具体教程本博客有一篇。
性能依赖虚拟机的性能。
controller组成控制器有许多种,不同的语言,如python写的pox,ryu,如java写的floodlight等等。
从功能层面controller分为以下几个模块:∙底层通信模块:OpenFlow中目前controller与switch之间使用的是socket连接,所以控制器底层的通信是socket。
∙OpenFlow协议。
socket收到的数据的处理规则需按照OpenFlow协议去处理。
∙上层应用:根据OpenFlow协议处理后的数据,开发上层应用,比如pox中就l2_learning,l3_learning等应用。
更多的应用需要用户自己去开发。
OpenFlow通信流程以下教程环境为:mininet+自编简单控制器+scapy封装建立连接首先启动mininet,mininet会自行启动一个default拓扑,你也可以自己建立你的拓扑。
sw 建立完成之后,会像controllerIP:controllerport发送数据。
controller启动之后,监听指定端口,默认6633,但是好像以后的都改了,因为该端口被其他协议占用。
3次握手之后,建立连接,这个是底层的通信,是整一套系统的基础设施。
OFPT_HELLO创建socket之后,sw跟controller会彼此发送hello数据包。
∙目的:协议协商。
∙内容:本方支持的最高版本的协议∙成果:使用双方都支持的最低版本协议。
∙成功:建立连接∙失败:OFPT_ERROR (TYPE:OFPT_HELLO_FAILED,CODE =0),终止连接。
OFPT_ERROR说到OFPT_ERROR,我们不妨先了解一下。
如TYPE:0 CODE:0为:OFPHFC_INCOMPATIBLE具体对应的关系,请自行查看OF协议。
OFPT_ECHO∙分类:对称信息OFPT_ECHO_REQUEST, OFPT_ECHO_REPLY∙作用:查询连接状态,确保通信通畅。
当没有其他的数据包进行交换时,controller会定期循环给sw发送OFPT_ECHO_REQUEST。
OFPT_FEATURES当sw跟controller完成连接之后,控制器会向交换机下发OFPT_FEATYRES_REQUEST的数据包,目的是请求交换机的信息。
∙发送时间:连接建立完成之后∙发送数据:OFPT_FEATURES_REQUEST∙对称数据:OFPT_FEATURES_REPLY∙目的:获取交换机的信息OFPT_FEATURES_REQUEST∙TYPE=5∙Without dataOFPT_FEATURES_REPLY∙TYPE =6∙[0:8]为header∙[8:32]长度24byte为sw的featuresfeatures里面提取相关的信息,如dpid,port_no,等在整个通信过程中多次被用到的重要数据。
所以,对这两个数据结构了然于心,对于研究OpenFlow来说,至关重要。
每一次交换机连到控制器,都会收到控制器的features_request,当sw将自己的features回复给控制器之后,控制器就对交换机有了一个全面的了解,从而为后面的控制提供的控制信息。
OFPT_PACKET_IN在控制器获取完交换机的特性之后,交换机开始处理数据。
对于进入交换机而没有匹配流表,不知道如何操作的数据包,交换机会将其封装在packet_in 中发给controller。
包含在packet_in中的数据可能是很多种类型,arp和icmp是最常见的类型。
当然产生packet_in的原因不止一种,产生packet_in的原因主要有一下两种:∙OFPR_NO_MATCH∙OFPR_ACTION无法匹配的数据包会产生packet_in,action也可以指定将数据包发给packet_in,也就是说我们可以利用这一点,将需要的数据包发给控制器。
packet_in事件之后,一般会触发两类事件:∙packet_out∙flow_mod如果是广播包,如arp,控制器一般会将其包装起来,封装成packet_out数据包,将其发给交换机,让其flood,flood操作是将数据包往除去in_port以外的所有端口发送数据包。
OFPT_PACKET_OUT很多人不是特别了解packet_out的作用。
∙作用:通过控制器发送交换机希望发送的数据∙例子:当一个没有匹配上流表项的数据上报控制器时,控制器可以下发packet_out,指定交换机对该数据包做泛洪或丢弃动作。
当packet_out中的buffer_id=-1时,指明该数据并不在交换机的buffer中,而在packet_out 的data。
当buffer_id不为-1时,指明要操作的数据包是交换机中该buffer_id的数据。
OFPT_FLOW_MODOFPT_FLOW_MOD是整一个OpenFlow协议中最重要的数据结构。
OFPT_FLOW_MOD由header+match+flow_mod+action[]组成。
为了操作简单,以下的结构是将wildcards和match分开的形式,形成两个结构,在编程的时候能更方便一些。
由于这个数据包很重要,所以,我将把这个数据包仔细拆分解读。
header是所有数据包的报头,有三个参数:∙type:类型∙length:整个数据包的长度∙xid:数据包的编号比如ofp_flow_mod的type就是14,具体的哪一种数据的类型将在文章最后给出。
length最基本长度为72,每一个action长度为8。
所以长度必定为8的倍数才是一个正确的数据长度。
WILDCARDS这是从match域提取出来的前32bit。
在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为默认不匹配。
MATCH这个数据结构会出现在机会所有重要的数据包中,因为他存的就是控制信息。
如有packet_in引发的下发流表,则match部分应对应填上对应的数据,这样下发的流表才是正确的。
但是在下发的时候还需要注意许多细节,比如:∙并不是所有的数据包都有vlan_tag。
如0x0800就是纯IP,并没有携带vlan_tag,所以填充式应根据packet_in的具体情况填充。
∙并不是所有的数据都有四层端口,所以四层的源端口,目的端口都不是任何时候都能由packet_in去填充的。
不去管就好了,默认的会填充一个默认值,匹配的时候不去匹配4层端口就没有问题。
FLOW_MOD两个时间参数idle_timeout & idle_timeout:∙idle_timeout:如值为10,则某条流在10秒之内没有被匹配,则删除,可以称之为活跃时间吧。
∙hard_timeout:如值为30,则30秒到达的时候,一定删除这条流,即使他还活跃,即被匹配。
prioritypriority是流的优先级的字段,字数越大则优先级越高,存放在号数越小的table中。
buffer_id由交换机指定的buffe_id,准确的说是由dpid指定的。
如果是手动下发的流,buffer_id应填-1,即0xffff,告诉交换机这个数据包并没有缓存在队列中。
out_port指定流的出口,但是这个出口并不是直接指导流转发的,至少我是这么觉得,指导流转发的出口会在action里面添加,这个端口是为了在flow_removed的时候查询,并返回控制器的作用。
(求纠正!)有一些端口是很特殊的,如flood,local等。
具体分类如下:如果你不知道端口是多少,最好填flood,也就是0xfffb。
flags在上面的注释中也说得比较清楚了。
如果没有特殊用处,请将他置1,因为这样能让交换机在删除一条流的时候给交换机上报flow_removed信息。
ACTIONaction是OpenFlow里面最重要的结构。
对,他也是最重要的。
每一条流都必须指定必要的action,不然匹配上之后,没有指定action,交换机会默认执行drop操作。
action有2种类型:∙必备行动: Forward and Drop∙选择行动:FLOOD,NALMAL 等如添加output就是一个必须要添加的action.每一个action最好有一个action_header(),然后再接一个实体。