一种基于软件定义网络SDN的数据转发方法及系统与流程

文档序号:11234548阅读:292来源:国知局
一种基于软件定义网络SDN的数据转发方法及系统与流程
本发明涉及通信网络
技术领域
,特别是涉及一种基于sdn的数据转发方法及系统。
背景技术
:在软件定义网络(softwaredefinednetworking,sdn)中,传统交换机上的控制功能被分离出来,比如复杂的路由功能,改由独立的sdn控制器来完成,sdn控制器通过openflow协议来控制sdn交换机的数据转发功能。目前,在sdn中,sdn交换机根据sdn控制器下发的转发规则,对数据包进行转发,其中,转发规则包括数据包的接收端口和数据包报头的相关字段,数据包的接收端口能够体现数据包来自哪个服务功能单元;具体的,sdn交换机根据转发规则,通过数据包的接收端口确定该数据包的转发端口。但是,在一个数据包需要多次经过同一个交换机序列的场景下,可能导致该交换机序列中的最后一个交换机,即尾交换机对该数据包的转发错误,其中,交换机序列是指至少两台交换机。这是因为,当一个数据包多次经过同一个交换机序列时,尾交换机每次接收来自该尾交换机的上一个交换机的数据包的接收端口均相同,同时,由于是同一个数据包,数据包报头的相关字段也均相同;因此,尾交换机接收数据包的接收端口无法准确体现数据包来自哪个服务功能单元,进而,尾交换机根据数据包的接收端口,也无法正确确定该数据包的转发端口。举例说明,如图1所示,图1为交换机的拓扑图,在图1中,要求ip地址属于10.1.0.0/16网段的超文本传输协议(hypertexttransferprotocol,http)数据包按顺序访问防火墙(firewall,fw),入侵检测系统(ids),代理服务器(proxy)这三个服务功能单元,这三个服务功能单元通过s1-s7这7个sdn服务器连接起来,且该数据包从s1服务器进入,由s7服务器到达目的地。如表1所示,表1为从s3服务器到s7服务器的两条数据转发路径;这里以表1中第三行所示的第二条数据转发路径作为例进行说明:从表1中所示的第二数据转发条路径可知,s6交换机三次接收到同一个数据包,并且每次转发该数据包均需要通过不同的出端口,达到不同的转发目的地;第一次转发:当s6交换机接收到来自fw的数据包时,说明该数据包已经访问过第一个服务功能单元fw,此时,需要通过下一个服务功能单元,即ids对应的转发端口,将该数据包转发至ids;对应的转发路径是fw->s2->s3->s5->s6->ids;第二次转发:当s6交换机接收到来自ids的数据包时,说明该数据包已经访问过第二个服务功能单元ids,此时,需要通过第三个服务功能,即proxy对应的转发端口,将该数据包转发至proxy;对应的转发路径是ids->s6->s5->s3->proxy;第三次转发:当s6交换机接收到来自proxy的数据包时,说明该数据包已经访问过所有的服务功能单元,此时,需要通过s7交换机对应的转发端口,将该数据包转发给s7交换机;对应的转发路径是proxy->s3->s5->s6->s7。比较上述第一次转发和第三次转发,可以发现,这两次转发对应的转发路径均包括同一个交换机序列s3->s5->s6。对于s6交换机来说,在接收到来自s5交换机的数据包时,仅依靠数据包的接收端口和数据包报头的相关字段,无法判断该数据包是从fw发送过来的还是从proxy发送过来的,进而也无法确定该执行第一次转发还是第三次转发,导致对数据包的转发可能出现错误。待访问服务功能单元数据转发路径fw-ids-proxys1-s2-fw-s2-s4-s5-s6-ids-s6-s5-s3-proxy-s3-s5-s6-s7fw-ids-proxys1-s2-fw-s2-s3-s5-s6-ids-s6-s5-s3-proxy-s3-s5-s6-s7表1技术实现要素:本发明实施例的目的在于提供一种基于sdn的数据转发方法及系统,以实现在一个数据包多次经过同一个交换机序列的场景下,对该数据包进行正确转发。具体技术方案如下:本发明实施例提供了一种基于软件定义网络sdn的数据转发方法,应用于第一sdn交换机,所述方法包括:当接收到携带转发标签的数据包时,从所述携带转发标签的数据包报头中,获取待访问服务功能单元对应的转发标签;根据所述转发标签,确定所述待访问服务功能单元对应的转发端口;从所述携带转发标签的数据包报头中删除所述转发标签,得到不携带所述转发标签的数据包;通过所述转发端口,转发所述不携带所述转发标签的数据包。优选的,所述转发标签用于标识数据包在进入第二sdn交换机之前访问的服务功能单元;所述第一sdn交换机和所述第二sdn交换机位于同一个交换机序列,其中,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换为所述交换机序列中最后一个接收到数据包的sdn交换机。优选的,在所述当接收到携带转发标签的数据包时,从所述携带转发标签的数据包报头中,获取数据包待访问服务功能单元对应的转发标签的步骤之前,所述方法还包括:接收来自sdn控制器的第一转发规则,所述第一转发规则包括所述携带转发标签的数据包报头中、存储所述转发标签字段的字段标识;所述从所述携带转发标签的数据包报头中,获取数据包待访问服务功能单元对应的转发标签的步骤,包括:根据所述第一转发规则,从所述携带转发标签的数据包报头中、所述字段标识对应的字段中,获取所述转发标签;所述从所述携带转发标签的数据包报头中删除所述标签,得到所述数据包的步骤,包括:根据所述第一转发规则,从所述携带转发标签的数据包报头中、所述字段标识对应的字段中,删除所述转发标签,得到所述数据包。本发明实施例还提供了一种基于软件定义网络sdn的数据转发方法,应用于第二sdn交换机,所述方法包括:当接收到数据包时,根据所述数据包的接收端口,确定待访问服务功能单元对应的转发标签;在所述数据包报头中添加所述转发标签;将携带所述转发标签的数据包发送至第一sdn交换机,使所述第一sdn交换机根据所述转发标签,确定所述待访问服务功能单元对应的转发端口,所述数据包通过所述转发端口发送至所述待访问服务功能单元,所述第一sdn交换机和所述第二sdn交换机位于同一个交换机序列,其中,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换为所述交换机序列中最后一个接收到数据包的sdn交换机。优选的,在所述当接收到数据包时,根据所述数据包的接收端口,确定待访问服务功能单元对应的转发标签步骤之前,所述方法还包括:接收来自sdn控制器的第二转发规则,所述第二转发规则包括所述数据包报头中、待存储所述转发标签字段的字段标识,以及接收端口与转发标签的对应关系;所述根据所述数据包的接收端口,确定待访问服务功能单元对应的转发标签的步骤,包括:根据所述第二转发规则中的所述对应关系,通过所述数据包的接收端口,确定待访问服务功能单元对应的转发标签;所述在所述数据包报头中添加所述转发标签的步骤,包括:在所述数据包报头中、所述字段标识对应的字段中,添加所述转发标签。本发明实施例另提供了一种一种基于软件定义网络sdn的数据转发方法,应用于sdn控制器,所述方法包括:判断预设的数据转发路径是否包括至少两个相同的交换机序列;若为是,则向第二sdn交换机发送第二转发规则,以及向第一sdn交换机发送第一转发规则,使所述第二sdn交换机根据所述第二转发规则,在数据包中添加转发标签,所述转发标签对应于待访问服务功能单元,以及使所述第一sdn交换机根据所述第一转发规则,通过所述转发标签确定所述数据包的转发端口,所述数据包通过所述转发端口发送至所述待访问服务功能单元,所述第一转发规则包括携带转发标签的数据包报头中、存储所述转发标签字段的字段标识,所述第二转发规则包括所述数据包报头中、待存储所述转发标签字段的字段标识,以及接收端口与转发标签的对应关系;其中,所述第一sdn交换机和所述第二sdn交换机位于同一个交换机序列,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换为所述交换机序列中最后一个接收到数据包的sdn交换机。优选的,在所述判断预设的数据包转发路径是否包括至少两个相同的交换机序列的步骤之前,所述方法还包括:根据预设的至少一个待访问服务功能单元,以及所述待访问服务功能单元的访问顺序,确定数据转发路径;其中,所述数据转发路径按照所述访问顺序,经过所有的所述待访问服务功能单元。优选的,在向第二sdn交换机发送第二转发规则,以及向第一sdn交换机发送第一转发规则的步骤之前,所述方法还包括:根据所述数据转发路径和所述交换机序列,确定所述第一转发规则和所述第二转发规则。优选的,若预设的数据转发路径不包括至少两个相同的交换机序列,所述方法还包括:向第三sdn交换机发送第三转发规则,使所述第三sdn交换机根据所述第三转发规则,通过数据包的接收端口,确定所述数据包的转发端口,所述数据包通过所述转发端口发送至所述待访问服务功能单元,其中,所述第三转发规则包括接收端口与转发端口的对应关系,所述第三转发规则与所述第一转发规则和所述第二转发规则均不同。本发明实施例再提供了一种基于软件定义网络sdn的数据转发系统,所述系统包括:sdn控制器、第二sdn交换机和第一sdn交换机;所述sdn控制器,用于判断预设的数据转发路径是否包括至少两个相同的交换机序列;若为是,则向所述第二sdn交换机发送第二转发规则,以及向所述第一sdn交换机发送第一转发规则,使所述第二sdn交换机根据所述第二转发规则,在数据包中添加转发标签,所述转发标签对应于待访问服务功能单元,以及使所述第一sdn交换机根据所述第一转发规则,通过所述转发标签确定所述数据包的转发端口,所述数据包通过所述转发端口发送至所述待访问服务功能单元;其中,所述第一sdn交换机和所述第二sdn交换机位于同一个交换机序列,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换机为所述交换机序列中最后一个接收到数据包的sdn交换机;所述第二sdn交换机,用于接收来自所述sdn控制器的第二转发规则,所述第二转发规则包括所述数据包报头中、待存储所述转发标签字段的字段标识,以及接收端口与转发标签的对应关系;当接收到数据包时,根据所述第二转发规则中的所述对应关系,通过所述数据包的接收端口,确定所述待访问服务功能单元对应的转发标签;在所述数据包报头中、所述字段标识对应的字段中,添加所述转发标签;将携带所述转发标签的数据包发送至第一sdn交换机;所述第一sdn交换机,用于接收来自所述sdn控制器的第一转发规则,所述第一转发规则包括所述携带转发标签的数据包报头中、存储所述转发标签字段的字段标识;当接收到携带转发标签的数据包时,根据所述第一转发规则,从所述携带转发标签的数据包报头中、所述字段标识对应的字段中,获取所述转发标签;根据所述携带转发标签的数据包的接收端口和所述转发标签,确定所述待访问服务功能单元对应的转发端口;根据所述第一转发规则,从所述携带转发标签的数据包报头中、所述字段标识对应的字段中,删除所述转发标签,得到所述数据包;通过所述转发端口,转发所述数据包。本发明实施例提供的一种基于sdn的数据转发方法,应用于第一sdn交换机,其中,第一sdn交换为交换机序列中最后一个接收到数据包的sdn交换机,交换机序列包括至少两个连接的sdn交换机;首先,在第一sdn交换接收到携带转发标签的数据包时,从携带转发标签的数据包报头中,获取待访问服务功能单元对应的转发标签;然后,根据转发标签,确定待访问服务功能单元对应的转发端口;接下来,从携带转发标签的数据包报头中删除转发标签,得到数据包;最后,通过所述转发端口,转发所述数据包。可见,本发明实施例中的基于sdn的数据转发方法,即使在转发路径中存在至少两个相同的交换机序列的场景下,sdn交换机也能够根据转发标签对数据包进行正确转发。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为现有技术的交换机的拓扑图;图2为本发明实施例的基于sdn的数据转发方法的一种流程图;图3为本发明实施例的基于sdn的数据转发方法的又一种流程图;图4为本发明实施例的基于sdn的数据转发方法的另一种流程图;图5为本发明实施例的基于sdn的数据转发系统的结构示意图;图6为本发明实施例中sdn交换机的拓扑图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例公开了一种基于sdn的数据转发方法,应用于第一sdn交换机。参见图2,图2为本发明实施例的基于sdn的数据转发方法的一种流程图,包括如下步骤:步骤201,当接收到携带转发标签的数据包时,从所述携带转发标签的数据包报头中,获取待访问服务功能单元对应的转发标签;在实际应用中,管理员会要求数据包按照预设顺序,访问多个服务功能单元,比如,要求数据包依次经过fw、ids和proxy这三个服务功能单元,可以理解的,数据包可以通过多条路径来满足按照预设顺序访问多个功能单元的要求;其中,对于网络层来说,数据包可以是ip数据包,对于运输层来说,数据包可以是传输控制协议(transmissioncontrolprotocol,tcp)数据包或用户数据包协议(userdatagramprotocol,udp)数据包,对于应用层来说,数据包可以是http数据包,简单邮件传输协议(simplemailtransferprotocol,smtp)数据包以及文件传输协议(filetransferprotocol,ftp)数据包等,数据包封装格式由传输的具体业务决定;在实际应用中,可以根据sdn的实际情况,确定数据包的具体格式。本发明实施例针对数据包通过存在至少两个相同的交换机序列的路径的场景,提出了基于sdn的数据转发方法,能够对数据包进行正确转发。需要说明的是,交换机序列包括至少两个连接的sdn交换机。在本步骤中,第一sdn交换机在接收到携带转发标签的数据包时,从携带转发标签的数据包报头中,获取待访问服务功能单元对应的转发标签。其中,所述转发标签用于标识数据包在进入第二sdn交换机之前访问的服务功能单元,所述第一sdn交换机和所述第二sdn交换机位于同一个交换机序列,其中,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换为所述交换机序列中最后一个接收到数据包的sdn交换机。可以理解的,数据包进入第二sdn交换机之前访问的服务功能单元不同,也即第二sdn交换机接收到数据包的接收端口不同,对应的转发标签也就不同。在本发明的一种优选实施例中,在步骤201之前,所述方法还包括:接收来自sdn控制器的第一转发规则,所述第一转发规则包括所述携带转发标签的数据包报头中、存储所述转发标签字段的字段标识。在实际应用中,数据包报头中用于存储转发标签的字段为未使用字段,也即处于空闲状态的字段,比如长度为12位的局域网标识vlanid、或者多协议标签交换(multi-protocollabelswitching,mpls)标签、或者ip数据包报头中的其他未使用字段,比如长度为8位的服务类型(typeofservice,tos)字段。在本发明的又一种优选实施例中,在步骤201中,所述从所述携带转发标签的数据包报头中,获取待访问服务功能单元对应的转发标签的步骤,具体可以包括:根据所述第一转发规则,从所述携带转发标签的数据包报头中、所述字段标识对应的字段中,获取所述转发标签。具体的,可以由sdn控制器预先设置数据包报头中用于存储转发标签的字段,并使用字段标识表示数据包报头中用于存储转发标签的字段。步骤202,根据所述转发标签,确定所述待访问服务功能单元对应的转发端口;在本步骤中,第一sdn交换机根据转发标签确定到达待访问的服务单元的转发端口。这样,在转发路径中存在至少两个相同的交换机序列的场景下,第一sdn交换机能够根据转发标签,确定待访问服务功能单元对应的转发端口;相比现有技术中仅根据数据包的接收端口和数据包报头的相关字段确定转发端口,使用本发明实施例所述的基于sdn的数据转发方法确定的转发端口更加准确,从而避免出现对数据包的转发错误。步骤203,从所述携带转发标签的数据包报头中,删除所述转发标签,得到不携带所述转发标签的数据包;在本步骤中,第一sdn交换机通过openflow协议,从携带转发标签的数据包报头中,删除转发标签,得到不携带转发标签的数据包。在本发明的另一种优选实施例中,步骤203具体可以包括:根据所述第一转发规则,从所述携带转发标签的数据包报头中、所述字段标识对应的字段中,删除所述转发标签,得到不携带所述转发标签的数据包。这样,可以避免存储在数据包报头中、字段标识对应的字段中的转发标签,对sdn交换机或者其他设备对数据包的后续处理造成影响;同时,也可以避免由于数据包报头中存储的信息过多,导致数据包过大,影响数据包的处理效率。比如,由于数据包报头中的vlanid对应的字段未被使用,因此,将数据包报头中的vlanid对应的字段用于存储转发标签;在第一sdn交换机确定数据包的转发端口后,将数据包报头中vlanid对应的字段清空,使得vlanid对应的字段重新恢复为未使用状态;这样,当后续处理中需要占用vlanid对应的字段时,不会对后续处理造成不良影响。步骤204,通过所述转发端口,转发所述不携带所述转发标签的数据包。在本步骤中,第一sdn交换机将不携带转发标签的数据包,通过步骤202确定的转发端口进行正确转发。可见,在本发明实施例所述的基于sdn的数据转发方法中,第一sdn交换机能够根据数据包中携带的转发标签,准确确定待访问服务功能单元对应的转发端口,进而通过已确定的转发端口对数据包进行正确转发,避免出现在数据转发路径包括至少两个相同的交换机序列的场景下,sdn交换机对数据包的错误转发。本发明实施例又公开了一种基于sdn的数据转发方法,应用于第二sdn交换机。参见图3,图3为本发明实施例的基于sdn的数据转发方法的又一种流程图,包括如下步骤:步骤301,当接收到数据包时,根据所述数据包的接收端口,确定待访问服务功能单元对应的转发标签;在本步骤中,当第二sdn交换机接收到数据包时,根据数据包的接收端口,确定待访问服务功能单元对应的转发标签;其中,转发标签用于标识数据包在进入第二sdn交换机之前访问的服务功能单元,也就是说,转发标签能够标识数据包最近访问过的服务功能单元,可以理解的,sdn交换机在确定数据包最近访问的服务功能单元之后,就能够确定待访问服务功能单元对应的转发端口。具体的,可以基于预设的数据转发路径,根据数据包的接收端口确定待添加的转发标签。比如,已知数据转发路径为s1→s2→fw→s2→s3→s5→s6→ids→s6→s5→s3→proxy→s3→s5→s6→s7,其中,s1、s2、s3、s4、s5、s6和s7均为sdn交换机,s3→s5→s6为出现两次的交换机序列;预设连接fw的接收端口对应的转发标签值为1,预设连接ids的接收端口对应的转发标签值为2,预设连接proxy的接收端口对应的转发标签值为3;当s3接收到数据包时,若接收端口为连接s2的接收端口,则说明数据包最近访问的服务功能单元为fw,确定待添加的转发标签为1;若接收端口为连接proxy的端口,则说明待访问服务功能单元为proxy,确定待添加的转发标签为3。这样,当s6接收到携带转发标签的数据包时,就能够根据转发标签,确定数据包最近访问的服务功能单元,进而确定待访问服务功能单元对应的转发端口。在本发明的再一种优选实施例中,在步骤301之前,所述方法还包括:接收来自sdn控制器的第二转发规则,所述第二转发规则包括所述数据包报头中、待存储所述转发标签字段的字段标识,以及接收端口与转发标签的对应关系。其中,由于不同的接收端口说明数据包来自不同的服务功能单元,因此,不同的接收端口对应不同的转发标签。为了方便理解,在上述例子的基础上进行举例说明;在上述例子中,接收端口与转发标签的对应关系包括:连接fw的接收端口对应的转发标签值为1,连接ids的接收端口对应的转发标签值为2,连接proxy的接收端口对应的转发标签值为3;数据包报头中待存储所述转发标签字段的字段标识可以是vlanid;当s3接收到来自sdn控制器的第二转发规则时,就能够根据第二转发规则中包括的该对应关系和该字段标识,在数据包中添加与待访问服务功能单元对应的转发标签,使得s6能够根据转发标签对数据包进行正确转发。在本发明的再一种优选实施例中,步骤301中,所述根据所述数据包的接收端口,确定待访问服务功能单元对应的转发标签的步骤,包括:根据所述第二转发规则中的所述对应关系,通过所述数据包的接收端口,确定所述待访问服务功能单元对应的转发标签。具体的,第二sdn交换机根据接收端口与转发标签的对应关系,确定数据包的接收端口对应的转发标签。步骤302,在所述数据包报头中添加所述转发标签;在本步骤中,第二sdn交换机通过openflow协议,在数据包报头中添加步骤301中确定的转发标签。在本发明的再一种优选实施例中,步骤302具体可以包括:在所述数据包报头中、所述字段标识对应的字段中,添加所述转发标签。具体的,第二sdn交换机通过openflow协议,根据第二转发规则中的字段标识,在数据包报头中字段标识对应的字段中,添加转发标签。比如,当第二转发规则中的字段标识为vlanid时,第二sdn交换机可以通过openflow协议,在数据包报头中的vlanid字段中添加转发标签。步骤303,将携带所述转发标签的数据包发送至第一sdn交换机。其中,所述第一sdn交换机和所述第二sdn交换机位于同一个交换机序列,其中,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换为所述交换机序列中最后一个接收到数据包的sdn交换机。在本步骤中,第二sdn交换机将携带转发标签的数据包发送至第一sdn交换机,使第一sdn交换机根据转发标签,确定待访问服务功能单元对应的转发端口,数据包通过转发端口发送至待访问服务功能单元。可见,在本发明实施例所述的基于sdn的数据转发方法中,第二sdn交换机能够根据数据包进入第二sdn交换机之前最近访问的服务功能单元,确定数据包对应的转发标签,并将转发标签保存在数据包报头中发送至第一sdn交换机,使第一sdn交换机根据转发标签,准确确定待访问服务功能单元对应的转发端口,进而通过已确定的转发端口对数据包进行正确转发,避免出现在数据转发路径包括至少两个相同的交换机序列的场景下,sdn交换机对数据包的错误转发。本发明实施例另公开了一种基于sdn的数据转发方法,应用于sdn控制器。参见图4,图4为本发明实施例的基于sdn的数据转发方法的另一种流程图,包括如下步骤:步骤401,判断预设的数据转发路径是否包括至少两个相同的交换机序列;在本步骤中,sdn控制器判断预设的数据转发路径是否包括至少两个相同的交换机序列。在本发明的再一种优选实施例中,在步骤401之前,所述方法还包括:根据预设的至少一个待访问服务功能单元,以及所述待访问服务功能单元的访问顺序,确定数据转发路径;其中,所述数据转发路径按照所述访问顺序,经过所有的所述待访问服务功能单元。具体的,sdn控制器根据多个待访问服务功能单元,以及多个待访问单元的访问顺序,确定数据包的数据转发路径;可以理解的,数据包通过该数据转发路径,能够按照访问顺序,经过所有的服务功能单元。比如,在要求数据包依次访问fw、ids和proxy这三个服务功能单元的情况下,sdn控制器根据这三个待访问服务功能单元和访问顺序,确定数据包的数据转发路径为s1→s2→fw→s2→s3→s5→s6→ids→s6→s5→s3→proxy→s3→s5→s6→s7;可以看出,sdn控制器确定的数据转发路径,按照预设顺序经过了三个待访问服务功能单元。步骤402,若所述数据转发路径包括至少两个相同的交换机序列,则向第二sdn交换机发送第二转发规则,以及向第一sdn交换机发送第一转发规则。在本步骤中,sdn控制器在确定数据转发路径包括至少两个相同的交换机序列后,向第二sdn交换机发送第二转发规则,以及向第一sdn交换机发送第一转发规则,使第二sdn交换机根据第二转发规则,在数据包中添加转发标签,转发标签对应于数据包待访问服务功能单元,以及使第一sdn交换机根据第一转发规则,通过转发标签确定数据包的转发端口,数据包通过转发端口发送至待访问服务功能单元。在本发明的再一种优选实施例中,在步骤402之前,所述方法还包括:根据所述数据转发路径和所述交换机序列,确定所述第一转发规则和所述第二转发规则。在本步骤中,sdn控制器根据已确定的数据转发路径中存在的至少两个相同的交换机序列,确定针对第一sdn交换机的第一转发规则和针对第二sdn交换机的第二转发规则,这样,当sdn控制器将第一转发规则和第二转发规则分别下发至第一sdn交换机和第二sdn交换机时,第二sdn交换机就能够根据第二转发规则,在数据包中添加转发标签,以及第一sdn交换机能够根据第一转发规则,通过转发标签确定数据包的转发端口,数据包通过转发端口发送至待访问服务功能单元。其中,第一转发规则包括携带转发标签的数据包报头中、存储转发标签字段的字段标识,第二转发规则包括数据包报头中、待存储转发标签字段的字段标识,以及接收端口与转发标签的对应关系;需要说明的是,数据包报头中用于存储转发标签字段可以是sdn控制器预先设置的,也可以在每次下发转发规则之前,判断当前数据包报头中哪些字段处于空闲状态,选择当前数据包报头中的处于空闲状态的字段用于存储转发标签,这样,当数据包报头中的原先被占用的某个字段被释放后,sdn控制器可以再次对该字段进行使用,提高资源利用率。此外,在本发明的再一种优选实施例中,若预设的数据转发路径不包括至少两个相同的交换机序列,所述方法还包括:向第三sdn交换机发送第三转发规则,使所述第三sdn交换机根据所述第三转发规则,通过数据包的接收端口,确定所述数据包的转发端口,所述数据包通过所述转发端口发送至所述待访问服务功能单元,其中,所述第三转发规则包括接收端口与转发端口的对应关系,所述第三转发规则与所述第一转发规则和所述第二转发规则均不同。需要说明的是,由于预设的数据转发路径中不存在至少两个相同的交换机序列,在这种情况下,第三sdn交换机是指sdn中的任一sdn交换机。在具体实施过程中,第三sdn控制器根据多个待访问服务功能单元,以及待访问服务单元的访问顺序,确定数据转发路径,进而判断数据转发路径不包括至少两个相同的交换机序列;在这种情况下,对于第三sdn交换机,不存在数据包的接收端口相同但需要通过不同的转发端口进行转发的问题,第三sdn交换机可以直接根据数据包的接收端口,确定数据包的转发端口,使数据包按照预设顺序访问多个服务功能单元。其中,第三转发规则包括接收端口和转发端口的对应关系,使第三sdn交换机能够根据第三转发规则,通过数据包的接收端口确定转发端口,从而通过已确定的转发端口对数据包进行正确转发;需要说明的是,第三转发规则可以参考现有技术,在此不再赘述。可见,在本发明实施例所述的基于sdn的数据转发方法中,sdn控制器在确定预设的数据转发路径是否包括至少两个相同的交换机序列时,向第二sdn交换机发送第二转发规则,以及向第一sdn交换机发送第一转发规则,使得第二sdn交换机根据第二转发规则,在数据包中添加转发标签,以及使第一sdn交换机根据第一转发规则,通过转发标签确定数据包的转发端口,进而通过已确定的转发端口对数据包进行正确转发,避免出现在数据转发路径包括至少两个相同的交换机序列的场景下,sdn交换机对数据包的错误转发。本发明实施例再公开了一种第一sdn交换机,所述第一sdn交换机包括获取模块、第一确定模块、删除模块和转发模块;所述获取模块,用于当接收到携带转发标签的数据包时,从所述携带转发标签的数据包报头中,获取待访问服务功能单元对应的转发标签;所述第一确定模块,用于根据所述转发标签,确定所述待访问服务功能单元对应的转发端口;所述删除模块,用于从所述携带转发标签的数据包报头中删除所述转发标签,得到所述数据包;所述转发模块,用于通过所述转发端口,转发所述数据包。优选的,所述转发标签用于标识数据包在进入第二sdn交换机之前访问的服务功能单元;所述第一sdn交换机和所述第二sdn交换机位于同一个交换机序列,其中,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换为所述交换机序列中最后一个接收到数据包的sdn交换机。优选的,所述第一sdn交换机,还包括:第一接收模块;所述第一接收模块,用于接收来自sdn控制器的第一转发规则,所述第一转发规则包括所述携带转发标签的数据包报头中、存储所述转发标签字段的字段标识;所述获取模块,具体用于根据所述第一转发规则,从所述携带转发标签的数据包报头中、所述字段标识对应的字段中,获取所述转发标签;所述删除模块,具体用于根据所述第一转发规则,从所述携带转发标签的数据包报头中、所述字段标识对应的字段中,删除所述转发标签,得到所述数据包。可见,在本发明实施例中,第一sdn交换机能够根据数据包中携带的转发标签,准确确定待访问服务功能单元对应的转发端口,进而通过已确定的转发端口对数据包进行正确转发,避免出现在数据转发路径包括至少两个相同的交换机序列的场景下,sdn交换机对数据包的错误转发。本发明实施例再公开了一种第二sdn交换机,所述第二sdn交换机包括:第二确定模块、添加模块和第一发送模块。所述第二确定模块,用于当接收到数据包时,根据所述数据包的接收端口,确定所述数据包待访问服务功能单元对应的转发标签;所述添加模块,用于在所述数据包报头中添加所述转发标签;所述第一发送模块,用于将携带所述转发标签的数据包发送至第一sdn交换机,使所述第一sdn交换机根据所述转发标签,确定所述待访问服务功能单元对应的转发端口,所述数据包通过所述转发端口发送至所述待访问服务功能单元,所述第一sdn交换机和所述第二sdn交换机位于同一个交换机序列,其中,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换为所述交换机序列中最后一个接收到数据包的sdn交换机。优选的,所述第二sdn交换机还包括第二接收模块;所述第二接收模块,用于接收来自sdn控制器的第二转发规则,所述第二转发规则包括所述数据包报头中、待存储所述转发标签字段的字段标识,以及接收端口与转发标签的对应关系;所述第二确定模块,具体用于根据所述第二转发规则中的所述对应关系,通过所述数据包的接收端口,确定所述待访问服务功能单元对应的转发标签;所述添加模块,具体用于在所述数据包报头中、所述字段标识对应的字段中,添加所述转发标签。可见,在本发明实施例中,第二sdn交换机能够根据数据包进入第二sdn交换机之前最近访问的服务功能单元,确定数据包对应的转发标签,并将转发标签保存在数据包报头中发送至第一sdn交换机,使第一sdn交换机根据转发标签,准确确定待访问服务功能单元对应的转发端口,进而通过已确定的转发端口对数据包进行正确转发,避免出现在数据转发路径包括至少两个相同的交换机序列的场景下,sdn交换机对数据包的错误转发。本发明实施例再公开了一种sdn控制器,所述sdn控制器包括:判断模块和第二发送模块。所述判断模块,用于判断预设的数据转发路径是否包括至少两个相同的交换机序列;所述第二发送模块,用于若所述第一判断模块的判断结果为所述数据转发路径包括至少两个相同的交换机序列,则向第二sdn交换机发送第二转发规则,以及向第一sdn交换机发送第一转发规则,使所述第二sdn交换机根据所述第二转发规则,在数据包中添加转发标签,所述转发标签对应于所述数据包待访问服务功能单元,以及使所述第一sdn交换机根据所述第一转发规则,通过所述转发标签确定所述数据包的转发端口,所述数据包通过所述转发端口发送至所述待访问服务功能单元,所述第一转发规则包括携带转发标签的数据包报头中、存储所述转发标签字段的字段标识,所述第二转发规则包括所述数据包报头中、待存储所述转发标签字段的字段标识,以及接收端口与转发标签的对应关系;其中,所述第一sdn交换机和所述第二sdn交换机位于同一个交换机序列,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换为所述交换机序列中最后一个接收到数据包的sdn交换机。优选的,所述sdn控制器,还包括:第三确定模块;所述第三确定模块,用于根据预设的至少一个待访问服务功能单元,以及所述待访问服务功能单元的访问顺序,确定数据转发路径;其中,所述数据转发路径按照所述访问顺序,经过所有的所述待访问服务功能单元。优选的,所述sdn控制器,还包括:第四确定模块;所述第四确定模块,用于根据所述数据转发路径和所述交换机序列,确定所述第一转发规则和所述第二转发规则。优选的,若预设的数据转发路径不包括至少两个相同的交换机序列,所述sdn控制器,还包括:第三发送模块;所述第三发送模块,用于向第三sdn交换机发送第三转发规则,使所述第三sdn交换机根据所述第三转发规则,通过数据包的接收端口,确定所述数据包的转发端口,所述数据包通过所述转发端口发送至所述待访问服务功能单元,其中,所述第三转发规则包括接收端口与转发端口的对应关系,所述第三转发规则与所述第一转发规则和所述第二转发规则均不同。可见,在本发明实施例中,sdn控制器在确定预设的数据转发路径是否包括至少两个相同的交换机序列时,向第二sdn交换机发送第二转发规则,以及向第一sdn交换机发送第一转发规则,使得第二sdn交换机根据第二转发规则,在数据包中添加转发标签,以及使第一sdn交换机根据第一转发规则,通过转发标签确定数据包的转发端口,进而通过已确定的转发端口对数据包进行正确转发,避免出现在数据转发路径包括至少两个相同的交换机序列的场景下,sdn交换机对数据包的错误转发。本发明实施例再公开了一种基于sdn的数据转发系统,所述系统包括:sdn控制器、第二sdn交换机和第一sdn交换机,其中,所述第一sdn交换机和所述第二sdn交换机位于同一个交换机序列,其中,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换为所述交换机序列中最后一个接收到数据包的sdn交换机。参见图5,图5为本发明实施例的基于sdn的数据转发系统的结构示意图。在图5中,所述sdn控制器501,用于判断预设的数据转发路径是否包括至少两个相同的交换机序列;若为是,则向所述第二sdn交换机502发送第二转发规则,以及向所述第一sdn交换机503发送第一转发规则,使所述第二sdn交换机502根据所述第二转发规则,在数据包中添加转发标签,所述转发标签对应于所述数据包待访问服务功能单元,以及使所述第一sdn交换机503根据所述第一转发规则,通过所述转发标签确定所述数据包的转发端口,所述数据包通过所述转发端口发送至所述待访问服务功能单元;其中,所述第一sdn交换机503和所述第二sdn交换机502位于同一个交换机序列,所述交换机序列包括至少两个连接的sdn交换机,所述第二sdn交换机502为所述交换机序列中第一个接收到数据包的sdn交换机,所述第一sdn交换机503为所述交换机序列中最后一个接收到数据包的sdn交换机;所述第二sdn交换机502,用于接收来自所述sdn控制器501的第二转发规则,所述第二转发规则包括所述数据包报头中、待存储所述转发标签字段的字段标识,以及接收端口与转发标签的对应关系;当接收到数据包时,根据所述第二转发规则中的所述对应关系,通过所述数据包的接收端口,确定所述待访问服务功能单元对应的转发标签;在所述数据包报头中、所述字段标识对应的字段中,添加所述转发标签;将携带所述转发标签的数据包发送至第一sdn交换机503;所述第一sdn交换机503,用于接收来自所述sdn控制器501的第一转发规则,所述第一转发规则包括所述携带转发标签的数据包报头中、存储所述转发标签字段的字段标识;当接收到携带转发标签的数据包时,根据所述第一转发规则,从所述携带转发标签的数据包报头中、所述字段标识对应的字段中,获取所述转发标签;根据所述携带转发标签的数据包的接收端口和所述转发标签,确定所述待访问服务功能单元对应的转发端口;根据所述第一转发规则,从所述携带转发标签的数据包报头中、所述字段标识对应的字段中,删除所述转发标签,得到所述数据包;通过所述转发端口,转发所述数据包。可见,在本发明实施例所述的基于sdn的数据转发系统中,sdn交换机在确定预设的数据转发路径是否包括至少两个相同的交换机序列时,向第二sdn交换机发送第二转发规则,以及向第一sdn交换机发送第一转发规则,使得第二sdn交换机根据第二转发规则,在数据包中添加转发标签,以及使第一sdn交换机根据第一转发规则,通过转发标签确定数据包的转发端口,进而通过已确定的转发端口对数据包进行正确转发,避免出现在数据转发路径包括至少两个相同的交换机序列的场景下,sdn交换机对数据包的错误转发。下面对数据转发系统进行举例说明,如图6所示,图6为本发明实施例中sdn交换机的拓扑图;其中,拓扑图是用轻量级网络研究平台mininet创建的,sdn控制器是使用floodlight实现的,sdn控制器与sdn交换机之间通信使用的openflow协议版本是1.3。在图6中,源主机h1的ip地址和mac地址分别是10.0.0.1和00:00:00:00:00:01,目的主机h2的ip地址和mac地址分别是10.0.0.2和00:00:00:00:00:02,sdn交换机s3、s4和s5的datapathid分别是00:00:00:00:00:00:00:03、00:00:00:00:00:00:00:04和00:00:00:00:00:00:00:05;sdn交换机旁边的数字标识sdn交换机的端口号。要求主机h1发送给主机h2的数据包依次经过防火墙fw1、入侵检测系统ids1和代理服务器proxy1,如fw1→ids1→proxy1。预设数据包报头中用于存储转发标签字段的字段标识为vlanid。需要说明的是,可以通过观察使用本实施例所述的基于sdn的数据转发方法配置的转发规则是否能够正确引导数据包顺次经过服务功能单元fw1、ids1和proxy1,来评估本实施例所述的基于sdn的数据转发系统的有效性。按照openflow协议的规定,每个sdn交换机中的转发子规则都设置有独立的计数器,比如分组计数器),每当sdn交换机根据转发子规则对一个数据包进行转发时,该转发子规则使自身的分组计数器的值加1;此外,还可以通过ping命令设置主机h1发送的数据包的数量。这样,可以先执行ping命令设置主机h1发送数据包的数量;然后,检查每条转发子规则的分组计数器,判断每个分组计数器是否等于预期值;若每个分组计数器的值均等于预期值,则可以确定每个sdn交换机都能够根据转发规则对每个数据包进行正确转发,本实施例所述的基于sdn的数据转发方法有效。数据转发系统处理数据包的具体过程如下:步骤1,sdn控制器确定预设的数据转发路径是否包括至少两个相同的交换机序列;具体的,sdn控制器计算出的数据转发路径是h1→s3→fw1→s3→s4→s5→ids1→s5→s4→s3→proxy1→s3→s4→s5→h2,可见,重复出现的交换机序列是s3→s4→s5。步骤2,sdn控制器向s3发送转发规则3,向s4发送转发规则4以及向s5发送转发规则5;在本步骤中,sdn控制器通过向s3发送s3转发规则,使s3根据s3转发规则在数据包报头中添加转发标签,以及通过向s5发s5转发规则,使s5根据s5转发规则,根据数据包报头中的转发标签对数据包进行转发。需要说明的是,sdn控制器发送给每个sdn交换机的转发规则,包括各sdn交换机中对数据包的不同转发动作的转发子规则。转发规则的具体内容如下所示:s3转发规则包括转发子规则1、转发子规则2和转发子规则3;转发子规则1:对于来自fw1的数据包,s3在该数据包报头中、vlanid对应的字段中添加转发标签,转发标签值为2,然后将该数据包,通过2号端口转发到sdn交换机s4;转发子规则2:对于来自h1的数据包,s3将该数据包通过3号端口转发到fw1;转发子规则3:对于来自fw1的数据包,s3在该数据包报头中、vlanid对应的字段中添加转发标签,转发标签值为2,然后将该数据包,通过2号端口转发到sdn交换机s4;在实际应用中,在vlanid字段中增加的值为4098,这是因为4098中包含了openflow协议定义的ofpvid_present位(0x1000),换算成十进制为4096,将4098减去4096就能够得到转发标签值。转发子规则4:对于来自s4的数据包,s3将该数据包通过4号端口转发到proxy1;转发子规则5:对于来自proxy1的数据包,s3在该数据包报头中、vlanid对应的字段中添加转发标签,转发标签值为3,然后将该数据包,通过2号端口转发到sdn交换机s4。在实际应用中,在vlanid字段中增加的值为4099,这是因为4099中包含了openflow协议定义的ofpvid_present位(0x1000),换算成十进制为4096,将4099减去4096就能够得到转发标签值。s4转发规则包括转发子规则6;转发子规则6:对于来自s3的数据包,s4将该数据包通过2号端口转发到s5。s5转发规则包括转发子规则7、转发子规则8和转发子规则9;转发子规则7:对于来自s4的数据包,当该数据包报头的vlanid对应的字段中存储的转发标签值为2时,先将该数据包报头的vlanid对应的字段中存储的转发标签移除,再将该数据包通过3号端口转发到ids1;转发子规则8:对于来自s4的数据包,当该数据包报头的vlanid对应的字段中存储的转发标签值为3时,先将该数据包报头的vlanid对应的字段中存储的转发标签移除,再将该数据包通过2号端口转发到h2;在实际应用中,为了避免由于转发错误,导致数据包没有访问过全部要求访问的服务功能单元,因此,在将数据包发送到h2之前,先确定除转发子规则8以外的其他8条转发子规则的分组计数器的值,是否均大于转发子规则8的分组计数器的值;若为是,则按照转发子规则8将该数据包转发至h2,若为否,则将该数据包转发至、分组计数器的值小于转发子规则8的分组计数器的转发子规则的转发端口、对应的目的设备,当然,也可以根据实际需求,确定该数据包的转发方式。转发子规则9:对于来自ids1的数据包,s5将该数据包通过1号端口转发到s4。步骤3,通过执行ping命令,使主机h1向主机h2发送25个数据包;需要说明的是,每条转发规则的分组计数器的初始值n_packets均为0。步骤4,sdn交换机s3、s4和s5分别根据转发规则3、转发规则4和转发规则5,对接收到的数据包进行转发。当s3、s4和s5对全部数据包的转发完成后,查看9条转发子规则的分组计数器,发现9个分组计数器的值均为25,说明每条转发子规则均实现了对25个数据包的转发,且s5能够根据s5转发规则,在转发到ids1的动作和发送到h2的动作之间做出正确选择。可见,上述实施例能够证明本实施例所述的基于sdn的数据转发系统有效,在转发路径中存在至少两个相同的交换机序列的场景下,sdn交换机能够根据转发标签对数据包进行正确转发。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1