一种处理报文的方法和转发器与流程

文档序号:16630084发布日期:2019-01-16 06:29阅读:131来源:国知局
本发明实施例涉及通信
技术领域
:,并且更具体地,涉及一种处理报文的方法和转发器。
背景技术
::软件定义网络(英文全称:softwaredefinednetwork,英文简称:sdn)是想把传统封闭的网络转变成一个开放式的环境,就像电脑一样也可以实现编程。openflow技术是实现sdn的一种方式。openflow技术最早由斯坦福大学提出,旨在基于现有传输控制协议(英文全称:transmissioncontrolprotocol,英文简称:tcp)/网际协议(英文全称:internetprotocol,英文简称:ip)技术条件,以创新的网络互联理念解决当前网络面对新业务产生的种种瓶颈。openflow将原来完全由单一网元实现的报文转发处理过程转化为由openflow转发器和控制器来共同完成,从而实现了数据转发和业务控制的分离。控制器通过openflow协议这个标准接口对openflow转发器中的流表进行控制,从而实现对整个网络进行集中控制。openflow转发器中最重要的组成部分之一就是流表,流表由很多个流表项组成,每个流表项就是一个报文处理规则。转发器收到一个报文后可以通过查询流表项来获得需执行的动作。转发器可以包括多个流表,控制器为转发器的一个或多个流表下发针对某业务流的流表项。每个openflow流表项由流的信息(如,流匹配域(flowmatchfield))、计数器和动作(action)组成,具体参见如下表1所示:表1流匹配域计数器动作其中,表1中流匹配域是由多个域组成的匹配信息,是流表项的标识,可以用来定义流。表2所示的为流匹配域的一个例子,该流匹配域由十个域组成。表2表1中的计数器是用来对流量相关的数据进行计数的,计数器可以根据每张流表、每个流或每个端口等进行单独设置。表1中的动作标明了对与该流表项相匹配的报文应该执行的动作类型,例如转发、丢弃等动作类型。目前openflow协议中定义的动作类型包括:output:从特定端口转发报文;set-queue:通过特定转发队列转发报文;drop:丢弃报文;group:将多个流汇聚到一个动作处理;push-tag/pop-tag:封装、解封装;set-field:修改报文头;change-ttl:修改ttl域。目前流表的动作模式有两种:主动模式和被动模式。主动模式下,控制器将自己收集的流表信息主动下发给转发器,随后转发器可以直接根据流表进行转发;被动模式是指转发器收到一个报文后没有找到匹配的流表项记录时,将该报文转发给控制器,由控制器决策该如何处理,并下发相应的流表项给转发器。由于现有技术的流表中,流与动作是直接关联的,当某些流对应的动作是相同时,针对每个流都需要在流表项中保存相应的动作,由此导致转发器中存储的信息出现大量的冗余,并且维护起来也非常困难。例如,当对某一个动作进行修改时,则需要对相关的流表项都进行修改。技术实现要素:本发明实施例提供了一种在sdn中处理报文的方法和转发器,用以减少转发器中存储的冗余信息,提高转发器对报文的处理能力。第一方面,提供了一种在sdn中处理报文的方法,该方法由转发器执行,具体包括:接收输入报文;根据所述输入报文确定所述输入报文所属的流;根据流与上下文标识集合之间的第一对应关系确定所述输入报文所属的流对应的上下文标识集合;所述第一对应关系中每个流对应的上下文标识集合包括至少一个上下文标识;根据上下文标识与上下文之间的第二对应关系确定与所述上下文标识集合相对应的上下文;根据所述上下文标识集合对应的上下文对所述输入报文进行处理。结合第一方面,在第一方面的第一种可能的实现方式中,所述方法还包括:根据所述第一对应关系确定所述输入报文所属的流对应的上下文标识集合之前,判断所述第一对应关系中有没有与所述输入报文所属的流相对应的上下文标识集合;如果有,则执行所述根据所述第一对应关系确定所述输入报文所属的流对应的上下文标识集合的步骤;如果没有,则执行如下步骤:发送流规则请求消息给控制器,所述流规则请求消息中包括所述输入报文的报文头或内容;接收所述控制器发送的流规则安装消息,所述流规则安装消息中包括所述输入报文的流对应的上下文标识集合;在所述第一对应关系中添加所述输入报文的所属的流的信息,以及与所述输入报文的流相对应的上下文标识集合。结合第一方面或第一方面第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述方法还包括:根据上下文标识与上下文之间的第二对应关系确定与所述上下文标识集合相对应的上下文之前,判断所述第二对应关系中有没有与所述上下文标识集合相对应的上下文;如果有,则执行所述根据所述第二对应关系确定所述上下文标识集合对应的上下文的步骤;如果所述上下文集合中的部分或全部上下文标识没有对应的上下文,则执行如下步骤:发送上下文请求消息给所述控制器,所述上下文请求消息中包括所述上下文标识集合中的所述部分或全部上下文标识;接收所述控制器发送的上下文安装消息,所述上下文安装消息中包括所述上下文标识集合中的部分或全部上下文标识、以及与所述上下文标识集合中的部分或全部上下文标识相对应的上下文;在所述第二对应关系中,添加所述上下文标识集合中的部分或全部上下文标识、以及与所述上下文标识集合中的部分或全部上下文标识相对应的上下文。第二方面,提供了一种在sdn中使用的转发器,包括一个接收器,一个处理器和一个存储器:所述存储器,用于存储流与与上下文标识集合之间的第一对应关系,以及上下文标识与上下文之间的第二对应关系;所述第一对应关系中每个流对应的上下文标识集合包括至少一个上下文标识;所述接收器,用于接收输入报文;所述处理器,用于根据所述输入报文确定所述输入报文所属的流;根据所述存储器存储的的第一对应关系确定所述输入报文所属的流对应的上下文标识集合;根据所述存储器存储的第二对应关系确定与所述上下文标识集合相对应的上下文;并根据所述上下文标识集合对应的上下文对所述输入报文进行处理。结合第二方面,在第二方面的第一种可能的实现方式中,所述转发器还包括一个发送器;所述处理器还用于:根据所述存储器存储的所述第一对应关系确定所述输入报文所属的流对应的上下文标识集合之前,判断所述第一对应关系中有没有与所述输入报文所属的流相对应的上下文标识集合;如果有,则根据所述第一对应关系确定所述输入报文所属的流对应的上下文标识集合;如果没有,则通知所述发送器发送流规则请求消息给控制器,所述流规则请求消息中包括所述输入报文的报文头或内容;所述接收器,还用于用于接收所述控制器发送的流规则安装消息,所述流规则安装消息中包括所述输入报文的流对应的上下文标识集合;所述处理器,还用于在所述第一对应关系中添加所述输入报文的所属的流的信息,以及与所述输入报文的流相对应的上下文标识集合。结合第二方面或第二方面第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述处理器,还用于根据所述存储器存储的第二对应关系确定与所述输入报文所属的流对应的上下文标识集合相对应的上下文之前,判断第二对应关系中有没有与输入报文所属的流对应的上下文标识集合相对应的上下文;如果有,则根据所述存储器存储的第二对应关系确定与所述上下文标识集合相对应的上下文;如果所述上下文标识集合中的部分或全部上下文标识没有对应的上下文,则通知所述发送器;所述发送器用于发送上下文请求消息给所述控制器,所述上下文请求消息中包括所述输入报文所属的流对应的上下文标识集合中的部分或全部上下文标识;所述接收器,还用于接收所述控制器发送的上下文安装消息,所述上下文安装消息中包括所述上下文标识集合中的所述部分或全部上下文标识、以及与上下文标识集合中的所述部分或全部上下文标识相对应的上下文;所述处理器还用于,在所述第二对应关系中,添加所述上下文标识集合中的所述部分或全部上下文标识、以及与上下文标识集合中的所述部分或全部上下文标识相对应的上下文。第三方面,提供了另外一种在sdn中处理报文的方法,该方法由转发器执行,具体包括:接收输入报文;根据所述输入报文确定所述输入报文所属的流;判断流与上下文标识集合之间的第一对应关系中有没有与所述输入报文所属的流相对应的上下文标识集合;如果有,则根据所述第一对应关系确定所述输入报文所属的流对应的上下文标识集合;如果没有,则发送流规则请求消息给控制器,所述流规则请求消息中包括所述输入报文的报文头或内容;接收所述控制器发送的流规则安装消息,所述流规则安装消息中包括所述输入报文的流对应的上下文标识集合;根据上下文标识与上下文之间的第二对应关系确定与所述上下文标识集合相对应的上下文;根据所述上下文标识集合对应的上下文对所述输入报文进行处理。结合第三方面,在第三方面的第一种可能的实现方式中,所述方法还包括:根据上下文标识与上下文之间的第二对应关系确定与所述上下文标识集合相对应的上下文之前,判断所述第二对应关系中有没有与所述上下文标识集合相对应的上下文;如果有,则执行所述根据所述第二对应关系确定所述上下文标识集合对应的上下文的步骤;如果所述上下文集合中的部分或全部上下文标识没有对应的上下文,则执行如下步骤:发送上下文请求消息给所述控制器,所述上下文请求消息中包括所述上下文标识集合中的所述部分或全部上下文标识;接收所述控制器发送的上下文安装消息,所述上下文安装消息中包括所述上下文标识集合中的部分或全部上下文标识、以及与所述上下文标识集合中的部分或全部上下文标识相对应的上下文;在所述第二对应关系中,添加所述上下文标识集合中的部分或全部上下文标识、以及与所述上下文标识集合中的部分或全部上下文标识相对应的上下文。第四方面,提供了另外一种转发器,包括接口,处理器和存储器;所述存储器,用于存储流与与上下文标识集合之间的第一对应关系,以及上下文标识与上下文之间的第二对应关系;所述第一对应关系中每个流对应的上下文标识集合包括至少一个上下文标识;所述接口,用于接收输入报文;所述处理器用于判断所述存储器存储的第一对应关系中有没有与所述输入报文所属的流相对应的上下文标识集合;如果有,则根据所述第一对应关系确定所述输入报文所属的流对应的上下文标识集合;如果没有,则通知所述接口;所述接口用于在收到处理器发送的通知后发送流规则请求消息给控制器,所述流规则请求消息中包括所述输入报文的报文头或内容;所述接口,还用于接收所述控制器发送的流规则安装消息,所述流规则安装消息中包括所述输入报文的流对应的上下文标识集合;所述处理器,还用于根据所述存储器存储的第二对应关系确定与所述上下文标识集合相对应的上下文;并根据所述上下文标识集合对应的上下文对所述输入报文进行处理。结合第四方面,在第四方面的第一种可能的实现方式中,所述处理器还用于,在根据所述存储器存储的第二对应关系确定与所述输入报文所属的流对应的上下文标识集合相对应的上下文之前,判断第二对应关系中有没有与输入报文所属的流对应的上下文标识集合相对应的上下文;如果有,则根据所述存储器存储的第二对应关系确定与所述上下文标识集合相对应的上下文;如果所述上下文标识集合中的部分或全部上下文标识没有对应的上下文,则通知所述发送器;所述发送器还用于在收到所述处理器的通知后发送上下文请求消息给所述控制器,所述上下文请求消息中包括所述输入报文所属的流对应的上下文标识集合中的部分或全部上下文标识;所述接收器,还用于接收所述控制器发送的上下文安装消息,所述上下文安装消息中包括所述上下文标识集合中的所述部分或全部上下文标识、以及与上下文标识集合中的所述部分或全部上下文标识相对应的上下文;所述处理器还用于,在所述第二对应关系中,添加所述上下文标识集合中的所述部分或全部上下文标识、以及与上下文标识集合中的所述部分或全部上下文标识相对应的上下文。本发明实施例中的流是与上下文标识的集合相对应的,流与上下文之间没有直接关联,当有多个流共用一个上下文时,这个上下文也不需要被保存多遍,在与现有技术相同的硬件条件下,本发明的实施例将使得转发器的存储能力和处理能力大大提高。附图说明为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种sdn的架构示意图;图2为本发明实施例提供的一种转发器的组成示意图;图3为本发明实施例提供的一种转发器处理报文的方法流程示意图;图4为本发明实施例提供的一种openflow转发器处理输入报文的方法流程示意图;图5为本发明实施例提供的一种转发器安装流或上下文的方法流程示意图;图6a为本发明实施例提供的一种转发器与控制器进行协商的方法流程示意图;图6b为本发明实施例提供的另一种转发器与控制器进行协商的方法流程示意图;图7为本发明实施例提供的一种控制器查询、修改或删除流的信息、流对应的cid集合或cid对应的上下文的方法流程示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为sdn的结构示意图,sdn中至少包括转发器14和控制器12。转发器14负责数据层的转发;控制器12负责对网络进行集中控制,实现控制层的功能。转发器14与控制器12之间通过控制协议进行通信。一个转发器可以与一个或多个其它的转发器相连,也可以与一个或多个发送/接收报文的实体(例如,固定终端、移动终端、个人电脑等)相连。图2为转发器的组成示意图,转发器14包括接口1402,处理器1404和存储器1406。转发器14通过接口1402与控制器12或其它网络实体之间进行通信。接口1402用于接收来自控制器12或其它网络实体的消息、信息、报文或数据等;或用于向自控制器12或其它网络实体发送消息、信息、报文或数据等。处理器1404可以对接口1402接收到的消息、信息、报文或数据等进行一些相应的处理。存储器1406可以用于存储流与上下文的信息。除此之外,存储器1406还可以用于存储其它信息,例如,用于存储接收器2002接收到的消息、信息、报文或数据,或存储处理器1404的处理结果等。存储器1406中存储的流与上下文的信息又包括:流与上下文标识(英文全称:contextidentifier,英文简称:cid)集合之间的第一对应关系,以及cid与上下文之间的第二对应关系。为了方便描述,下面将流与cid集合之间的第一对应关系称为流表,“流表”这个名称并不用于限制第一对应关系的存储形式,因为存储器1406在存储第一对应关系时可以是通过表的形式、也可以是通过其它的形式,例如某个存储单元与另外的一个或多个存储单元相映射的形式。存储器1406中可以存储一个或多个流表。表3为本发明实施例中一种流表的结构示意图。表3所示的流表与表1所示的现有技术的流表不同,现有技术的流表中每个流是直接与action相关联的,而本发明实施例的流表中每个流与cid相关联,其与上下文之间没有直接的联系。流表中每个流的信息(如,流匹配域)与cid集合之间的对应关系都可以称为一个流表项,如表3所示。流匹配域是用来识别流的,流匹配域包含识别报文所属的流所需要的信息,其结构中可以包括表2所示的不同元组的任意组合,也可以包括其他内容,例如:多协议标记交换(英文全称:multiprotocollabelswitching,英文简称:mpls)标识、差分服务码点(英文全称:differentiatedservicescodepoint,英文简称:dscp)码、传输层协议类型、通用路由封装协议标识(英文全称:genericroutingencapsulationidentifier,英文简称:greid)、gprs隧道协议的隧道端点标识(英文全称:tunnelendpointidentifierofgprstunnelingprotocol,英文简称:gtpteid)等,或采用报文偏移值、匹配长度等组成。表3中的每个流与一个cid集合相对应,每个cid集合中包括至少一个cid。cid用于唯一标识一个上下文,其表现形式可以有很多种,例如,可以为任意进制的字符、数字、字母、数字加上字母、或数字加上其它字符等。除此之外,cid还可以用于指示上下文的类型。表3流匹配域1cid集合1流匹配域2cid集合2…………流匹配域ncid集合n除了上述流表外,存储器1406中还保存了cid与上下文之间的第二对应关系,为了方便描述,下面将cid与上下文之间的第二对应关系称为上下文列表,同样,此名称并不用于限制第二对应关系的存储形式,因为存储器1406在存储第二对应关系时可以是通过表的形式、也可以是通过其它的形式,例如某个存储单元与另外的一个或多个存储单元相映射的形式。表4为本发明实施例中一种上下文列表的结构示意图。表4中的每个cid都对应了一个上下文。上下文包括对报文进行某种处理所需要的信息。现有技术的action中除了包括需要对报文进行处理的信息外,还包括了报文的类型(actiontype),而在本发明实施例中,转发器通过cid已经可以知道相应上下文的类型,因此上下文中不会再包括类似actiontype这样的信息。上下文的类型有很多种,本发明实施中cid指示的上下文类型除了包括现有技术的action类型(如转发报文、丢弃报文等)外,还可以包括其它类型,使得转发器可以对输入报文进行更多样的处理。例如,上下文的类型还可以包括带宽控制、深度解析(deeppacketinspection,dpi)、在线计费、离线计费、防火墙处理、网络地址转换(networkaddresstranslation,nat)、合法监听、报文重组、链路检测(如基于双向转发检测协议(bidirectionalforwardingdetectionprotocol,bfdp)、链路层发现协议(linklayerdiscoveryprotocol,lldp)等进行检测)、等等。不同的上下文类型又对应着不同的上下文,例如,带宽控制类型的上下文可以包括允许的最大带宽大小、保证的带宽大小、转发的优先级等;离线计费类型的上下文可以包括离线计费组的组标识,计费信息上报的间隔等;而路由转发类型的上下文可以包括转发端口号、源mac地址或目的mac地址等。表4cid1context1cid2context2…………cidncontextn如果需要根据相同的上下文对不同的流进行处理,那么在流表中被重复保存的只有该上下文对应的cid,该上下文并不需要被重复保存。例如,转发器只需要将该上下文对应的cid保存在流表中每个流对应的cid集合中就可以了,而该上下文只需在cid与上下文的对应关系中被保存一遍。通过此种方式可以为转发器节省更多的存储空间,而节省下来的存储空间又可以让转发器存储更多的上下文,因此,在与现有技术相同的条件下,本发明实施例中的转发器可以存储更多的上下文,对报文的处理也可以支持更多的上下文类型。另外,本发明实施例中对报文执行的上下文处理可以用来实现比现有的action更为复杂的处理逻辑。现有技术中,openflow转发器在执行action时仅仅是对当前报文进行处理,转发器不会对已处理的报文进行状态的维护,因此action只能用于对单个报文进行无状态的处理(statelesshandling),而无法根据某个流以前的报文的处理结果对后续报文进行有状态的处理。而以前的报文的处理结果对于某些复杂处理行为,例如报文保序、dpi、病毒检测等是必须的。因此,鉴于目前action设计的局限性,现有技术中的openflow转发器只适用于对报文执行比较简单的动作,对于复杂的动作,还无法实现。本发明实施例中的转发器通过上下文处理单元,可以对报文处理后的状态进行保存,从而可以对报文进行更为复杂的处理。为了方便理解,下面将通过具体的例子对本发明提供的转发器进行阐述。例如,参见图2所示,转发器14的接口1402可以包括一个接收器14022,用于接收到输入报文。该输入报文可以是另外一个转发器发送的,也可以是其它实体(例如,计算机、移动终端、固定终端等)发送的。处理器1404用于确定所述输入报文所属的流;例如,根据输入报文的报文头或内容确定所述输入报文所属的流。处理器1404还用于根据存储器1406存储的第一对应关系确定所述输入报文所属的流对应的cid集合;根据存储器1406存储第二对应关系确定与所述cid集合相对应的上下文,并根据所述cid集合对应的上下文对所述输入报文进行处理。处理器1404对输入报文进行处理后会得到一个上下文处理结果。在另外一个例子中,参见图2所示,转发器14的接口1402还可以包括一个发送器14024。所述发送器14024用于将所述处理器1404对输入报文进行处理后得到的上下文处理结果发送给控制器12。接控制器12收到发送器14024发送的上下文处理结果后可以根据上下文处理结果确定是否需要继续对输入报文进行处理,如果需要,将为所述输入报文新确定的流和新确定的cid集合发送给转发器14。转发器14中的接收器14022还可以用于接收控制器12为输入报文新确定的流和新确定的上下文标识集合,以便通知处理器1404根据所述新确定的上下文标识集合对应的上下文对所述输入报文进行进一步的处理。正常情况下,在收到输入报文之前,存储器1406中已经保存了大部分的流对应的cid集合。但是偶尔也会出现在存储器1406存储的第一对应关系中找不到输入报文的流对应的cid集合的情况,此时转发器14可以从控制器12获取输入报文的流对应的cid集合。在本发明的另外一个例子中,当处理器1404确定所述输入报文所属的流之后,处理器1404还可以用于:判断第一对应关系中有没有与所述输入报文所属的流相对应的cid集合,如果有,则处理器1404根据所述第一对应关系确定所述输入报文所属的流对应的cid集合;如果没有,则处理器1404通知发送器14024发送发送流规则请求消息给控制器12,所述流规则请求消息中包括所述输入报文的报文头或内容;所述接收器14022进一步用于接收所述控制器12发送的流规则安装消息,所述流规则安装消息中包括所述输入报文的流对应的cid集合。之后,处理器1404可以根据存储器1406存储第二对应关系确定与所述cid集合相对应的上下文,并根据所述cid集合对应的上下文对所述输入报文进行处理。可选地,所述处理器1404还可以在所述第一对应关系中添加所述输入报文的所属的流的信息,以及与所述输入报文的流相对应的cid集合。现有技术中,每当转发器向控制器请求输入报文的流对应的action时,控制器都会将action携带在流规则安装消息中发送给控制器。由于action包含的处理参数较多,为了满足传输各种类型action的要求,流规则安装消息需要设计得比较长,但流规则安装消息设计得太长又会导致传输时间延长,并且影响了报文的处理效率。通过本发明提供的例子正好可以解决这个问题,当控制器收到来自转发器的流规则请求消息时,控制器只需要将输入报文的流对应的cid集合通过流规则安装消息发送给转发器,如果转发器已经存储了该cid集合对应的上下文,则转发器只需要根据cid集合中的每个cid找到相应的上下文就可以了。由于cid集合占用的空间很小,传输cid集合的流规则安装消息不需要设计得太长,由此传输流规则安装消息所用的时间也会变短,转发器处理报文的效率也能够得到一定程度的提高。当然,除了上述例子描述的方法外,控制器12还可以将cid集合对应的上下文与cid集合一起发给转发器14。例如,控制器12发送的流规则安装消息中还可以包括与所述cid集合相对应的上下文。在这种情况下,流规则安装消息的格式可以如下:<流规则安装消息>:={流的信息,cid1,cid2,cid3>,[cid1,context1],[cid2,context2],[cid3,context3]}接收器14022收到所述流规则安装消息后,如果处理器1404发现第二对应关系中没有保存所述cid集合中的部分或全部cid、以及与该部分或全部cid相对应的上下文;则处理器1404在第二对应关系中,添加该部分或全部cid、以及与该部分或全部cid相对应的上下文。同理,正常情况下,在收到输入报文之前,存储器1406存储的第二对应关系中已经保存了大部分cid和cid对应的上下文。但是偶尔也会出现在存储器1406存储的第二对应关系中找不到某个或某几个cid对应的上下文的情况,此时转发器14可以从控制器12获取输入该某个或某几个cid对应的上下文。例如,在另外一个例子中,处理器1404在根据存储器1406存储的第二对应关系确定与所述cid集合相对应的上下文之前,还可以判断第二对应关系中有没有与输入报文所属的流对应的cid集合相对应的上下文;如果有,则根据存储器1406存储第二对应关系确定与所述cid集合相对应的上下文;如果所述cid集合中的部分或全部cid没有对应的上下文,则通知发送器14024发送上下文请求消息给控制器12,所述上下文请求消息中包括所述输入报文所属的流对应的cid集合中的部分或全部cid。所述接收器14022还用于接收控制器12发送的上下文安装消息,所述上下文安装消息中包括所述cid集合中的部分或全部cid,以及所述cid集合中的部分或全部cid对应的上下文。可选地,所述处理器1408还可以用于在所述第二对应关系中,添加所述cid集合中部分或全部cid、以及与所述部分或全部cid相对应的上下文。转发器对报文进行处理后会得到各种处理结果,对于某些处理结果转发器需要上报给控制器。例如,合法监听得到的相关信息,或执行nat服务后得到的结果等等。对于某些结果,转发器可能需要执行进一步地处理,例如,在本发明另外一个例子中,转发器14中的处理器1408在对输入报文进行处理后得到的处理结果有可能是一个新生成的报文。转发器14对新生成的报文的处理和对输入报文的处理类似,在此不再详述。现有技术中,openflow的action仅仅规定了对当前报文进行何种处理,对报文的处理结果转发器是不会维护的,因此,对于需要基于上一次对报文的处理结果来执行下一次的处理时,现有技术中的action是无法实现的。上述例子中描述的第一对应关系可以是技术人员在对转发器14进行初始设置时存储在存储器1406中的,也可以是转发器14在与控制器12建立连接后由控制器12发送给转发器14的,例如,接收器14022在接收输入报文之前,可以先接收控制器12发送的流规则安装消息,所述流规则安装消息中包括转发器14支持的部分或全部流的信息、以及与所述转发器14支持的部分或全部流相对应的cid集合。接收器14022通知存储器1406将所述转发器14支持的部分或全部流的信息、以及与所述转发器14支持的部分或全部流相对应的cid集合一一对应地保存,以形成第一对应关系。同理,上述例子中描述的第二对应关系可以是技术人员在对转发器14进行初始设置时存储在存储器1406中的,也可以是转发器14在与控制器12建立连接后由控制器12发送给转发器14的,例如,接收器14022在接收输入报文之前,可以先接收控制器12发送的上下文安装消息,所述上下文安装消息中包括转发器14支持的部分或全部cid、以及所述转发器14支持的部分或全部cid对应的上下文;接收器14022通知存储器1406将所述转发器14支持的部分或全部cid、以及与所述转发器14支持的部分或全部上cid相对应的上下文一一对应地保存,以形成第二对应关系。在另外一个例子中,在转发器14与控制器12通信之前,转发器14可以先与控制器12进行协商,以获知对端对流和上下文的处理能力。例如,转发器14中的发送器14024向控制器12发送能力协商请求消息,该能力协商请求消息中包括所述转发器支持的上下文能力列表,以使所述控制器12将转发器14能够支持的部分或全部上下文发送给转发器14;接收器14022接收所述控制器12发送的协商应答消息,所述协商应答消息中可以包括控制器12支持的上下文能力列表,以使所述转发器14根据所述控制器12支持的下文能力列表向所述控制器请求控制器能够支持的部分或全部上下文。上述转发器14与控制器12之前的协商也可以是由控制器12主动发起的,例如,转发器14中的接收器14022接收控制器12发送的能力协商请求消息,该能力协商请求消息中包括控制器12支持的上下文能力列表,以使转发器14根据所述控制器12支持的下文能力列表向控制器12请求控制器能够支持的部分或全部上下文;转发器14中的发送器14024向控制器12发送协商应答消息,所述协商应答消息中可以包括转发器14支持的上下文能力列表,以使所述控制器12将转发器能够支持的部分或全部上下文发送给转发器14。控制器12可以对转发器14的存储器1406中存储的第一对应关系或第二对应关系进行管理,例如,对第一对应关系或第二对应关系中的信息进行查询、修改或删除等。例如,如果控制器12要查询某个流对应的cid集合,则控制器12会发送一个流规则查询请求消息给转发器14,转发器14中的接收器14022接收控制器12发送的流规则查询请求消息,所述查询请求消息中包括待查询的流的信息;处理器1406根据所述第一对应关系找到所述待查询流对应的cid集合,并通知发送器14024发送流规则查询应答消息给所述控制器12,所述流规则查询应答消息中包括所述待查询的流的信息,以及所述待查询的流对应的cid集合。又例如,如果控制器12要查询某个或某几个cid对应的上下文,则控制器12会发送一个上下文查询请求消息给转发器14,转发器14中的接收器14022接收控制器12发送的上下文查询请求消息,所述查询请求消息中包括待查询的cid;待查询的cid可以是一个或多个;处理器1404根据第二对应关系找到的待查询的cid对应的上下文,并通知发送器14024发送上下文查询应答消息给所述控制器,该查询应答消息中包括待查询的cid对应的上下文。可选地,上述查询应答消息中还可以包括所述待查询的cid。又例如,如果控制器12要修改某个流对应的cid集合,则控制器12会发送一个流修改消息给转发器14,转发器14中的接收器14022接收所述控制器12发送的流规则修改消息,所述流修改消息中包括待修改的流的信息,以及所述待修改的流对应的新的cid集合;接收器14022通知处理器1404在所述第一对应关系中将所述待修改的流对应的cid集合修改为所述新的cid集合。例如,接收器14022收到控制器12发送的流规则修改消息,该流规则修改消息中包括的待修改的流的信息为:源ip地址为10.88.85.55、目的ip地址为10.88.80.56的流,待修改的流对应的新的cid集合为cid1、cid2、cid5。假设在第一对应关系中,源ip地址为10.88.85.55、目的ip地址为10.88.80.56的流原本对应的cid集合为:cid1,cid2,cid3。则接收器14022收到上述流修改消息后,通知处理器1404将源ip地址为10.88.85.55、目的ip地址为10.88.80.56的流对应的cid集合修改为cid1、cid2、cid5。又例如,如果控制器12要修改某个或某几个cid对应的上下文,则控制器12会发送一个上下文修改消息给转发器14,转发器14的接收器14022接收所述控制器12发送的上下文修改消息,所述上下文修改消息中包括待修改的cid,以及所述待修改的上下文的标识对应的新的上下文;接收器14022通知处理器1404在所述第二对应关系中将所述待修改的cid对应的上下文修改为所述新的上下文。例如,cid1原本对应的上下文为context1a,如果接收器14022收到的上下文修改消息中包括cid1、以及cid1对应的新的上下文context1b,则通知处理器1404在第二对应关系中将cid1对应的上下文修改为context1b。又例如,如果控制器12要删除某个流的信息,控制器12会发送一个流删除消息给转发器14,转发器14中的接收器14022接收控制器12发送的流删除消息,该流删除消息中包括待删除流的信息;接收器14022通知处理器1404从第一对应关系中删除所述待删除的流的信息、以及与所述待删除的流对应的cid集合。可选地,如果被删除的流对应的部分或全部cid没有对应其它的流,则处理器1404还可以从所述第二对应关系中删除所述被删除的流对应的部分或全部cid、以及与所述被删除的流对应的部分或全部cid相对应的上下文。例如,假设流1对应的cid集合包括cid1、cid2;流2对应的cid集合包括cid1、cid3。当处理器1404从第一对应关系中删除了流1的信息后,处理器1404发现cid2只与流1对应,则处理器1404还可以从第二对应关系中删除cid2对应的上下文。而cid1不仅与流1对应,其还与流2对应,因此处理器1404不会删除cid1对应的上下文。假设流2的信息也被删除后,处理器1404发现cid1没有对应其它流了,则从第二对应关系中删除cid1对应的上下文。可选地,处理器1404还可以通知发送器14024将被删除的流的信息或被删除的上下文对应的cid上报给控制器12。又例如,如果控制器12要删除某个上下文,控制器12会发送一个上下文删除消息给转发器14,转发器14中的接收器14022用于接收控制器12发送的上下文删除消息,所述上下文删除消息中包括至少一个待删除的上下文标识;接收器14022用于通知处理器1404从第二对应关系中,删除所述至少一个待删除的cid、以及与所述至少一个待删除的cid相对应的上下文。可选地,处理器1404在删除第二对应关系中的某个上下文后还可以对第一对应关系进行相应地修改,例如,处理器1404在第一对应关系中,删除与所述已经删除的上下文对应的cid。上下文的删除可能会导致处理器1404在处理该上下文的cid对应的流时出现问题,因此,处理器1404在第一对应关系中删除与已经删除的上下文对应的cid之后,还可以在所述第一对应关系中,删除与所述被删除的cid相对应的流的信息。例如,假设流1对应的cid集合包括cid1、cid2;流2对应的cid集合包括cid1、cid3。当处理器1404从存储器1406存储的第二对应关系中删除了cid1对应的上下文后,处理器1404发现与cid1对应的流有流1和流2,则处理器1404还可以在第一对应关系中删除流1的信息和流2的信息。并且,处理器1404还可以删除分别与流1和流2对应cid集合。可选地,处理器1404还可以通知发送器14024将被删除的上下文对应的cid或被删除的流的信息上报给控制器12。通过上述本发明提供的例子控制器12可以对转发器14上保存的第一对应关系和第二对应关系进行有效的管理。在介绍完了本发明实施例提供的转发器后,下面将通过一些例子,对本发明实施例提供的方法进行介绍。图3为本发明实施例提供的一种转发器处理报文的方法流程示意图,具体如下:步骤302:转发器接收输入报文;该输入报文可以是另外一个转发器发送的,也可以是其它实体(例如,计算机、移动终端、固定终端等)发送的。步骤304:转发器根据输入报文确定该输入报文所属的流;转发器可以根据输入报文的报文头或内容确定该输入报文所属的流。输入报文所属的流可以是一个也可以是多个。例如,转发器接收输入报文后,输入报文的报文头如下:mac1|mac2|ip-type(0x0800)|ip1|ip2|tcp-type(6)|port1|port2,其中mac1为报文的mac源地址;mac2为报文的mac目的地址;ip-type(0x800)表示报文的网络层协议为ipv4协议,ip1为报文的ip源地址;ip2为报文的ip目的地址;tcp-type(6)表示报文的传输层协议为tcp协议,port1为报文的源tcp端口号,port2为报文的目的tcp端口号。通过输入报文的报文头的部分或全部内容就可以确定该输入报文是属于哪个流的。以上面的报文头为例,根据上述报文头就可确定该输入报文属于mac源地址为mac1、mac目的地址为mac2的流;或者该输入报文属于ip源地址为ip1、ip源地址为ip2的流等等。步骤306:转发器根据流与cid之间的第一对应关系确定输入报文所属的流对应的cid集合;第一对应关系中每个流对应的cid集合包括至少一个cid;假设转发器中只有一个流表,该流表中包括如表5所示的流表项,表5的第一列表示流匹配域,第二列表示与该流匹配域相匹配的cid集合。表5转发器将输入报文的报文头与流表5中的流匹配域进行匹配,发现该输入报文所属的流(mac源地址为mac1、mac目的地址为mac2的流)对应的cid集合为cid集合1。当输入报文的报文头能够匹配到流表中的多个流表项时,转发器根据流表项的优先级选择优先级最高的流表项作为与该输入报文相匹配的流表项。步骤308:转发器根据cid与上下文之间的第二对应关系确定与输入报文所属的流对应的cid集合相对应的上下文;例如,假设上述cid集合1中只包括一个cid,例如cid=5。转发器中保存的cid与上下文之间的第二对应关系如下表6所示:表6根据上面的描述,输入报文所属的第一个流对应的cid集合为cid集合1,假设cid集合1中只有一个编号为5的cid,则转发器根据编号为5的cid可以找到其对应的上下文为:outport:1。步骤310:转发器根据步骤308确定出的上下文对输入报文进行处理。例如,编号为5的cid对应的context为:outport:1,则转发器将该输入报文转发到端口1。通过上述实施例描述的方法,转发器可以存储更多的上下文,其对报文的处理可以支持更多种类型,由此提高了转发器处理报文的能力。上述实施例描述的方法还适输入报文所属的流有多个的情况,例如,当转发器在步骤304中确定输入报文所属的流两个时,转发器在执行完步骤310后还可以跳转到步骤306,根据另外一个流表来确定输入报文所属的另外一个流对应的cid集合。例如,假设转发器中另外一个流表中包括如表7所示的流表项,表7的第一列表示流匹配域,第二列表示与该流匹配域相匹配的cid集合。表7src-ip=ip1,dst-ip=ip2cid集合2转发器将输入报文的头与转发器中的流表7中的流匹配域进行匹配,发现该输入报文所属的另外一个流(ip源地址为ip1、ip目的地址为ip2的流)对应的cid集合为cid集合2。之后,转发器可以根据cid集合2对应的cid对输入报文进行处理。如果输入报文所属的流对应的cid集合中包括多个cid,则转发器在根据该多个cid对应的上下文对输入报文进行处理时按照预设的上下文顺序进行。如果上述的上下文顺序中包括至少两个上下文的顺序相同的情况,则所述转发器同时根据该至少两个上下文对输入报文进行处理。上下文的执行顺序可以通过如下三种方式来表示。(1)在第一对应关系中,对每个流对应的cid集合中的每个cid都设置一个序号。例如,输入报文所属的流对应的cid集合为cid1-cid5,cid1-cid5对应的序号分别如下表8的第二列所示。转发器在根据cid1-cid5对应的上下文对输入报文进行处理时会按照第二列的顺序进行,由于cid3和cid4具有相同的序号,则转发器会同时根据cid3和cid4对应的上下文对输入报文进行处理。表8(2)在第一对应关系中,对每个流对应的cid集合中的每个cid都有一个默认的排列顺序,部分cid都可能与其它的cid之间有关联关系。例如,输入报文所属的流对应的cid集合如下表9所示,第一列表示cid的排列顺序,第二列表示每个cid与其它cid的关联关系。当转发器根据cid1-cid5对输入报文进行处理时,对于没有与其他cid关联的cid则按照表9第一列中cid的排列顺序进行处理。由于第二列中指示了cid3和cid4是相关联的,则转发器会同时根据cid3和cid4对应的上下文对输入报文进行处理。表9cid1cid2cid3cid4cid4cid3cid5(3)在第一对应关系中,对每个流对应的cid集合以及cid集合中每个cid的执行顺序可以通过两个列表来表示。例如,输入报文所属的流对应的cid集合如下表10所示,表10从上到下用于指示cid默认的排列顺序,表11用于指示cid之间的关联关系。对于在表11中记录了有关联关系的cid,转发器在根据这些cid对应的上下文对对输入报文进行处理会同时进行。对于表11中没有记录关联关系的cid,交换会按照表10所示的cid的默认的排列顺序来对输入报文进行处理。表10cid1cid2cid3cid4cid5表11cid2,cid3,cid4现有技术中,转发器只能按照输入报文的流对应的action的排列顺序来顺序执行。而本发明的实施例中,由于引入了cid的序列号或cid之间的关联关系,使得部分cid对应的上下文可以被并行处理,由此提高了转发器处理报文的效率。但在实际应用中,并不是所有的上下文类型都是可以被并行处理的,只有在某两个或某几个上下文的处理结果之间不会相互影响情况下,这某两个或某几个上下文才能被并行处理。例如,防火墙处理和转发这两种上下文类型就不能被并行处理,因为这两种上下文的处理结果会互相影响,因此转发器必须先对输入数据进行防火墙处理,然后再转发;或者先对输入报文进行转发,然后再进行防火墙处理。而合法监听和转发就可以被并行处理。可以并行处理的例子还有很多,在此不一一列举。步骤310中,转发器对输入报文进行处理后会得到一个上下文处理结果。可选地,在另外一个例子中,转发器还可以执行如下步骤:步骤312:转发器将上下文处理结果发送给控制器。转发器通过一个事件上报消息将上下文处理结果发送给控制器。上下文处理结果可有很多种,例如报文转发是否成功、对输入报文进行在线计费后的计费结果、通过对输入报文进行dpi后得到的结果等等。例如,假设转发器在步骤310中对输入报文执行的上下文处理为对输入报文进行dpi,那么,在步骤312中,转发器可以通过事件上报消息将对输入报文进行dpi后得到的结果发送给控制器,该事件上报消息中包括需要上报的事件(如,检测到了p2p报文(p2p_dtected))。除此之外,该事件上报消息中还可以包括输入报文的部分或全部内容、和/或上下文执行的结果(如,对输入报文进行dpi后获得的详细信息)等。控制器收到事件上报消息后可以根据上下文处理结果确定是否需要继续对输入报文进行处理,如果需要,则将为所述输入报文新确定的流和新确定的cid集合发送给转发器,以使转发器根据该新确定的流和新确定的cid集合对所述输入报文进行处理。例如,控制器收到事件上报消息后,发现事件上报消息中包含的上下文处理结果为“输入报文转发成功”,则控制器可以不进行任何处理。又例如,转发器通过事件上报消息将需要上报的事件以及输入报文的部分或全部内容发送给控制器后,控制器发现需要继续对输入报文进行处理,则发送新的流表项到转发器,以使转发器根据该新的流表项对输入报文进行处理,所述新的流表项中包括为输入报文新确定的流匹配域及新确定的cid集合。一般情况下,在收到输入报文之前,转发器中就已经保存了该报文所属的流对应的cid集合。但是偶尔也会出现转发器在第一对应关系中找不到输入报文的流对应的cid集合的情况,此时转发器可以从控制器获取输入报文的流对应的cid集合。参见图3所示,在本发明的另外一个例子中,转发器在执行步骤306之前,还可以包括:步骤305a:判断第一对应关系中有没有与输入报文所属的流相对应的cid集合;如果有,则执行上述步骤306-310;如果没有,则执行如下步骤305b-305d;步骤305b:将输入报文缓存到缓冲区中,并发送流规则请求消息给控制器,所述流规则请求消息中包括所述输入报文的报文头或输入报文的部分或全部内容;例如,当转发器与控制器之间采用openflow协议进行通信时,转发器会发送一个报文上报(packet_in)消息给控制器以请求获取输入报文对应的cid集合,该packet_in消息中包含的输入报文的报文头或输入报文的部分或全部内容。除此之外,packet_in消息中还可以携带缓存输入报文的缓冲区的信息(如,buffer_id)、以及上报的原因(如,原因为“流表中无匹配的流表项”)等。步骤305c:接收所述控制器发送的流规则安装消息,所述流规则安装消息中包括所述输入报文的流对应的cid集合;例如,控制器收到转发器发送的流规则请求消息后,根据流规则请求消息中输入报文的报文头或内容确定该输入报文所属的流对应的cid集合中包括7个cid,具体如下:cid1最大2mbps带宽控制cid2报文重组cid3dpicid4病毒防火墙检测cid5报文缓存cid6合法监听cid7转发到端口1控制器通过流规则安装消息将输入报文所属的流对应的cid集合发送给转发器,例如,控制器可以通过一条流规则安装消息将输入报文所属的流对应的cid集合发送给转发器,流规则安装消息的格式如下:<流规则安装消息>:={流的信息,<cid1,cid2,cid3,cid4,cid5,cid6,cid7>}可选的,控制器也可以通过多条流规则安装消息将输入报文所属的流对应的cid集合发送给转发器,例如:<流规则安装消息1>:={流的信息,<cid1,cid2,cid3,cid4>}<流规则安装消息2>:={流的信息,<cid5,cid6,cid7>}可选地,控制器发送的流规则安装消息中还可以包括每个cid的执行顺序,例如:<流规则安装消息>:={流的信息,<(cid1,1),(cid2,2),(cid3,3),(cid4,4),(cid5,4),(cid6,4),(cid7,5)>}通过上面每个cid的执行顺序可以看出,cid4、cid5和cid6需要被同时执行。上述流规则安装消息的格式只是一种例子,在实际应用时可以为其它格式,例如,将输入报文所属的流对应的cid集合用一个cid列表(list)来表示,只要能够实现将输入报文的流对应的cid集合发送给转发器即可。又例如,控制器收到转发器发送的流规则请求消息后,根据流规则请求消息中输入报文的报文头或内容确定该输入报文所属的流为bfd/lldp协议对应的流,控制器确定与bfd/lldp协议对应的流相对应的cid集合。对应的cid集合中可以仅包括如下cid:cid8bfd/lldp协议处理控制器通过流规则安装消息将输入报文所属的流对应的cid集合发送给转发器,例如,流规则安装消息的格式如下:<流规则安装消息>:={流的信息,<cid8>}控制器收到上述流规则安装消息后只对输入报文执行bfd/lldp协议处理,例如更新协议状态机等。当输入报文所属的流有多个时,控制器可以通过多条流规则安装消息将每个流对应的cid集合发送给转发器,以使转发器将每个流对应的cid集合保存在不同的流表中。例如,当转发器与控制器之间采用openflow协议进行通信时,上述流规则安装消息可以为flow_mod消息,上述流的信息可以是流匹配域(flowmatchfield)。假设输入报文对应的流有两个,每个流对应的流匹配域分别为flowmatchfield1和flowmatchfield2。控制器在发送给转发器的第一条flow_mod消息中携带flowmatchfield1,以及flowmatchfield1对应的cidlist1;在发送给转发器的第二条flow_mod消息中携带flowmatchfield2,以及flowmatchfield2对应的cidlist2。控制器还可以在每条flow_mod消息中携带流表的信息(如,流表的id(tableid)),以使转发器将每个flow_mod消息中携带的flowmatchfield和flowmatchfield对应的cid集合添加到相应的流表中。例如,第一条flow_mod消息中包括tableid=1,第二条flow_mod消息中包括tableid=2)。此外,flow_mod消息中还可以携带用于指示流表处理顺序的信息。例如,第一条flow_mod消息中包括一个指示信息(如“goto-table2)。当转发器收到第一条flow_mod消息后会根据table1中flowmatchfield1找到对应的cidlist1,并根据cidlist1对应的上下文对输入报文进行处理,之后,转发器还需要根据table2对输入报文进行匹配,找到相应的cidlist2,并根据cidlist2对应的上下文对输入报文进行处理。步骤305d:在所述第一对应关系中添加所述输入报文所属的流的信息,以及与所述输入报文所属的流相对应的cid集合。上述步骤305d为可选的,步骤305d可以在步骤305c之后执行,也可以在步骤306之后执行。现有技术中,每当转发器向控制器请求输入报文所属的流对应的action时,控制器都会将action携带在流规则安装消息中发送给控制器。由于action包含的处理参数较多,为了满足传输各种类型action的要求,流规则安装消息需要设计得比较长,但流规则安装消息设计得太长又会导致传输时间延长,并且影响了报文的处理效率。通过本发明提供的例子正好可以解决这个问题,当控制器收到来自转发器的流规则请求消息时,控制器只需要将输入报文的流对应的cid集合通过流规则安装消息发送给转发器就可以了,如果转发器已经存储了该cid集合对应的上下文,则转发器只需要根据cid集合中的每个cid找到相应的上下文就可以了。由于cid集合占用的空间很小,传输cid集合的流规则安装消息不需要设计得太长,由此传输流规则安装消息所用的时间也会变短,转发器处理报文的效率也能够得到一定程度的提高。当然,除了上述例子描述的方法外,控制器还可以将cid集合对应的上下文与cid集合一起发给转发器。例如,上述步骤305c中控制器发送的流规则安装消息中还可以包括与所述cid集合相对应的上下文。在这种情况下,流规则安装消息的格式可以如下:<流规则安装消息>:={流的信息,<cid1,cid2,cid3>,[cid1,context1],[cid2,context2],[cid3,context3]}转发器收到所述流规则安装消息后,如果发现第二对应关系中没有保存所述cid集合中的部分或全部cid、以及与该部分或全部cid相对应的上下文;则转发器在第二对应关系中,添加该部分或全部cid、以及与该部分或全部cid相对应的上下文。一般情况下,在收到输入报文之前,转发器的第二对应关系中已经保存了大部分cid和cid对应的上下文。但也可能会出现转发器在第二对应关系中找不到某个或某几个cid对应的上下文的情况,此时转发器可以从控制器获取该某个或某几个cid对应的上下文。参见图3所示,在另外一个例子中,转发器在执行步骤308之前还可以执行如下步骤:步骤307a:判断第二对应关系中有没有与输入报文所属的流对应的cid集合相对应的上下文;如果有,则执行步骤308;如果没有所述cid集合中的部分或全部cid,则执行如下步骤307b-307d;步骤307b:发送上下文请求消息给所述控制器,所述上下文请求消息中包括所述cid集合中的部分或全部cid;步骤307c:接收所述控制器发送的上下文安装消息,所述上下文安装消息中包括所述cid集合中的部分或全部cid、以及与所述cid集合中部分或全部cid相对应的上下文;可选地,所述上下文安装消息中还可以包括除所述cid集合之外的其它cid以及与所述其它cid对应的上下文。步骤307d:在所述第二对应关系中,添加所述上下文安装消息中的每个cid、以及与所述上下文安装消息中每个cid相对应的上下文。上述步骤307d为可选的,步骤307d可以在步骤307c之后执行,也可以在步骤308之后执行。为了与现有技术中的openflow协议兼容,本发明的实施例还提供了另外一种实现方案,在该方案中,对于现有技术中已有的action,转发器可以按照现有技术中的流程进行处理。除了现有技术中已有的action外,本实施例中还新定义了一个用于指示转发器对报文所属的流进行上下文处理的action(例如,handle_context)。参见图4所示,本发明实施例的方法如下:步骤402:openflowswitch接收输入报文;步骤404:openflowswitch根据报文确定报文所属的流;步骤406:openflowswitch判断流表中有没有与输入报文所属的流相对应的动作,如果有,则执行对应的动作;如果没有,则执行步骤408;步骤408:将输入报文缓存到缓冲区中,并发送packet_in消息给openflow控制器以请求获取输入报文对应的动作。上述packet_in消息中携带了输入报文的部分或全部内容。除此之外,packet_in消息中还可以携带缓存输入报文的缓冲区的信息(如,buffer_id)、以及上报的原因(如,原因为“流表中无匹配的流表项”)等。步骤410:openflowcontroller根据packet_in消息中的信息确定该输入报文对应的动作及输入报文所属的流对应的cid集合,并通过流规则安装(如,flow_mod)消息将该输入报文流对应的动作及输入报文所属的流对应的cid集合发送给openflowswitch。输入报文对应的动作可以为openflow协议中定义的标准动作,也可以为新增的用于指示转发器对报文所属的流进行上下文处理的动作,如handle_context动作。当输入报文对应的动作为openflow协议中定义的标准动作时,packet_in消息中只需要携带标准动作对应的参数就可以了,其中不包括cid集合。当输入报文所属的流对应的动作包括用于指示转发器对报文所属的流进行上下文处理的动作时,输入报文所属的流对应的cid集合需要作为动作的参数携带在流规则安装消息中。通过此方案,可以以兼容openflow协议现有动作的方式,实现现有openflow动作与上下文处理的共存。例如,上述flow_mod消息中可以包括输入报文所属的流对应的flowmatchfield,以及与该流匹配信息相对应的动作列表,其中包括一个或多个动作(如set-fieild、output等)。如果需要根据某些上下文对输入报文进行处理,则流匹配域对应的动作中还可以包括handle_context动作,handle_context动作的参数为输入报文所属的流对应的cid集合。其一种实现格式如下:flow_mod:={matchfield,instructions(actionlist)}当输入报文所属的流有多个时,openflowcontroller可以通过多条flow_mod消息将每个流对应的flowentry发送给openflowswitch,以使openflowswitch将每个流对应的flowentry保存在不同的流表中。其中每个flowentry可选地包括上述handle_context动作及handle_context动作的参数(如,cid集合)。例如,假设输入报文对应的流有两个,两个流对应的流匹配域分别为flowmatchfield1和flowmatchfield2。openflowcontroller在发送给openflowswitch的第一条flow_mod消息中携带flowmatchfield1,以及flowmatchfield1对应的动作列表;在发送给openflowswitch的第二条flow_mod消息中携带flowmatchfield2,以及flowmatchfield2对应的动作列表。上述两条消息的动作列表中,除openflow已定义的动作类型及其参数外,根据上下文处理的需求,可选地包括handle_context动作类型及handle_context动作的参数(如,cid集合)。openflowcontroller还可以在每条flow_mod消息中携带流表的信息(如,流表的id),以使openflowswitch将每个flow_mod消息中携带的流的信息和流对应的cid集合添加到相应的流表中。例如,第一条flow_mod消息中包括tableid=1,第二条flow_mod消息中包括tableid=2)。此外,flow_mod消息中还可以携带用于指示流表处理顺序的信息。例如,第一条flow_mod消息中包括一个指示信息(如“goto-table2”)。当openflowswitch收到第一条flow_mod消息后根据table1中的flowmatchfield1找到相应的动作列表,并根据flowmatchfield1对应的动作对输入报文进行处理。如果其中包括handle_context动作,则转发器根据handle_context动作的参数获取输入报文所属的流对应的cid集合(如,cidlist1),并根据cidlist1在第二对应关系中找到与cidlist1对应的上下文,进而根据cidlist1对应的上下文对输入报文进行处理。完成上述table1的流规则处理后,还需要根据table2对输入报文进行匹配,找到相应的动作列表,并根据该动作列表对输入报文进行处理。步骤412:openflowswitch收到流规则安装消息后将输入报文的所属的流的信息,以及与所述输入报文的流相对应的cid集合添加到相应的第一对应关系中。上述步骤412为可选的,步骤412可以在步骤410后执行,也可以在步骤414后执行。步骤414:openflowswitch从buffer_id对应的缓冲区中取出缓存的报文,openflowswitch根据输入报文所属的流对应的动作对输入报文进行处理。当输入报文所属的流对应的动作是handle_context时,转发器对输入报文的处理与步骤406-步骤410相似,在此不再详述。在上述基于openflow的实现中,所述动作可以包括在flow_mod消息的apply-actions结构中,也可以包括在write-actions结构中。本领域的技术人员可以理解,以上只是以openflow协议为例来进行说明,转发器与控制器之间也可以采用其它的协议进行通信。转发器对报文进行处理后会得到各种处理结果,对于某些处理结果转发器需要上报给控制器。例如,合法监听得到的相关信息,或执行nat服务后得到的结果等等。对于某些结果,转发器可能需要执行进一步地处理,在本发明另外一个例子中,转发器在对输入报文进行处理后得到的处理结果有可能是一个新生成的报文。例如,转发器对输入报文的处理是对输入报文进行监听。由于监听结果往往需要转发给特定网络实体,因此转发器需要对监听到的结果(如,输入报文的内容)进行封装从而得到一个新生成的报文。转发器获取新生成的报文后,对新生成的报文的处理和对输入报文的处理一样,即对新生成的报文执行类似上述步骤302-步骤312的处理。现有技术中,openflow的action仅仅规定了对当前报文进行何种处理,对报文的处理结果转发器是不会维护的,因此,对于需要基于上一次对报文的处理结果来执行下一次的处理时,现有技术中的action是无法实现的。上述例子中描述的第一对应关系可以是技术人员在对转发器进行初始设置时存储在转发器中的,也可以是转发器在与控制器建立连接后由控制器发送给转发器的,例如,参见图5所示,转发器在接收输入报文之前可以接收控制器发送的如步骤502所示的流规则安装消息,所述流规则安装消息中包括转发器支持的部分或全部流的信息、以及与所述转发器支持的部分或全部流相对应的cid集合;例如,控制器可以通过一条或多条流规则安装消息将转发器支持的流的信息、以及转发器支持的流对应的cid集合发送给转发器。转发器将所述转发器支持的部分或全部流的信息、以及与所述转发器支持的部分或全部流相对应的cid集合一一对应地保存,以形成第一对应关系。上述例子中描述的第二对应关系可以是技术人员在对转发器进行初始设置时存储在转发器中的,也可以是转发器在与控制器建立连接后由控制器发送给转发器的,例如参见图5所示,转发器在接收输入报文之前,可以接收控制器发送的如步骤504所示的上下文安装消息,所述上下文安装消息中包括转发器支持的部分或全部cid、以及所述转发器支持的部分或全部cid对应的上下文;当控制器需要将多个上下文发送给转发器时,控制器可以将该多个上下文通过一个上下文安装消息发送给转发器,也通过多个上下文安装消息发送给转发器。每个上下文安装消息中可以包括一个或多个cid以及该一个或多个cid对应的上下文。转发器将所述转发器支持的部分或全部cid、以及与所述转发器支持的部分或全部上cid相对应的上下文一一对应地保存,以形成第二对应关系。在另外一个例子中,在转发器与控制器通信之前,转发器可以先与控制器进行协商,以获知对端对流和上下文的处理能力。例如,图6a所示为转发器先发起协商的情况,具体包括如下步骤:步骤a602:转发器向控制器发送能力协商请求消息,该能力协商请求消息中包括所述转发器支持的上下文能力列表,以使所述控制器将转发器能够支持的部分或全部上下文发送给转发器;可选地,上述控制器可以主动将转发器能够支持的部分或全部上下文发送给转发器;也可以是收到所述转发器发送的流规则请求消息活上下文请求消息后,再将转发器能够支持的部分或全部上下文发送给转发器。步骤a604:所述转发器接收所述控制器发送的协商应答消息,所述协商应答消息中可以包括控制器支持的上下文能力列表,以使所述转发器根据所述控制器支持的下文能力列表向所述控制器请求控制器能够支持的部分或全部上下文。上述转发器与控制器之前的协商也可以是由控制器主动发起的,例如,参见图6b所示,具体包括如下步骤:步骤b602:转发器接收控制器发送的能力协商请求消息,该能力协商请求消息中包括所述控制器支持的上下文能力列表,以使所述转发器根据所述控制器支持的下文能力列表向所述控制器请求控制器能够支持的部分或全部上下文;可选地,上述控制器可以主动将转发器能够支持的部分或全部上下文发送给转发器;也可以是收到所述转发器发送的流规则请求消息活上下文请求消息后,再将转发器能够支持的部分或全部上下文发送给转发器。步骤b604:所述转发器向控制器发送协商应答消息,所述协商应答消息中可以包括转发器支持的上下文能力列表,以使所述控制器将转发器能够支持的部分或全部上下文发送给转发器。控制器可以对转发器中存储的第一对应关系或第二对应关系进行管理,例如,参见图7所示,控制器可以对第一对应关系或第二对应关系中的信息进行查询、修改或删除等。下面将通过一些例子来进行说明,需要说明的是,这些例子都是相对独立的,它们之间不会互相影响。例子1,如果控制器要查询某个流对应的cid集合,则控制器会发送一个如步骤702所示的流规则查询请求消息给转发器,转发器则执行如下步骤:接收所述控制器发送的流规则查询请求消息,所述查询请求消息中包括待查询的流的信息;根据所述第一对应关系找到所述待查询流对应的cid集合,发送如步骤704所示的流规则查询应答消息给所述控制器,所述流规则查询应答消息中包括所述待查询的流的信息,以及所述待查询的流对应的cid集合。例子2,如果控制器要查询某个或某几个cid对应的上下文,则控制器会发送一个如步骤802所示的上下文查询请求消息给转发器,转发器则执行如下步骤:接收所述控制器发送的上下文查询请求消息,所述查询请求消息中包括待查询的cid;待查询的cid可以是一个或多个。根据第二对应关系找到的待查询的cid对应的上下文,并发送如步骤804所示的上下文查询应答消息给所述控制器,该查询应答消息中包括待查询的cid对应的上下文。可选地,上述查询应答消息中还可以包括所述待查询的cid。例子3,如果控制器要修改某个流对应的cid集合,则控制器会发送一个如步骤902所示的流规则修改消息给转发器,转发器则执行如下步骤:接收所述控制器发送的流规则修改消息,所述流修改消息中包括待修改的流的信息,以及所述待修改的流对应的新的cid集合;收到所述流规则修改消息后,在所述第一对应关系中将所述待修改的流对应的cid集合修改为所述新的cid集合。例如,转发器收到控制器发送的流规则修改消息,该流规则修改消息中包括的待修改的流的信息为:源ip地址为10.88.85.55、目的ip地址为10.88.80.56的流,待修改的流对应的新的cid集合为cid1、cid2、cid5。假设在第一对应关系中,源ip地址为10.88.85.55、目的ip地址为10.88.80.56的流原本对应的cid集合为:cid1、cid2、cid3。则转发器收到上述流修改消息后,将源ip地址为10.88.85.55、目的ip地址为10.88.80.56的流对应的cid集合修改为cid1、cid2、cid5。例子4,如果控制器要修改某个或某几个cid对应的上下文,则控制器会发送一个如步骤1002所示的上下文修改消息给转发器,转发器则执行如下步骤:接收所述控制器发送的上下文修改消息,所述上下文修改消息中包括待修改的cid,以及所述待修改的上下文的标识对应的新的上下文;收到所述上下文修改消息后,在所述第二对应关系中将所述待修改的cid对应的上下文修改为所述新的上下文。例如,cid1原本对应的上下文为context1a,如果转发器收到的上下文修改消息中包括cid1、以及cid1对应的新的上下文context1b,则转发器在第二对应关系中将cid1对应的上下文修改为context1b。例子5,如果控制器要删除某个流的信息,控制器会发送如步骤1102所示的流删除消息给转发器,转发器则执行如下步骤:接收控制器发送的流删除消息,该流删除消息中包括待删除流的信息;步从第一对应关系中删除所述待删除的流的信息、以及与所述待删除的流对应的cid集合。可选地,如果被删除的流对应的部分或全部cid没有对应其它的流,则转发器还可以从所述第二对应关系中删除所述被删除的流对应的部分或全部cid、以及与所述被删除的流对应的部分或全部cid相对应的上下文。例如,假设流1对应的cid集合包括cid1、cid2;流2对应的cid集合包括cid1、cid3。当转发器从第一对应关系中删除了流1的信息后,转发器发现cid2只与流1对应,则转发器还可以从第二对应关系中删除cid2对应的上下文。而cid1不仅与流1对应,其还与流2对应,因此转发器不会删除cid1对应的上下文。假设流2的信息也被删除后,转发器发现cid1没有对应其它流了,则从第二对应关系中删除cid1对应的上下文。可选地,转发器还可以将被删除的流的信息或被删除的上下文对应的cid上报给控制器。例子6,如果控制器要删除某个上下文,控制器会发送如步骤1202所示的一个上下文删除消息给转发器,转发器接收控制器发送的上下文删除消息,所述上下文删除消息中包括至少一个待删除的上下文标识;转发器从第二对应关系中,删除所述至少一个待删除的cid、以及与所述至少一个待删除的cid相对应的上下文。可选地,转发器在删除第二对应关系中的某个上下文后还可以对第一对应关系进行相应地修改,例如,控制器还可以执行如下步骤:在第一对应关系中,删除与所述已经删除的上下文对应的cid。上下文的删除可能会导致转发器在处理该上下文的cid对应的流时出现问题,因此,转发器在第一对应关系中删除与所述已经删除的上下文对应的cid之后,还可以在所述第一对应关系中,删除与所述被删除的cid相对应的流的信息。例如,假设流1对应的cid集合包括cid1、cid2;流2对应的cid集合包括cid1、cid3。当转发器从第二对应关系中删除了cid1对应的上下文后,转发器发现与cid1对应的流有流1和流2,转发器进一步在第一对应关系中删除流1的信息和流2的信息。并且,转发器可以进一步删除分别与流1和流2对应cid集合。可选地,转发器还可以将被删除的上下文对应的cid或被删除的流的信息上报给控制器。通过上述本发明提供的例子,控制器可以对转发器上保存的第一对应关系和第二对应关系进行有效的管理。上述任意一个方法实施例都可以由图2所示的转发器中的部分或全部组成部分来实现。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以可借助软件和必要的通用硬件平台的方式来实现,基于这样的理解,本发明的技术方案可以以计算机程序产品的形式体现出来,该计算机程序产品可以存储在一个非易失性存储介质(可以是只读光盘、u盘、移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机、接收端或者网络设备等)执行本发明各个实施例所描述的方法。以上对本发明所跟踪会话同步方法以及实现该方法的跟踪会话同步装置进行了详细介绍。对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,本说明书内容不应理解为对本发明的限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1