背景技术
随着人们对网络性能需求的提高,网络也暴露出了越来越多的弊病,为了克服这些弊端,在路由器的体系结构当中会加入许多复杂功能,比如开放式最短路径优先(OSPF,Open Shortest Path First)、边界网关协议(BGP)、组播、区分服务、流量工程、网络地址交换(NAT)、防火墙、多协议标签交换(MPLS,Multi-Protocol Label Switching)等等。这就使得路由器等交换设备越来越臃肿而且性能提升的空间越来越小。
然而,与网络领域的困境截然不同的是,计算机领域实现了日新月异的发展。由于采用一个简单可用的硬件底层(x86指令集),计算机在软件方面,不论是应用程序还是操作系统都取得了飞速的发展。目前,很多主张重新设计计算机网络体系结构的人士认为:网络可以复制计算机领域的成功来解决现在网络所遇到的所有问题。在这种思想的指导下,将来的网络必将是这样的:底层的数据通路(交换机、路由器)是“哑的、简单的、最小的”,并定义一个对外开放的关于流表(FlowTable)的公用的应用程序编程接口(API,Application Programming Interface),同时采用控制器来控制整个网络。这样,研究人员就可以通过在控制器上自由的调用底层的API来编程,从而实现网络的创新。
基于上述的理念,出现了软件定义网络(SDN,Software Defined Network)的概念,其最初是由美国斯坦福大学clean slate研究组提出的一种新型网络创新架构。目前,其核心技术OpenFlow协议,通过将网络设备控制面与数据面分离开来,从而实现了网络流量的灵活控制,为核心网络及应用的创新提供了良好的平台。其中,OpenFlow是一种新型网络交换模型。
OpenFlow协议用于描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。
流表FlowTable,用于配置交换机转发路径,一个OpenFlow交换机包括一个或者多个流表FlowTable。每个流表FlowTable中每个流条目主要包括三个部分:(1)匹配域(Match Fields),使用入端口(ingress port),包头(packetheader)以及前一个流表FlowTable传递过来的元数据(metadata);(2)计数器(Counters),用于对匹配成功的包进行计数;(3)指令集(Instructions),用于修改动作集(Action Set)或者流水线处理。
其中,Match Fields字段,是从报文的头部中取出的信息,用于匹配一条流表;Counters字段,用于管理各种统计信息;Instructions字段,用于对报文进行操作的各种操作指令,比如丢弃报文、转发报文到指定端口、设置报文头部字段值、增加封装标签等。动作集(Action Set)和每个报文相关联,它在流水线的多个流表之间传递并被各流表的指令所修改,直到流水线处理结束,形成最终的动作集。具体地,Match Fields字段包括:进入接口、元数据、以太源地址、目标地址、类型,虚拟局域网标识(vlan id),vlan优先级,MPLS标签、MPLS流量类(MPLS Traffic Class)、IP源地址、目标地址、协议、IP服务类型(IP ToS)位,传输控制协议/用户数据协议(TCP/UDP)源端口号、TCP/UDP目的端口号或控制报文协议(ICMP)操作码等。一个域包括一个确定值或者所有值(ANY),更准确的匹配可以通过掩码实现。
数据包转发中,从第一个流表FlowTable开始匹配,可能会经历多个流表FlowTable,这个过程称之为流水线处理(pipeline processing)。流水线处理的好处就是允许数据包被发送到接下来的流表中做进一步处理或者元数据信息在表中流动。首先,找到流表FlowTable中优先级最高的流条目进行匹配,即根据入端口,包头,以及有上一个流表指定的元数据三类匹配域进行匹配。如果某个数据包成功匹配了流表中某个流条目,则更新这个流条目的计数器,同时这个流条目中的指令集操作将被应用生效。流水线处理终结于指令集中没有指定下一个流表,这时数据包通常会被所带有的动作集处理后转发。
目前,常用的openflow匹配方式采用域值及掩码匹配方式来完成数据包的转发,需要更多的流表配置消息和更多的流表条目,增加了管理复杂性,也浪费了宝贵的流表硬件资源;而且,采用掩码方式增加了SDN控制器的复杂性。同时也降低了数据包的转发效率。
发明内容
本发明提供一种实现数据包转发的方法及系统,通过对报文域值范围的流表匹配,能够降低SDN控制器的计算复杂性,提高流表配置效率,节省流表硬件资源,提高数据包的转发效率。
为了解决上述技术问题,本发明公开了一种实现数据包转发的方法,包括:根据包含有域值范围的流表信息,生成域值范围检查信息;
按照生成的域值范围检查信息和所述流表信息转发数据包。
该方法之前还包括:设置包含有域值范围的流表信息;所述流表信息配置在流表中。
所述生成域值范围检查信息包括:
从所述流表中获取需要匹配的域类型及其域值范围,设置域值范围检查表;
域值范围检查表中包括需要检查的域类型,及其对应的域值范围。
所述按照生成的域值范围检查信息和所述流表信息转发数据包包括:
确定出数据包中存在范围检查表中的域类型,将该域的域值在域值范围检查表中对应的条目的域值范围检查标识设置为有效;
通过元数据将包含有域值范围检查标识的域值范围检查结果携带给流表;
匹配元数据中的域值范围检查结果,与流表中的键值及掩码相与的结果,如果二者一致则匹配成功;
按照流表配置的对应动作,对数据包进行转发。
所述域值范围检查结果由多个所述域值范围检查标识组成,为二进制位流,每个位对应域值范围检查表的某个条目的索引号。
根据域值范围检查表的索引号确定所述Key值和掩码。
所述动作是现有openflow规范规定的动作集。
所述选择的域及其域值范围采用扩展的OpenFlow消息携带;或者,通过可扩展匹配类型-长度-值OXM TLV携带选择的域及其所述域值范围。
所述域值范围对应的域为现有流表的匹配域中的某域,或者各域的任意组合。
本发明还提供一种实现数据包转发的系统,至少包括流表处理单元,数据包处理单元;其中,流表处理单元,用于根据包含有域值范围的流表信息,生成域值范围检查信息;
数据包处理单元,用于按照生成的域值范围检查信息和所述流表信息转发数据包。
该系统还包括:流表信息下发单元,用于将包含有域值范围的流表信息配置在流表中,并下发给所述流表处理单元。
所述流表处理单元,具体用于从所述流表中获取需要匹配的域类型及域值范围,设置域值范围检查表;在域值范围检查表中包括需要检查的域类型,及其对应的域值范围。
所述数据包处理单元,具体用于确定数据包中存在范围检查表中的域类型时,确定该域的域值在域值范围检查表中对应的索引号,并将该索引号对应的条目的域值范围检查标识设置为有效;将携带有包含域值范围检查标识的域值范围检查结果的元数据通知给流表;匹配元数据中的域值范围检查结果,与流表中的键Key值及掩码相与的结果,二者一致,则表明该数据包的域值在范围之内;按照流表配置的对应动作,对数据包进行转发。
所述流表信息下发单元设置在软件定义网络SDN控制器中。
所述流表处理单元和数据包处理单元设置在OpenFlow交换机中。
本申请技术方案包括:根据包含有域值范围的流表信息,生成域值范围检查信息,按照生成的域值范围检查信息和所述流表信息转发数据包。从本发明方法可见,通过对数据包域值范围的流表匹配,根据域值范围对数据包进行流量聚合,明显减少了流表配置消息和流表条目,从而降低了SDN控制器的计算复杂性,提高了流表配置效率,节省了流表硬件资源,提高了数据包的转发效率。
具体实施方式
图1为本发明实现数据包转发的方法的流程图,如图1所示,包括:
步骤100:根据包含有域值范围的流表信息,生成域值范围检查信息。
本步骤之前还包括:设置包含有域值范围的流表信息,流表信息配置存储在流表中。具体包括:对现有流表进行扩展用于保存域值范围,具体地,可以采用扩展的OpenFlow消息携带域值范围;也可以通过现有OpenFlow可扩展匹配类型-长度-值(OXM TLV,OpenFlow Extensible Matchtype-length-value)携带选择的域及其域值范围等等,具体实现方法并不用于限定本发明的保护范围。
根据实际情况,选择需要进行范围检查的某个域或某些域及其域值范围,选择的域可以是现有流表的匹配域(match field)中的任何域或者各个域的任意组合,比如vlan id、和/或TCP/UDP源端口号、和/或TCP/UDP目的端口号等;并设置所选择出的域的域值范围,即域值上限和域值下限。
本步骤根据包含有域值范围的流表信息,生成域值范围检查信息,具体包括:从流表中获取需要匹配的域类型及域值范围,设置域值范围检查表RangeTable。在域值范围检查表中包括需要检查的域,及其对应的域值范围即域值上限和域值下限。域值范围检查表可以包括多个条目,每个条目对应某需要检查的域及其域值范围。
步骤101:按照生成的域值范围检查信息和所述流表信息转发数据包。
首先,确定数据包是否存在范围检查表中的域类型,在存在的情况下,进一步确定该域的域值在域值范围检查表中对应的条目即在哪个域值范围内,并将该条目的域值范围检查标识设置为有效如设置为1(二机制位);否则,条目的域值范围检查标识设置为无效如设置为0。其中,域值范围检查标识用于标识数据包的域值是否在其所指示的条目,如果域值范围检查标识显示为1,则表示在该条目的范围内;如果域值范围检查标识显示为0,则表示不在该条目的范围内;而多个域值范围检查标识组成的二级制位流是域值范围检查结果,也就是一个具体的数值,域值范围检查结果可以是一定宽度(与流表条目对应)的二进制位流,每个位对应域值范围检查表的某个条目。需要说明的是,数据包可以同时进行多个域值范围的检查。
接着,通过元数据(metadata)将域值范围检查结果携带给流表;这里,在利用流表进行数据包转发时,流表只能匹配具体的值而不是范围,本发明中通过域值范围检查结果将当前需要转发的数据包的需要匹配的域值所在域值范围告知流表,以便流表对应进行后续匹配处理。
然后,数据包及元数据进入流表,匹配元数据中的域值范围检查结果,即比较域值范围检查结果,与流表中的键(Key)值及掩码(Mask)相与的结果,如果二者一致则匹配成功,表明域值在范围之内;否则匹配失败,域值不在范围之内。其中,Key值和掩码是根据域值范围检查表索引号确定。
最后,按照流表配置的对应动作对数据包进行转发。动作可以是现有openflow规范规定的动作集。
图2为本发明OPenFlow交换机处理流表的实施例的示意图,如图2所示,假设SDN控制器采用扩展的openflow消息向OpenFlow交换机下发流表配置消息,指定需要范围检查的某个或多个域,及其域值范围并配置流表FlowTable,假设,需要范围检查的域为vlan id,其域值范围有两种:1-1000的位以及1001-2000的位。当OpenFlow交换机接收到该流表FlowTable后,具体的处理如下:
生成域值范围检查表,如表1所示:
索引号 |
域(Field) |
下限(Lower) |
上限(Uper) |
域值范围检查标识 |
1 |
... |
|
|
|
2 |
vlan id |
1 |
1000 |
1 |
3 |
vlan id |
1001 |
2000 |
|
4 |
... |
|
|
|
表1
根据流表中的信息,生成表1中的两个条目,索引号2的域是vlan id,其对应的域值范围是1-1000;索引号3的域是vlan id,其对应的域值范围是1001-2000。表1中的其它条目没有做示例,可以是其它需要检查的域及其域值范围。如果按现有数据包转发中的OpenFlow匹配方法,需要为每个客户vlan配置一个流表条目,这样,将需要设置2000个流表条目(上行方向);而通过本发明方法,只需要分别在上行方向和下行方向分别设置2个流表条目即可。其中,索引号用于区别不同条目的域值范围检查标识,如图2所示,vlan id域值范围1-1000对应的域值范围检查表的索引号为2,那么,该条目对应的域值范围检查标识为域值范围检查结果值(二进制位码)的第二个位。
结合图2,当数据包到来时,如果数据包中的某个域在域值范围检查表中,则该域的域值落入的域值范围所在的条目为有效,如表1所示,该条目对应的域值范围检查标识为1,即输出的元数据metadata数据位置1;在本实施例中,假设数据包是加入小区1的流量进行vlan id范围检查,那么,输出的元数据metadata位流为00000010,有效位1对应的是条目2。
而在流表中将匹配元数据metadata,并通过掩码(mask)指定对应的域值范围:Key值和掩码是根据范围检查表索引号确定的。本实施例中,Key值可以是xxxxxx1x,其中x代表0或者1,而掩码为00000010(二级制,十六进制则为0x02),将Key值和掩码相与,即xxxxxx1x AND 0x02,相与得到的结果将和元数据中的域值范围检查结果进行比较。流表只关注vlan id范围为1-1000的位,那么,掩码(二进制)为00000010,计算出对应的Key值为00000010。当数据包vlan id在1-1000范围内,则该数据包为需要范围检查的域及域值范围的数据包。对于需要范围检查的域及域值范围的数据包执行相应的动作,在本实施例中,将为vlan id范围为1-1000的小区1用户数据包添加一层外层vlan=2000后转发。
从本发明方法可见,通过对报文域值范围的流表匹配,根据域值范围对数据包进行流量聚合,明显减少了流表配置消息和流表条目,从而降低了SDN控制器的计算复杂性,提高了流表配置效率,节省了流表硬件资源,提高了数据包的转发效率。
图3为本发明实现数据包转发的系统组成结构示意图,如图2所示,至少包括流表处理单元,数据包处理单元,其中,
流表处理单元,用于根据包含有域值范围的流表信息,生成域值范围检查信息。
数据包处理单元,用于按照生成的域值范围检查信息和所述流表信息转发数据包。
流表处理单元和数据包处理单元可以设置在OpenFlow交换机中,比如运营商边沿路由器(PE),客户端路由器(CE)设备等。
本发明系统还包括:流表信息下发单元,用于将包含有域值范围的流表信息配置在流表中,并下发给流表处理单元。流表信息下发单元可以设置在SDN控制器中。
其中,流表处理单元,具体用于从流表中获取需要匹配的域类型及域值范围,设置域值范围检查表RangeTable;在域值范围检查表中包括需要检查的域类型,及其对应的域值范围即域值上限和域值下限。
数据包处理单元,具体用于确定数据包中存在范围检查表中的域类型时,确定该域的域值在域值范围检查表中对应的索引号,并将该索引号对应的条目的域值范围检查标识设置为有效;将携带有包含域值范围检查标识的域值范围检查结果的元数据通知给流表;匹配元数据中的域值范围检查结果,与流表中的键Key值及掩码相与的结果,二者一致,则表明该数据包的域值在范围之内;按照流表配置的对应动作,对数据包进行转发。
图4为本发明实现数据包转发的实施例的示意图,下面结合一具体实施例对本发明方法进行详细描述。图4中,本实施例中对于流表处理部分进行了忽略,主要是描述通过流表中携带的域值范围对不同类别的数据包进行转发处理。如图4所示,
本实施例以运营商VLAN(SVLAN)的组网和vlan tag处理流程为例,假设已经完成OpenFlow交换机和SDN控制器建立连接,并且SDN控制器已通过向OpenFlow交换(Switch)查询交换机的基本配置信息并配置OpenFlow交换机基本参数;而且控制器已向OpenFlow交换机发送二层邻接设备探测命令消息(LLDP)发现OpenFlow的网络拓扑结构。
假设有两个小区,两个小区采用不同的客户vlan,其中,小区1的vlan范围为1-1000,小区2的vlan范围为1001-2000。为了隔离不同的小区流量,在汇聚设备运营商边沿路由器(PE)上,需要打上不同的运营商vlan tag。
SDN控制器向PE设备下发流表,配置OpenFlow交换机转发通道。在下发的流表中指定了需要范围检查的域和域值的上限和下限,如图4中的流表1和流表2。从流表1和流表2可见,本实施例中,需要对vlan id进行范围检查,vlan id的范围分别为1-1000和1001-2000;
在PE设备上,为了隔离不同小区的用户流量,需要给每个小区添加不同的运营商vlan tag;如图4中的流表1和流表2所示,给小区1添加(push)的外层vlan为2000,给小区2添加的外层vlan为2001。
如果按现有数据包转发中的OpenFlow匹配方法,需要为每个客户vlan配置一个流表条目,这样,在PE设备上将需要设置2000个流表条目(上行方向);而通过本发明方法,根据域值范围将流表中的vlan id分成了两类,在PE设备上只需要设置2个流表条目(上行方向或下行方向)即:
上行方向包括:流表1:匹配域={入端口1,vlan id范围1-1000};动作={push vlan 2000;output端口2;};流表2:匹配域={入端口1,vlan id范围1001-2000};动作={push vlan 2001;output端口2;}。
下行方向包括:流表3:匹配域={入端口2,vlan id 2000};动作={pop vlan2000;output端口1;};流表4:匹配域={入端口2,vlan id 2001};动作={popvlan 2001;output端口1;}。
SDN控制器向客户端路由器(CE7)交换机下发流表,配置OpenFlow交换机转发通道,在CE7设备上,上行方向,需要把各个小区的流量汇聚到上行端口3;配置的流表分别为:流表5:匹配域={入端口1};动作={output端口3;};流表6:匹配域={入端口2};动作={output端口3;}。下行方向包括:流表7:匹配域={入端口3,vlan id范围1-1000};动作={output端口1;};流表8:匹配域={入端口3,vlan id范围1001-2000};动作={output端口2;}。
那么,上行方向数据包的转发过程包括:
来自小区1和小区2的数据包到达CE7后,分别根据流表5和流表6进行处理后,从端口3转发出去。假设小区1的用户数据包格式为:dmac=0x11,smac=0x22,客户vlan id=100,payload=0x112233;小区2的用户报文格式为:dmac=0x11,smac=0x33,客户vlan id=1100,payload=0x332211;
小区用户数据包到达PE设备后,分别根据流表1和流表2进行处理后,添加不同的外层vlan,从端口2转发出去。经过PE设备后,小区1的用户数据包格式为:dmac=0x11,smac=0x22,外层vlan id=2000,payload=0x112233;小区2的用户数据包格式为:dmac=0x11,smac=0x33,外层vlan id=2001,payload=0x332211;。
上行方向数据包的转发过程包括:
来自BRAS服务器的数据包到达PE设备,外层vlan分别为2000和2001;分别根据流表3和流表4进行转发,其中vlan2000的流量,匹配流表3后,剥离(pop)外层vlan并转发到端口1;vlan2001的流量,匹配流表4后,剥离外层vlan并转发到端口1;
假设发送到小区1的数据包格式为:dmac=0x22,smac=0x55,外层vlanid=2000,内层vlan id=100,payload=0x778899;发送到小区2的数据包格式为:dmac=0x33,smac=0x55,外层vlan id=2001,内层vlanid=1100,payload=0x998877。经过PE设备处理后,小区1的数据包格式为:dmac=0x22,smac=0x55,内层vlan id=100,payload=0x778899;小区2的数据包格式为:dmac=0x33,smac=0x55,内层vlan id=1100,payload=0x998877。
剥离外层vlan的BRAS服务器的数据包达到CE7,将根据配置的流表7和流表8进行转发,根据流表7的配置,vlan范围为1-1000的流量将发送到端口1(即小区1网络),vlan范围为1001-2000的流量将发送到端口2(即小区2网络)。
当然,本发明还可有其他多种实施例,比如基于TCP/UDP源端口号和/或目的端口号的域值范围来进行匹配处理,或者基于其它域值范围进行匹配处理。在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
以上所述,仅为本发明的较佳实例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。