一种虚拟交换机控制平面与用户态数据平面通信的方法与流程

文档序号:11263621阅读:157来源:国知局
一种虚拟交换机控制平面与用户态数据平面通信的方法与流程

本申请涉及网络通信领域,特别涉及一种虚拟交换机控制平面与用户态数据平面通信的方法。



背景技术:

随着虚拟化技术的广泛应用,虚拟交换机需要支撑越来越多的关键业务,这些关键业务对虚拟交换机的数据平面的性能及高可用性也提出越来越高的要求。传统的虚拟交换机数据平面通常位于系统的内核态,性能不能满足新型业务的需求。也有新一代的虚拟交换机将数据平面在用户态实现从而可以利用dpdk等高性能数据平面技术,但通常将用户态数据平面和控制平面在一个系统进程中实现,这样导致用户态数据平面的高可靠性不能得到满足。因此,本领域存在高可靠的独立的高性能的虚拟交换机用户态数据平面的需求,由此产生出对虚拟交换机控制平面与用户态数据平面通信方法的需求。



技术实现要素:

本申请叙述的方法用于虚拟交换机控制平面与用户态数据平面之间进行通信,从而使得虚拟交换机用户态数据平面可以与控制平面实现分离以提高用户态数据平面的可靠性。根据一个实施例,提供了一种用于虚拟交换机控制平面与用户态数据平面之间进行通信的方法,该方法包括:控制平面发送请求消息至数据平面通信端口,数据平面在数据平面通信端口上接收请求消息,如果请求消息需要应答,数据平面向对应的控制平面的请求消息通信端口发送应答消息,控制平面在请求消息通信端口上接收应答消息;数据平面向控制平面通知消息接收端口发送通知消息,控制平面在通知消息接收端口上接收通知消息。

在前述实施例的上下文中,虚拟交换机数据平面为用户态数据平面。

在前述实施例的上下文中,每个消息包含一种消息类型id,一种消息类型id对应于数据平面中一类可以被控制平面操作的对象。

在前述实施例的上下文中,每个请求消息包含一种消息操作类型,操作类型指定对该请求消息包含的数据平面可操作对象进行的操作。

在前述实施例的上下文中,每个请求消息包含一个序号。

在前述实施例的上下文中,每个应答消息包含对应的请求消息相同的序号。

在前述实施例的上下文中,控制平面和数据平面有相同的数据平面通信端口设置。

在前述实施例的上下文中,控制平面的通知消息接收端口由控制平面通过请求消息告知数据平面。

本发明实施例的其他特征将从附图和后面的详细叙述中更明显得到。

本发明的突出优点为该方法是一种简单高效的虚拟交换机控制平面与独立的用户态数据平面通信的方式,现有与内核态数据平面通信的虚拟交换机控制平面只需改动数据平面通信端口即可实现与用户态数据平面的通信。

附图说明

在附图中的视图中借助举例方式对本发明的实施例进行描述,这些实施例并非起局限作用,附图中类似的参考数字将表示类似的元件,其中:

图1是从概念上描述本发明方法的逻辑关系图。

图2描述了应用本发明的一个具体实施例的功能模块图。

图3描述了genericnetlink的原理图。

图4描述了genericnetlink消息格式。

图5描述了用于虚拟交换机控制平面与数据平面通信的消息类型。

图6描述了用于虚拟交换机控制平面与数据平面通信的消息操作类型。

图7是可以使用本发明实施例的计算机系统的实例。

具体实施方式

