SDN中数据处理方法、装置、系统、电子设备和计算机程序产品
技术领域
本发明涉及通信技术领域,尤其涉及软件定义网络SDN中数据处理方法、装置、系统、电子设备和计算机程序产品。
背景技术
软件定义网络(Software Defined Network,,SDN)利用OpenFlow协议,通过控制层面与转发层面的分离实现流量灵活控制。在SDN中,由具有集中管理功能的SDNController(控制器)管理网内所有的网络设备(如OpenFlow交换机)。SDN控制器通过链路层发现协议(Link Layer Discovery Protocol,LLDP)协议可以感知网络拓扑,进而基于网络拓扑实现流量调度。
如图1所示,现有的感知网络拓扑的方法为,SDN控制器获知各网络设备(如OpenFlow交换机)的设备信息后,向各网络设备发送封装了的LLDP报文的Packet-out消息;各网络设备重新组装LLDP报文后,将其发送给相邻的网络设备;相邻的网络设备接收到LLDP报文后,匹配控制器预先下发的流表条目,将LLDP报文封装成Packet-in消息上送给SDN控制器;SDN控制器接收到相邻的网络设备上送的封装了LLDP报文的Packet-in消息并处理,确定各网络设备两两之间的连接关系,进而感知网络拓扑。
现有的感知网络拓扑的方法适用于网络中只有一个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示出了现有技术中SDN控制器感知网络拓扑方法的示意图;
图2示出了本发明各实施例中SDN的网络架构;
图3示出了本发明实施例一SDN中数据处理方法的流程示意图;
图4示出了本发明实施例二SDN中数据处理方法的流程示意图;
图5示出了本发明实施例三SDN中数据处理装置的结构示意图。
具体实施方式
为了使本发明的技术方案及优点更加清楚明白,以下结合附图对本发明的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本发明的一部分实施例,而不是所有实施例的穷举。并且在不冲突的情况下,本说明中的实施例及实施例中的特征可以互相结合。
发明人在发明过程中注意到:当SDN中存在多个SDN控制器时,各SDN控制器在接收到其他SDN控制器发送的消息时无法处理,或者在接收到其他SDN控制器发送的消息时将其当做自身发送的消息进行错误的处理,导致各SDN控制器不能有效运行。
针对上述不足,本发明提供了一种SDN中数据处理方法,以使当SDN中存在多个SDN控制器时,一个SDN控制器只需要向与其直接相连的网络设备发送探测消息,并等待该网络设备反馈携带有其他网络设备的标识的探测消息,即可实现对未与其直接相连的网络设备的感知。
为了便于本发明的实施,下面以实例进行说明。图2示出了本发明各实施例中SDN的网络架构,所述SDN至少包括第一SDN控制器和第二SDN控制器,各SDN控制器与各自控制的网络设备直接相连。
实施例一:
图3示出了本发明实施例一中SDN中数据处理方法流程示意图,如图3所示,所述SDN中数据处理方法包括:
步骤101,当第一SDN控制器需要发起链路探测时,向其直连设备发送链路探测消息;
步骤102,当第二SDN控制器接收到其直连设备发送的链路探测消息时,生成携带所述直连设备的标识的链路探测消息;
步骤103,第二SDN控制器向直连设备发送生成的所述链路探测消息;
步骤104,当第一SDN控制器接收到其直连设备发送的携带网络设备标识的链路探测消息时,确定与所述直连设备相连的网络设备。
在步骤101中,第一SDN控制器向与其直接相连的其中一个网络设备发送链路探测消息,为便于描述,将该与第一SDN控制器相连的网络设备称为第一网络设备,所述第一网络设备受第一SDN控制器的直接控制,其可以是OpenFlow交换机或者SDN网络中的其他网络设备。所述链路探测消息可以是封装了LLDP报文的Packet_out消息,也可以是根据其他协议封装的其他类型的消息。
在步骤101之后,第一网络设备能够解封装链路探测消息得到探测报文,并按照预设的流表规则转发所述探测报文,例如可向与其相邻的全部网络设备进行转发。此时若网络中存在另一个网络设备与第一网络设备相连,则该网络设备能够接收到第一网络设备转发的探测报文。为便于描述,将与第一网络设备相连,并且同时与第二SDN控制器直接相连的网络设备称为第二网络设备,所述第二网络设备受第二SDN控制器直接控制,其可以是OpenFlow交换机或者SDN网络中的其他网络设备。
第二网络设备接收到所述探测报文后将其封装为链路探测消息并发送至第二SDN控制器,具体的,所述探测报文为LLDP报文,所述链路探测消息为Packet_in消息,第二网络设备根据OpenFlow协议将LLDP报文封装后得到Packet_in消息发送至第二SDN控制器。
在步骤102中,第二SDN控制器接收与其直接相连的第二网络设备发送的链路探测消息后,生成携带所述第二网络设备标识的链路探测消息。具体步骤可包括将从第二网络设备接收的Packet_in消息解封装得到LLDP报文,并根据该LLDP报文生成包含第二网络设备标识的新LLDP报文。SDN中各网络设备的标识均是唯一的,用于标识网络设备,其可以为网络设备的MAC地址或设备号等。
在步骤103中,将新生成的LLDP报文发送至第二网络设备,即第二SDN控制器由哪个与其直连的网络设备接收到链路探测消息,就将生成的响应消息发送给哪个网络设备。
在步骤103之后,第二网络设备能够解封装链路探测消息得到探测报文,并按照预设的流表规则转发所述探测报文,例如可向与其相邻的全部网络设备进行转发。因为网络中存在与第二网络设备连接的第一网络设备,所以该第一网络设备能够接收到第二网络设备回传的链路探测消息。
第一网络设备接收到所述探测报文后将其封装为链路探测消息并发送至第一SDN控制器,以使第一SDN控制器能够完成相应的探测过程。具体的,所述探测报文为LLDP报文,所述链路探测消息为Packet_in消息,第一网络设备根据OpenFlow协议将LLDP报文封装后得到Packet_in消息发送至第一SDN控制器。
在步骤104中,第一SDN控制器接收第一网络设备发送的包含了第二网络设备标识的链路探测消息。具体步骤可包括将从第一网络设备接收的Packet_in消息解封装得到LLDP报文,由该LLDP报文中获取第二网络设备的标识。
因为第一SDN控制器通过第一网络设备接收了携带第二网络设备的标识的探测报文,因此第一SDN设备能够基于上述探测报文的获取过程确定所述第二网络设备与所述第一网络设备具有连接关系。并且,因为一个SDN控制器能够基于接收到的消息发送响应消息,以使其他SDN控制器能够基于响应消息确定网络设备间的连接关系,所以即便第一SDN控制器未与第二网络设备直接相连,第一SDN控制器也能够基于第二SDN控制器对链路探测消息的响应确认第一网络设备与第二网络设备的连接关系。
本方案中,当SDN中存在多个SDN控制器时,各SDN控制器能够在接收到链路探测消息时,响应一个链路探测消息。这样使得发起链路探测消息的SDN控制器能够接收到链路探测消息,进而能够基于链路探测消息进行正确处理,使各SDN控制器能够有效运行。
在一些实施例中,步骤101具体为:当需要发起链路探测时,向直连设备发送携带请求标识的链路探测消息;
步骤102具体为:当接收到直连设备发送的携带请求标识的链路探测消息时,生成携带响应标识和所述直连设备的标识的链路探测消息;
步骤104具体为:当接收到所述直连设备发送的携带响应标识和网络设备标识的链路探测消息时,确定与所述直连设备相连的网络设备。
在这些实施例中,在链路探测过程中添加了请求标识和响应标识,即最初发起链路探测的第一SDN控制器在发送的链路探测消息中携带请求标识,所述请求标识可以在链路探测消息封装的探测报文中预设的某一字段添加,用于标识当前的链路探测消息是由需要探测网络设备的第一SDN控制器主动发起的。添加了请求标识的链路探测消息经第一网络设备和第二网络设备的转发,上传至第二SDN控制器。
当第二SDN控制器接收到第二网络设备发送的链路探测消息时,判断其中是否携带了请求标识,只有在判断接收到的链路探测消息中携带请求标识时,才确定需要响应所述链路探测消息。在生成携带相应标识和第二网络设备标识的链路探测消息。此处的响应标识与请求标识相对应,用于标识当前的链路探测消息是由当前SDN控制器基于接收到的链路探测消息响应的,而非当前SDN控制器主动发起的。添加了响应标识的链路探测消息经第二网络设备和第一网络设备的转发,回传至第一SDN控制器。
当第一SDN控制器接收到第一网络设备发送的链路探测消息时,判断其中是否携带了响应标识,只有在判断接收到的链路探测消息中携带响应标识时,才确定需要根据所述链路探测消息确定与所述直连设备相连的网络设备。
这样,通过在链路探测方案中增加请求标识和响应标识,使SDN控制器能够根据接收到的链路探测消息中的请求标识进行响应,以及根据接收到的链路探测消息中的响应标识确定网络设备的连接关系,而不再对包含了响应标识的链路探测消息进行响应,使网络中的链路探测消息的发送和接收更加有序。
在一些实施例中,步骤101具体为:当需要发送链路探测时,向直连设备发送携带发送时刻的链路探测消息,所述发送时刻为该链路探测消息发送时间的标识;
步骤102具体为:当接收到直连设备发送的携带发送时刻的链路探测消息时,生成携带所述发送时刻和所述直连设备的标识的链路探测消息,所述发送时刻为该接收到的链路探测消息的发送时间的标识;
步骤104具体为:当接收到所述直连设备发送的携带发送时刻和网络设备标识的链路探测消息时,确定与所述直连设备相连的网络设备,并根据接收到该链路探测消息的时刻和该链路探测消息携带的发送时刻计算所述直连设备和与其相连的网络设备间的时延。
在这些实施例中,在链路探测过程中添加了发送时刻,即最初发起链路探测的第一SDN控制器在发送的链路探测消息中携带该链路探测消息的发送时刻,所述发送时刻可以在链路探测消息封装的探测报文中预设的某一字段添加,用于标识当前链路探测消息的生成时间,因为生成链路探测消息后会立即发送,因此该发送时刻实际为链路探测消息的生成时间,但可以将其近似认定为链路探测消息的发送时刻。添加了发送时刻的链路探测消息经第一网络设备和第二网络设备的转发,上传至第二SDN控制器。
第二SDN控制器接收到包含发送时刻的链路探测消息后,在生成新的链路探测消息时,在其中加入前述发送时刻。添加了发送时刻的链路探测消息经第二网络设备和第一网络设备的转发,回传至第一SDN控制器。
第一SDN控制器在接收到的第一网络设备发送的携带第二网络设备标识的链路探测消息,确定与所述第一网络设备与第二网络设备相连之后,可根据接收到该链路探测消息的时刻和该链路探测消息携带的发送时刻计算第一SDN控制器最初发起链路探测消息和该链路探测消息发送至第二SDN控制器并反馈回来的时间差。由于网络设备与其所属的SDN控制器间的时延可以忽略,因此通过计算前述时间差可近似得到第一网络设备与所述第二网络设备间的时延。
这样,通过在链路探测方案中增加发送时刻,使SDN控制器在发送链路探测消息并接收到响应的链路探测消息后,除确定网络设备间的连接关系外,还能够进一步基于链路探测消息中的的发送时刻计算存在连接关系的网络设备间的时延。
在一些实施例中,步骤101具体为:当需要发起链路探测时,向直连设备发送携带序列号的链路探测消息,并保存携带所述序列号的链路探测消息的发送时刻,所述序列号为该次链路探测消息发送事件的标识;
步骤102具体为:当接收到直连设备发送的携带序列号的链路探测消息时,生成携带所述序列号和所述直连设备的标识的链路探测消息,所述序列号为接收到的链路探测消息的发送事件的标识;
步骤104具体为:当接收到所述直连设备发送的携带序列号的网络设备标识的链路探测消息时,确定与所述直连设备相连的网络设备,并根据接收到该链路探测消息的时刻和所述携带所述序列号的链路探测消息的发送时刻计算所述直连设备和与其相连的网络设备间的时延。
在这些实施例中,在链路探测过程中添加了序列号,所述序列号可以在链路探测消息封装的探测报文中预设的某一字段添加,用于标识当前链路探测消息的发送事件,每次探测事件的序列号是唯一的。可以理解的,当第一SDN控制器先后发送多次链路探测消息时,各链路探测消息均携带各自特有的序列号。在每次发送链路探测消息后,都在第一SDN控制器记录当次序列号和该序列号对应的当次链路探测消息的发送时刻。添加了序列号的链路探测消息经第一网络设备和第二网络设备的转发,上传至第二SDN控制器。
第二SDN控制器接收到包含序列号的链路探测消息后,在生成新的链路探测消息时,在其中加入前述序列号。添加了序列号的链路探测消息经第二网络设备和第一网络设备的转发,回传至第一SDN控制器。
第一SDN控制器在接收到的第一网络设备发送的携带第二网络设备标识的链路探测消息,确定与所述第一网络设备与第二网络设备相连之后,可根据接收到的链路探测消息中的序列号查找之前存储的该序列号对应的链路探测消息的发送时刻,进而根据接收到该链路探测消息的时刻与该序列号对应的最初链路消息的发送时刻计算第一SDN控制器最初发起链路探测消息和该链路探测消息发送至第二SDN控制器并反馈回来的时间差。由于网络设备与其所属的SDN控制器间的时延可以忽略,因此通过计算前述时间差可近似得到第一网络设备与所述第二网络设备间的时延。
这样,通过在链路探测方案中增加序列号标识各次链路探测事件,使SDN控制器在发送链路探测消息并接收到响应的链路探测消息后,除确定网络设备间的连接关系外,还能够进一步根据具有同一序列号的链路探测消息的发送时刻和接收时刻计算存在连接关系的网络设备间的时延。
在一些实施例中,步骤102具体为:当接收到直连设备发送的链路探测消息,并且判断所述链路探测消息的发起方非当前SDN控制器时,生成携带所述直连设备的标识的链路探测消息;
步骤104具体为:当接收到所述直连设备发送的携带网络设备标识的链路探测消息,并且判断所述链路探测消息的发起方非当前SDN控制器时,确定与所述直连设备相连的非当前SDN控制器控制的网络设备。
因为某一SDN控制器向与其连接的网络设备发送链路探测消息后,该链路探测消息可能会由其他与该SDN控制器直连的网络设备直接回传至该SDN控制器,根据上述单向环路流程,该SDN已经可以获取环路中的网络设备的连接关系,因此SDN在接收到自身发送的链路探测消息后可以不再进行响应。所以在这些实施例中,当第二SDN控制器接收到链路探测消息时,只有判断该链路探测消息的发送方为另一SDN控制器时,才确定需要响应所述链路探测消息,生成链路探测消息,将其经第二网络设备和第一网络设备的转发,回传至第一SDN控制器。
同样的,当第一SDN控制器接收到第一网络设备发送的链路探测消息时,只有判断该链路探测消息的发送方为另一SDN控制器时,才确定需要根据所述链路探测消息确定与所述直连设备相连的网络设备,并且在记录前述连接关系时,可进行区别记录,即当前链路探测消息中网络设备的标识指向的第二网络设备虽然通过第一网络设备与第一SDN控制器相连,但其并未与第一SDN控制器直接相连。区别记录了这样的连接关系后,第一SDN控制器将能够知晓虽然其不能够对第二网络设备进行直接控制,但可以通过限制第一网络设备向第二网络设备进行业务流量转发而实现对SDN网络的控制。
在一些实施例中,进一步提供两种判断链路探测消息发起方的方案:
方案一:步骤101具体为:当需要发送链路探测时,向直连设备发送携带所述直连设备的标识的链路探测消息;
以及,当接收的链路探测消息包括网络设备标识,并且所述网络设备标识所指示的网络设备为非直连设备时,判断所述链路探测消息的发起方非当前SDN控制器。
在方案一中,第一SDN控制器在发送最初的链路探测消息时在链路探测消息中添加所述链路探测消息指向的网络设备的标识,即第一网络设备的标识。该标识可以是第一SDN控制器在发起链路探测之前与相连网络设备交互获得的。当第一SDN控制器确定要向某一网络设备发送链路探测消息时,即希望探测与该网络设备相连的网络设备时,可在链路探测消息中添加所述链路探测消息指向的网络设备的标识。第一SDN控制器向第一网络设备发送的携带了第一网络设备标识的链路探测消息经第一网络设备和第二网络设备的转发,上传至第二SDN控制器。
因为第二SDN控制器能够感知所有与其直接相连的网络设备,并能够根据现有技术获知与其直接相连的各网络设备间的拓扑结构,因此第二SDN控制器在接收到包含某一网络设备标识的链路探测消息时,可以首先确定所述网络设备标识指向的网络设备是否是与第二SDN控制器直接相连并受其控制的网络设备。第二SDN控制器在判断第一网络设备时非直连设备时,确定接收到的链路探测消息的发起方不是当前的第二SDN控制器,进而生成链路探测消息进行响应。
同理,第一SDN控制器也能够根据其接收到的第二SDN控制器反馈的链路探测消息中携带的第二网络设备的标识判断所述第二网络设备未与当前的第一SDN控制器直接相连并受其控制,确定接收到的链路探测消息的发起方不是当前的第一SDN控制器,进而确定与第一网络设备相连的非当前第一SDN控制器控制的第二网络设备。
在方案一中,通过在各链路探测消息中添加各链路探测消息发送时指向的直连设备的标识,使接收到该链路探测消息的SDN控制器能够确定链路探测消息的发送方是否为自身。
方案二:步骤101具体为:当需要发送链路探测时,向直连设备发送携带当前SDN控制器标识的链路探测消息;
以及,当接收的链路探测消息包括SDN控制器标识,并且所述SDN控制器非当前SDN控制器时,判断所述链路探测消息的发起方非当前SDN控制器,所述SDN控制器标识为接收到的链路探测消息的发起方的标识;
步骤102中所述生成携带所述直连设备的标识的链路探测消息,具体包括:生成携带当前SDN控制器标识和所述直连设备的标识的链路探测消息。
在方案二中,第一SDN控制器在发送最初的链路探测消息时在链路探测消息中添加该链路探测消息的发送方,即第一SDN控制器的标识。SDN中各SDN控制器的标识均是唯一的,用于标识各SDN控制器,其可以为SDN控制器的MAC地址或设备号等。第一SDN控制器向第一网络设备发送的携带了第一SDN控制器标识的链路探测消息经第一网络设备和第二网络设备的转发,上传至第二SDN控制器。
第二SDN控制器在接收到携带了第一SDN控制器标识的链路探测消息后,可确定接收到的链路探测消息的发起方不是当前的第二SDN控制器,进而生成链路探测消息进行响应,其生成的链路探测消息中需要添加当前SDN控制器的标识,即第二SDN控制器的标识。
同理,第一SDN控制器也能够根据其接收到的携带了第二SDN控制器标识的链路探测消息确定其发起方不是当前的第一SDN控制器,进而确定与第一网络设备相连的非当前第一SDN控制器控制的第二网络设备。
在方案二中,通过在各链路探测消息中添加发送各链路探测消息的SDN控制器的标识,使接收到该链路探测消息的SDN控制器能够确定链路探测消息的发送方是否为自身。
这样,通过在链路探测消息响应的过程中,以及在根据链路探测消息确定网络设备连接关系的过程中加入判断链路探测消息来源的步骤,仅在链路探测消息的发起方为其他SDN控制器时,才对链路探测消息进行响应,以及记录时区别记录连接关系。这样,能够使各SDN控制器对SDN中网络设备的连接关系进行更细粒度的记录。此外这样还提供了具体的判断链路探测消息来源的方案。
在一些实施例中,在步骤104后还包括:当需要对直连设备和与所述直连设备相连的网络设备之间的链路时延进行测试时,通过所述直连设备向所连接的网络设备发送链路测试消息;针对其中至少一个网络设备,若在发送所述链路测试消息后的预设时长内没有接收到该网络设备响应于该链路测试消息的消息,则调整所述直连设备和所述与其相连的网络设备之间的流量。
在第一SDN控制器确定了第一网络设备和第二网络设备间的连接关系的基础上,在一些实施例中,进一步测试第一网络设备和第二网络设备间连接是否正常。
第一SDN控制器向第一网络设备发送链路测试消息,类似步骤101中的链路探测消息,所述链路测试消息可以为封装了LLDP报文的Packet_out消息。在向所述第一网络设备发送链路测试消息的同时,第一SDN控制器启动定时器。需要说明的是,因为第一SDN控制器已经获知了第一网络设备与其他网络设备的连接关系,当除上述第二网络设备外,还有第三网络设备、第四网络设备等其他与与第一网络设备存在连接关系的网络设备时,可为第一网络设备与第二网络设备、第一网络设备与第三网络设备和第一网络设备与第四网络设备等各组连接关系建立各自的定时器。
链路测试消息在网络设备和SDN控制器间的转发流程与前述的链路探测消息的转发流程相似,即各SDN控制器在接收到链路测试消息后会生成携带网络设备标识的消息进行响应,第一SDN控制器由第一网络设备接收到携带了网络设备标识的消息后,则可确定第一网络设备与该标识指向的网络设备间的连接通畅。第一SDN控制器判断在各定时器所计时间超过预设时间阈值之前是否接收到了各个其他网络设备响应于链路测试消息反馈的消息,若在预设时长内接收到了,则确认网络设备间连接正常,关闭相应的定时器;若在预设时长内没有接收到某个网络设备反馈的消息,则判断第一网络设备与该网络设备当前已经无法正常连接,需要调整第一网络设备与该网络设备之间的业务数据流量。
具体的调整方式可以为,第一SDN控制器向所述第一网络设备下发流表,流表的规则设置为限制所述第一网络设备向不正常连接的网络设备转发业务数据流量。需要说明的是,下发的流表中仅限制第一网络设备向第二网络设备转发业务数据流量,而不限制其转发链路探测消息,即第一SDN控制器发送至第一网络设备的链路探测消息仍然能够被转发至与所述第一网络设备相连的其他各网络设备。当网络恢复正常后,第一SDN控制器能够根据响应的链路探测消息确定某个网络设备恢复正常连接时,则重新下发流表,恢复第一网络设备向该网络设备转发业务数据流量。
在进行链路监测时,可能会先后发送多个链路测试消息,在各链路测试消息中可携带类似前述的序列号或者发送时刻,链路测试消息以与前述链路探测信息类似的流程在第一SDN控制器、第一网络设备、第二网络设备和第二SDN控制器间转发,并且第二网络设备接收到携带了序列号或者发送时刻的链路测试消息,在生成响应于该链路测试消息的消息时,需要将收到的序列号和发送时刻添加进生成的新消息中,以便生成的新消息反馈至第一SDN控制器时,第一SDN控制器能够根据序列号或者发送时刻确定当前的消息是对应哪一次发送的链路测试消息的,以便关闭相应的定时器。
这样,在确定了与直连网络设备相连的网络设备后,还可以对其连接关系进行探测,进而根据网络实际情况相应的调整业务数据流量的转发。
需要说明的是,上述第一SDN控制器可同时具有第二SDN控制器的功能,即对其他SDN控制器发送的链路探测消息和链路测试消息进行相应,第二SDN控制器同理,即所述第一SDN控制器和第二SDN控制器可为SDN中两个具有相同功能的SDN控制器。
实施例二:
LLDP报文是SDN中常用协议格式的报文,可以将本端设备的相关信息封装为TLV(Type/Length/Value,类型/长度/值)格式,之后由多个TLV组成一个LLDPDU(Link LayerDiscovery Protocol Data Unit,链路层发现协议数据单元)封装在LLDP报文的数据部分进行传送。LLDP协议中type值为9-126的TLV可通过自定义进行扩展。
本实施例中自定义Type值为100的TLV,并命名为Dlldp,其格式如下:
TLV Type=100 |
Length |
Value |
其中Value部分具体为:
Dlldp Type |
Seq |
Dpid |
Timeval |
其中:
Dlldp Type为Dlldp数据的类型,占用1字节,其具体值可以为Request或者Reply对应上述实施例中的请求标识或响应标识;Seq为序列号,4字节,对应上述实施例中的序列号;Dpid为网络设备的标识,占用14字节,对应上述实施例中的网络设备的标识,各网络设备均对应的唯一的Dpid值;Timeval为时间戳,占用4字节,对应上述实施例中的时间戳。
本实施例与上述实施例一相似或重复之处可参照上述实施例的描述。图4示出了本发明实施例四中SDN中数据处理方法流程示意图,如图4所示,所述SDN中数据处理方法包括:
步骤401,Controller A(控制器A,对应上述实施例中的第一SDN控制器)生成LLDP报文,LLDP协议报文中包含了自定义的Dlldp数据,其中Dlldp Type为Request,表明发起的该探测报文属于请求报文;Seq为当前探测的序列号,本次为1;Dpid为Swtich A设备的标识dpid_A,其中Switch A(交换机A,对应上述实施例中的第一网络设备)是与Controller A直接相连,并受其控制的网络设备,Controller A可通过事先与Switch A的交互获取其设备标识,即dpid_A;Timeval为Controller A生成该LLDP报文的时刻的时间戳,记为timeval1,因为生成该LLDP报文后即进行封装并发送,因此该时间戳可以近似表示Controller A发送封装后的LLDP报文的时间。除将Seq和timeval1携带在报文中外,还可在Controller A本地记录其对应关系。Controller A将所述LLDP报文封装成Packet_out消息发送给Switch A,并可以指定该报文在Switch A的出端口。需要注意的是Controller A欲将LLDP报文发送至哪个网络设备,则LLDP中的Dpid就为哪个网络设备的标识。
步骤402,Switch A接收到Packet_out消息后对其进行解封装,得到LLDP报文。Switch A根据预存的流表规则转发所述LLDP报文,常用的流表规则可以是在接收到封装有LLDP报文的Packet_out消息时将其解封装并转发至所有与Switch A相邻的网络设备。SDN中存在Switch B(交换机B,对应上述实施例中的第二网络设备)与Switch A直接相连,因此Switch A将解封装得到的LLDP报文转发至Switch B。
步骤403,Switch B接收到LLDP报文后,根据预设的流表规则进行转发。常用的流表规则可以是在接收到相邻网络设备发送的LLDP报文时将其封装转发至自身所属的控制器。因此Switch B将LLDP数据包按OpenFlow协议封装成Packet_in数据包发送给与自身直接相连的Controller B(控制器B,对应上述实施例中的第二SDN控制器)。
步骤404,Controller B收到Packet_in消息后,解封装得到LLDP报文,进一步按照规则协议解析,获取Dlldp数据。Controller B根据Dlldp Type为Request确定该报文是另一控制器发出的请求报文,需要反馈Dlldp Type为Reply的响应报文。基于接收到的LLDP报文,Controller B重新构建LLDP报文,并且在其中包括新的Dlldp数据,其Dlldp Type为Reply,表明该LLDP报文为响应报文;Seq为当前探测的序列号,与请求报文相同,为1;Dpid为Swtich B设备的标识dpid_B,其中Switch B是与Controller B直接相连,并受其控制的网络设备,Controller B可通过事先与Switch B的交互获取其设备标识,即dpid_B,因前述请求报文是由Switch B发送至Controller B的,因此在响应该LLDP报文时携带的也应当是Switch B的标识即dpid_B;Timeval仍为timeval1,即将Controller A生成原LLDP请求报文的时刻的时间戳同样携带在响应报文中反馈。在Controller B重新构建LLDP报文之前还可以先根据接收到的LLDP报文中携带的Switch A的标识判断所述Switch A与Controller B间是否存在直接连接关系,因Controller B知晓所有与其直接相连的网络设备的信息,因此若Switch A与Controller B直接相连则无需对接收到的LLDP报文进行回应,只有在判断Switch A与Controller B不存在直接连接关系时,才重新构建LLDP报文进行响应。
Controller B将所述新构建的LLDP报文封装成Packet_out消息发送给Switch B,并可以指定该报文在Switch B的出端口。需要注意的是Controller B由哪个网络设备接收请求报文,就将哪个网络设备的标识携带于新构建的LLDP报文的Dpid中,并将该新构建的LLDP报文发送回该网络设备。
此外在步骤404中Controller B还可以在判断Switch A与Controller B不存在直接连接关系时,根据由Switch B接收到的携带Switch A标识的LLDP报文确定Switch B和Switch A的连接关系。
步骤405,Switch B接收到Packet_out消息后对其进行解封装,得到新构建的LLDP报文。Switch B根据预存的流表规则转发所述新构建的LLDP报文,常用的流表规则可以是在接收到封装有LLDP报文的Packet_out消息时将其解封装并转发至所有与Switch B相邻的网络设备,因此Switch B可以将解封装得到的新构建的LLDP报文转发至Switch A。
步骤406,Switch A接收到新构建的LLDP报文后,根据预设的流表规则进行转发。常用的流表规则可以是在接收到相邻网络设备发送的LLDP报文时将其封装转发至自身所属的控制器。因此Switch A将新构建的LLDP数据包按OpenFlow协议封装成Packet_in消息发送给与自身直接相连的Controller A。
步骤407,Controller A收到Packet_in消息后解封装得到新构建的LLDP报文,因为Controller A接收到了Switch A发送的携带了Switch B标识Dpid_B的报文,因此可确定Switch A与Switch B间的连接关系。在确定Switch A与Switch B间的连接关系前还可以包括判断步骤,即确定Switch B为与Controller A未直接连接的网络设备时才确定Switch A与Switch B间的连接关系,当Switch B与Controller A直接连接时,Controller A已存有Switch B的拓扑信息,无需重新确定连接关系。根据新构建的LLDP报文中的Dlldp Type为Reply可以确定该报文已经是其他控制器响应的报文了,只需根据该报文建立网络设备间的连接关系而无需再根据该报文重新构建另一报文。
步骤408,在确定Switch A与Switch B间的连接关系的基础上,Controller A将接收到封装了新构建的LLDP报文的Packet_in消息的时刻标识为时间戳timeval2,根据新构建的LLDP报文中的报文发送时间戳timeval1和接收时刻timeval2,可由timeval2-timeval1计算得到Controller A经Switch A和Switch B至Controller B间的时延,由于Controller A与Switch A间的时延以及Controller B与Switch B间的时延可以忽略不计,因此可由timeval2-timeval1近似计算得到Switch A和Switch B间的端到端时延。在步骤408中,除前述计算时延的方法外,还可以根据新构建的LLDP报文中携带的序列号Seq在Controller A本地查找该序列号为1的请求报文的生成时间,并根据接收到该序列号为1的新构建报文的时间和所述报文生成时间近似计算得到Switch A和Switch B间的端到端时延。
步骤409,在Controller A已经确定Switch A和Switch B的连接关系后,可对Switch A和Switch B之间的链路进行监测。在需要时或周期性的向Switch A发送监测报文,监测报文类似步骤401中的请求报文,同样包括自定义的Dlldp数据。其中Dlldp Type为Request,表明发起的该探测报文属于监测报文;Seq为当前监测报文的序列号,本次为2;Dpid为Swtich A设备的标识dpid_A,Timeval为Controller A生成该LLDP报文的时刻的时间戳,记为timeval3,因为生成该LLDP报文后即进行封装并发送,因此该时间戳可以近似标识Controller A发送封装后的LLDP报文的时间。Controller A将所述LLDP报文封装成Packet_out消息发送给Switch A,并可以指定该报文在Switch A的出端口。需要注意的是Controller A欲将LLDP报文发送至哪个网络设备,则LLDP中的Dpid就为哪个网络设备的标识。
若Switch A和Switch B之间的链路正常,则步骤411-步骤415与上述步骤401-步骤406相同。在步骤415中Controller A能够接收到经Switch A和Switch B转发的Controller B响应的报文,其Dlldp Type为Reply,Seq为2,Dpid为dpid_B,时间戳为timeval3。
步骤410,在Controller A发送监测报文后立即针对Switch A和Switch B的连接关系启动一定时器开始计时,并监测是否收到步骤415中的报文,即是否收到了Switch A发送的携带了Switch B的标识dpid_B的报文。
当定时器超过预设时间,并且仍未接收到步骤415中的报文时,则判断Switch A和Switch B之间的链路可能出现了故障,Controller A可通过向Switch A下发流表,避免将Switch A的流量转发至Switch B,而是转发到其他交换机。当定时器在超过预设时间之前即收到了步骤415中的报文,则确定Switch A和Switch B之间的链路正常,关闭所述定时器,不对流量进行控制调整。
需要说明的是,Switch A可能还与其他交换机存在连接关系,并且这些交换机与Controller A未直接相连,例如类似于前述步骤401-409,Switch A可能还分别建立了与Switch C和Switch D等交换机间的连接关系,其中Switch C和Switch D均与Controller B直接相连。在步骤409发送监测报文后,步骤410中还需要分别对Switch A和Switch C,以及Switch A和Switch D这两组连接关系分别启动对应的定时器。各定时器超时前,若接收到了Switch A发送的包含Switch C的标识的报文,则关闭Switch A和Switch C这组连接关系对应的定时器;若接收到了Switch A发送的包含Switch D的标识的报文,则关闭Switch A和Switch D这组连接关系对应的定时器。相应的若那组连接关系对应的定时器超时了,则判断该连接关系可能出现了故障。
本实施例中,Controller A能够在Controller B的协助下感知与Controller A不存在直接连接关系的Switch B,确定Switch A与Switch B间的连接关系,以及计算SwitchA与Switch B间的时延。在确定了Switch A与Switch B间的连接关系的基础上,还能够对其链路状态进行监测,若链路出现故障可限制Switch A向Switch B转发业务数据流量。
实施例三:
基于同一发明构思,本发明实施例中还提供了SDN中数据处理装置,由于这些装置解决问题的原理与SDN中数据处理方法相似,因此这些装置的实施可以参见方法的实施,重复之处不再赘述。图5示出了本发明实施例三SDN中数据处理装置的结构示意图,如图所示,所述装置500包括:
接收模块501,用于接收直连设备发送的链路探测消息;
处理模块502,用于当所述接收模块501接收到直连设备发送的链路探测消息时,生成携带所述直连设备的标识的链路探测消息;
发送模块503,用于向所述直连设备发送生成的所述链路探测消息。
优选的,所述发送模块503还用于,当需要发起链路探测时,向直连设备发送链路探测消息;
所述处理模块502还用于,当所述接收模块501接收到所述直连设备发送的携带网络设备标识的链路探测消息时,确定与所述直连设备相连的网络设备。
优选的,所述处理模块502具体用于:当所述接收模块501接收到直连设备发送的携带请求标识的链路探测消息时,生成携带响应标识和所述直连设备的标识的链路探测消息;
所述发送模块503具体用于:当需要发起链路探测时,向直连设备发送携带请求标识的链路探测消息;
所述处理模块502还具体用于:当所述接收模块501接收到所述直连设备发送的携带响应标识和网络设备标识的链路探测消息时,确定与所述直连设备相连的网络设备。
优选的,所述处理模块502具体用于:当所述接收模块501接收到直连设备发送的携带发送时刻的链路探测消息时,生成携带所述发送时刻和所述直连设备的标识的链路探测消息,所述发送时刻为该接收到的链路探测消息的发送时间的标识;
所述发送模块503具体用于:当需要发送链路探测时,向直连设备发送携带发送时刻的链路探测消息,所述发送时刻为该链路探测消息发送时间的标识;
所述处理模块502还具体用于:当所述接收模块501接收到所述直连设备发送的携带发送时刻和网络设备标识的链路探测消息时,确定与所述直连设备相连的网络设备,并根据接收到该链路探测消息的时刻和该链路探测消息携带的发送时刻计算所述直连设备和与其相连的网络设备间的时延。
优选的,所述处理模块502具体用于:当所述接收模块501接收到直连设备发送的携带序列号的链路探测消息时,生成携带所述序列号和所述直连设备的标识的链路探测消息,所述序列号为接收到的链路探测消息的发送事件的标识;
所述发送模块503具体用于:当需要发起链路探测时,向直连设备发送携带序列号的链路探测消息,并保存携带所述序列号的链路探测消息的发送时刻,所述序列号为该次链路探测消息发送事件的标识;
所述处理模块502还具体用于:当接收到所述直连设备发送的携带序列号的网络设备标识的链路探测消息时,确定与所述直连设备相连的网络设备,并根据接收到该链路探测消息的时刻和所述携带所述序列号的链路探测消息的发送时刻计算所述直连设备和与其相连的网络设备间的时延。
优选的,所述处理模块502具体用于:当所述接收模块501接收到直连设备发送的链路探测消息,并且判断所述链路探测消息的发起方非当前SDN控制器时,生成携带所述直连设备的标识的链路探测消息;
以及,当所述接收模块501接收到所述直连设备发送的携带网络设备标识的链路探测消息,并且判断所述链路探测消息的发起方非当前SDN控制器时,确定与所述直连设备相连的非当前SDN控制器控制的网络设备。
优选的,当接收的链路探测消息包括网络设备标识,并且所述网络设备标识所指示的网络设备为非直连设备时,判断所述链路探测消息的发起方非当前SDN控制器;
所述发送模块503具体用于:当需要发送链路探测时,向直连设备发送携带所述直连设备的标识的链路探测消息;
或者,
当接收的链路探测消息包括SDN控制器标识,并且所述SDN控制器非当前SDN控制器时,判断所述链路探测消息的发起方非当前SDN控制器,所述SDN控制器标识为接收到的链路探测消息的发起方的标识;
所述处理模块502生成携带所述直连设备的标识的链路探测消息,具体包括:所述处理模块502生成携带当前SDN控制器标识和所述直连设备的标识的链路探测消息;
所述发送模块503具体用于:当需要发送链路探测时,向直连设备发送携带当前SDN控制器标识的链路探测消息。
优选的,所述发送模块503还用于:在所述处理模块502确定与所述直连设备相连的网络设备之后,当需要对直连设备和与所述直连设备相连的网络设备之间的链路时延进行测试时,通过所述直连设备向所连接的网络设备发送链路测试消息;
所述处理模块502还用于,针对其中至少一个网络设备,若在发送所述链路测试消息后的预设时长内所述接收模块501没有接收到该网络设备响应于该链路测试消息的消息,则调整所述直连设备和所述与其相连的网络设备之间的流量。
实施例四:
基于同一发明构思,本发明实施例中还提供了SDN中数据处理系统,由于这些装置解决问题的原理与SDN中数据处理方法和装置相似,因此该系统的实施可以参见方法和装置的实施,重复之处不再赘述。
本实施例的SDN中具有多个SDN控制器。其中各SDN控制器具有上述实施例三中所述的装置。
实施例五:
基于同一发明构思,本发明实施例中还提供了SDN中数据处理电子设备,由于其原理与SDN中数据处理方法相似,因此其实施可以参见方法的实施,重复之处不再赘述。所述电子设备包括:存储器,一个或多个处理器;以及一个或多个模块,所述一个或多个模块被存储在所述存储器中,并被配置成由所述一个或多个处理器执行,所述一个或多个模块包括用于执行任一上述方法中各个步骤的指令。
实施例六:
基于同一发明构思,本发明实施例还提供了与电子设备结合使用的SDN中数据处理计算机程序产品,由于其原理与SDN中数据处理方法相似,因此其实施可以参见方法的实施,重复之处不再赘述。所述计算机程序产品包括计算机可读的存储介质和内嵌于其中的计算机程序机制,所述计算机程序机制包括用于执行任一前述方法中各个步骤的指令。
为了描述的方便,以上所述装置的各部分以功能分为各种模块分别描述。当然,在实施本发明时可以把各模块或单元的功能在同一个或多个软件或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。