已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
“OpenFlow Switch Specification”协议概述内部公开产品名称Product name密级Confidentiality level内部公开产品版本Product versionTotal 32 pages 共32页“OpenFlow Switch Specification”协议概述Prepared by 拟制王云毅 09114Date日期2012-10-16Reviewed by评审人Date日期Approved by批准Date日期杭州华三通信技术有限公司H3C Technologies Co., Ltd.版权所有 侵权必究All rights reserved修订记录Revision record日期Date修订版本RevisionVersion修改章节Sec No. 修改描述Change Description作者Author2013-08-23V0.9initial 初稿完成王云毅 091142013-10-22V1.0根据第一轮评审修改王云毅 09114目录 Table of Contents1OpenFlow Switch61.1OpenFlow端口61.2OpenFlow表项81.2.1Flow Table81.2.2Group Table91.2.3Meter Table102OpenFlow报文的处理112.1OpenFlow管道112.2OpenFlow报文的匹配122.3Table Miss152.4Instructions152.5Action Set162.6Action List173OpenFlow信道183.1OpenFlow信道的连接183.2OpenFlow协议报文的处理193.3Multiple Controllers193.4Auxiliary Connections204OpenFlow协议报文204.1Symmetric消息214.1.1Hello214.1.2Echo Request/Reply214.1.3Experimenter214.2Asynchronous消息214.2.1Packet-In Message224.2.2Flow-Removed Messeage224.2.3Port-Status Message234.2.4Error Message244.3Controller to Switch消息244.3.1Features244.3.2Swtich Configuration254.3.3Queue Get Configuration254.3.4Modify Flow Entry Message264.3.5Modify Group Entry Message274.3.6Port Modification Message284.3.7Meter Modification Message284.3.8Multipart Messages294.3.9Packet-Out Message304.3.10Barrier Message304.3.11Role-Request Message314.3.12Set Asynchronous Configuration Message314.3.13Flow Table Configuration325结束语32“OpenFlow Switch Specification”协议概述n 关键词Key words:OpenFlown 摘 要Abstract:本文具体介绍了OpenFlow协议n 缩略语清单List of abbreviations:Abbreviations缩略语Full spelling 英文全名Chinese explanation 中文解释SDNSoftware Defined Network软件定义网络1 OpenFlow Switch “OpenFlow Switch Specification”主要介绍了OpenFlow交换机的基本构成、主要功能以及Controller如何远程控制OpenFlow交换机。目前“OpenFlow Switch Specification”最新版本为1.3.2,对应协议版本号为0x04。OpenFlow交换机基本构成有:l 一个或多个流表(flow table),每个流表可以拥有数条流表项,用于匹配报文和进行报文的转发。l 一个group table,组表通过流表来进行匹配报文,并指导报文的转发,多用于组播。l 一个meter table,用于对报文进行QoS处理。l 一个安全信道(secure channel),用于和Controller进行OpenFlow协议交互。按照对OpenFlow协议的支持程度来划分,OpenFlow交换机可以分为OpenFlow-Only交换机和OpenFlow-Hybrid交换机。OpenFlow-Only交换机只支持OpenFlow操作,即报文只能走OpenFlow流程被OpenFlow处理。而OpenFlow-Hybrid交换机则同时支持OpenFlow操作和普通交换机的操作,比如传统的二层以太网交换、三层路由功能等等。OpenFlow Hybrid交换机需要根据设置来判断报文是由OpenFlow处理还是由普通交换机转发流程来处理,例如根据VLAN来划分报文的处理方式,按照设置一部分VLAN上收到的报文交给OpenFlow流程处理,一部分VLAN上收到的报文交给普通交换机处理流程处理。同时,OpenFlow-Hybrid交换机也支持报文被OpenFlow处理后再转交给普通交换机转发流程处理。1.1 OpenFlow端口OpenFlow端口是用于在OpenFlow处理和网络的其余部分之间传递报文的网络接口。标准的OpenFlow端口被定义为三种类型,即物理端口、逻辑端口以及保留端口(Reversed Port)。OpenFlow物理端口通常为OpenFlow交换机的硬件接口,比如交换机的以太网口等。在虚拟化的OpenFlow交换机中也可以为与实际交换机物理接口相关联的虚接口。OpenFlow逻辑端口并不和交换机上的硬件接口直接关联。这些接口通常由其他协议或者交换机上的其他模块设置。比如聚合接口、环回接口、隧道等。OpenFlow保留端口由转发动作定义的。例如转发到Controller、Flood或者使用非OpenFlow处理流程来处理报文。协议并不要求OpenFlow交换机支持所有的保留端口类型,详细的OpenFlow保留端口分类如表1:必选的AllALL端口代表该交换机可以使用的所有能将特定报文转发出去的端口。入端口和被设置为OFPPC_NO_FWD(即不能转发)的端口除外。这些端口只能为出端口。Controller Controller端口代表OpenFlow Controller的控制信道。该端口即可为入端口也可以为出端口。当该端口为出端口时,封装报文到packet-in消息并且通过OpenFlow协议送到Controller。当该端口为入端口时,识别该报文来自于Controller。TableTable端口代表OpenFlow管道的起点。这种端口只适合于packet-out message动作列表里中的output动作,此output动作将该报文提交给第一个流表进行处理,并按照正常的OpenFlow管道流程处理该报文。In PortIn Port端口代表报文的入端口。这种端口只适用于出端口,即报文从进入的端口再转发回去。Any用于某些命令的特殊值,出入端口不能设为any。可选的LocalLocal端口代表交换机的本地网络栈或者管理栈。出入端口可以设置为Local。Local端口可以使远程实例通过OpenFlow网络和交换机进行交互,而不用单独设置一个控制网。NormalNormal端口代表传统的非OpenFlow交换机处理管道。只适用于出端口,普通交换机会对分配到该端口的报文进行正常的二三层转发等功能。FloodFlood端口代表使用非OpenFlow交换机处理管道泛洪。同样只适用于出端口,通常情况下会将报文广播到所有的标准端口(即包含物理端口、逻辑端口和保留端口),入端口和被设置为OFPPC_NO_FWD(即不能转发)的端口除外。通过Flood转发到的端口可以被设置。表 1 OpenFlow的保留端口OpenFlow-Only交换机由于不具备普通交换机的能力,所以不支持Normal和Flood保留端口。而OpenFlow-Hybrid交换机可选支持这2种类型的保留端口。1.2 OpenFlow表项1.2.1 Flow Table流表为OpenFlow的核心概念,流表为硬件表,OpenFlow交换机可以含有一个或多个流表,流表由许多流表项(Flow Entries)组成,每个流表项由图1所示的组件构成:图 1 Flow Table图1中各组件的含义如下:l Match Field:匹配域。用于匹配报文,通常包含入端口,报文头信息等等,前一个表项的元数据(metadata,即元数据,通常用于在一个交换机内部的不同流表中传递信息)作为可选项出现。OpenFlow协议规定了非常丰富的匹配域供设备使用,同时大部分匹配域也支持通过使用掩码来对报文进行过滤匹配。l Priority:优先级。匹配该流表项的优先级,优先级越高的流表项越优先匹配,不同流表项是根据匹配域和优先级来区分的,即两条流表项匹配域可以不同而优先级相同或者优先级相同匹配域不同。l Counters:统计用,为匹配次数、匹配成功次数等计数。l Instruction:指令,指令用于向动作集添加动作、清空动作集、应用动作列表、指向meter表进行QoS处理、写入元数据、指向其他流表项等。l Timeouts:老化时间;流表项在该交换机中老化的最大时间或闲置时间。l Cookies:Controller选择的不透明数据值,可能用于Controller过滤报文、流变更、流删除,不用于处理报文。 流表中含有一个特殊的流表项,即Table Miss流表项,该流表项Match Field为通配符,可以匹配任何报文,匹配优先级为0,即最后匹配该表项。无该表项时,对没有匹配任何流表项的报文默认行为是丢弃报文。流表项可以设置老化时间和最大闲置时间,当达到任意一个设置的时间时(闲置一段时间或者达到老化时间),该流表项会被删除,并根据flag设置是否将该流表项的删除信息通知Controller。这两个时间也可以设置为0,代表该流表项永远不会老化,此时只有通过Controller下发flow modify消息来删除该流表项。1.2.2 Group TableOpenFlow交换机可以利用group来实现其它的转发行为,例如组播、广播等,也可以实现特殊的动作处理,比如一个报文被一个group处理后转交给另外一个group处理。OpenFlow交换机只含有一个组表,组表也由许多组表项来构成,组表项的构造如图2: 图2 Group TableGroup Identier: 组表项的ID标示符,用于识别组的32bits长的唯一整数。 Group Type: 决定组的类型,分为ALL、Indirect、Select、Fast failover。Counters: 计数器用来统计该组表项处理过的报文数量。 Action Buckets: 每个组表项可以包含一个或多个actions bucket。每个动作桶由许多动作组成。交换机不需要支持所有的组类型,group类型如表2所示:必选的 All执行所有动作桶。这个group通常用于组播或者广播。当该组类型为ALL的组表项含有N个动作桶时,被该组表项处理的报文会被复制成N份。每份报文都按照动作桶内的动作来处理。Indirect 执行group中定义的一个桶。这个group中只有这一个动作桶。该group用于进行更快速、有效的转发等动作(例如IP转发的下一跳)。可选的 Select选取一个动作桶来执行。交换机会根据一定的算法(如用户定义的hash算法或者简单的轮询)选择动作桶。当被选择的动作桶关联的端口是down状态或者不能使用时,交换机通常会在该group中剩下的动作桶之间再选择一个动作桶来执行,而不是丢弃报文。这样可以减少网络的中断。Fast failover执行第一个有效的动作桶。该group中每个动作桶均关联一个特定的端口或者group,并按照该group定义的顺序进行排列,且每个动作桶均可以被控制是否生效。该group会选取第一个有效的动作桶执行,如果没有有效的动作桶,报文会被丢弃。表 2 group类型1.2.3 Meter TableOpenFlow交换机通常含有一个meter表,每个meter表由许多meter表项组成。Meter表项通过meter bands来进行限速、重设DSCP值等功能来达到实现QoS的目的。Meter表项通过流表项中的指令来与不同流表项关联;一个meter表项可同时关联到多个流表项,并且对匹配这些流表项的报文的总速率进行控制。Meter表项的结构如图3:图 3 Meter TableMeter Identifier:meter表项的ID标示符,用于识别meter的32bits长的唯一整数。 Meter Bands:指定速率范围和处理报文的方式,例如丢弃或者重设DSCP值。Counters:数器用于统计被该meter表项处理过的报文数量。每个meter table可含有一个或者更多的meter bands。每个band根据其定义的报文的速率来处理相应的报文。当报文的速率低于所有meter bands规定的速率时,该报文不会被任何meter band处理。meter band的结构如图4:图 4 Meter BandsBand Type: 定义报文如何处理。这里的band类型均为可选,可使用丢弃(Drop),即报文高于该rate设置的速率会被丢弃;以及重新标记DSCP(DSCP remark)。Rate:meter用于选择meter band的最低速率,即报文速率高于该速率并最接近该速率,该band将被应用。 Counters:统计该meter band处理过的报文数量。 Type Specific arguments:某些band含有的特定参数。 2 OpenFlow报文的处理2.1 OpenFlow管道OpenFlow管道(OpenFlow Pipeline)即OpenFlow交换机内一组连接起来的流表以提供匹配、转发、报文修改等功能。每个OpenFlow交换机的OpenFlow管道都包含至少一个流表,每个流表包含复数的流表项。OpenFlow管道定义了每个流表项如何作用于报文。OpenFlow管道处理流程只会前进而不会返回之前的流表进行处理。若没有匹配到任何表项则为Table Miss。如下是OpenFlow管道中报文的处理流程:1. 根据流表项优先级匹配最高优先级的流表表项。 2. 执行该流表项中的指令:执行动作列表;更新动作集;更新元数据(Metadata);执行meter;前往其他流表3. 发送匹配的数据和动作集到指令中指示前往的流表,该流表的流表ID比当前处理该报文的流表ID要大,保证OpenFlow管道处理只会前进不会倒退。 4. 没有前往其他流表的指令则管道处理终止,报文按照其动作集处理。5. 最后一个流表的流表项将不含有前往其他流表的指令。 2.2 OpenFlow报文的匹配 图 5 OpenFlow报文的匹配报文在OpenFlow交换机内的匹配处理流程如图5所示。报文进入设备后,先由设备解析报文,然后从第一个流表开始匹配,按优先级高低,依次匹配该流表中的流表项,一个报文在一个流表中只会匹配上一条流表项。此处通常根据报文的类型,报文头的字段例如源MAC地址、目的MAC地址、源IP地址、目的IP地址等,大部分匹配项还支持掩码进行更加灵活的匹配;也可以通过报文的入端口,或元数据信息来进行报文的匹配,一个流表项中可以同时存在多个匹配项。一个报文需要同时匹配上流表项中的所有匹配项,才能匹配上该流表项。报文匹配按照现有的报文字段进行,比如前一个流表通过apply actions改变了该报文某个字段,则下一个表项按修改后的字段进行匹配。如果匹配表项成功,则按照指令集里的动作更新动作集,或更新报文/匹配集字段,或更新元数据,同时更新计数器。并且根据指令是否包含继续前往下一个流表,不包含则执行动作集,包含继续前往下一个流表的指令则前往下一个流表继续匹配。下一个流表的ID只需要比当前流表ID大即可。当报文没有匹配流表中的所有流表项时,此时会被称作为Table Miss。若存在无匹配流表项(Table Miss),则按照此表项执行指令,该指令通常为丢弃报文,将报文转交给其他流表或者将报文发送到Controller进行处理。无该表项则流表默认会丢弃报文。OpenFlow Specification 1.3.2支持的匹配字段如表3:匹配项支持掩码前置条件备注IN_PORT否无报文的入端口,可以是交换机的普通端口或逻辑端口IN_PHY_PORT否IN_PORT报文的物理入端口METADATA是无流表的元数据,用于不同流表间传递信息ETH_DST是无以太网目的MAC地址ETH_SRC是无以太网源MAC地址ETH_TYPE否无以太网类型VLAN_VID是无802.1Q中定义的VLAN IDVLAN_PCP否VLAN_VID不为空802.1Q中定义的VLAN优先级IP_DSCP否ETH_TYPE=0x0800 ETH_TYPE=0x86ddDiff Serv Code PointIP_ECN否ETH_TYPE=0x0800 ETH_TYPE=0x86ddIP头中的ECN字段IP_PROTO否ETH_TYPE=0x0800 ETH_TYPE=0x86ddIPv4及IPv6的协议号IPV4_SRC是ETH_TYPE=0x0800IPv4源IP地址IPV4_DST是ETH_TYPE=0x0800IPv4目的IP地址TCP_SRC否IP_PROTO=6TCP源端口TCP_DST否IP_PROTO=6TCP目的端口UDP_SRC否IP_PROTO=17 UDP源端口UDP_DST否IP_PROTO=17UDP目的端口SCTP_SRC否IP_PROTO=132SCTP源端口SCTP_DST否IP_PROTO=132SCTP目的端口ICMPV4_TYPE否IP_PROTO=1ICMP类型ICMPV4_CODE否IP_PROTO=1ICMP codeARP_OP否ETH_TYPE=0x0806ARP opcodeARP_SPA是ETH_TYPE=0x0806ARP报文中的IPv4源地址ARP_TPA是ETH_TYPE=0x0806ARP报文中的IPv4目标地址ARP_SHA是ETH_TYPE=0x0806ARP报文中的以太网源MAC地址ARP_THA是ETH_TYPE=0x0806ARP报文中的以太网目标MAC地址IPV6_SRC是ETH_TYPE=0x86ddIPv6源IP地址IPV6_DST是ETH_TYPE=0x86ddIPv6目的IP地址IPV6_FLABEL是ETH_TYPE=0x86ddIPv6流标签ICMPV6_TYPE否IP_PROTO=58ICMPv6类型ICMPV6_CODE否IP_PROTO=58ICMPv6 codeIPV6_ND_TARGET否ICMPV6 TYPE=135ICMPV6 TYPE=136IPv6邻居发现报文中的目标地址IPV6_ND_SLL否ICMPV6 TYPE=135IPv6邻居发现报文中的源链路层地址IPV6_ND_TLL否ICMPV6 TYPE=136IPv6邻居发现报文中的目标链路层地址MPLS_LABEL否ETH TYPE=0x8847 ETH TYPE=0x8848首个MPLS头中的标签MPLS_TC否ETH TYPE=0x8847 ETH TYPE=0x8848首个MPLS头中的TCMPLS_BOS否ETH TYPE=0x8847 ETH TYPE=0x8848首个MPLS头中的BoSPBB_ISID是ETH TYPE=0x88e7首个PBB服务实例标签中的I-SIDTUNNEL_ID是无逻辑口分配的metadataIPV6_EXTHDR是ETH TYPE=0x86ddIPv6扩展头的虚拟字段表 3 匹配域2.3 Table Miss每一个流表都需要支持一个匹配流表失败的表项来处理匹配失败的报文。Table Miss表项会定义如何处理匹配失败的报文。比如送到Controller处理、丢弃报文或直接送往下一个流表。Table Miss表项通过匹配域(Match Field)和优先级来判断,Table Miss表项的匹配域可以匹配所有的报文并且Table-miss的表项优先级为0。Table Miss表项如同流表中的其他表项一样,在一开始OpenFlow交换机中不存在该表项,需要由Controller添加,并且可以移除,Table Miss表项也可以存在老化时间。如果由Table Miss表项决定报文发送到Controller端口,封装这个报文的packet-in消息中的packet-in原因会被定义为Table Miss。如果Table Miss表项不存在,无法匹配所有流表表项的报文会被默认丢弃。该默认行为可以通过更改OpenFlow交换机设置进行变更。2.4 Instructions当报文匹配流表项时,每个流表项包含的指令集就会执行。这些指令会影响到报文、动作集以及管道流程。交换机不需要支持所有的指令类型,并且Controller可以查询OpenFlow交换机所支持的指令类型。具体的指令类型参见表4:必选的 Write-Actions 合并指定动作到动作集,如果该动作在动作集内已经存在,则覆盖该动作。 Goto-Table 指示处理管道中的下个表,该表的ID必须大于当前表的ID(即满足管道处理不能回退的规定),最后一个流表的流表项不能包含该指令。可选的 Meter 指示报文到指定的meter表项,Meter表项设置meter bands来进行限速,重设DSCP值等功能来达到实现QoS的目的。Apply-Actions 不改变动作集,立即执行apply-actions指令中动作表的动作。动作集中动作执行顺序会按照动作表执行。Clear-Actions 立即清空动作集。 Write-Metadata 写入元数据,元数据通常用于在同一个交换机的流表中传递信息。可用于流表项匹配报文。表 4 指令类型每个流表项中每种类型的指令只能有一个且每个流表表项的动作集中每种动作类型最多只能有一个。指令的执行的优先顺序为Meter Apply-Actions - Clear Actions - Write-Actions - Write-Metadata - Goto-Table2.5 Action Set进入OpenFlow管道处理流程的每个报文都绑定着一个动作集,这个动作集在一开始为空,并且可以在各个流表中传递。在OpenFlow管理处理流程中各个流表的流表表项可以使用Write-Actions向动作集里添加动作,或者使用Clear-Actions清空该动作集。当流表项指令集中不含有Goto-Table指令时,匹配该流表项的报文所绑定的动作集会立即执行。Apply actions指令不影响动作集的状态。OpenFlow交换机只需要支持“Required” Action,即必须要支持的动作。Controller可以向OpenFlow交换机查询其支持的动作类型如表6所示:必选的OutputOutput动作转发报文到特定的OpenFlow端口,比如物理端口、逻辑端口以及OpenFlow保留端口。Drop 并没有直接的动作来代表Drop,当动作集中不含有Output指令时,报文会被丢弃。通常来说空指令集、空动作集或者执行清空动作集后,报文会被丢弃。Group 将报文转交给指定的Group处理,该动作的确切含义由Group的类型定义。 可选的Set-QueueSet-Queue动作为报文指定队列ID。当报文被转发到特定端口时,队列ID通常被用于基本QoS。Push-TagPop-Tag Push-Tag和Pop-Tag动作适用于VLAN头、MPLS头、PBB头(802.1AH)。Set-FieldSet-Field动作可以识别报文字段的类型,并且可以修改该字段的值。Set-Field 动作通常只适用于最外层的字段(比如当内外层均有VLAN taqg时,该动作只修改最外层的VLAN Tag)。对于同一个报文字段,动作集中只能存在一个Set-field动作,但是不同字段的Set-field动作可以共存。Change-TTLChange-TTL动作可以改变报文中IPv4的TTL、IPv6的Hop Limit或者MPLS的TTL。同样,Change-TTL也只适用于最外层的字段。该动作可以设置TTL(TTL必须已经存在),减少TTL,将TTL的值从最外层字段上拷贝到次外层字段。表 5 动作类型动作集的执行顺序并不按照动作集中的动作添加的先后顺序,而是按照固定的先后顺序依次执行:copy TTL inwards - pop - push-MPLS - push-PBB - Push-VLAN - copy TTL outwards - decrement TTL - set-field - qos (set queue)- group - output 当动作集中,output动作和group动作存在时,group会先执行同时output动作会被忽略。如果动作集中既没有output动作也没有group动作,那么匹配的报文会被丢弃。2.6 Action ListAction List存在于指令apply-actions和packet-out报文中。不同于Action Set,Action List中的动作是按照列表中动作的顺序依次执行的,且动作列表中同类型的动作可以包含多个,且这些动作的影响效果是可以叠加的。当流表项指令中存在apply-actions时,apply-actions所指示的action list不会等到OpenFlow管道结束再执行,而是立即执行,并且被apply-actions修改后的报文会继续被OpenFlow管道处理。Action List里如果存在output或group动作,那么执行到这些动作时,会将此时的报文复制一份或多份转发出去。3 OpenFlow信道OpenFlow信道是连接Controller和每一个OpenFlow交换机的接口。Controller通过该信道设置、管理交换机。 通过OpenFlow信道的报文都是根据OpenFlow协议定义的。通常采用TLS加密来保证传输安全,但也支持简单的TCP直接传输。 3.1 OpenFlow信道的连接图 6 OpenFlow信道的连接上图为Controller和OpenFlow交换机之间建立信道连接的基本过程:首先Controller和交换机之间的连接建立,双方互相发送hello报文协商OpenFlow协议版本。如果协商失败则连接终止,协商成功则OpenFlow信道连接开始正常运行。在正常运行的过程中,Controller和OpenFlow交换机会定时互相发送Echo request消息,响应后回复Echo reply消息。如果发送Echo request后,一段时间内没有收到Echo reply消息,即echo超时。那么根据OpenFlow交换机的设置,OpenFlow交换机会变为fail secure mode交换机或者fail standalone mode交换机。Fail secure mode交换机:在该模式下的OpenFlow交换机,目的地为Controller的报文和消息都会被丢弃。OpenFlow交换机内的流表表项会正常老化。Fail standalone mode交换机:在该模式下的OpenFlow交换机,所有报文都通过保留端口Normal处理。即此时的OpenFlow交换机变成传统的以太网交换机。Fail standalone mode只适用于OpenFlow-Hybrid交换机。3.2 OpenFlow协议报文的处理OpenFlow规定使用可靠的消息传输和处理。但OpenFlow本身并不提供确认消息来保证消息传输。交换机必须完全处理每个从Controller收到的消息并尽可能响应,不能正确处理则返回error。Controller可以忽略其收到的消息,但必须响应echo消息。OpenFlow协议通过barrier消息为消息处理排序,来避免处理顺序错误导致操作失败(高优先级消息依然被先处理,比如流表项的建立)。当OpenFlow交换机接收到一个barrier request报文时,在这之前收到的OpenFlow协议报文必须全部处理完毕,包含回应报文或者error消息。此时OpenFlow交换机可以回应barrier reply消息,然后再处理在barrier request消息之后收到的OpenFlow协议报文。例如controlller试图添加一个group表项,并再添加一个流表项关联到该group时,报文发送顺序应该为group mod报文-barrier request报文-flow mod报文。这样能保证当OpenFlow交换机处理flow mod报文时,其关联的group在交换机上已经添加完毕。3.3 Multiple Controllers一个OpenFlow交换机可以连接多个Controller来提高稳定性,当一个或者多个Controller失效或者连接断开时,仍然能保证OpenFlow交换机在正常模式工作。该情况下Controller分三种角色: l Equal:默认角色,所有Controller都对该交换机拥有完全控制权限。 l Master:除了处在equal角色的Controller,只有该Controller拥有对交换机的完全控制权限。 一个交换机最多只能连接一个角色为Master的Controller。当一个Controller申请成为master且成功时,会将该另外一个原本处在master角色的Controller转换为slave角色。l Slave:对该交换机只有读取权限。默认情况下,除port status消息外,该模式的Controller不会接收其他的asynchronous消息,同时交换机会拒绝处于slave状态的Controller发送的任何具有执行或者修改功能的消息,并返回error信息。Controller可以通过使用Set Asynchronous Configuration Message来设置自己期望收到的Asynchronous报文。当交换机同时收到Controller改变为Master或者Slave的消息要求时,通过比较报文中的generation_id和交换机中的generation_id,报文中的generation_id低则请求将被丢弃并返回错误信息,等于或大于交换机中保存的generation_id则Controller角色改变成功,并更新交换机的generation_id为该报文的generation_id。3.4 Auxiliary ConnectionsOpenFlow 通过使用辅助连接来提升性能。交换机通过交换机的Datapath ID和连接的Auxiliary ID判断连接。主连接的Auxiliary ID为0,不同辅助连接拥有不同的非0 Auxiliary ID以及相同的 Datapath ID,辅助连接只能在主连接成功建立后建立。 如果主连接中断,辅助连接会全部被关闭以解决Datapath ID冲突问题。辅助连接必须使用相同的IP地址作为主连接但是可以使用不同的传输协议,例如TLS/TCP等等。同时辅助连接还需要用相同的目的IP。为了避免不同传输协议的冲突,OpenFlow交换机或者Controller只会在收到消息的连接上响应该消息。同时,如果一系列消息需要按顺序进行处理,那么这些消息只能通过同一个连接进行传输。Controller可以自用的使用各个连接来传输报文,但是为了提高性能,OpenFlow协议中提供了以下建议:对于Controller来说:l 所有非Packet-Out的Controller消息使用主连接进行传输。l 所有包含从Packet-In消息中获取的报文的Packet-Out消息,应该在收到该Packet-In消息的连接上进行传输。l 所有其余的Packet-Out消息在保证同一流使用同一连接的前提下,尽可能的使用所有可用连接。l 如果指定的辅助连接不可用,那么Controller应该使用主连接来发送这些消息。对于OpenFlow交换机来说:l 所有非Packet-Out的发往的Controller消息使用主连接进行传输。l 所有其余的Packet-In消息在保证同一流使用同一连接的前提下,尽可能的使用所有可用连接。4 OpenFlow协议报文 OpenFlow协议目前提供共计30种报文来实现Controller和OpenFlow交换机之间的交互,OpenFlow协议目前支持三种报文类型:Controller-to-switch、asynchronous、symmetric。 每种报文类型都有很多子类型。OpenFlow协议报文的通用报文头如表6:字段名称长度备注Version8 bitsOpenFlow协议版本号 1.3.2为0x04Type16 bitsOpenFlow协议目前共用30种类型的报文,取值范围从0x00到0x1DLength32 bits整个OpenFlow协议报文的长度Xid64 bits分配给该报文的处理ID,请求报文以及相应的应答报文的Xid是一致的表 6 OpenFlow报文通用报文头4.1 Symmetric消息同步消息是Controller和OpenFlow交换机都会在无请求情况下发送的消息。Symmetric消息包含以下三种类型:4.1.1 Hello 当连接启动时交换机和Controller会发送Hello交互,Hello报文的Type字段为0x00,并在OpenFlow普通报文头后面添加elements字段,现协议版本中该字段包含有设备支持的OpenFlow版本。4.1.2 Echo Request/Reply用于验证Controller与交换机之间连接的存活,Controller和OpenFlow交换机都会发送echo request/reply消息,而且对于接受到的echo request消息必须能返回echo replay消息。echo request报文的Type字段为0x02,echo reply报文的Type字段为0x03。该报文也可用于测量Controller与交换机之间链路的延迟和带宽。4.1.3 Experimenter为将来新加入的特性预留的消息。4.2 Asynchronous消息异步消息是OpenFlow交换机在Controller没有请求的情况下,可以主动发送到Controller的消息。Asynchronous消息包含以下几种类型:4.2.1 Packet-In Message转移报文的控制权到Controller。对于所有通过匹配流表项或者Table Miss后转发到保留端口Controller端口的报文均要通过Packet-in消息送到Controller。也有部分其他流程,如TTL检查等,也需要通过该消息和Controller交互。Packet-In即可以携带整个需要转移控制权的报文,也可以通过在交换机内部设置报文的Buffer来仅携带报文头以及其Buffer ID传输给Controller。Controller在接收到Packet-In消息后会对其接收到的报文或者报文头和Buffer ID进行处理,并发回Packet-out消息通知OpenFlow交换机如何处理该报文。Packet-in报文的结构如表7:字段长度备注OpenFlow header8 bytesOpenFlow的通用报文头,Type为0x0ABuffer_id32 bits分配给缓存在交换机中的报文的IDTotal_len16 bits整个packet-in报文的长度Reason8 bits上送Packet-in报文的原因:分为no match/action/invalid TTLTable_id 8 bits流表的IDCookie 64 bits流表中流表项的CookieOfp_match可变导致该报文上送的流表项的匹配项Pad16 bit补齐字段使报文长度为8字节的整数倍Data可变携带的报文数据表 7 Packet-In Message4.2.2 Flow-Removed Messeage通知Controller将某个流表项从流表中移除。只有当流表项中的Flag字段的flow-removed比特位置位时,该流表项删除后交换机会发送该报文到Controller。造成流表项被删除的原因有4种:流表项未匹配任务报文的时间达到设置的闲置超时时间(Idle_timeout);流表项存在的时间达到设置的老化时间(Hard_timeout);流表项被flow modify报文删除(Delete);流表项关联的Group被删除(Group delete)。Flow-Removed报文的结构如表8:字段长度备注OpenFlow header8 bytesOpenFlow的通用报文头,Type为0x0BCookie64 bits流表中流表项的CookiePriority16 bits被删除的流表项的优先级Reason8 bits流表项被删除的原因:分为Idle_timeout/Hard_timeout/Delete/Group deleteTable_id8 bits被删除的流表项所在的流表IDDuration_sec32 bits流表项存在的时间,单位是秒Duration_nsec32 bits流表项存在的时间,单位是纳秒Idle_timeout16 bits原流表项设置的闲置超时时间Hard_timeout16 bits原流表项设置的老化超时时间Packet_count64 bits该流表项匹配过的报文数量Byte_count64 bits该流表项匹配过的报文的字节数Ofp_match可变该流表项的匹配域表 8 Flow-Removed Message4.2.3 Port-Status Message当OpenFlow交换机上的端口添加、删除或者状态改变时,OpenFlow交换机必须通过Port-status报文通知Controller端口状态或设置的改变。 Ports-Status报文结构如表9:字段长度备注OpenFlow header8 bytesOpenFlow的通用报文头,Type为0x0CReason8 bits流表中流表项的CookiePad56 bits补齐字段使报文长度为8字节的整数倍Ofp_port desc64 bytesOpenFlow的端口描述结构,主要包含端口索引、硬件地址、状态、速率、支持的属性、端口的设置等表 9 Port-Status Message4.2.4 Error Message通知Controller交换机出现的问题或错误。OpenFlow协议提供了丰富的错误报文类型和错误码让交换机能正确的反馈错误信息给Controller。字段长度备注OpenFlow header8 bytesOpenFlow的通用报文头,Type为0x01Type16 bits错误类型,共计14大类Code16 bits错误码Data可变触发该error的报文的数据表 10 Error Message4.3 Con
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年计算机程序员招聘面试题库及参考答案
- 甘南特岗教师备考题库及答案
- 2025年高中老师招聘面试题库及参考答案
- 2025年技术支持代表招聘面试题库及参考答案
- 2025年制图员招聘面试题库及参考答案
- 2025年国际关系专家招聘面试题库及参考答案
- 2025年风险投资专员招聘面试题库及参考答案
- 2025年计算机视觉工程师招聘面试参考题库及答案
- 2025年出版策划招聘面试参考题库及答案
- 2025年客户支持经理招聘面试参考题库及答案
- 高教社2023马工程国际私法学教学课件u15
- 退费账户确认书
- 基于聚类的图像分割算法研究
- 教练式辅导-GROW模型介绍
- 河南粮投油脂有限公司油脂产业园项目环评报告
- 日中星鸟以殷仲春夏商周三代的星象与神学价值
- 原发免疫性血小板减少症教学查房
- 丈夫出轨净身出户协议书
- 矿泉水行业深度解析
- 部编版语文1至6年级下册教学总结
- 公路工程交工自评报告
评论
0/150
提交评论