本申请叙述了一种用于虚拟交换机控制平面与用户态数据平面通信的方法。本申请实施的技术方案中,用于虚拟交换机控制平面(210)和用户态数据平面(215)通信的消息基于genericnetlink消息总线(280)。消息头部字段包含消息类型id和消息操作类型,每个请求消息包含一个序号,每个应答消息包含对应的请求消息相同的序号。消息类型注册模块(282)向genericnetlink控制器(281)注册所有使用的消息类型,注册完成后控制平面和用户态数据平面可以向genericnetlink控制器(281)查询消息类型id。数据平面通信端口选择模块(218)从用户态数据平面启动前系统未使用的genericnetlink端口中选取,并通知控制平面和用户态数据平面。控制平面的通知消息接收端口(220,225)由控制平面决定并通过请求消息告知用户态数据平面。控制平面(210)发送请求消息(250)至数据平面通信端口(240),数据平面(215)在数据平面通信端口(240)上接收请求消息(250),如果请求消息需要应答,数据平面(215)向对应的控制平面的请求消息通信端口(235)发送应答消息(255),控制平面(210)在请求消息通信端口(235)上接收应答消息(255);数据平面(215)向控制平面的通知消息接收端口(225)发送通知消息(270),控制平面(210)在通知消息接收端口(225)上接收通知消息(270)。

在后面的叙述中,为了提供对本发明实施例的全面理解,公开了许多特定的详细内容。然而,本领域的技术人员将明白,在不具有这些具体细节中的某些细节的情况下,也可以实现本发明的实施例。

术语

虚拟交换机:由软件实现的根据以太网报头进行报文转发的系统,也可提供安全访问控制、流量控制和隧道等功能。

控制平面:用于控制和管理所有网络协议的运行,控制平面提供了数据平面数据处理转发前所必须的各种网络信息和转发查询表项。

数据平面io端口:用于接收发送数据报文的端口,可以是连接虚拟机的虚拟端口,连接物理网卡的物理端口,也可以是其它的特殊端口如隧道端口,tap端口等。

数据平面:用于处理数据报文在各种数据平面io端口之间的转发。

用户态数据平面:运行在操作系统用户态的数据平面。

netlink:一种完成用户态程序和内核模块通信的机制,netlink内核提供的服务类型已经提前定义,扩展新的服务类型必须重新编译内核。

netlink端口:用来描述基于netlink通信的端点,操作系统内核对应的netlink端口为0。

genericnetlink:一种建立在netlink上通用的用户态和内核态通信的机制,内核模块可以动态注册,注销genericnetlink数据总线上的服务。

genericnetlinkfamily:对应于genericnetlink数据总线上的一种服务,根据family名称可以区分不同的服务。

genericnetlinkfamilyid:与一种genericnetlinkfamily对应的id,用于消息首部。

genericnetlink控制器:管理genericnetlink数据总线上genericnetlinkfamily注册和注销,维护genericnetlinkfamily与genericnetlinkfamilyid的映射。

请求消息:控制平面向数据平面发送的用于完成指定操作的消息。

应答消息:数据平面向控制平面发送的返回请求消息的处理结果的消息。

通知消息:数据平面向控制平面发送的数据平面特定事件的消息。

数据平面通信端口:数据平面上用于接收请求消息,发送应答消息和通知消息的通信端口。

请求消息通信端口:控制平面上用于发送请求消息,接收应答消息的通信端口。

通知消息接收端口:控制平面上用于接收通知消息的通信端口。

图2描述了应用本发明的一个具体实施例的功能模块图,每个功能模块以及之间的关系将在后面的实施例中具体描述。

图3描述了genericnetlink的原理图,genericnetlink是一种可扩展的用于用户态应用与内核态服务进行通信的机制。在用户态应用与内核态服务通信开始前,内核服务程序(350,355)通过genericnetlink消息总线(340)向genericnetlink控制器(345)进行注册需要使用的genericnetlinkfamily,用户态应用程序(310,315)使用netlinksocketapi(320)根据genericnetlinkfamily名称向genericnetlink控制器查询对应的genericnetlinkfamilyid。应用程序(310,315)使用genericnetlink消息(目的netlink端口为0,netlink首部消息类型为相应服务的genericnetlinkfamilyid)与内核服务程序通信。

图4描述了genericnetlink消息的结构,消息由三部分组成:netlink消息首部,genericnetlink首部和消息正文。

