本发明涉及网络通信技术领域,特别是涉及一种数据包处理方法及装置。
背景技术:
SDN(Software Defined Network,软件定义网络),是一种新型的网络架构,给网络虚拟化提供了新的实现方式,SDN通过OpenFlow协议将网络设备控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能。其中,OpenFlow是一种网络通讯协议,能够控制网络交换器或路由器的转送平面。在网络虚拟化中中,通常将属于同一虚拟网络的逻辑资源的集合称为一个切片,切片标识方法是网络虚拟化中基础且重要的一环,其用于标识不同的切片,保证网络设备能识别来自不同切片的流量,保障切片间的隔离。
基于固定字段的标识方法,是指使用数据包包头中的固定字段作为切片的标识,它能够有效地保障切片之间的隔离性。其中,VLAN(Virtual Local Area Network,虚拟局域网)字段是最常用的固定字段之一。VLAN字段主要用于划分虚拟局域网,因此在虚拟局域网环境中,VLAN字段最常用于切片标识。但是,现有的基于VLAN字段的标识方法,在数据包传输过程中,当用VLAN字段去标识一个切片时,由于需要确保各切片间的隔离,VLAN字段是固定且无法修改的。
技术实现要素:
本发明实施例的目的在于提供一种数据包处理方法及装置,解决了当用VLAN字段去标识一个切片时,由于需要确保各切片间的隔离,VLAN字段无法修改的问题。具体技术方案如下:
本发明实施例公开了一种数据包处理方法,应用于软件定义网络SDN,所述方法包括:
获取所述SDN中的未封装数据包;
判断所述未封装数据包中是否有使用虚拟局域网VLAN字段的需求;
当所述未封装数据包中有使用VLAN字段的需求时,则在所述未封装数据包中的原始帧结构中插入两个VLAN字段,生成具有双层VLAN字段的数据包,其中,所述两个VLAN字段分别为:用于作为所述未封装数据包外层VLAN标签的第一VLAN字段,及用于作为所述未封装数据包内层VLAN标签的第二VLAN字段,所述第一VLAN字段用于切片标识,所述第二VLAN字段用于提供使用VLAN字段的需求,并且根据不同VLAN字段的需求,更改所述第二VLAN字段,所述第一VLAN字段与所述第二VLAN字段不同;
发送所述具有双层VLAN字段的数据包至交换机,以使所述交换机处理所述具有双层VLAN字段的数据包;
当所述未封装数据包中没有使用VLAN字段的需求时,则在所述未封装数据包中的原始帧结构中插入一个所述第一VLAN字段,生成具有单层VLAN字段的数据包;
发送所述具有单层VLAN字段的数据包至交换机,以使所述交换机处理所述具有单层VLAN字段的数据包。
优选地,所述判断所述未封装数据包中是否有使用虚拟局域网VLAN字段的需求,包括:
根据所述未封装数据包中携带的入口交换机的地址及所述未封装数据包的接收端口,获得所述未封装数据包对应的用户;-
获取所有用户预存的使用虚拟局域网VLAN字段的需求状态;
在所有用户预存的需求状态中找到所述未封装数据包对应的用户预存的需求状态,判断所述未封装数据包对应的用户是否有VLAN字段需求。
优选地,所述分配两个VLAN字段给所述未封装数据包,生成具有双层VLAN字段的数据包,包括:
将所述第一VLAN字段作为所述未封装数据包的外层VLAN标签,分配给所述外层VLAN标签预设的第一TPID(Tag Protocol Identifier,标签协议标识)值;
将所述第二VLAN字段作为所述未封装数据包的内层VLAN标签,分配所述内层VLAN标签预设的第二TPID值;
封装所述未封装数据包,生成具有双层VLAN字段的数据包。
优选地,所述第一TPID值为0x8a88,所述第二TPID值为0x8100。
优选地,所述以使所述OpenFlow交换机处理所述具有双层VLAN字段的数据包,包括:
所述OpenFlow交换机,接收所述具有双层VLAN字段的数据包;
根据OpenFlow协议,剥掉所述外层VLAN标签,得到具有内层VLAN标签的数据包;
对所述具有内层VLAN标签的数据包进行处理动作,生成处理后的具有内层VLAN标签的数据包,所述处理动作至少包括:指定所述具有内层VLAN标签的数据包的转发端口,修改所述具有内层VLAN标签的数据包的包头结构;
将所述处理后的具有内层VLAN标签的数据包重新压入所述外层VLAN标签,生成压入后的具有双层VLAN字段的数据包;
发送所述压入后的具有双层VLAN字段的数据包至相邻交换机,以使相邻交换机处理所述压入后的具有双层VLAN字段的数据包。
优选地,所述根据OpenFlow协议,剥掉所述外层VLAN标签,得到具有内层VLAN标签的数据包之前,所述处理方法还包括:
对所述具有双层VLAN字段的数据包进行校验。
优选地,所述根据OpenFlow协议,剥掉所述外层VLAN标签,得到具有内层VLAN标签的数据包之后,所述处理方法还包括:
将所述外层VLAN标签的VLAN ID(Virtual Local Area Network Identity,虚拟局域网身份标识)值写入元数据Metadata域。
本发明实施例还公开了一种数据包处理装置,应用于软件定义网络SDN,所述装置包括:
获取模块,用于获取所述SDN中的未封装数据包;
判断模块,用于判断所述未封装数据包中是否有使用虚拟局域网VLAN字段的需求;
第一生成模块,用于当所述未封装数据包中有使用VLAN字段的需求时,则在所述未封装数据包中的原始帧结构中插入两个VLAN字段,生成具有双层VLAN字段的数据包,其中,所述两个VLAN字段分别为:用于作为所述未封装数据包外层VLAN标签的第一VLAN字段,及用于作为所述未封装数据包内层VLAN标签的第二VLAN字段,所述第一VLAN字段用于切片标识,所述第二VLAN字段用于提供使用VLAN字段的需求,并且根据不同VLAN字段的需求,更改所述第二VLAN字段,所述第一VLAN字段与所述第二VLAN字段不同;
第一发送模块,用于发送所述具有双层VLAN字段的数据包至交换机,以使所述交换机处理所述具有双层VLAN字段的数据包;
第二生成模块,用于当所述未封装数据包中没有使用VLAN字段的需求时,则在所述未封装数据包中的原始帧结构中插入一个所述第一VLAN字段,生成具有单层VLAN字段的数据包;
第二发送模块,用于发送所述具有单层VLAN字段的数据包至交换机,以使所述交换机处理所述具有单层VLAN字段的数据包。
优选地,所述判断模块,进一步包括:
获得子模块,用于根据所述未封装数据包中携带的入口交换机的地址及所述未封装数据包的接收端口,获得所述未封装数据包对应的用户;
获取子模块,用于获取所有用户预存的使用虚拟局域网VLAN字段的需求状态;
判断子模块,用于在所有用户预存的需求状态中找到所述未封装数据包对应的用户预存的需求状态,判断所述未封装数据包对应的用户是否有VLAN字段需求。
优选地,所述第一生成模块,进一步包括:
第一分配子模块,用于将所述第一VLAN字段作为所述未封装数据包的外层VLAN标签,分配给所述外层VLAN标签预设的第一TPID值;
第二分配子模块,用于将所述第二VLAN字段作为所述未封装数据包的内层VLAN标签,分配所述内层VLAN标签预设的第二TPID值;
封装子模块,用于封装所述未封装数据包,生成具有双层VLAN字段的数据包。
优选地,所述第一TPID值为0x8a88,所述第二TPID值为0x8100。
优选地,所述第二发送模块,进一步包括:
接收子模块,用于接收所述具有双层VLAN字段的数据包;
外层VLAN标签剥离子模块,用于根据OpenFlow协议,剥掉所述外层VLAN标签,得到具有内层VLAN标签的数据包;
处理子模块,用于对所述具有内层VLAN标签的数据包进行处理动作,生成处理后的具有内层VLAN标签的数据包,所述处理动作至少包括:指定所述具有内层VLAN标签的数据包的转发端口,修改所述具有内层VLAN标签的数据包的包头结构;
重压入子模块,用于将所述处理后的具有内层VLAN标签的数据包重新压入所述外层VLAN标签,生成压入后的具有双层VLAN字段的数据包;
发送子模块,用于发送所述压入后的具有双层VLAN字段的数据包至相邻交换机,以使相邻交换机处理所述压入后的具有双层VLAN字段的数据包。
优选地,所述数据包处理装置,进一步包括:
校验模块,用于对所述具有双层VLAN字段的数据包进行校验;
写入模块,用于将所述外层VLAN标签的VLAN ID值写入元数据Metadata域。
本发明实施例提供的数据包处理方法,通过分配两个VLAN字段给未封装数据包,生成具有双层VLAN字段的数据包,其中一个VLAN字段作为切片标识,另一个VLAN字段作为用户的使用需求,这样,数据包中的VLAN字段不但能够用于切片标识,还能够用于用户进行VLAN字段的其他应用,丰富了VLAN字段的应用面。还能够当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中数据包处理方法的流程图;
图2为本发明实施例中数据包处理方法的数据包帧结构示意图;
图3为本发明实施例的具有双层VLAN字段的数据包在交换机中的处理流程示意图;
图4为本发明实施例中数据包处理装置的一种结构示意图;
图5为本发明实施例中数据包处理装置的另一种结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种数据包处理方法,参考图1,图1为本发明实施例的一种数据包处理方法的流程图,该方法包括:
S101、获取SDN中的未封装数据包。
SDN网络中,用户的虚拟机发出的数据包第一次进入SDN时,入口交换机将原始的没有封装的数据包转交给SDN的虚拟化层,这就是系统获取该未封装数据包的过程。一般地,未封装数据包,是指业务数据还未映射到某个封装协议的数据包,未封装数据包不具有对应协议的包头。
S102、判断未封装数据包中是否有使用虚拟局域网VLAN字段的需求。
系统获取未封装数据包后,会判断未封装数据包中是否有使用虚拟局域网VLAN字段的需求。这样,才能为下一步的VLAN字段分配提供依据。具体的判断过程,通常是根据未封装数据包中携带的入口交换机的地址及未封装数据包的接收端口,获得未封装数据包对应的用户。例如,未封装数据包中携带的入口交换机的IP地址为192.168.1.3,接收端口为25,那么系统就能够很容易地确定未封装数据包由哪台虚拟机发出,从而确定对应的用户,根据用户预存在系统中的使用虚拟局域网VLAN字段的需求状态进行判断。其中,需求状态包括:有使用虚拟局域网VLAN字段的需求和没有使用虚拟局域网VLAN字段的需求。该预存需求状态可以以列表形式存储于系统。再例如,列表中,预存了3个用户的需求状态,其中用户A和B为有使用虚拟局域网VLAN字段的需求,用户C为无使用虚拟局域网VLAN字段的需求,那么对应地,系统就会将用户A和B发来的未封装数据包判断为有使用虚拟局域网VLAN字段的需求,将用户C发来的未封装数据包判断为无使用虚拟局域网VLAN字段的需求。当然,以上示例只是本发明实施例的其中一种体现形式,只要能达到判断未封装数据包中是否有使用虚拟局域网VLAN字段的需求的目的,都属于本发明的保护范围。
S103、当未封装数据包中有使用VLAN字段的需求时,则在未封装数据包中的原始帧结构中插入两个VLAN字段,生成具有双层VLAN字段的数据包,其中,两个VLAN字段分别为:用于作为未封装数据包外层VLAN标签的第一VLAN字段,及用于作为未封装数据包内层VLAN标签的第二VLAN字段,第一VLAN字段用于切片标识,第二VLAN字段用于提供使用VLAN字段的需求,并且根据不同VLAN字段的需求,更改第二VLAN字段,第一VLAN字段与第二VLAN字段不同。
参考图2,图2为本发明实施例中数据包处理方法的数据包帧结构示意图,一般地,一个数据包的原始帧结构中包括:目的地址、源地址、以太帧类型、载荷、FCS(Frame check sequence,帧校验序列),通过在数据包的原始帧结构中插入VLAN字段,能够对数据包起到标识的作用。
如果未封装数据包中有使用VLAN字段的需求,那么,系统根据IEEE 802.1ad协议,以图2为例,在未封装数据包中的原始帧结构中插入两个VLAN字段,从而生成具有双层VLAN字段的数据包,两个VLAN字段插入在目的地址、源地址,是为了交换机处理时方便识别分析,但是能够实现将两个VLAN字段插入原始帧结构后的其他双层VLAN字段的数据包,也属于本发明的保护范围,本发明只是举例说明。当然,本发明实施例不限于根据IEEE 802.1ad协议对未封装数据包进行VLAN字段分配。
该数据包中,两个VLAN字段分别为第一VLAN字段和第二VLAN字段,其中,第一VLAN字段作为未封装数据包的外层VLAN标签,分配有第一TPID值,可以用于切片标识;第二VLAN字段作为未封装数据包的内层VLAN标签,分配有第二TPID值,可以用于提供使用VLAN字段的需求。一般地,如图2所示,第一TPID值为0x8a88,第二TPID值为0x8100。当然,所有可以实现插入VLAN字段的TPID值,都属于本发明的保护范围。
并且,第二VLAN字段根据不同的使用需求,可以对其中的内容进行更改,例如一些针对VLAN字段的实验就需要通过修改VLAN字段内容来进行。当然,第一VLAN字段和第二VLAN字段是两个不同的VLAN字段。
VLAN字段分配完成后,系统将分配后的未封装数据包进行封装,从而生成具有双层VLAN字段的数据包。
S104、发送具有双层VLAN字段的数据包至交换机,以使交换机处理具有双层VLAN字段的数据包。
交换机作为SDN网络中的节点,能够将数据包进行转发,并且也能根据指定协议对数据包进行拆分和重组。系统将具有双层VLAN字段的数据包至交换机,该交换机可以是Openflow交换机,即根据Openflow协议对数据包进行处理的交换机。
S105、当未封装数据包中没有使用VLAN字段的需求时,则在未封装数据包中的原始帧结构中插入一个第一VLAN字段,生成具有单层VLAN字段的数据包。
如果未封装数据包中没有使用VLAN字段的需求,为了节省网络资源,如图2所示,那么系统只分配一个VLAN字段给该未封装数据包,从而生成具有单层VLAN字段的数据包。当然,系统会将分配后的未封装数据包进行封装,从而生成具有单层VLAN字段的数据包。
S106、发送具有单层VLAN字段的数据包至交换机,以使交换机处理具有单层VLAN字段的数据包。
系统将具有单层VLAN字段的数据包至交换机,该交换机可以是Openflow交换机,即根据Openflow协议对数据包进行处理的交换机。
本发明上述实施例的数据包中的VLAN字段不但能够用于切片标识,还能够用于用户进行VLAN字段的其他应用,丰富了VLAN字段的应用面,并且,双层VLAN字段的数据包帧结构能够给用户提供完整的流空间操作权限。
本发明实施例还公开了数据包处理方法的第二种实施例,在实施例一的基础上进一步包括:
S201、接收具有双层VLAN字段的数据包。
S202、根据OpenFlow协议,剥掉外层VLAN标签,得到具有内层VLAN标签的数据包。
交换机根据OpenFlow协议,剥掉具有双层VLAN字段的数据包的外层VLAN标签,是为了得到具有内层VLAN标签的数据包,从而能够使交换机中的流表处理该具有内层VLAN标签的数据包。
S203、对具有内层VLAN标签的数据包进行处理。
对具有内层VLAN标签的数据包进行处理动作,生成处理后的具有内层VLAN标签的数据包,处理动作至少包括:指定具有内层VLAN标签的数据包的转发端口,修改具有内层VLAN标签的数据包的包头结构。
用户可以对具有内层VLAN标签的数据包进行一系列处理,从而根据客户的需求对具有内层VLAN标签的数据包进行利用。例如,用户可以指定具有内层VLAN标签的数据包的转发端口,这样该数据包就可以通过指定的端口转发,提高了转发的灵活性;或者,用户还可以修改具有内层VLAN标签的数据包的包头结构。用户通过修改具有内层VLAN标签的数据包的包头结构,能够方便地对数据包进行改造实验,从而可以使数据包赋予更多的特性,大大提高了数据包的实验便利性。
S204、将具有内层VLAN标签的数据包重新压入外层VLAN标签,生成压入后的具有双层VLAN字段的数据包。
压入后的具有双层VLAN字段的数据包,与接收的具有双层VLAN字段的数据包结构相同。
S205、发送压入后的具有双层VLAN字段的数据包至与交换机进行数据连接的相邻交换机,以使相邻交换机继续处理压入后的具有双层VLAN字段的数据包。
本发明实施例二是具有双层VLAN字段的数据包的在交换机中的处理过程,可以利用OpenFlow协议中的流水线模型以及匹配域中的Metadata结构,有效地提取具有双层VLAN字段的数据包中的信息。参考图3,图3为本发明实施例的具有双层VLAN字段的数据包在交换机中的处理流程示意图,数据包先进入流表0对外层VLAN标签进行校验匹配,若是Q-in-Q的结构,则剥掉外层VLAN标签,并将VLAN标签的VLAN ID值写入Metadata域,然后将数据包进一步传递到流表q进行内层VLAN标签的校验匹配处理,在离开交换机前,将具有内层VLAN标签的数据包重新压入外层VLAN标签,生成压入后的具有双层VLAN字段的数据包,并发送压入后的具有双层VLAN字段的数据包至相邻交换机,以使相邻交换机处理压入后的具有双层VLAN字段的数据包。
Q-in-Q作为IEEE 802.1Q协议补充,在2005年被IEEE组织标准化,标准号为IEEE 802.1ad,Q-in-Q实现了双层VLAN标签,Q-in-Q最原始的作用是当做跨域的隧道使用,用户私网的VLAN标签被封装在公网VLAN标签中,使私网的报文能够不修改原来的报文信息穿越运营商的网络。
本发明实施例还公开了一种数据包处理装置,参考图4,图4为本发明实施例中数据包处理装置的一种结构示意图,该装置包括:
获取模块301,用于获取SDN中的未封装数据包。
判断模块302,用于判断未封装数据包中是否有使用虚拟局域网VLAN字段的需求。
第一生成模块303,用于当未封装数据包中有使用VLAN字段的需求时,则在未封装数据包中的原始帧结构中插入两个VLAN字段,生成具有双层VLAN字段的数据包,其中,两个VLAN字段分别为:用于作为未封装数据包外层VLAN标签的第一VLAN字段,及用于作为未封装数据包内层VLAN标签的第二VLAN字段,第一VLAN字段用于切片标识,第二VLAN字段用于提供使用VLAN字段的需求,并且根据不同VLAN字段的需求,更改第二VLAN字段,第一VLAN字段与第二VLAN字段不同。
第一发送模块304,用于发送具有双层VLAN字段的数据包至交换机,以使交换机处理具有双层VLAN字段的数据包。
第二生成模块305,用于当未封装数据包中没有使用VLAN字段的需求时,则在未封装数据包中的原始帧结构中插入一个第一VLAN字段,生成具有单层VLAN字段的数据包。
第二发送模块306,用于发送具有单层VLAN字段的数据包至交换机,以使交换机处理具有单层VLAN字段的数据包。
其中,判断模块302,进一步包括:
获得子模块,用于根据未封装数据包中携带的入口交换机的地址及未封装数据包的接收端口,获得未封装数据包对应的用户。
获取子模块,用于获取所有用户预存的使用虚拟局域网VLAN字段的需求状态。
判断子模块,用于在所有用户预存的需求状态中找到未封装数据包对应的用户预存的需求状态,判断未封装数据包对应的用户是否有VLAN字段需求。
第一生成模块303,进一步包括:
第一分配子模块,用于将第一VLAN字段作为未封装数据包的外层VLAN标签,分配给外层VLAN标签预设的第一TPID值。
第二分配子模块,用于将第二VLAN字段作为未封装数据包的内层VLAN标签,分配内层VLAN标签预设的第二TPID值。
封装子模块,用于封装未封装数据包,生成具有双层VLAN字段的数据包。
其中,第一TPID值为0x8a88,第二TPID值为0x8100。
第二发送模块305,进一步包括:
接收子模块,用于OpenFlow交换机,接收具有双层VLAN字段的数据包。
外层VLAN标签剥离子模块,用于根据OpenFlow协议,剥掉外层VLAN标签,得到具有内层VLAN标签的数据包。
处理子模块,用于对具有内层VLAN标签的数据包进行处理动作,生成处理后的具有内层VLAN标签的数据包,处理动作至少包括:指定具有内层VLAN标签的数据包的转发端口,修改具有内层VLAN标签的数据包的包头结构。
重压入子模块,用于将处理后的具有内层VLAN标签的数据包重新压入外层VLAN标签,生成压入后的具有双层VLAN字段的数据包。
发送子模块,用于发送压入后的具有双层VLAN字段的数据包至相邻交换机,以使相邻交换机处理压入后的具有双层VLAN字段的数据包。
本发明上述实施例的装置,其数据包中的VLAN字段不但能够用于切片标识,还能够用于用户进行VLAN字段的其他应用,丰富了VLAN字段的应用面。
本发明实施例还公开了一种数据包处理装置,参考图5,图5为本发明实施例中数据包处理装置的另一种结构示意图,在图4所示装置的结构上进一步包括:
校验模块307,用于对具有双层VLAN字段的数据包进行校验。
写入模块308,用于将外层VLAN标签的VLAN ID值写入元数据Metadata域。
本发明上述实施例的装置,通过对所述具有双层VLAN字段的数据包进行校验,能够提高数据包的准确性,通过将外层VLAN标签的VLAN ID值写入元数据Metadata域,能够有效地提取具有双层VLAN字段的数据包中的信息。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。