发明内容
本发明实施例提供一种基于流表的数据处理方法和装置,以满足对匹配同一条表项的不同数据报文,根据网络中变化的情况来对不同数据报文执行不同的处理。
第一方面,本发明实施例提供一种基于流表的数据处理方法,包括:
设备根据数据包中携带的信息在流表中查找流表项;
所述设备根据查找到的流表项中的动作值中包括的至少一个子动作值执行至少一个动作,其中,所述动作值包括一个或多个非确定的子动作值,所述一个或多个非确定的子动作值用于指示所述设备从数据包或环境变量中获取数据。
在第一方面的第一种可能的实现方式中,所述子动作值包括:子动作类型、子动作长度、子动作的数值。
根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述子动作值为非确定的子动作值,则
所述子动作类型为所述子动作要获取的数据所在的变量;
所述子动作长度为所述子动作字段的长度;
所述子动作的数值为所述子动作要获取的数据所在的掩码位;
所述设备根据流表项中的动作值中包括的至少一个子动作值执行至少一个动作,其中,所述动作值包括一个或多个非确定的子动作值,包括:
所述设备根据所述非确定的子动作值中的子动作类型确定所述子动作获取的数据所在的变量;
所述设备根据所述非确定的子动作值中的子动作的数值获取所述变量中,所述子动作的数值所指示的掩码位上的数据。
根据第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述动作值还包括确定的子动作值,在所述确定的子动作值中,
所述子动作的数值为确定值,用于指示所述设备根据子动作类型以及该确定值执行确定的动作。
根据第一方面、第一方面的第一种至第三种可能的实现方式中的任意一种,在第四种可能的实现方式中,所述每个子动作值还包括:序号,
所述设备根据流表项中的动作值中包括的至少一个子动作值执行至少一个动作,包括:
所述设备按所述序号依次根据至少一个所述子动作值执行至少一个动作。
根据第一方面、第一方面的第一种至第四种可能的实现方式中的任意一种,在第五种可能的实现方式中,所述动作值还包括:子动作个数。
根据第一方面、第一方面的第一种至第五种可能的实现方式中的任意一种,在第六种可能的实现方式中,所述环境变量包括系统时间、系统温度、系统日期、报文序号中的一个或多个。
第二方面,本发明实施例提供一种基于流表的数据处理装置,包括:
查找模块,用于根据数据包中携带的信息在流表中查找流表项;
执行模块,用于根据查找到的流表项中的动作值中包括的至少一个子动作值执行至少一个动作,其中,所述动作值包括一个或多个非确定的子动作值,所述一个或多个子动作值用于指示所述设备从数据包或环境变量中获取数据。
在第二方面的第一种可能的实现方式中,所述子动作值包括:子动作类型、子动作长度、子动作的数值。
根据第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述子动作值为非确定的子动作值,则
所述子动作类型为所述子动作要获取的数据所在的变量;
所述子动作长度为所述子动作字段的长度;
所述子动作的数值为所述子动作要获取的数据所在的掩码位;
所述设备根据流表项中的动作值中包括的至少一个子动作值执行至少一个动作,其中,所述动作值包括一个或多个非确定的子动作值,包括:
所述设备根据所述非确定的子动作值中的子动作类型确定所述子动作获取的数据所在的变量;
所述设备根据所述非确定的子动作值中的子动作的数值获取所述变量中,所述子动作的数值所指示的掩码位上的数据。
根据第二方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述动作值还包括确定的子动作值,在所述确定的子动作值中,
所述子动作的数值为确定值,用于指示所述设备根据子动作类型以及该确定值执行确定的动作。
根据第二方面、第二方面的第一种至第三种可能的实现方式,在第四种可能的实现方式中,所述每个子动作值还包括:序号,
所述设备根据流表项中的动作值中包括的至少一个子动作值执行至少一个动作,包括:
所述设备按所述序号依次根据至少一个所述子动作值执行至少一个动作。
根据第二方面、第二方面的第一种至第四种可能的实现方式,在第五种可能的实现方式中,所述动作值还包括:子动作个数。
根据第二方面、第二方面的第一种至第五种可能的实现方式,在第六种可能的实现方式中,所述环境变量包括系统时间、系统温度、系统日期、报文序号中的一个或多个。
本发明实施例提供的基于流表的数据处理方法和装置,通过将流表项Flow Entry中的动作值Action_Value进行扩展,使其包括至少一个用于指示所述设备从报文或环境变量中获取数据的子动作值sub_action_value,并在设备根据数据包中携带的信息确定流表项Flow Entry时,能够根据所述子动作值从报文或环境变量中获取数据,从而能够对匹配同一个流表的不同报文执行不同的动作。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例涉及的设备可以为硬件实现的OpenFlow路由器、OpenFlow交换机、软件实现的OpenFlow路由器、OpenFlow交换机、硬件或者软件实现的基于流表对报文进行处理的设备等。本领域技术人员应能理解上述的设备仅为举例,其他现有的或今后可能出现的路由设备如可适用于本发明,也应包含在本发明保护范围以内。
本发明实施例涉及的变量为一个统称,用于表示该变量中的数据是非确定的,变量可以为报文中或数据包中的某个参数或某个变量,例如报文的源地址,从各个设备发出的报文的源地址是不同的,因此对于接收报文的设备来说,源地址中的数据时可变的,因此可以称为变量;也可以为环境变量,如设备的系统时间、系统温度等。
图1为本发明基于流表的数据处理方法实施例一的流程图,本实施例的执行主体为设备。如图1所示,本实施例基于流表的数据处理方法,可以包括:
S101、设备根据数据包中携带的信息在流表中查找流表项。
具体地,设备根据数据包中携带的信息在流表中进行查找,查找到某条流表项(Flow Entry)的匹配域(Match Field)内容与该数据包相匹配,则认为该表项匹配该数据包,该数据包将执行该表项对应的动作。
S102、所述设备根据流表项的动作值中包括的至少一个子动作值执行至少一个动作,其中,所述动作值包括至少一个非确定的子动作值,所述非确定的子动作值用于指示所述设备从数据包或环境变量中获取数据。
具体地,所述设备根据步骤S101中查找到的流表项的动作值中包括的一个或多个子动作值执行一个或多个动作。所述动作值中包括的子动作值的个数即所述设备需要执行的动作的个数。
其中,动作值通常表示为Action Value,现有技术中,该动作值通常为一个确定的数值,用于执行一个预先确定的动作,例如,某个流表项中的动作类型Action Type表示转发数据包,对应的动作值Action Value例如为端口号20,则该流表项代表将数据包转发到端口号为20的端口。
而在本实施例中,流表项的动作值中可以包括一个或多个子动作值,即所述设备可以根据流表项对数据包执行一个或多个动作,而且,所述动作值包括一个或多个非确定的子动作值,该非确定的子动作值可以用于指示所述设备从可变化的字段中获取数据,即,可以获取到可变的数据,因此,本实施例的流表项的动作值可以使设备获取到可变的数据,从而可以根据网络中可能存在变化的情况来对不同的数据包添加不同的数据从而执行不同的的动作。
进一步地,本实施例中的动作值还可以包括一个或多个确定的子动作值sub_action_value,即子动作值中的子动作的数值为确定值,用于指示所述设备根据子动作类型以及该确定值执行确定的动作,例如当某个流表项中的动作类型Action Type表示转发数据包时,其对应的子动作值sub_action_value为“20”,该子动作表示将数据包转发到端口号为20的端口。具体地,由于流表项中的动作值Action_Value可以包括的至少一个子动作值sub_action_value,因此,在具体实现时,动作值Action_Value可以包含多个子动作值sub_action_value,并且,可以根据实际需求,例如当要执行的动作既包括确定的动作又包括获取非确定的数据时,可以将部分子动作值设置为sub_action_value从静态变量中获取数据,或者用于指示所述设备执行预先配置的动作,另一部分子动作值sub_action_value从报文或环境变量中获取数据,从而执行一系列复杂的动作。其中,环境变量可以包括系统时间,系统温度,系统日期、报文序号中的一个或多个。
进一步地,在具体实现时,所述子动作值sub_action_value可以包括:子动作类型sub_action_type、子动作长度sub_action_length、子动作的数值sub_value_or_bitmask,即采用TLV的格式,
其中,所述子动作类型sub_action_type可以为所述子动作要获取的数据所在的变量,或者,当该子动作值为确定的子动作值时,该子动作类型sub_action_type还可以用于指示该子动作值sub_action_value为确定值。例如,sub_action_type为0xffff可以表示sub_action_value为确定值,sub_action_type为0x1可以表示sub_action_value从报文的互联网协议版本4(Internet Protocol Version4,简称:ipv4)源地址src_ipv4字段中提取数值,sub_action_type为0x2可以表示sub_action_value从报文的源端口号src_port_number字段中提取数值。上述例子仅用于描述sub_action_type的功能,并不对其进行限定。
所述子动作长度sub_action_length可以为所述子动作值字段的长度,包括子动作类型、子动作长度、子动作的数值三个字段的总长度。
所述子动作的数值sub_value_or_bitmask可以为所述子动作的的具体值或者为从报文或环境变量获得子动作值的掩码位,例如,延续上述的例子,若sub_value_type为0x1,表示sub_action_value从报文的ipv4源地址src_ipv4字段中提取数值,则sub_value_or_bitmask可以为ipv4字段的掩码比特位bitmask;若sub_value_type为0xffff可以表示sub_action_value为确定值,则sub_value_or_bitmask可以为该确定值的具体数值。上述例子仅用于描述子动作类型的功能,并不对其进行限定。
图2为图1中S102的子步骤流程图,如图2所示,S102可以包括:
S1021、所述设备根据至少一个所述子动作类型确定所述子动作获取的数据所在的变量。
S1022、所述设备根据所述子动作的数值获取所述变量中,所述子动作的数值所指示的比特位上的数据。
通常,流表项Flow Entry中的动作值Action_Value通常为一个确定的数值,该确定的数值代表一个特定的动作,因此,现有技术的流表项可以执行预先设定的动作,例如将数据转发到某一特定的端口,或者,获取某一具体的静态数值等。但是,对于需要获取某一变量中的数值的场景,现有技术的流表项Flow Entry无法满足。例如对于在报文经过各个节点时对报文添加每个节点的时间戳的场景,该各个节点的时间戳可能不相同,因此不能预先设置为固定的数值,因此,现有技术的流表项Flow Entry无法获取。
而在本实施例中,流表项Flow Entry中的动作值Action_Value中包括一个或多个子动作值sub_action_value执行动作,而且,所述子动作值sub_action_value可以用于指示所述设备从报文或环境变量中获取数据,因此,本实施例的流表项Flow Entry能够获取某一报文中或某一环境变量中的数值。例如,对于添加时间戳的场景,可以在流表项FlowEntry中的动作值Action_Value中包括用于从节点的系统时钟获取数值的子动作值sub_action_value,从而可以获取各个节点的时间戳,从而能够在报文中体现该报文经过该设备的时间点,该功能可以用于探测报文时延或链路时延等场景。
本实施例,通过将流表项Flow Entry中的动作值Action_Value进行扩展,使其包括至少一个用于指示所述设备从报文或环境变量中获取数据的子动作值,并在设备根据数据包中携带的信息确定流表项时,能够根据所述子动作值从报文或环境变量中获取数据,由于报文或环境变量中的数据通常是非恒定的,因此,能够对匹配同一个流表的不同报文添加不同的数据,或者从匹配同一个流表的不同报文中提取不同的数据。以探测链路时延或报文时延为例,探测报文经过的每个设备,在探测报文转发离开该设备前添加时间戳,可以在探测末端根据探测报文获知探测报文经过不同设备的时间点。在这个例子上,以及之前的的从报文中提取动作值,都属于同样的场景:匹配同一条流表的不同报文,执行相同的动作类型,但是动作的值不同,比如时间戳不同,或者汇聚流中报文的IP或者端口号不一致。
进一步可选地,所述每个子动作值sub_action_value还可以包括:序号sequence_number,所述设备根据流表项Flow Entry中的动作值Action Value中包括的至少一个子动作值sub_action_value执行动作时,可以按所述序号sequence_number依次根据至少一个所述子动作值sub_action_value执行动作。这种方式尤其适用于动作值Action_Value包括多个子动作值sub_action_value的情况。
当不包含序号sequence_number时,设备需要根据各个子动作值sub_action_value中的sub_action_length,逐个识别子动作值sub_action_value,并依次根据各个子动作值sub_action_value执行动作。
进一步可选地,所述动作值Action Value中还可以包括:子动作个数number_of_sub_value。这种方式也适用于动作值Action_Value包括多个子动作值sub_action_value的情况,所述子动作个数number_of_sub_value用于使设备识别该流表项Flow Entry中包含的子动作个数。
当不包含子动作个数number_of_sub_value,设备可以根据各个子动作值sub_action_value中的sub_action_length以及该流表项Flow Entry的动作长度action_length推断出该流表项Flow Entry中包含的子动作个数。
下面采用几个具体的实施例,对图1所示方法实施例的技术方案进行详细说明。
图3为本发明基于流表的数据处理方法实施例二的流程图,本实施例的执行主体为设备,本实施例以获取各网络节点的时间戳为例,描述了如何将流表项中的动作值action_value设置为从系统环境变量获取可变的数值,而非固定值的方法。如图3所示,本实施的方法,可以包括:
S301、设备根据数据包中携带的信息在流表中查找流表项。
具体地,设备根据数据包中携带的信息在流表中进行查找,查找到某条流表项的匹配域内容和该数据包相匹配,则认为该流表项匹配该数据包,数据包将执行该表项对应的动作。
在本实施例中,假设所述流表项中的动作值Action_Value中包括一个子动作值sub_action_value。相应地,该子动作值sub_action_value包括:子动作类型sub_action_type、子动作长度sub_action_length、子动作的数值sub_value_or_bitmask。
由于本实施例以获取各网络节点的时间戳为例,因此可以将流表项中的动作类型action_type设置为添加/修改接收时间戳的类型。该“添加/修改接收时间戳的类型”不同于现有技术中的action_type通常设置的类型,可以用于指示该流表项为本发明实施例所提供的这种新的类型,其动作值action_value设置为从某个环境变量获取可变的数值,而非固定值。并且,可以将子动作值sub_action_value中的子动作类型sub_action_type设置为当前节点的时钟。
S302、所述设备根据所述子动作类型确定所述子动作获取的数据所在的变量。
即,所述设备根据所述子动作类型sub_action_type确定所述子动作获取的数据所在的变量为时钟。
S303、所述设备根据所述子动作的数值获取所述变量中,所述子动作的数值所指示的掩码位上的数据。
具体地,子动作的数值sub_value_or_bitmask可以设置为全1,表示获取时钟的全部比特位上的数值全,作为时间戳;或者,sub_value_or_bitmask也可以按如下设置:将秒、微秒所在的比特位设置为0,将其他比特位设置为1,标识获取时钟的年、月、日、时、分所在比特位上的数值,而不获取秒、微秒的数值,即该时间戳以分为单位。
在本实施例中,设备根据所述sub_action_type确定所述子动作获取的数据所在的变量、并根据sub_value_or_bitmask获取所述变量中,所述sub_value_or_bitmask所指示的比特位上的数据,从而通过流表项Flow Entry实现从系统环境变量获取可变的数值。
在本发明基于流表的数据处理方法实施例三中,以为多个用户提供无状态内网/外网IPv4地址转换的场景(即Stateless NAT44场景)为例,描述了如何利用一个流表项Flow Entry使多个用户完成同一动作的方法,其中,流表项Flow Entry中的动作值action_value既包括固定值也包括从系统环境变量获取可变的数值。具体地,在无状态NAT44技术中,内网IPv4地址和外围IPv4地址均由32个比特位构成,内网IP的32个比特位可以分为以下三段:内网前缀(Internal Prefix)、外网后缀(External Suffix)和端口段ID(Port SetID),外网IP的32个比特位可以分为以下两段:外网前缀(External Prefix)和外网后缀(External Suffix)。在设备中配置相应的规则,指示:内外网IP前缀的对应关系(InternalPrefix、External Suffix的对应),Port Set ID的长度以及在端口号中的对应比特(bits)。通过这样的规则,可以根据报文实现无状态的IPv4地址转换。
报文从内网发往外网,需要把源IP地址从内网IPv4地址转换成外网使用的IPv4地址;报文从外网发往内网,需要把目的IP地址从外网IPv4地址转换成内网使用的IPv4地址。根据上述规则,内网IP地址转换为外网IP地址,根据内网前缀(Internal Prefix)获得对应的外网前缀(External Prefix),根据内网IP地址中包含的外网后缀(External Suffix)构成了外网IPv4地址;外网IP地址转换为内网IP地址,根据外网前缀(External Prefix)获得对应的内网前缀(Internal Prefix),根据规则从报文中的目的端口号中获取对应的PSID,再根据外网IP地址中包含的外网后缀(External Suffix)一起构成内网IPv4地址。
内网中一个网段的各个用户的IPv4地址前缀(Internal Prefix)相同,但后缀(Internal Suffix)各不相同,在传统的流设备上用流表实现该技术,需要为每个内网用户均建立2条流表项(一条是内网IP转外网IP的流表项,另一条是外网IP转内网IP的流表项),如内网中有100万个用户,则需要200万条流表。而在本实施例中,可以只用2条流表就可以支持大量用户的内外网IPv4地址的转换。
图4a为本发明基于流表的数据处理方法实施例三中将数据包从内网发送到外网的流程图,如图4a所示,本实施的方法可以包括:
S401a、设备根据数据包中携带的信息在流表中查找流表项。
具体地,设备根据数据包中携带的信息在流表中进行查找,查找到某条流表项的匹配域Match field内容和该数据包相匹配,则认为该流表项匹配该数据包,该数据包将执行该表项对应的动作。
由于是将数据包从内网发送到外网,需要把源IPv4地址从内网IP地址转换成外网IP地址,采用本实施例的方法,流表项Flow Entry的匹配域可以为IP前缀(InternalPrefix),这样所有用户共用一个流表,但因为各个用户的IP后缀不相同(即InternalSuffix不同,采用Stateless NAT44技术则Internal Suffix=External Suffix+PSID),因此对应的动作值Action_Value为非确定值。将action_type设置为改变源IP地址(set_src_ipv4)的且Action_Value是非确定值的类型,改变后的源IP地址由外网前缀和外网后缀组成,因此,流表项Flow Entry中的动作值Action_Value中可以包括两个子动作值sub_action_value,分别用于获取外网前缀和外网后缀,即,可以按如下所述进行设置:
子动作值的个数为2,即number_of_sub_value=2;
第一个子动作值:sequence_number=1,sub_value_type设置为指示sub_value为确定值的类型,子动作长度sub_action_length取该第一个子动作值字段的实际长度,sub_value_or_bitmask设置为对应的外网前缀:sub_value_or_bitmask=external_prefix;
第二个子动作值:sequence_number=2,sub_value_type设置为指示sub_value为从数据包的源IP地址(src_ipv4地址)获取的类型,sub_value_length取该第二个子动作值字段的实际长度,sub_value_or_bitmask设置为一个mask值,该mask值指示的是如何从报文的源IPv4地址中提取external suffix(即掩码指示external suffix在内部IP的比特位)
S402a、所述设备根据所述第一个子动作值中的子动作类型确定所述第一个子动作获取的数据所在的变量。
即所述设备确定第一个子动作要获取的数值为确定值。
S403a、所述设备根据所述第一个子动作值中的子动作的数值获取数据。
即所述设备获取外网前缀external_prefix。
S404a、所述设备根据所述第二个子动作值中的子动作类型确定所述第二个子动作获取的数据所在的变量。
即所述设备确定第二个子动作要获取的数值为数据包的源IP地址(src_ipv4地址)。
S405a、所述设备根据所述第二个子动作值中的子动作的数值获取所述变量中所述子动作的数值所指示的掩码位上的数据。
具体地,所述设备获取所述数据包的源IP地址的掩码中external suffix所在比特位上的数值,即获取了所述外网后缀external suffix。
这样,两个子动作均执行完毕,所述设备可以将第一个子动作获取的外网前缀external_prefix和第二个子动作获取的外网后缀external suffix组合为外网IP地址,从而可以完成将数据包从内网发送到外网的操作。
图4b为本发明基于流表的数据处理方法实施例三中将数据包从外网发送到内网的流程图,如图4b所示,本实施的方法可以包括:
S401b、设备根据数据包中携带的信息在流表中查找流表项。
具体地,设备根据数据包中携带的信息在流表中进行查找,查找到某条流表项的匹配域Match field内容和该数据包相匹配,则认为该流表项匹配该数据包,该数据包将执行该表项对应的动作。
由于是将数据包从外网发送到内网,需要把目的IPv4地址从外网IP地址转换成内网IP地址,采用本发明的技术,流表项Flow Entry的匹配域可以为IP前缀(ExternalPrefix),这样所有用户共用一个流表,但因为各个用户的IP后缀不相同(即InternalSuffix不同,采用Stateless NAT44技术则Internal Suffix=External Suffix+PSID),因此对应的Action_Value为非确定值。将action_type设置为改变目的IP地址(set_src_ipv4)的且Action_Value是非确定值类型,改变后的源IP地址由内网前缀和内网后缀组成(采用Stateless NAT44技术则Internal Suffix=External Suffix+PSID)。因此,流表项Flow Entry中的动作值Action_Value中可以包括三个子动作值sub_action_value,分别用于获取内网前缀、外网后缀和端口段ID,即,可以按如下所述进行设置:
子动作值的个数为3,即number_of_sub_value=3;
第一个子动作值:sequence_number=1,sub_value_type设置为指示sub_value为确定值的类型,子动作长度sub_action_length取该第一个子动作值字段的实际长度,sub_value_or_bitmask设置为内网前缀:sub_value_or_bitmask=internal_prefix;
第二个子动作值:sequence_number=2,sub_value_type设置为指示sub_value为从数据包的源IP地址(src_ipv4地址)获取的类型,sub_value_length取该第二个子动作值字段的实际长度,sub_value_or_bitmask设置为一个mask值,该mask值指示的是如何从报文的目的IPv4地址中提取external suffix(即掩码指示external suffix在外部IP的比特位)。
第三个子动作值:sequence_number=3,sub_value_type设置为指示sub_value为从数据包的目的端口号(dst_port_number)字段获取的类型,sub_value_length取该第三个子动作值字段的实际长度,sub_value_or_bitmask设置为一个mask值,该mask值指示的是如何从报文的目的端口号中提取PSID(即掩码指示PSID在目的端口号的比特位)
S402b、所述设备根据所述第一个子动作值中的子动作类型确定所述第一个子动作获取的数据所在的变量。
即所述设备确定第一个子动作要获取的数值为确定值。
S403b、所述设备根据所述第一个子动作值中的子动作的数值获取数据。
即所述设备获取内网前缀internal_prefix。
S404b、所述设备根据所述第二个子动作值中的子动作类型确定所述第二个子动作获取的数据所在的变量。
即所述设备确定第二个子动作要获取的数值为数据包的源IP地址(src_ipv4地址)。此处,数据包的源IP地址为公网的IP地址。
S405b、所述设备根据所述第二个子动作值中的子动作的数值获取所述变量中所述子动作的数值所指示的掩码位上的数据。
具体地,所述设备获取所述数据包的源IP地址的掩码中external suffix所在比特位上的数值,即公网的IP地址的掩码中external suffix所在的比特位,即获取了所述外网后缀external suffix。
S406b、所述设备根据所述第三个子动作值中的子动作类型确定所述第三个子动作获取的数据所在的变量。
即所述设备确定第三个子动作要获取的数值为数据包的目的端口号(dst_port_number)。
S407b、所述设备根据所述第三个子动作值中的子动作的数值获取所述变量中所述子动作的数值所指示的掩码位上的数据。
具体地,所述设备获取所述数据包的PSID的掩码中端口号port_number所在的比特位上的数值,即获取所述目的端口号(dst_port_number)作为端口端ID(Port Set ID)。
这样,三个子动作均执行完毕,所述设备可以将第一个子动作获取的内网前缀internal_prefix、第二个子动作获取的外网后缀external suffix和第三个子动作获取的端口段ID(Port Set ID)组合为内网IP地址,从而可以完成将数据包从外网发送到内网的操作。
需要说明的是,本发明各个实施例中所述的子动作类型、子动作长度、子动作值,以及序号和子动作个数,在具体实现时可以分别选用以下字段进行标识:sub_action_type、sub_action_lenth、sub_value_or_bitmask、sequence_number、number of action,但也可以选用其他的字段名称,本发明实施例对此不作限定。
图5为本发明基于流表的数据处理装置实施例一的结构示意图,本实施例的装置500可以设置在路由器、交换机或计算机上,或者可以为路由器或交换机以及计算机本身。如图5所示,本实施的装置可以包括:查找模块501和执行模块502,其中,
查找模块501,用于根据数据包中携带的信息在流表中查找流表项;
执行模块502,用于根据查找到的流表项中的动作值中包括的至少一个子动作值执行至少一个动作,其中,所述动作值包括一个或多个非确定的子动作值,所述一个或多个子动作值用于指示所述设备从数据包或环境变量中获取数据。
进一步地,本实施例的装置中,所述子动作值可以包括:子动作类型、子动作长度、子动作的数值。
进一步地,本实施例的装置中,所述子动作值为非确定的子动作值,则
所述子动作类型为所述子动作要获取的数据所在的变量;
所述子动作长度为所述子动作字段的长度;
所述子动作的数值为所述子动作要获取的数据所在的掩码位;
所述执行模块502具体可以用于:
根据所述非确定的子动作值中的子动作类型确定所述子动作获取的数据所在的变量;
根据所述非确定的子动作值中的子动作的数值获取所述变量中,所述子动作的数值所指示的掩码位上的数据。
进一步地,本实施例的装置中,所述动作值还可以包括确定的子动作值,在所述确定的子动作值中,
所述子动作的数值为确定值,用于指示所述设备根据子动作类型以及该确定值执行确定的动作。
进一步地,本实施例的装置中,所述每个子动作值还包括:序号,
所述执行模块502具体可以用于:按所述序号依次根据至少一个所述子动作值执行至少一个动作。
进一步地,本实施例的装置中,所述动作值还包括:子动作个数。
进一步地,本实施例的装置中,所述环境变量包括系统时间、系统温度、系统日期、报文序号中的一个或多个。
本实施例的基于流表的数据处理装置,可以执行图1~图4b所述的任一方法实施例所述的技术方案,具备相应的功能模块,其技术原理类似,此处不再赘述。
本实施例的基于流表的数据处理装置,通过将流表项Flow Entry中的动作值Action_Value进行扩展,使其包括至少一个用于指示所述设备从报文或环境变量中获取数据的子动作值,并在查找模块根据数据包中携带的信息确定流表项时,能够根据所述子动作值从报文或环境变量中获取数据,由于报文或环境变量中的数据通常是非恒定的,因此,能够对匹配同一个流表的不同报文添加不同的数据,或者从匹配同一个流表的不同报文中提取不同的数据。
图6为本发明设备实施例一的结构示意图,本实施例的设备600可以为路由器、交换机或计算机。如图6所示,本实施的设备可以包括:存储器601和处理器602,其中,存储器601,用于存储指令,所述指令可以为计算机可执行程序;处理器602,与所述存储器601耦合,所述处理器602被配置为执行存储在所述存储器601中的指令,且所述处理器602被配置为用于执行图1~图4b所示的任一实施例的基于流表的数据处理方法。
具体地,所述处理器602可以用于:
根据数据包中携带的信息在流表中查找流表项;
根据查找到的流表项中的动作值中包括的至少一个子动作值执行至少一个动作,其中,所述动作值包括一个或多个非确定的子动作值,所述一个或多个子动作值用于指示所述设备从数据包或环境变量中获取数据。
进一步地,本实施例的设备中,所述子动作值可以包括:子动作类型、子动作长度、子动作的数值。
进一步地,本实施例的设备中,所述子动作值为非确定的子动作值,则
所述子动作类型为所述子动作要获取的数据所在的变量;
所述子动作长度为所述子动作字段的长度;
所述子动作的数值为所述子动作要获取的数据所在的掩码位;
所述处理器602具体可以用于:
根据所述非确定的子动作值中的子动作类型确定所述子动作获取的数据所在的变量;
根据所述非确定的子动作值中的子动作的数值获取所述变量中,所述子动作的数值所指示的掩码位上的数据。
进一步地,本实施例的设备中,所述动作值还可以包括确定的子动作值,在所述确定的子动作值中,
所述子动作的数值为确定值,用于指示所述设备根据子动作类型以及该确定值执行确定的动作。
进一步地,本实施例的设备中,所述每个子动作值还包括:序号,
所述处理器602具体可以用于:按所述序号依次根据至少一个所述子动作值执行至少一个动作。
进一步地,本实施例的装置中,所述动作值还包括:子动作个数。
进一步地,本实施例的装置中,所述环境变量包括系统时间、系统温度、系统日期、报文序号中的一个或多个。
本实施例的设备,通过将流表项Flow Entry中的动作值Action_Value进行扩展,使其包括至少一个用于指示所述设备从报文或环境变量中获取数据的子动作值,并在查找模块根据数据包中携带的信息确定流表项时,能够根据所述子动作值从报文或环境变量中获取数据,由于报文或环境变量中的数据通常是非恒定的,因此,能够对匹配同一个流表的不同报文添加不同的数据,或者从匹配同一个流表的不同报文中提取不同的数据。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。