图5描述了虚拟交换机控制平面与用户态数据平面通信所使用的消息类型,包括:datapath,port,flow和packet四种类型。每种消息类型对应于一种genericnetlinkfamily,消息类型id即为genericnetlinkfamilyid,消息类型id包含在netlink消息首部类型字段(411)中。

图6描述了虚拟交换机控制平面与用户态数据平面通信所使用的消息操作类型,包括:创建,删除,更新,获取和批量获取五种操作类型。创建,删除,更新和获取四种操作类型包含在genericnetlink首部操作类型字段(420)中,批量获取操作由netlink首部标志字段(412)中的nlm_f_dump位决定。

图2中虚拟交换机控制平面(210)和用户态数据平面(215)之间用于通信的端口包括:数据平面通信端口(240),控制平面请求消息通信端口(230,235),控制平面通知消息接收端口(220,235),这些端口对应于netlink端口。

在控制平面与数据平面通信之前,有两个重要的准备步骤:

1)保证控制平面(210)和数据平面(215)有相同的消息类型id。本实施例使用消息类型注册模块(282)为每种消息类型(即genericnetlinkfamily)向内核genericnetlink控制器进行注册并生成消息类型id(即genericnetlinkfamilyid),控制平面(210)和数据平面(215)根据消息类型名称通过netlinksocket向内核genericnetlink控制器查询消息类型id,从而保证控制平面(210)和数据平面(215)有相同的消息类型id。其他实施例也可以构建用户态genericnetlink控制器或提前在控制平面和数据平面预定义相同的消息类型id来保证控制平面和数据平面有相同的消息类型id。

2)保证控制平面(210)和数据平面(215)有相同的数据平面通信端口(240)设置。本实施例采用数据平面通信端口选择模块(218)从系统中选择未被使用的netlink端口,并告知控制平面(210)和数据平面(215)应用该数据平面通信端口(240)设置。

数据平面(215)应在控制平面(210)发出任何请求消息之前启动并侦听数据平面通信端口(240)。

构建请求消息,应答消息和通知消息的步骤包括:

1)填充netlink消息首部

a)长度字段(410):包括netlink消息首部,genericnetlink消息首部和消息正文的长度补齐4字节对齐后的长度。

b)类型字段(411):为该消息的消息类型id。如果是批量获取操作的结束消息,该字段为nlmsg_done。

c)标志字段(412):请求消息需要置上nlm_f_request位。如果该请求消息为批量获取操作类型,同时置上nlm_f_dump位。如果是批量获取操作类型的应答消息,需置上nlm_f_multi位。

d)序号字段(413):由控制平面产生,用于关联应答消息和请求消息,以及对应一个批量获取操作请求消息的多个应答消息。

e)发送端口(414):为该消息发送的本地netlink端口。

2)填充genericnetlink消息首部

a)操作类型(420):为该消息的操作类型。

b)版本号(421):为对应genericnetlinkfamily服务的版本号。

3)填充消息正文

控制平面(210)根据业务逻辑需要,构建请求消息(250),从请求消息通信端口(235)发至数据平面通信端口(240)。数据平面(215)从数据平面通信端口(240)接收请求消息(250)并进行处理,如果请求消息(250)要求应答,数据平面(215)根据请求执行结果构建应答消息(255)并发送至请求消息(250)对应的控制平面的请求消息通信端口(235)。

控制平面(210)如果需要接收数据平面(215)特定的通知消息,控制平面(210)可以构建请求消息(260)提前告知数据平面(215)控制平面的通知消息接收端口(220,225)。当数据平面(215)特定的事件触发通知消息机制时,数据平面(215)构建通知消息(270)发送至通知消息接收端口(225)。当一条通知消息可以发向多于一个的控制平面的通知消息接收端口时,数据平面(215)可以采用轮换的方式或哈希的方式或其他方式选择一个控制平面的通知消息接收端口进行发送。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可使用软件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1