开放流OpenFlow系统中的报文转发方法及装置制造方法

文档序号:8004002阅读:320来源:国知局
开放流OpenFlow系统中的报文转发方法及装置制造方法【专利摘要】本申请公开了一种开放流OpenFlow系统中的报文转发方法及装置,其中,OpenFlow系统中包括:OpenFlow控制器和OpenFlow交换机,该方法应用于OpenFlow交换机,OpenFlow交换机包括:硬件转发芯片和转发CPU,硬件转发芯片和转发CPU通过内联口相连,该方法包括:接收到OpenFlow控制器发来的流表项下发指令,其中,流表项下发指令中携带有需要下发的流表项;将需要下发的流表项添加到对应流表中,其中,对应流表在本交换机的硬件转发芯片或转发CPU中,硬件转发芯片中的流表和转发CPU中的流表串联组成多级流表;在接收到报文之后,依次按照多级流表中的每一个流表对该报文进行查表转发处理。本申请能够支持复杂的OpenFlow流表转发功能。【专利说明】开放流OpenFIow系统中的报文转发方法及装置【
技术领域
】[0001]本申请涉及虚拟化【
技术领域
】,特别涉及一种开放流OpenFlow系统中的报文转发方法及装置。【
背景技术
】[0002]OpenFlow(开放流)是GENI(全球网络创新环境)的一个研究主题,目的是让科研人员能在现有的商用网络上进行新的网络协议的实验,从而科研机构可以省去搭建实验网络的费用,并且实验数据来自更接近真实网络的环境。随着OpenFlow技术的完善,OpenFlow的应用目标已扩展到了广域网和数据中心领域。[0003]OpenFlow技术的思想包括:分离控制平面和数据平面,二者之间使用标准的协议通信;数据平面采用基于流的方式进行转发,非常灵活和通用;层次化的集中控制平面,提供开放的API接口供第三方开发;数据平面和控制平面支持虚拟化。[0004]如图1所不,OpenFlow网络(或系统)由OpenFlow交换机(OpenFlowSwitch)、OpenFlow控制器(OpenFlowController)、以及安全通道(SecureChannel)组成。下面对相关概念分别进行介绍。[0005]UOpenFlow交换机:接收OpenFlow控制器设置的流表(FlowTable),并根据流表进行报文转发和处理;另一方面,也会主动向OpenFlow控制器上报本设备的状态和事件,如接口UP(可用)/DOWN(可不用)。[0006]2、0penFlow控制器:是OpenFlow网络的控制中心,根据用户的静态配置或者动态运行的协议生成流表并发送到OpenFlow交换机。OpenFlow控制器一般是运行实验程序的PC(个人电脑)或者服务器,比较简单的OpenFlow控制器可能只包含配置界面,用于静态地配置OpenFlow网络及连通性,就像配置静态VLAN(VirtualLocalAreaNetwork,虚拟局域网)一样;复杂一点的OpenFlow控制器可能运行多个算法程序,动态地计算OpenFlow网络中各个OpenFlow交换机需要添加或者删除的流表项。[0007]3、安全通道:0penFlow控制器与OpenFlow交换机之间通过预先配置的安全通道连接,安全通道可以基于SSL(SecureSocketsLayer安全套接层。[0008]4、流表:由匹配规则(Rule)、动作(Action)和统计(Statistics)三部分组成。流表中包含有多个流表项,每个流表项关联一个优先级。[0009](I)匹配规则[0010]由OpenFlow协议定义,支持丰富的报文匹配域,且支持IP(InternetProtocol,因特网协议)地址掩码,包括子网掩码或者任意掩码。每一个匹配规则具有一个优先级,报文匹配时需要根据各个匹配规则的优先级顺序进行。匹配规则包括:交换机端口(switchport),VLANID(标识)、源MAC地址、目的MAC地址、以太网类型、源IP地址、目的IP地址、IP协议、TCPP(TransmissionControlProtocol,传输控制协议)源端口、TCP目标端口。[0011](2)动作[0012]每一个流表项关联一个如何处理匹配该流表项的报文的动作序列,该动作序列可以由O个或多个执行动作组成,在对报文进行转发处理时必须按照各个执行动作的顺序来处理。如果流表项没有关联任何执行动作,则丢弃匹配该流表项的报文。OpenFlow交换机不需要支持所有的动作类型,但如果OpenFlow交换机不支持某个动作,则必须向OpenFlow控制器返回错误。OpenFlow交换机与OpenFlow控制器建立连接之后,要协商双方支持的动作类型。动作具体可以是:转发报文到一个或多个端口,封装报文并转发给OpenFlow控制器,丢弃报文,发送到正常的转发流程,修改报文内容。[0013](3)统计[0014]支持四种统计计数器,分别是针对per-table(每张表)、per-flow(每个流)、per-port(每个端口)和per-queue(每个队列)的计数器。计数器用来统计流量的一些信息,例如活动表项、查找次数、发送包数等。[0015]OpenFlow交换机在接收到一个报文之后,根据该报文的包头中的多个域的值,在流表中查找匹配表项,如果查找到了匹配表项,则进行计数统计并按照匹配表项中的动作对该报文进行转发处理,例如:转发到多个端口,或者丢弃;如果没有查找到匹配表项,则通过安全通道将该报文转发到OpenFlow控制器,交由OpenFlow控制器处理。其中,在查找匹配表项时,按照各个流表项的优先级顺序进行,优先级相同时匹配顺序不限。上述过程可以称为对报文进行查表转发处理的过程。[0016]例如,OpenFlow控制器通过OpenFlow协议(简称OFP)在OpenFlow交换机上创建的一个流表项的内容如下:[0017]匹配规则是:目的ΙΡ=5.6.7.8,动作是:转发至接口portl[0018]则,该OpenFlow交换机在接收到目的IP地址为5.6.7.8的数据流之后,会在流表中匹配到该流表项,然后,按照该流表项中的动作将该报文转发至portl。[0019]OpenFlow交换机支持多级流表,多级流表串联执行,即,依次按照多级流表,对报文进行查表转发处理。在现有实现中,OpenFlow交换机使用的硬件转发芯片的逻辑已经确定,各级流表只能复用硬件转发芯片的已经确定逻辑的现有表项资源来实现。各级流表使用了不同的现有表项资源,例如,L2(LeVe12,二层)转发表、L3(LeVe13,三层)转发表、TCAM(TernaryContentAddressableMemory,三态内容寻址存储器),这些现有表项资源作为流表串联生效。[0020]但是,由于现有表项资源的逻辑已经确定,现有表项资源对OpenFlow功能的支持有限,例如:使用L2转发表作为流表时,匹配规则只支持VLANID和目的MAC地址,流动作只支持指定出接口;使用L3转发表作为流表时,匹配规则只支持目的IP地址,流动作只支持指定出接口、修改目的VLAN和目的MAC地址;使用TCAM作为流表时,流动作不支持修改目的IP地址和修改源IP地址等动作。[0021]由此,使用硬件转发芯片的现有表项资源来实现流表,只能支持一些比较简单的流表,流表的某些功能受限,无法实现复杂的功能。【
发明内容】[0022]本申请提供了一种OpenFlow系统中的报文转发方法及装置,以解决现有技术使用硬件转发芯片的现有表项资源来实现流表,只能支持一些比较简单的流表,流表的某些功能受限的问题。[0023]本申请的技术方案如下:[0024]一方面,提供了一种OpenFlow系统中的报文转发方法,OpenFlow系统中包括:OpenFlow控制器和OpenFlow交换机,该方法应用于OpenFlow交换机,OpenFlow交换机包括:硬件转发芯片和转发CPU,硬件转发芯片和转发CPU通过内联口相连,该方法包括:[0025]接收到OpenFlow控制器发来的流表项下发指令,其中,流表项下发指令中携带有需要下发的流表项;[0026]将需要下发的流表项添加到对应流表中,其中,对应流表在本交换机的硬件转发芯片或转发中央处理器CPU中,硬件转发芯片中的流表和转发CPU中的流表串联组成多级流表;[0027]在接收到报文之后,依次按照多级流表中的每一个流表对该报文进行查表转发处理。[0028]另一方面,还提供了一种OpenFlow系统中的报文转发装置,OpenFlow系统中包括:0penFlow控制器和OpenFlow交换机,该装置应用于OpenFlow交换机,OpenFlow交换机包括:硬件转发芯片和转发CPU,硬件转发芯片和转发CPU通过内联口相连,该装置包括:[0029]接收模块,用于接收OpenFlow控制器发来的流表项下发指令,其中,流表项下发指令中携带有需要下发的流表项;[0030]流表项下发模块,用于将接收模块接收到的流表项下发指令中的需要下发的流表项添加到对应流表中,其中,对应流表在本交换机的硬件转发芯片或转发中央处理器CPU中,硬件转发芯片中的流表和转发CPU中的流表串联组成多级流表;[0031]转发处理模块,用于在接收到报文之后,依次按照多级流表中的每一个流表对该报文进行查表转发处理。[0032]通过本申请的技术方案,OpenFlow交换机的控制平面中增加了一个转发CPU,OpenFlow交换机中的多级流表一部分使用硬件转发芯片中的现有表项资源来实现,另一部分使用该转发CPU中的软件资源来实现,这样,硬件转发芯片中的现有表项资源不能支持的功能,就可以由转发CPU中的软件资源来实现,从而能够支持复杂的OpenFlow流表转发功能。【专利附图】【附图说明】[0033]图1是OpenFlow系统的架构示意图;[0034]图2是现有技术的OpenFlow交换机及其中的多级流表的示意图;[0035]图3是本申请的实施例一的OpenFlow交换机的结构示意图;[0036]图4是本申请的实施例一的OpenFlow系统中的报文转发方法的流程图;[0037]图5是本申请的实施例一的OpenFlow交换机中的多级流表的一种示意图;[0038]图6是本申请的实施例一的OpenFlow交换机中的多级流表的另一种示意图;[0039]图7是本申请的实施例一的OpenFlow交换机中的多级流表的又一种示意图;[0040]图8是本申请的实施例一的OpenFlow交换机中的多级流表的又一种示意图;[0041]图9是本申请的实施例二的OpenFlow交换机的功能模块示意图。【具体实施方式】[0042]为了解决现有技术使用硬件转发芯片的现有表项资源来实现流表,只能支持一些比较简单的流表,流表的某些功能受限的问题,本申请的以下实施例中提供了一种OpenFlow系统中的报文转发方法,以及一种可以应用该方法的装置。[0043]OpenFlow系统中包括:0penFlow控制器和OpenFlow交换机。在现有技术中,如图2所示,OpenFlow交换机的控制平面中包括:控制CPU(CentralProcessingUnit,中央处理器),数据平面中包括:硬件转发芯片,控制CPU负责OpenFlow协议控制,包括与OpenFlow控制器交互,根据OpenFlow控制器发来的消息通知硬件转发芯片创建流表、向流表下发流表项。本申请以下实施例中,如图3所示,在OpenFlow交换机的控制平面中新增了一个转发CPU,在实际实施时,该转发CPU可以是独立的物理插卡,也可以是控制CPU中划分出的独立转发核(多核场景)或独立转发线程,也可以是板载的专用转发CPU。转发CPU通过内联口与硬件转发芯片互联。其中,内联口是设备内部的芯片间互联的端口,一个芯片可以在报文外部添加额外信息(例如下文中的标签信息)后通过内联口发送给另一个芯片。[0044]实施例一[0045]本申请的实施例一的OpenFlow系统中的报文转发方法,由OpenFlow交换机来执行。如图4所示,该方法包括以下步骤:[0046]步骤S102,接收到OpenFlow控制器发来的流表项下发指令,其中,流表项下发指令中携带有需要下发的流表项;[0047]步骤S104,将需要下发的流表项添加到对应流表中,其中,对应流表在本交换机的硬件转发芯片或转发CPU中,硬件转发芯片中的流表和转发CPU中的流表串联组成多级流表;[0048]在实际实施过程中,在步骤S102中,由控制CPU接收OpenFlow控制器发来的流表项下发指令,向硬件转发芯片或转发CPU中的流表中下发流表项。[0049]通常情况下,OpenFlow控制器与OpenFlow交换机可以预先进行协商(或约定),协商好每一个表ID所指示的流表的创建位置是硬件转发芯片还是转发CPU,以及各个表ID所指不的流表之间的串联顺序关系。本申请实施例中,对各个表ID所指的流表的创建位置不做限定,对各个表ID所指示的流表之间的串联顺序关系也不做限定。但是,为减少在步骤S106中报文在硬件转发芯片和转发CPU之间反复转发,通常倾向于把一个连续的表ID范围段内的流表创建到转发CPU中,例如,如图5所示,这样,报文只需在硬件转发芯片和转发CPU之间转发2次即可。[0050]OpenFlow交换机可以在接收到流表项下发指令之前就预先将所有的流表创建完毕,也可以在接收到流表项下发指令后才创建流表。这样,流表项下发指令中还需要携带有需要下发的流表项对应的流表的表ID。[0051]在接收到流表项下发指令之前就预先将所有的流表创建完毕的情况下,在步骤S104中,只需将接收到的流表项下发指令中的需要下发的流表项添加到表ID所指示的流表中即可。在实际实施过程中,控制CPU根据本交换机与OpenFlow控制器的协商结果,确定流表项下发指令中的表ID所指示的流表的创建位置是硬件转发芯片还是转发CPU,当确定出是硬件转发芯片时,向硬件转发芯片中该表ID所指示的流表中下发流表项,当确定出是转发CPU时,向转发CPU中该表ID所指示的流表中下发流表项。[0052]在接收到流表项下发指令后才创建流表的情况下,在步骤S104中,根据本交换机与OpenFlow控制器的协商结果,确定接收到的流表项下发指令中的表ID所指示的流表的创建位置,该创建位置是硬件转发芯片或转发CPU;在确定的创建位置中创建该表ID所指示的流表;将该接收到的流表项下发指令中的需要下发的流表项添加到该表ID所指示的流表中。[0053]步骤S106,在接收到报文之后,依次按照该多级流表中的每一个流表对该报文进行查表转发处理。[0054]本实施例中,OpenFlow交换机的控制平面中增加了一个转发CPU,OpenFlow交换机中的多级流表一部分使用硬件转发芯片中的现有表项资源来实现,另一部分使用该转发CPU中的软件资源来实现,这样,硬件转发芯片中的现有表项资源不能支持的功能,就可以由转发CPU中的软件资源来实现,从而能够支持复杂的OpenFlow流表转发功能。[0055]为了不改变硬件转发芯片的现有实现,当硬件转发芯片中的流表a(表ID为a的流表)串联的下一个流表是流表b(表ID为b的流表),且流表b位于转发CPU中时,流表a不感知转发CPU的存在,在步骤S104中,将需要下发的流表项添加到流表a中时,在需要下发的流表项中的执行动作(Action)中增加预设动作,预设动作是通过内联口转发,S卩,控制CPU在向硬件转发芯片下发流表a的流表项时,自动添加一个动作“通过内联口转发”,从而可以将报文转发到转发CPU。[0056]则,在步骤S106中,依次按照该多级流表中的每一个流表对该报文进行查表转发处理的方法包括以下步骤11-12:[0057]步骤11:硬件转发芯片按照流表a对报文进行查表转发处理,其中,在按照查表得到的匹配表项中的预设动作将报文通过内联口转发给转发CPU时,在报文中携带硬件转发信息,其中,硬件转发信息包括:报文入端口、报文处理阶段以及报文出端口,报文处理阶段是流表a;[0058]其中,查表转发处理的过程与现有技术相同,S卩,根据报文的包头中的多个域的值,在流表中查找匹配表项,如果查找到了匹配表项,则进行计数统计并按照匹配表项中的执行动作对该报文进行转发处理。[0059]其中,报文入端口即为该报文首次进入本交换机的入端口,报文处理阶段用于表示报文处理到哪个流表了,当报文处理阶段是表a时,表示报文当前按照表a进行了查表转发处理。在实际实施过程中,如果报文在按照流表a之前的流表进行查表转发处理时,已经获得了非内联口以外的正常转发出接口的话,则携带的硬件转发信息中包括报文出端口,即该正常转发出接口,否则,携带的硬件转发信息中不包括报文出端口。[0060]在实际实施过程中,硬件转发信息的携带方式,可以是在报文之外添加额外的标签信息,用于携带硬件转发信息。即,通过内联口的物理层报文同时包含原始转发报文和上述携带了硬件转发信息的标签信息。[0061]步骤12:转发CPU通过内联口接收到携带有硬件转发信息的报文之后,依次按照转发CPU中的流表b及其之后连续的各个流表中的每一个流表,对携带有硬件转发信息的报文进行查表转发处理。[0062]在步骤12中,按照转发CPU中的一个流表,对携带有硬件转发信息的报文进行查表转发处理时,按照查表得到的匹配表项中的执行动作,对携带有硬件转发信息的报文中的硬件转发信息进行修改。也就是说,在转发CPU执行OpenFlow软件查表转发时,根据转发结果可以修改报文和标签信息,其中不需要修改报文处理阶段。[0063]同样,当转发CPU中的流表c(即表ID为c的流表)串联的下一个流表是流表d(即表ID为d的流表),且流表d位于硬件转发芯片中时,流表d不感知转发CPU的存在,在步骤S104中,将需要下发的流表项添加到流表c中时,在需要下发的流表项中的执行动作中增加预设动作,也就是说,控制CPU在向转发CPU下发流表c的流表项时,自动为动作添力口“通过内联口转发”,从而可以将报文转发回硬件转发芯片。[0064]则,在步骤S106中,依次按照多级流表中的每一个流表对该报文进行查表转发处理的方法还包括步骤21-22:[0065]步骤21:转发CPU按照流表c对携带有硬件转发信息的报文进行查表转发处理,按照查表得到的匹配表项中的预设动作,将处理后的携带有硬件转发信息的报文通过内联口转发给硬件转发芯片;[0066]转发CPU在执行OpenFlow软件查表转发后,将携带有硬件转发信息的报文通过内联口回送硬件转发芯片进行后续转发,即,回送的报文携带有标签信息。[0067]步骤22:硬件转发芯片通过内联口接收到处理后的携带有硬件转发信息的报文之后,剥除该报文中的硬件转发信息,根据该硬件转发信息并按照硬件转发芯片中的流表d及其之后连续的各级流表中的每一个流表,对剥除了硬件转发信息后的报文进行查表转发处理。[0068]在步骤22中,硬件转发芯片从通过内联口接收到的携带有标签信息的报文中,恢复出硬件转发所需的信息,包括:报文入端口、报文处理阶段、报文出端口(可选),然后,完成后续转发处理。[0069]在图5所示的多级流表中,上述流表a是流表i,上述流表b是流表i+Ι,上述流表c是流表j,上述流表d是流表j+Ι。[0070]在图5中,转发CPU中的所有流表是连续的串联的,显然,在实际实施时,转发CPU中的所有流表也可以是不连续的,例如,如图6所示,这样,报文需要在硬件转发芯片和转发CPU之间转发三次以上,这种方式虽然处理效率比较低,但是可能在特殊组网场景下被用到。[0071]另外,本实施例中还考虑了一些特殊情况,当多级流表中的第一个流表位于转发CPU中时,例如,如图7所示,此时,在步骤S106中,依次按照多级流表中的每一个流表对该报文进行查表转发处理的方法还包括:硬件转发芯片在接收到来自本交换机外部的报文之后,在该报文中携带硬件转发信息,并将该携带有硬件转发信息的报文通过内联口发送给转发CPU,其中,硬件转发信息中的报文处理阶段是空。在实际实施过程中,硬件转发芯片的逻辑中需要有固定的动作,对初始入报文上送内联口。例如,在图7中,硬件转发芯片通过PortA接收到报文后,按照该固定的动作,在该报文中携带硬件转发信息并转发给转发CPU,由转发CPU进行软件查表转发处理。[0072]还有一种特殊情况是,多级流表中的最后一个流表位于转发CPU中,例如,如图8所示,此时,在步骤S106中,依次按照多级流表中的每一个流表对该报文进行查表转发处理的方法还包括:硬件转发芯片通过内联口接收到按照最后一个流表处理后的携带有硬件转发信息的报文,剥除该报文中的硬件转发信息后转发出去。即,转发CPU回送给硬件转发芯片的报文,不再被硬件转发芯片中的流表处理而直接转发出去。[0073]实施例二[0074]针对上述实施例一中的方法,本申请的实施例二中提供了一种OpenFlow系统中的报文转发装置,该装置应用于OpenFlow交换机。[0075]如图8所示,该装置中包括以下模块:接收模块10、流表项下发模块20和转发处理模块30,其中,[0076]接收模块10,用于接收OpenFlow控制器发来的流表项下发指令,其中,流表项下发指令中携带有需要下发的流表项;[0077]流表项下发模块20,用于将接收模块10接收到的流表项下发指令中的需要下发的流表项添加到对应流表中,其中,对应流表在本交换机的硬件转发芯片或转发中央处理器CPU中,硬件转发芯片中的流表和转发CPU中的流表串联组成多级流表;[0078]转发处理模块30,用于在接收到报文之后,依次按照多级流表中的每一个流表对该报文进行查表转发处理。[0079]其中,流表项下发指令中还携带有需要下发的流表项对应的流表的表ID,贝U,流表项下发模块20具体用于将需要下发的流表项添加到表ID所指示的流表中。[0080]另外,该装置中还包括:确定模块,用于根据本交换机与OpenFlow控制器的协商结果,确定表ID所指示的流表的创建位置,创建位置是硬件转发芯片或转发CPU;流表创建模块,用于在确定模块确定的创建位置中创建表ID所指示的流表。[0081]硬件转发芯片与转发CPU通过内联口连接,硬件转发芯片中的流表a串联的下一个流表是流表b,且流表b位于转发CPU中,则,流表项下发模块具体用于在将需要下发的流表项添加到流表a中时,在需要下发的流表项中的执行动作Action中增加预设动作,预设动作是通过内联口转发;转发处理模块包括:第一处理单元和第二处理单元,其中,[0082]第一处理单元,用于触发硬件转发芯片按照流表a对报文进行查表转发处理,其中,在按照查表得到的匹配表项中的预设动作将报文通过内联口转发给转发CPU时,在报文中携带硬件转发信息,其中,硬件转发信息包括:报文入端口、报文处理阶段以及报文出端口,报文处理阶段是表a;[0083]第二处理单元,用于触发转发CPU通过内联口接收到携带有硬件转发信息的报文之后,依次按照转发CPU中的流表b及其之后连续的各个流表中的每一个流表,对携带有硬件转发信息的报文进行查表转发处理。[0084]其中,按照转发CPU中的一个流表,对携带有硬件转发信息的报文进行查表转发处理时,按照查表得到的匹配表项中的执行动作,对携带有硬件转发信息的报文中的硬件转发信息进行修改。[0085]转发CPU中的流表c串联的下一个流表是流表d,且流表d位于硬件转发芯片中,则,流表项下发模块具体用于在将需要下发的流表项添加到流表c中时,在需要下发的流表项中的执行动作中增加预设动作;转发处理模块还包括:第三处理单元和第四处理单元,其中,[0086]第三处理单元,用于触发转发CPU按照流表c对携带有硬件转发信息的报文进行查表转发处理,按照查表得到的匹配表项中的预设动作,将处理后的携带有硬件转发信息的报文通过内联口转发给硬件转发芯片;[0087]第四处理单元,用于触发硬件转发芯片通过内联口接收到处理后的携带有硬件转发信息的报文之后,剥除该报文中的硬件转发信息,根据该硬件转发信息,按照硬件转发芯片中的流表d及其之后连续的各级流表中的每一个流表,对剥除了硬件转发信息后的报文进行查表转发处理。[0088]当多级流表中的第一个流表位于转发CPU中时,转发处理模块还包括:第五处理单元,用于触发硬件转发芯片在接收到来自本交换机外部的报文之后,在该报文中携带硬件转发信息,并将该携带有硬件转发信息的报文通过内联口发送给转发CPU,其中,硬件转发信息中的报文处理阶段是空。[0089]当多级流表中的最个一级流表位于转发CPU中时,转发处理模块包括:第六处理单元,用于触发硬件转发芯片通过内联口接收到按照最后一个流表处理后的携带有硬件转发信息的报文,剥除该报文中的硬件转发信息后转发出去。[0090]综上,本申请以上实施例可以达到以下技术效果:[0091]OpenFlow交换机的控制平面中增加了一个转发CPU,OpenFlow交换机中的多级流表一部分使用硬件转发芯片中的现有表项资源来实现,另一部分使用该转发CPU中的软件资源来实现,这样,硬件转发芯片中的现有表项资源不能支持的功能,就可以由转发CPU中的软件资源来实现,从而能够支持复杂的OpenFlow流表转发功能。[0092]以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。【权利要求】1.一种开放流OpenFlow系统中的报文转发方法,所述OpenFlow系统中包括:OpenFlow控制器和OpenFlow交换机,所述方法应用于所述OpenFlow交换机,其特征在于,所述OpenFlow交换机包括:硬件转发芯片和转发中央处理器CPU,所述硬件转发芯片和转发CPU通过内联口相连,所述方法包括:接收到OpenFlow控制器发来的流表项下发指令,其中,所述流表项下发指令中携带有需要下发的流表项;将所述需要下发的流表项添加到对应流表中,其中,所述对应流表在本交换机的硬件转发芯片或转发CPU中,所述硬件转发芯片中的流表和所述转发CPU中的流表串联组成多级流表;在接收到报文之后,依次按照所述多级流表中的每一个流表对该报文进行查表转发处理。2.根据权利要求1所述的方法,其特征在于,所述流表项下发指令中还携带有所述需要下发的流表项对应的流表的表ID,则,将所述需要下发的流表项添加到对应流表中的方法包括:将所述需要下发的流表项添加到所述表ID所指示的流表中;在接收到OpenFlow控制器发来的流表项下发指令之后,还包括:根据与所述OpenFlow控制器的协商结果,确定所述表ID所指示的流表的创建位置,所述创建位置是所述硬件转发芯片或所述转发CPU;在确定的创建位置中创建所述表ID所指示的流表。3.根据权利要求2所述的方法,其特征在于,所述硬件转发芯片中的流表a串联的下一个流表是流表b,且流表b位于所述转发CPU中,则,将所述需要下发的流表项添加到所述流表a中时,在所述需要下发的流表项中的执行动作Action中增加预设动作,所述预设动作是通过所述内联口转发;所述依次按照所述多级流表中的每一个流表对该报文进行查表转发处理的方法包括:所述硬件转发芯片按照所述流表a对报文进行查表转发处理,其中,在按照查表得到的匹配表项中的所述预设动作将报文通过所述内联口转发给所述转发CPU时,在报文中携带硬件转发信息,其中,所述硬件转发信息包括:报文入端口、报文处理阶段以及报文出端口,所述报文处理阶段是流表a;所述转发CPU通过所述内联口接收到携带有硬件转发信息的报文之后,依次按照所述转发CPU中的所述流表b及其之后连续的各个流表中的每一个流表,对携带有硬件转发信息的报文进行查表转发处理;其中,按照所述转发CPU中的一个流表,对携带有硬件转发信息的报文进行查表转发处理时,按照查表得到的匹配表项中的执行动作,对携带有硬件转发信息的报文中的硬件转发信息进行修改。4.根据权利要求3所述的方法,其特征在于,所述转发CPU中的流表c串联的下一个流表是流表d,且流表d位于所述硬件转发芯片中,则,将所述需要下发的流表项添加到所述流表c中时,在所述需要下发的流表项中的执行动作中增加所述预设动作;所述依次按照所述多级流表中的每一个流表对该报文进行查表转发处理的方法还包括:所述转发CPU按照所述流表c对携带有硬件转发信息的报文进行查表转发处理,按照查表得到的匹配表项中的所述预设动作,将处理后的携带有硬件转发信息的报文通过所述内联口转发给所述硬件转发芯片;所述硬件转发芯片通过所述内联口接收到所述处理后的携带有硬件转发信息的报文之后,剥除该报文中的硬件转发信息,根据该硬件转发信息并按照所述硬件转发芯片中的所述流表d及其之后连续的各级流表中的每一个流表,对剥除了硬件转发信息后的报文进行查表转发处理。5.根据权利要求3所述的方法,其特征在于,当所述多级流表中的第一个流表位于所述转发CPU中时,所述依次按照所述多级流表中的每一个流表对该报文进行查表转发处理的方法还包括:所述硬件转发芯片在接收到来自本交换机外部的报文之后,在该报文中携带硬件转发信息,并将该携带有硬件转发信息的报文通过所述内联口发送给所述转发CPU,其中,所述硬件转发信息中的报文处理阶段是空;当所述多级流表中的最后一个流表位于所述转发CPU中时,所述依次按照所述多级流表中的每一个流表对该报文进行查表转发处理的方法还包括:所述硬件转发芯片通过所述内联口接收到按照所述最后一个流表处理后的携带有硬件转发信息的报文,剥除该报文中的硬件转发信息后转发出去。6.一种开放流OpenFlow系统中的报文转发装置,所述OpenFlow系统中包括:OpenFlow控制器和OpenFlow交换机,所述装置应用于所述OpenFlow交换机,其特征在于,所述OpenFlow交换机包括:硬件转发芯片和转发中央处理器CPU,所述硬件转发芯片和转发CPU通过内联口相连,所述装置包括:接收模块,用于接收OpenFlow控制器发来的流表项下发指令,其中,所述流表项下发指令中携带有需要下发的流表项;流表项下发模块,用于将所述接收模块接收到的流表项下发指令中的需要下发的流表项添加到对应流表中,其中,所述对应流表在本交换机的硬件转发芯片或转发CPU中,所述硬件转发芯片中的流表和所述转发CPU中的流表串联组成多级流表;转发处理模块,用于在接收到报文之后,依次按照所述多级流表中的每一个流表对该报文进行查表转发处理。7.根据权利要求6所述的装置,其特征在于,所述流表项下发指令中还携带有所述需要下发的流表项对应的流表的表ID,则,所述流表项下发模块具体用于将所述需要下发的流表项添加到所述表ID所指示的流表中。8.根据权利要求7所述的装置,其特征在于,还包括:确定模块,用于根据本交换机与所述OpenFlow控制器的协商结果,确定所述表ID所指示的流表的创建位置,所述创建位置是所述硬件转发芯片或所述转发CPU;流表创建模块,用于在所述确定模块确定的创建位置中创建所述表ID所指示的流表。9.根据权利要求7所述的装置,其特征在于,所述硬件转发芯片中的流表a串联的下一个流表是流表b,且流表b位于所述转发CPU中,则,所述流表项下发模块具体用于在将所述需要下发的流表项添加到所述流表a中时,在所述需要下发的流表项中的执行动作Action中增加预设动作,所述预设动作是通过所述内联口转发;所述转发处理模块包括:第一处理单元,用于触发所述硬件转发芯片按照所述流表a对报文进行查表转发处理,其中,在按照查表得到的匹配表项中的所述预设动作将报文通过所述内联口转发给所述转发CPU时,在报文中携带硬件转发信息,其中,所述硬件转发信息包括:报文入端口、报文处理阶段以及报文出端口,所述报文处理阶段是流表a;第二处理单元,用于触发所述转发CPU通过所述内联口接收到携带有硬件转发信息的报文之后,依次按照所述转发CPU中的所述流表b及其之后连续的各个流表中的每一个流表,对携带有硬件转发信息的报文进行查表转发处理;其中,按照所述转发CPU中的一个流表,对携带有硬件转发信息的报文进行查表转发处理时,按照查表得到的匹配表项中的执行动作,对携带有硬件转发信息的报文中的硬件转发信息进行修改。10.根据权利要求9所述的装置,其特征在于,所述转发CPU中的流表C串联的下一个流表是流表d,且流表d位于所述硬件转发芯片中,则,所述流表项下发模块具体用于在将所述需要下发的流表项添加到所述流表c中时,在所述需要下发的流表项中的执行动作中增加所述预设动作;所述转发处理模块还包括:第三处理单元,用于触发所述转发CPU按照所述流表c对携带有硬件转发信息的报文进行查表转发处理,按照查表得到的匹配表项中的所述预设动作,将处理后的携带有硬件转发信息的报文通过所述内联口转发给所述硬件转发芯片;第四处理单元,用于触发所述硬件转发芯片通过所述内联口接收到所述处理后的携带有硬件转发信息的报文之后,剥除该报文中的硬件转发信息,根据该硬件转发信息,按照所述硬件转发芯片中的所述流表d及其之后连续的各级流表中的每一个流表,对剥除了硬件转发信息后的报文进行查表转发处理。11.根据权利要求9所述的装置,其特征在于,所述转发处理模块还包括:第五处理单元,用于当所述多级流表中的第一个流表位于所述转发CPU中时,触发所述硬件转发芯片在接收到来自本交换机外部的报文之后,在该报文中携带硬件转发信息,并将该携带有硬件转发信息的报文通过所述内联口发送给所述转发CPU,其中,所述硬件转发信息中的报文处理阶段是空;第六处理单元,用于当所述多级流表中的最个一级流表位于所述转发CPU中时,触发所述硬件转发芯片通过所述内联口接收到按照所述最后一个流表处理后的携带有硬件转发信息的报文,剥除该报文中的硬件转发信息后转发出去。12.根据权利要求6所述的装置,其特征在于,所述转发CPU为以下之一:独立的物理插卡、OpenFlow交换机的控制CPU中划分出的独立转发核、所述控制CPU中划分出的独立转发线程、板载的专用转发CPU。【文档编号】H04L12/741GK103428094SQ201310347955【公开日】2013年12月4日申请日期:2013年8月12日优先权日:2013年8月12日【发明者】常慧锋申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1