LogoAddYourCompanySloganOpenFlow技术1.传统的控制层面从转发设备中剥离出来,所有转发行为的决策从交换机自身“迁移”到了某个集中控制器上,OpenFlow技术负责转发。2.OpenFlow使传统的二层和三层交换机具备了细粒度流转发能力,即传统的基于MAC的网包转发,基于IP的路由转发,被拓展到了基于多域网包包头描述的流转发。OpenFlow概况目标:简化管理网络特点:2009.12,OF1.0,基本协议,12元组、计时器、动作2011年2月,OF1.1,定义多表Pipeline,支持标签/隧2012年4月OF1.3.0,拓扑发现测试流程,测试集2013年4月OF1.3.2MPLS、multipart等微小改动2011年12月OF1.2,TLV变长表项消息,支持IPv6基本匹配2012年9月OF1.3.1,提升了版本协商能力2013年10月OF1.4.0,改善控制平面功能.2014年12月OF1.5.0OpenFlow发展历史自2009年12月发布第一个版本(v1.0)以来,已经有多个版本的OpenFlow规范(OF)被发布OpenFlow存在问题OpenFlow转发性能流表规模控制器容量安全性版本兼容可靠性1.支持OF的交换机和控制器之间新建连接速度受控制器限制。2.OF交换机上流表规模受存储和匹配速度限制。随着软件定义网络应用场景的扩展和网络技术的自身发展,OpenFlow需要支持越来越多的协议和报文处理方式;即便是针对常用标准协议,如TCP协议,OpenFlow也不能对其头部的任意域进行匹配和处理。OpenFlow交换机1.每个of交换机(switch)都有流表,进行包查找和转发。2.交换机可以通过of协议经一个安全通道连接到外部控制器对流表进行查询和管理。3.对每一个包进行查找,如果匹配则执行相关策略,否则通过安全通道将包转发到控制器,控制器来决策相关行为。OpenFlow结构流表项包括三个域:匹配域、计数器、行动。匹配域:多个匹配项,涵盖了链路层、网络层和传输层大部分标识;计数器:用于统计数据流量相关信息,可以针对交换机中的每张流表、每个数据流、每个设备端口、每个转发队列进行维护行动:表示与该流表项匹配的数据包应该执行的下一步操作.包头域计数器行动流表项结构入口端源MAC地址目的MAC地址以太网类型VLANIDVLAN优先级源IP地址目的IP地址IP协议IPTOS位TCP/UDP源端口TCP/UDP目的端口包头域结构OpenFlow1.0流表计数器针对交换机中的每张流表、每个数据流、每个设备端口、每个转发队列进行维护,用于统计数据流量的相关信息对每张流表,统计当前活动的表项数、数据包查询次数、数据包匹配次数等;对每个数据流,统计接收到的数据包数、字节数、数据流持续时间等;对每个设备端口,除统计接收到的数据包数、发送数据包数、接收字节数、发送字节数等指标之外,还可以对各种错误发生的次数进行统计;对每个队列,统计发送的数据包数和字节数,还有发送时的溢出错误次数等。OpenFlow1.0流表动作用于指示交换机在收到匹配的数据包后应该如何对其进行处理每个流表项可以对应有零至多个动作,如果没有定义转发动作,那么与流表项包头域匹配的数据包将被默认丢弃;同一流表项中的多个动作的执行可以具有不同优先级,但是在数据包的发送上并不保证其顺序;如果流表项中出现有OpenFlow交换机不支持的参数值,交换机将向控制器返回相应的出错信息;必备动作(RequiredActions)、可选动作(OptionalActions)必备动作:需要所有OpenFlow交换机默认支持可选动作:需要交换机告知控制器它所能支持的动作种类流表动作列表类型名称说明必备动作转发(Forward)交换机将数据包交给设备的物理端口以及如下的一个或多个虚拟端口:ALL:转发给所有出端口,但不包括入端口CONTROLLER:封装数据包并转发给控制器TABLE:对packet_out数据包执行流表操作LOCAL:转发给本地的网络栈;IN_PORT:从入端口发出丢弃(Drop)交换机对没有明确动作指示的流表项,将会对与其匹配的数据包默认执行丢弃操作可选动作转发(Forward)交换机可选支持将数据包转发给如下虚拟端口:NORMAL:利用交换机的传统转发机制处理数据包FLOOD:按照最小生成树从设备出端口洪泛发出排队(Enqueue)交换机将数据包转发到某个出端口对应的转发序列中,便于提供QOS支持修改域(Modify-Field)交换机修改包头的具体字段包括:设置VLANID、VLAN优先级、剥离VLAN头修改源MAC地址、目的MAC地址修改源IPv4地址、目的IPv4地址、IPToS位数据包处理流程接收报文802.1STP处理(可选)包头解析实施动作通过安全通道发送到控制器匹配表0?匹配表N?是是否否每个包按照优先级依次去匹配流表中表项,匹配包的优先级最高的表项即为匹配结果。匹配成功,对应的计数器将更新;如果没能找到匹配的表项,则转发给控制器。包头解析匹配流程初始化包头设置VLANID及优先级设置IP源及目的地址ICMP类型和编码作为四层信息TCP/UDP源、目的端口作为第四层信息使用设置好的包头域进行查表设置IP源、目的地址及TOS位以太网类型=0x8100以太网类型=0x0806IP协议为6或17以太网类型=0x0800IP不分段IP协议=1设置输入端口,以太网源地址、目的地址及其类型,其他值置00x8100:以太网自动保护开关0x0806:AR协议0x0800:网际协议(IP)6:TCP协议17:UDP协议1:ICMP协议Of协议—消息类型Logo安全通道用来连接交换机和控制器,所有安全通道必须遵守of协议,of协议支持三种消息类型(每一类消息又有多个子消息类型):controller-to-switch:消息由控制器发起,管理或获取switch状态asynchronous(异步):消息由switch发起,用来将网络事件或交换机状态变化更新到控制器;symmetric(对称):消息可由交换机或控制器发起。controller-to-switch消息名称说明备注Features在建立传输层安全会话的时候,控制器发送feature请求消息给交换机,交换机需要应答自身支持的功能。控制器发起,对OpenFlow交换机进行状态查询和修改配置等操作;OpenFlow交换机接收并处理可能发送或不需要发送的应答消息。Configuration控制器设置或查询交换机上的配置信息,交换机仅需要应答查询消息。Modify-state控制器管理交换机流表项和端口状态等Read-state控制器向交换机请求一些诸如流、网包等统计信息。Send-packet控制器通过交换机指定端口发出网包。Barrier控制器通过barrier请求及相应报文,确认相关消息已经被满足或收到完成操作的通知。asynchronous消息列表名称说明备注Packet-in交换机收到一个网包,在流表中没有匹配项,则发送Packet-in消息给控制器。若交换机缓存足够多,网包被临时放在缓存中,部分内容(默认128字节)和在交换机缓存中的序号也一同发给控制器;如果交换机缓存不足以存储网包,则将整个网包作为消息的附带内容发给控制器。交换机主动发起,通知交换机上发生的某些异步事件,消息是单向的,不需要控制器应答;用于交换机向控制器通知收到报文、状态变化及出席错误等事件信息。Flow-removed交换机中的流表项因为超时或修改等原因被删除掉,会触发Flow-removed消息。Port-status交换机端口状态发生变化时(例如down掉),触发Port-status消息。Error交换机通过Error消息来通知控制器发生的问题symmetric消息列表名称说明备注Hello用于在OpenFlow交换机和控制器用来建立连接。不必通过请求建立,控制器和交换机都可以主动发起,并需要接受方应答消息为双向对称,主要用于建立连接、检测对方是否在线等。Echo交换机和控制器均可以向对方发出Echo消息,收者则需要回复Echoreply。该消息用来协商延迟、带宽、是否连接保持等控制器到OpenFlow交换机之间隧道的连接参数。Vendor交换机提供额外的附加信息功能。为未来版本预留。主要协议交互过程连接建立:控制器与OpenFlow交换机建立TLS隧道后,隧道中传送的都是控制协议消息,因此隧道中的所有流量转发都无需查询交换机中的流表;当OpenFlow安全隧道建立起来后,双方必须首先发送HELLO消息给对方,该消息携带本方支持的最高协议版本号,接收方将采用双方都支持的最低协议版本进行通信;一旦发现两者拥有共同支持的协议版本,则连接建立,否则发送ERROR消息,描述失败原因,并终止连接。主要协议交互过程Logo通道加密:安全通道采用TLS(TransportLayerSecurity)连接加密。当交换机启动时,尝试连接到控制器的6633TCP端口,双方通过交换证书进行认证。因此,每个交换机至少需配置两个证书,一个是用来认证控制器,一个用来向控制器发出认证。连接中断:当交换机与控制器之间的连接发生异常时,OpenFlow交换机应尝试连接备份控制器当多次尝试均失败后,OpenFlow交换机将进入紧急模式,并重置所有的TCP连接。此时所有包将匹配指定的紧急模式表项,而其它所有正常表项将被从流表中删除当交换机刚启动时,默认进入紧急模式主要协议交互过程生成树支持:交换机可以选择支持802.1D生成树协议,如果支持,所有相关包在查找流表之前应该先在本地进行传统处理。支持生成树协议的交换机在FEATURES应答消息的相应域需要设置STP位,并且需要在所有的物理端口均支持生成树协议,但无需在虚拟端口支持。生成树协议会设置端口状态,来限制发到FLOOD的网包仅被转发到生成树指定的端口。需要注意指定出口的转发或发往ALL的网包会忽略生成树指定的端口状态,按照规则设置端口转发。如果交换机不支持802.1D生成树协议,则必须允许控制器指定泛洪时的端口状态。流表项修改Logo流表项移除:定时器计时结束:每个表项均有一个idle_timeout定时器和一个hard_timeout定时器,前者计算的是没有Flow匹配发生的时间,而后者则计算的是表项在流表中的总时间。一旦到达时间期限,交换机将自动删除该表项,同时发出一个流删除的消息。控制器主动删除流表项:控制器通过下发DELETE_STRICT、DELETE等指令相关的协议消息主动删除流表项控制器下发的流表项修改指令:名称说明ADD增加一个新的流表项MODIFY修改所有匹配的流表项MODIFY-STIRCT修改严格匹配的流表项DELETE删除所有匹配流表项DELETE-STRICT删除严格匹配流表项数据包处理提供两种数据包的处理方法:•转发(Forward)•修改包头(Modifyfield)SET_VLAN_VID修改VLAN标签SET_VLAN_PCP修改VLAN优先级STRIP_VLAN弹出VLAN标签SET_DL_SRC修改源MAC地址SET_DL_DST修改目的MAC地址SET_NW_SRC修改源IP地址SET_NW_DST修改目的IP地址SET_NW_TOS修改IP服务类型字段SET_TP_SRC修改源端口号SET_TP_DST修改目的端口号以上每一种操作称为一个动作(Action),流表中的数据包处理方法是一个动作列表(ActionList),动作列表由以上各种动作组合合成。基于OpenFlow的SDN工作流程Logo控制器终端终端12345671234567终端向网络发送数据包OF交换机流表无匹配项,通过PacketIn事件将数据包上报给控制器控制器下发流表(或PacketOut)数据包转发同同同234LogoAddYourCompanySloganThankyou