CN104639578B - 多协议栈负载均衡方法及装置 - Google Patents
多协议栈负载均衡方法及装置 Download PDFInfo
- Publication number
- CN104639578B CN104639578B CN201310554861.XA CN201310554861A CN104639578B CN 104639578 B CN104639578 B CN 104639578B CN 201310554861 A CN201310554861 A CN 201310554861A CN 104639578 B CN104639578 B CN 104639578B
- Authority
- CN
- China
- Prior art keywords
- socket
- network interface
- protocol stack
- protocol
- interface card
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/12—Avoiding congestion; Recovering from congestion
- H04L47/125—Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
Abstract
本发明公开了多协议栈负载均衡方法和装置,包括:响应应用的请求创建第一套接字并部署在所有的协议栈上;接收请求连接的数据包;判断该请求连接的数据包的协议类型,如果协议类型是TCP协议,则创建第二套接字以建立会话连接;根据每个协议栈的负载情况,为该第二套接字选择一个协议栈,在该第二套接字的数据包通过网卡的默认分流规则不能分流到选择的协议栈所绑定的RSS网卡收队列上时,根据该网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的该第二套接字的数据包分流到该RSS网卡收队列上;完成该第二套接字与该选择的协议栈间的数据包分发。通过上述方式,本发明能够在多协议栈环境下,通过对协议栈和应用的负载感知,与RSS网卡收、发队列、流表匹配结合,实现协议栈的负载均衡,减少CPU的数据分发开销。
Description
技术领域
本发明涉及通信技术领域,特别是涉及一种多协议栈负载均衡方法及装置。
背景技术
云计算的快速发展,使得计算的工作越来越集中在数据中心完成,而终端更多的是利用网络快速的将请求的任务发送到数据中心,所以终端对计算能力的需求在降低,而对网络能力的需求在增加。而协议栈作为应用和物理网络之间的桥梁却没有得到快速发展,已经逐渐成为了两者之间的瓶颈。多个协议栈组合处理单个或者多个端口的扩展方式已经成为必然。此时,要采用分流算法将属于相同连接的数据包转发给不同的协议栈,由于所有协议栈共用一个分发模块,不算是真正的并行处理,容易在分发模块处出现性能瓶颈。
现在商用10G网卡大部分具备有RSS(Receive Side Scaling,接收方扩展)等分流功能,通过对接收的网络数据包基于三元组/五元组进行哈希(hash),完成硬件分流的任务,将属于同一个连接的数据包发给网卡的同一个RSS网卡收队列,即发给同一个协议栈实例来处理。如图1所示,每个网卡接口100有多个协议栈,如协议栈0,协议栈1、协议栈2、协议栈3,每个协议栈绑定至少1个RSS网卡收、发队列,RSS网卡收队列由对应的协议栈处理。例如,通常通过防火墙网关发出的数据包具有相同的IP(Internet Protocol,网络协议),如果网卡的RSS分流只是基于源、目的IP以及协议三元组来进行哈希(hash)分流的话,这些通过同一个网关的数据包很可能分配到了同一个RSS网卡收队列,导致和该队列相连的协议栈可能存在过载的情况。因此,基于数据包的三元组/五元组进行简单hash分流,存在不能通过感知协议栈的真实负载情况进行灵活的负载均衡分发的缺点。
发明内容
本发明实施方式提供一种多协议栈负载均衡方法及装置,能够在多协议栈环境下,通过对协议栈以及应用的负载感知,与RSS网卡收/发队列、流表匹配相结合,实现协议栈的负载均衡,减少了CPU的数据分发开销。
第一方面提供一种多协议栈负载均衡方法,该方法包括:响应应用的请求创建第一套接字并部署在所有的协议栈上;接收请求连接的数据包;判断请求连接的数据包的协议类型,如果协议类型是传输控制协议,则:创建第二套接字以建立会话连接;根据每个协议栈的负载情况,为第二套接字选择一个协议栈;在第二套接字的数据包通过网卡的默认分流规则不能把数据包分流到选择的协议栈所绑定的接收方扩展RSS网卡收队列上时,根据网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的第二套接字的数据包分流到RSS网卡收队列上;进行第二套接字与选择的协议栈间的数据包分发。
结合第一方面,在第一方面的第一种可能的实现方式中,还包括:会话结束后,释放第二套接字,并删除网卡上创建的匹配流表。
结合第一方面,在第一方面的第二种可能的实现方式中,如果协议类型是用户数据报协议,则:由收到请求连接的数据包的协议栈进行协议处理。
结合第一方面,在第一方面的第三种可能的实现方式中,在响应应用的请求创建第一套接字并部署在所有的协议栈上的步骤之前,对网卡和所有的协议栈进行初始化配置,包括:读取并存储网卡的硬件配置信息;获取用户配置信息,并结合硬件配置信息形成网卡配置策略,写入网卡;启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
结合第一方面,在第一方面的第四种可能的实现方式中,响应应用的请求创建第一套接字并部署在所有的协议栈上包括:调用应用编程接口创建第一套接字;第一套接字创建后,调用bind函数将第一套接字绑定到特定的IP地址,并调用listen函数监听指定端口的数据包请求;收到第一套接字的监听方法调用时,将第一套接字部署在所有的协议栈上。
结合第一方面,在第一方面的第五种可能的实现方式中,创建第二套接字以建立会话连接的步骤包括:根据各协议栈的网络运行的实际情况,创建第二套接字。
结合第一方面,在第一方面的第六种可能的实现方式中,创建第二套接字以建立会话连接的步骤包括:将接收的对端发送的请求连接的数据包转给应用;待应用确认后创建第二套接字。
结合第一方面,在第一方面的第七种可能的实现方式中,会话结束包括接收并响应应用下发的释放第二套接字的请求,或者接收并响应对端发送的连接释放请求。
第二方面提供一种多协议栈负载均衡方法,该方法包括:创建第一套接字,并根据每个协议栈的负载情况,为第一套接字选择一个协议栈以建立会话连接;若第一套接字的数据包通过网卡的默认分流规则不能分流到协议栈所绑定的接收方扩展RSS网卡收队列上,则根据网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的数据包分流到RSS网卡收队列上;进行第一套接字与选择的协议栈间的数据包分发。
结合第二方面,在第二方面的第一种可能的实现方式中,还包括:会话结束后,释放第一套接字,并删除网卡上创建的匹配流表
结合第二方面,在第二方面的第二种可能的实现方式中,在创建第一套接字之前,对网卡和所有的协议栈进行初始化配置,包括:读取并存储网卡的硬件配置信息;获取用户配置信息,并结合硬件配置信息形成网卡配置策略,写入网卡;启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
结合第二方面,在第二方面的第三种可能的实现方式中,会话结束包括接收并响应应用下发的释放第一套接字的请求,或者接收并响应对端发送的连接释放请求。
第三方面提供一种多实例协议栈负载均衡装置,该装置包括:协议栈模块、网卡、数据分发模块以及负载均衡模块,协议栈模块包括多个协议栈,其中:数据分发模块,用于响应应用的请求创建第一套接字并部署在所有的协议栈上;协议栈模块,用于接收请求连接的数据包,判断请求连接的数据包的协议类型;数据分发模块,用于,如果协议类型是传输控制协议,则创建第二套接字以建立会话连接;负载均衡模块,用于,如果协议类型是传输控制协议,则根据每个协议栈的负载情况,为第二套接字选择一个协议栈,并在第二套接字的数据包通过网卡的默认分流规则不能分流到选择的协议栈所绑定的接收方扩展RSS网卡收队列上时,根据网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的第二套接字的数据包分流到RSS网卡收队列上;数据分发模块,还用于进行第二套接字与选择的协议栈间的数据包分发。
结合第三方面,在第三方面的第一种可能的实现方式中,在会话结束后,协议栈模块,还用于,控制选择的协议栈释放第二套接字;负载均衡模块,还用于删除网卡上创建的匹配流表。
结合第三方面,在第三方面的第二种可能的实现方式中,协议栈模块,还用于,如果协议类型是用户数据报协议,则控制收到请求连接的数据包的协议栈进行协议处理。
结合第三方面,在第三方面的第三种可能的实现方式中,负载均衡模块,还用于对网卡和所有的协议栈进行初始化配置,包括:具体用于读取并存储网卡的硬件配置信息,获取用户配置信息并结合硬件配置信息形成网卡配置策略,写入网卡;协议栈模块,还用于启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
结合第三方面,在第三方面的第四种可能的实现方式中,数据分发模块,用于响应应用的请求创建第一套接字并部署在所有的协议栈上,具体为:数据分发模块用于响应应用调用应用编程接口的通知创建第一套接字,并接收第一套接字的监听方法调用,其中,第一套接字创建后,应用调用bind函数将第一套接字绑定到特定的IP地址,并调用listen函数监听指定端口的数据包请求;负载均衡模块,还用于通知各协议栈将第一套接字部署在所有的协议栈上。
结合第三方面,在第三方面的第五种可能的实现方式中,数据分发模块用于创建第二套接字以建立会话连接,具体为:用于根据各协议栈的网络运行的实际情况,创建第二套接字。
结合第三方面,在第三方面的第六种可能的实现方式中,协议栈模块用于创建第二套接字以建立会话连接,具体为:用于将接收的对端发送的请求连接的数据包转给应用;所述数据分发模块,用于待应用确认后创建第二套接字。
结合第三方面,在第三方面的第七种可能的实现方式中,数据分发模块接收并响应应用下发的释放第二套接字的请求,或者协议栈模块接收并响应对端发送的连接释放请求,则表示会话结束。
第四方面提供一种多实例协议栈负载均衡装置,该装置包括:协议栈模块、网卡、数据分发模块以及负载均衡模块,协议栈模块包括多个协议栈,其中:数据分发模块,用于创建第一套接字;负载均衡模块,用于根据每个协议栈的负载情况,为第一套接字选择一个协议栈以建立会话连接,若第一套接字的数据包通过网卡的默认分流规则不能分流到协议栈所绑定的接收方扩展RSS网卡收队列上,则根据网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的数据包分流到RSS网卡收队列上;数据分发模块,还用于进行第一套接字与选择的协议栈间的数据包分发。
结合第四方面,在第四方面的第一种可能的实现方式中,在会话结束后,协议栈模块,用于控制选择的协议栈释放第一套接字;负载均衡模块,还用于删除网卡上创建的匹配流表。
结合第四方面,在第四方面的第二种可能的实现方式中,负载均衡模块,还用于对网卡和所有的协议栈进行初始化配置,包括:具体用于读取并存储网卡的硬件配置信息,获取用户配置信息并结合硬件配置信息形成网卡配置策略,写入网卡;协议栈模块,还用于启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
结合第四方面,在第四方面的第三种可能的实现方式中,数据分发模块接收并响应应用下发的释放第一套接字的请求,或者协议栈模块接收并响应对端发送的连接释放请求,则表示会话结束。
本发明实施方式提供的多协议栈负载均衡方法及装置,通过响应应用的请求创建第一套接字并部署在所有的协议栈上;在接收请求连接的数据包后,如果请求连接的数据包的协议类型是传输控制协议,则创建第二套接字以建立会话连接;并根据每个协议栈的负载情况,为第二套接字选择一个协议栈,在第二套接字的数据包通过网卡的默认分流规则不能分流到选择的协议栈所绑定的RSS网卡收队列上时,根据网卡的分流策略在网卡上创建匹配流表,把接收的第二套接字的数据包分流到RSS网卡收队列上;如此通过对协议栈以及应用的负载感知,与RSS网卡收、发队列、流表匹配相结合,选择合适的协议栈以进行数据处理,使协议处理充分并行,提高协议处理能力,能够在多协议栈环境下,实现协议栈的负载均衡,减少了CPU的数据分发开销。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。其中:
图1是现有技术中的多协议栈负载均衡装置结构示意图;
图2是本发明第一实施例的多协议栈负载均衡装置的结构示意图;
图3是本发明第二实施例的多协议栈负载均衡装置的结构示意图;
图4是本发明第一实施例的多协议栈负载均衡方法示意图;
图5是本发明第一实施例的多协议栈负载均衡方法初始化的流程示意图;
图6是本发明第二实施例的多协议栈负载均衡方法示意图;
图7是本发明第三实施例的多协议栈负载均衡装置的又一结构示意图;
图8是本发明第四实施例的多协议栈负载均衡装置的又一结构示意图。
具体实施方式
下面结合附图和实施方式对本发明进行详细说明。
首先请参见图2,图2是本发明第一实施例的多协议栈负载均衡装置的结构示意图。如图2所示,该多协议栈负载均衡装置10包括:协议栈模块12、数据分发模块13、负载均衡模块14、网卡16以及网卡驱动17,其中,协议栈模块12包括多个协议栈15,网卡16包括RSS网卡收、发队列18以及匹配流表19,RSS网卡收、发队列18包括RSS网卡收队列和RSS网卡发队列。
在本实施例中,应用11调用应用编程接口通知数据分发模块13创建第一套接字。数据分发模块13用于响应应用11的请求创建第一套接字并部署在所有的协议栈15上。协议栈模块12用于接收请求连接的数据包,判断请求连接的数据包的协议类型,如果协议类型是UDP(User Datagram Protocol,用户数据报协议),则控制收到请求连接的数据包的协议栈15进行协议处理,当然,在本发明的其它实施例中,也可以由其它的协议栈处理。如果协议类型是TCP(Transmission Control Protocol,传输控制协议),则:数据分发模块13还用于创建第二套接字以建立会话连接;负载均衡模块14用于根据每个协议栈的负载情况,为第二套接字选择一个协议栈15,并在第二套接字的数据包通过网卡16的默认分流规则不能分流到选择的协议栈15所绑定的RSS网卡收队列上时,根据网卡16的分流策略在网卡16上创建匹配流表19,并在接收到数据包后,把接收的数据包分流到RSS网卡收队列上。如此通过对协议栈以及应用的负载感知,与RSS网卡收、发队列、流表匹配相结合,选择合适的协议栈以进行数据处理,使协议处理充分并行,提高协议处理能力。数据分发模块13还用于进行第二套接字与选择的协议栈间的数据包分发。会话结束后,协议栈模块12还用于控制选择的协议栈15释放第二套接字,负载均衡模块14还用于删除网卡16上创建的匹配流表19。如此,在多协议栈环境下,通过对协议栈15以及应用的负载感知,与网卡16的RSS网卡收、发队列18、流表匹配19相结合,实现协议栈的负载均衡,减少了CPU(Central Processing Unit,中央处理器)的数据包分发开销。其中,对端可以是网络中的其它客户端或者服务端。
在本实施例中,负载均衡模块14还用于对网卡16和所有的协议栈15进行初始化配置,包括:具体用于通过网卡驱动17读取并存储网卡16的硬件配置信息,获取用户配置信息,并结合硬件配置信息形成网卡配置策略,通过网卡驱动17写入网卡16;协议栈模块12还用于启动多个协议栈15,并根据网卡配置策略,为每个协议栈15至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。其中,网卡16的硬件配置信息包括RSS网卡收、发队列18的个数、最大可支持的流表匹配数。用户配置信息包括需开启的网卡硬件队列数、网卡16上数据包的分发策略等。
在本实施例中,第一套接字的目的地址为any,则表明这是一个服务端的套接字。第一套接字创建成功后,应用11调用bind函数把第一套接字绑定到指定的IP地址,并通过调用listen函数监听指定端口过来的数据包请求。当收到bind及listen方法调用时,数据分发模块13通知负载均衡模块14该套接字是一个服务端的套接字。负载均衡模块14通知各协议栈15,将第一套接字部署在所有的协议栈15上,每个协议栈15上都有一个第一套接字的PCB(Protocol Control Block,协议控制块)。其中,PCB包括建立连接以及数据包处理过程中涉及的各种变量。
在本实施例中,协议栈模块12接收对端发送的请求连接的数据包,数据分发模块13根据各协议栈15的网络运行的实际情况,创建第二套接字。并通知对端第二套接字是否创建成功,如果创建成功,则建立会话连接,可以进行会话;如果创建不成功,则建立会话连接失败,中断连接。其中,协议栈15的网络运行的实际情况包括是否已有相同端口的套接字创建、协议栈15中套接字的数量是否到达创建套接字的上限等信息。在本发明的其它实施例中,协议栈模块12将接收的对端发送的请求连接的数据包转给应用11,待应用11确认后数据分发模块13创建第二套接字,并将结果返回给对端。负载均衡模块14为第二套接字选择一个协议栈15时,通知协议栈15为第二套接字创建对应的PCB。第二套接字的数据包优先通过网卡16的默认分流规则分流到协议栈15所绑定的RSS网卡收队列上。如果第二套接字的数据包通过网卡16的默认分流规则不能分流到协议栈15所绑定的RSS网卡收队列上,则通过负载均衡模块14根据网卡16的分流策略在网卡16上创建匹配流表19,并在接收到数据包后,将接收第二套接字的数据包分流到RSS网卡收队列上以进行数据包的处理,即与对端进行会话。在本发明的实施例中,优选为基于五元组/三元组来进行数据包分流,而默认分流规则优选为哈希规则,在本发明的其它实施例中,也可以是基于其它元组来进行数据包分流,如二元组或四元组。其中,三元组信息包括目的端口、目的IP地址以及协议内容,五元组信息包括源端口、目的端口、源IP地址、目的IP地址和协议内容。在本实施例中,数据分发模块13还接收第二套接字的数据发送请求,并分发给对应的协议栈15;在第二套接字创建后,结合负载均衡信息,选择一个协议栈15以进行数据包的处理,并将处理后的网络数据包分发给第二套接字。
在本实施例中,数据分发模块13接收并响应应用11下发的释放第二套接字的请求,或者协议栈15接收并响应对端发送的连接释放请求,则表示会话结束。如果数据分发模块13接收并响应应用11下发的释放第二套接字的请求,则通知对应的协议栈15释放第二套接字及其相关的PCB,同时通知负载均衡模块14该第二套接字已经释放;负载均衡模块14收到数据分发模块13的第二套接字释放通知后,确认是否为该第二套接字在网卡上创建过匹配流表19,如果有,则通过调用网卡驱动17删除该匹配流表19。如果协议栈15接收并响应对端发送的连接释放请求,对应的协议栈15释放第二套接字,数据分发模块13通知应用11和负载均衡模块14第二套接字已经释放。负载均衡模块14再确认是否为该第二套接字在网卡上创建过匹配流表19,如果有,则通过调用网卡驱动17删除该匹配流表19。
请参见图3,图3是本发明第二实施例的多协议栈负载均衡装置的结构示意图。如图3所示,该多协议栈负载均衡装置包括:协议栈模块22、数据分发模块23、负载均衡模块24、网卡26以及网卡驱动27,其中,协议栈模块22包括多个协议栈25,网卡26包括RSS网卡收、发队列28以及匹配流表29,RSS网卡收、发队列28包括RSS网卡收队列和RSS网卡发队列。
在本实施例中,数据分发模块23用于响应应用21调用应用程序接口的通知创建第一套接字,每个应用21包括至少一个第一套接字。负载均衡模块24用于根据每个协议栈25的负载情况,为第一套接字选择一个协议栈25,以与对端建立会话连接,若第一套接字的数据包通过网卡26的默认分流规则不能分流到协议栈25所绑定的RSS网卡收队列上,则根据网卡26的分流策略在网卡26上创建匹配流表29,并在接收到数据包后,把接收的数据包分流到RSS网卡收队列上。数据颁发模块23还用于进行第一套接字与选择的协议栈25间的数据包分发。会话结束后,协议栈模块22用于控制选择的协议栈25释放第一套接字,负载均衡模块24还用于删除网卡26上创建的匹配流表29。其中,对端可以是网络中的服务端。
在本实施例中,负载均衡模块还用于对网卡和所有的协议栈进行初始化配置,包括:具体用于读取并存储网卡26的硬件配置信息,获取用户配置信息,并结合硬件配置信息形成网卡配置策略,通过网卡驱动27写入网卡26;协议栈模块22还用于启动多个协议栈25,并根据网卡配置策略,为每个协议栈25至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。其中,网卡26的硬件配置信息包括RSS网卡收队列的个数、最大可支持的流表匹配数,用户配置信息包括需开启的网卡硬件队列数、网卡26上数据包的分发策略等。
在本实施例中,协议栈模块22接收对端发送的请求连接的数据包,数据分发模块23根据各协议栈25的网络运行的实际情况,给应用21返回伪的结果,通知对端第一套接字是否创建成功,如果创建成功,则建立会话连接,可以进行会话;如果创建不成功,则建立会话连接失败,中断连接。在本发明的其它实施例中,协议栈模块22将接收的对端发送的请求连接的数据包转给应用21,待应用21确认后数据分发模块23创建第一套接字,并将结果返回给对端。数据分发模块23在创建第一套接字时,同时创建对应的PCB。其中,协议栈25的网络运行的实际情况包括是否已有相同端口的套接字创建、协议栈25中套接字的数量是否到达创建套接字的上限等信息。PCB包括建立连接以及数据包处理过程中涉及的各种变量。
在本实施例中,第一套接字创建成功后,应用21调用connect函数去连接某个服务器的IP地址和端口建立连接,此即是作为客户端的应用。在与对端建立会话连接并收到数据包后,第一套接字的数据包优先通过网卡26的默认分流规则把数据包分流到协议栈25所绑定的RSS网卡收队列上。如果通过网卡26的哈希规则不能把数据包分流到协议栈25所绑定的RSS网卡收队列上,则通过负载均衡模块24根据网卡26的分流策略在网卡26上创建匹配流表29,并将接收的数据包分流到RSS网卡收队列上以进行数据包的处理,即与对端进行会话。在本发明的其它实施例中,优选为基于五元组/三元组来进行数据包分流,而默认分流规则优选为哈希规则,在本发明的其它实施例中,也可以是基于其它元组来进行数据包分流,如二元组或四元组。其中,三元组信息包括目的端口、目的IP地址以及协议内容,五元组信息包括源端口、目的端口、源IP地址、目的IP地址和协议内容。在本实施例中,数据分发模块23还接收第一套接字的数据发送请求,并分发给对应的协议栈25;在第一套接字创建后,结合负载均衡信息,选择一个协议栈25以进行数据包的处理,并将处理后的网络数据包分发给第一套接字。
在本实施例中,数据分发模块23接收并响应应用21下发的释放第一套接字的请求,或者协议栈25接收并响应对端发送的连接释放请求,则表示会话结束。如果数据分发模块23接收并响应应用21下发的释放第一套接字的请求,则通知选择的协议栈25释放第一套接字及其相关的PCB,同时通知负载均衡模块24该第一套接字已经释放;负载均衡模块24收到数据分发模块23的第一套接字释放通知后,确认是否为该第一套接字在网卡26上创建过匹配流表29,如果有,则通过调用网卡驱动27删除该匹配流表29。如果协议栈25接收并响应对端发送的连接释放请求,协议栈25释放第一套接字,数据分发模块23通知应用21和负载均衡模块24第二套接字已经释放。负载均衡模块24再确认是否为该第二套接字在网卡上创建过匹配流表29,如果有,则通过调用网卡驱动27删除该匹配流表29。
在本实施例中,数据分发模块23创建第一套接字以建立会话连接;负载均衡模块24根据每个协议栈25的负载情况,为第一套接字选择一个协议栈25;在第一套接字的数据包通过网卡26的默认分流规则不能分流到协议栈25所绑定的RSS网卡收队列上时,负载均衡模块24根据网卡26的分流策略在网卡26上创建匹配流表29以把接收的数据包分流到RSS网卡收队列上以进行数据包处理。如此通过对协议栈以及应用的负载感知,与RSS网卡收、发队列、流表匹配相结合,选择合适的协议栈以进行数据处理,使协议处理充分并行,提高协议处理能力,能够在多协议栈环境下,实现协议栈的负载均衡,减少了CPU的数据分发开销。
请参见图4,图4是本发明第一实施例的多协议栈负载均衡方法示意图。如图4所示,该多协议栈负载均衡方法包括:
S10:响应应用的请求创建第一套接字并部署在所有的协议栈上。
在执行S10之前,需要对网卡和所有的协议栈进行初始化配置,如图5所示,包括:
S101:读取并存储网卡的硬件配置信息。其中,硬件配置信息包括RSS队列个数、最大可支持的流表匹配数。硬件配置信息需要经过网卡驱动来读取。
S102:获取用户配置信息,并结合硬件配置信息形成网卡配置策略,写入网卡。其中,用户配置信息包括需开启的网卡硬件队列数、网卡上数据包的分发策略等,网卡配置信息也是通过网卡驱动写入网卡。
S103:启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
第一套接字创建成功后,应用调用bind函数把第一套接字绑定到指定的IP地址,并通过调用listen函数监听指定端口过来的数据包请求。
收到第一套接字的监听方法调用时,将第一套接字部署在所有的协议栈上,每个协议栈上都有一个第一套接字的PCB。其中,PCB包括建立连接以及数据包处理过程中涉及的各种变量。
S11:接收请求连接的数据包。
S12:判断请求连接的数据包的协议类型。如果协议类型是UDP协议,则执行S13;如果协议类型是TCP协议,则执行S14。
S13:由收到请求连接的数据包的协议栈进行协议处理。在本发明的其它实施例中,如果协议类型是UDP协议,也可以由其它协议栈处理。
S14:创建第二套接字以建立会话连接。
在S14中,接收对端发送的请求连接的数据包,并根据各协议栈的网络运行的实际情况,创建第二套接字。并通知对端第二套接字是否创建成功,如果创建成功,则建立会话连接,可以进行会话;如果创建不成功,则建立会话连接失败,中断连接。在本发明的其它实施例中,将接收的对端发送的请求连接的数据包转给应用,待所述应用确认后创建第二套接字,并将结果返回给对端。
S15:根据每个协议栈的负载情况,为第二套接字选择一个协议栈。同时通知协议栈为第二套接字创建对应的PCB,从而与对端建立起会话连接。
S16:在第二套接字的数据包通过网卡的默认分流规则不能分流到选择的协议栈所绑定的RSS网卡收队列上时,根据网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的第二套接字的数据包分流到RSS网卡收队列上。在本发明的实施例中,优选为基于五元组/三元组来进行数据包分流,而默认分流规则优选为哈希规则,在本发明的其它实施例中,也可以是基于其它元组来进行数据包分流,如二元组或四元组。其中,三元组信息包括目的端口、目的IP地址以及协议内容,五元组信息包括源端口、目的端口、源IP地址、目的IP地址和协议内容。
在S16中,第二套接字的数据包优先通过网卡的默认分流规则分流到协议栈所绑定的RSS网卡收队列上。如果通过网卡的默认分流规则不能把第二套接字的数据包分流到选择的协议栈所绑定的RSS网卡收队列上,则根据网卡的分流策略在网卡上创建匹配流表,并将接收的第二套接字的数据包分流到RSS网卡收队列上以进行数据包的处理,即与对端进行会话。如此,在多协议栈环境下,通过对协议栈以及应用的负载感知,与RSS网卡收、发队列、匹配流表相结合,选择合适的协议栈以进行数据处理,使协议处理充分并行,提高协议处理能力,实现协议栈的负载均衡,减少了CPU的数据分发开销。
S17:进行第二套接字与选择的协议栈间的数据包分发。在S17中,还记录第二套接字和选择的协议栈的对应关系。
S18:会话结束后,释放第二套接字,并删除网卡上创建的匹配流表。
在S18中,接收并响应应用下发的释放第二套接字的请求,或者通过选择的协议栈接收并响应对端发送的连接释放请求,则表示会话结束。如果接收并响应应用下发的释放第二套接字的请求,则通知协议栈释放第二套接字及其相关的PCB;确认是否为第二套接字在网卡上创建过匹配流表,如果有,则删除匹配流表。如果是通过选择的协议栈接收并响应对端发送的连接释放请求,则选择的协议栈释放第二套接字,并通知应用第二套接字已释放,确认是否为第二套接字在网卡上创建过匹配流表,如果有,则删除匹配流表。只有在客户端与对端不再进行任何通信连接时才释放第一套接字。
请参见图6,图6是本发明第二实施例的多协议栈负载均衡方法示意图。如图6所示,该多协议栈负载均衡方法包括:
S21:创建第一套接字,并根据每个协议栈的负载情况,为第一套接字选择一个协议栈以建立会话连接。
在执行S21之前,对网卡和所有的协议栈进行初始化配置,包括:通过网卡驱动读取并存储网卡的硬件配置信息;获取用户配置信息,并结合硬件配置信息形成网卡配置策略,通过网卡驱动写入网卡;启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
应用调用应用程序编程接口创建第一套接字并创建对应的PCB。PCB包括建立连接以及数据包处理过程中涉及的各种变量。第一套接字创建成功后,应用调用connect函数去连接某个服务器的IP地址和端口建立连接,此即是作为客户端的应用。
S22:若第一套接字的数据包通过网卡的默认分流规则不能分流到协议栈所绑定的RSS网卡收队列上,则根据网卡的分流策略在网卡上创建匹配流表,并在接收到数据包后,把接收的数据包分流到RSS网卡收队列上。在本发明的实施例中,优选为基于五元组/三元组来进行数据包分流,而默认分流规则优选为哈希规则,在本发明的其它实施例中,也可以是基于其它元组来进行数据包分流,如二元组或四元组。其中,三元组信息包括目的端口、目的IP地址以及协议内容,五元组信息包括源端口、目的端口、源IP地址、目的IP地址和协议内容。
在S22中,第一套接字的数据包优先通过网卡的默认分流规则分流到协议栈所绑定的RSS网卡收队列上。如果第一套接字的数据通过网卡的哈希规则不能包分流到协议栈所绑定的RSS网卡收队列上,则根据网卡的分流策略在网卡上创建匹配流表,并将接收的数据包分流到RSS网卡收队列上以进行数据包的处理,即与对端进行会话。如此,在多协议栈环境下,通过对协议栈以及应用的负载感知,与RSS网卡收、发队列、匹配流表相结合,选择合适的协议栈以进行数据处理,使协议处理充分并行,提高协议处理能力,实现协议栈的负载均衡,减少了CPU的数据分发开销。
S23:进行第一套接字与选择的协议栈间的数据包分发。在S23中,还记录第一套接字和选择的协议栈的对应关系。
S24:会话结束后,释放第一套接字,并删除网卡上创建的匹配流表。
在S24中,接收并响应应用下发的释放第二套接字的请求,或者协议栈接收并响应对端发送的连接释放请求,则表示会话结束。如果接收并响应应用下发的释放第二套接字的请求,则通知协议栈释放第一套接字及其相关的协议控制块;确认是否为第一套接字在网卡上创建过匹配流表,如果有,则删除匹配流表。如果协议栈接收并响应对端发送的连接释放请求,则释放第一套接字,并通知应用第一套接字已释放;确认是否为第一套接字在网卡上创建过匹配流表,如果有,则删除匹配流表。
请参阅图7,图7是本发明第三实施例的多协议栈负载均衡装置的又一结构示意图。如图7所示,该多协议栈负载均衡装置30包括处理器301、存储器302、接收器303、以及总线304,处理器301、存储器302和接收器303通过总线304相连。其中:
处理器301响应应用的请求创建第一套接字,并将第一套接字部署在所有的协议栈上。接收器303接收请求连接的数据包。处理器301判断请求连接的数据包的协议类型,如果协议类型是TCP协议,则:处理器301创建第二套接字以建立会话连接;处理器301根据每个协议栈的负载情况,为第二套接字选择一个协议栈;在第二套接字的数据包通过网卡的默认分流规则不能分流到选择的协议栈所绑定的RSS网卡收队列上时,处理器301根据网卡的分流策略在网卡上创建匹配流表并把接收的第二套接字的数据包分流到RSS网卡收队列上。存储器302记录第二套接字和选择的协议栈的对应关系。处理器301进行第二套接字与选择的协议栈间的数据包分发;会话完成后,协议栈释放第二套接字,处理器301删除网卡上创建的匹配流表。
在本实施例中,需要对网卡和所有的协议栈进行初始化配置,存储器302读取并存储网卡的硬件配置信息,包括RSS队列个数、最大可支持的流表匹配数。处理器301获取用户配置信息,并结合硬件配置信息形成网卡配置策略,写入网卡。处理器301启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。其中,用户配置信息包括需开启的网卡硬件队列数、网卡上数据包的分发策略等。
在本实施例中,处理器301创建第一套接字时,还创建对应的PCB,其中,PCB包括建立连接以及数据包处理过程中涉及的各种变量。如果处理器301判断协议类型为是UDP协议,则由收到请求连接的数据包的协议栈进行协议处理,在本发明的其它实施例中,也可以由其它协议栈处理。
接收器303接收对端发送的请求连接的数据包,处理器301根据各协议栈的网络运行的实际情况,创建第二套接字。并通知对端第二套接字是否创建成功,如果创建成功,则建立会话连接,可以进行会话;如果创建不成功,则建立会话连接失败,中断连接。在本发明的其它实施例中,接收器303将接收的对端发送的请求连接的数据包转给应用,待应用确认后创建第二套接字,并将结果返回给对端。第二套接字的数据包优先通过网卡的默认分流规则分流到选择的协议栈所绑定的RSS网卡收队列上;如果第二套接字的数据通过默认分流规则不能分流到选择的协议栈所绑定的RSS网卡收队列上,则处理器301根据网卡的分流策略在网卡上创建匹配流表,并在接收器303接收到数据包后,把接收的第二套接字的数据包分流到RSS网卡收队列上。在本发明的实施例中,优选为基于五元组/三元组来进行数据包分流,而默认分流规则优选为哈希规则,在本发明的其它实施例中,也可以是基于其它元组来进行数据包分流,如二元组或四元组。
在本实施例中,接收器303接收应用下发的释放第二套接字的请求,或者通过选择的协议栈接收并响应对端发送的连接释放请求,则表示会话结束。如果接收器303接收应用下发的释放第二套接字的请求,则处理器301响应该请求,通知协议栈释放第二套接字;处理器301确认是否为第二套接字在网卡上创建过匹配流表,如果有,则删除匹配流表。如果是通过选择的协议栈接收并响应对端发送的连接释放请求,则选择的协议栈释放第二套接字,并通知应用第二套接字已释放,处理器301确认是否为第二套接字在网卡上创建过匹配流表,如果有,则删除匹配流表。
上述本发明实施例揭示的方法可以应用于处理器301中,或者由处理器301实现。处理器301可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器301中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器301可以是通用处理器、数字信号处理器(digital singnal processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及结构框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器302,处理器301读取存储器302中的信息,结合其硬件完成上述方法的步骤。
处理器301还可以称为CPU。存储器302可以包括只读存储器和随机存取存储器,并向处理器301提供指令和数据包。存储器302的一部分还可以包括非易失性随机存取存储器(Non-Volatile Random Access Memory,NVRAM)。装置30的各个组件通过总线304耦合在一起,其中总线304除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。在图中将各种总线都标为总线304。
请参阅图8,图8是本发明第四实施例的多协议栈负载均衡装置的又一结构示意图。如图8所示,该多协议栈负载均衡装置40包括处理器401、存储器402、接收器403、总线404以及发射器405,处理器401、存储器402和接收器403以及发射器405通过总线404相连。
在本实施例中,处理器401创建第一套接字,并根据每个协议栈的负载情况,为第一套接字选择一个协议栈以建立会话连接。若第一套接字的数据包通过网卡的默认分流规则不能分流到协议栈所绑定的RSS网卡收队列上,则处理器401根据网卡的分流策略在网卡上创建匹配流表,并在接收器403接收到数据包后,把接收的数据包分流到RSS网卡收队列上。存储器402记录第一套接字和选择的协议栈的对应关系。处理器401进行第一套接字与选择的协议栈间的数据包分发。会话结束后,选择的协议栈释放第一套接字,处理器401删除网卡上创建的匹配流表。
在本实施例中,需要对网卡和所有的协议栈进行初始化配置,存储器402读取并存储网卡的硬件配置信息,包括RSS队列个数、最大可支持的流表匹配数。处理器401获取用户配置信息,并结合硬件配置信息形成网卡配置策略,写入网卡。处理器401启动多个协议栈,并根据网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。其中,用户配置信息包括需开启的网卡硬件队列数、网卡上数据包的分发策略等。
处理器401创建第一套接字时,还创建对应的PCB,PCB包括建立连接以及数据包处理过程中涉及的各种变量。具体地,接收器403接收对端发送的请求连接的数据包,处理器401根据各协议栈的网络运行的实际情况,返回伪的结果,通知对端第一套接字是否创建成功。在本发明的其它实施例中,接收器403将接收的对端发送的请求连接的数据包转给应用,待应用确认后创建第一套接字,并将结果返回给对端。接收器403接收到数据包后,第一套接字的数据包优先通过网卡的默认分流规则分流到选择的协议栈所绑定的RSS网卡收队列上;如果第一套接字的数据包通过网卡的默认分流规则后,不能分流到选择的协议栈所绑定的RSS网卡收队列上,则处理器401为数据包在网卡上建立匹配流表,把数据包分流到RSS网卡收队列上。在本发明的实施例中,优选为基于五元组/三元组来进行数据包分流,而默认分流规则优选为哈希规则,在本发明的其它实施例中,也可以是基于其它元组来进行数据包分流,如二元组或四元组。
在本实施例中,发射器405用于发送连接请求以及数据包。接收器403用于接收数据包。接收器403接收应用下发的释放第二套接字的请求,或者协议栈接收并响应对端发送的连接释放请求,则表示会话结束。如果接收器403接收应用下发的释放第二套接字的请求,则处理器401响应该请求,通知协议栈释放第二套接字;处理器401确认是否为第二套接字在网卡上创建过匹配流表,如果有,则删除匹配流表。如果协议栈接收并响应对端发送的连接释放请求,则协议栈释放第二套接字,并通知应用第二套接字已释放,处理器401确认是否为第二套接字在网卡上创建过匹配流表,如果有,则删除匹配流表。
上述本发明实施例揭示的方法可以应用于处理器401中,或者由处理器401实现。处理器401可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器401中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器401可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器402,处理器401读取存储器402中的信息,结合其硬件完成上述方法的步骤。
处理器401还可以称为中央处理单元(Central Processing Unit,CPU)。存储器402可以包括只读存储器和随机存取存储器,并向处理器401提供指令和数据包。存储器402的一部分还可以包括非易失性随机存取存储器(NVRAM)。装置40的各个组件通过总线404耦合在一起,其中总线404除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。在图中将各种总线都标为总线404。
综上所述,本发明通过响应应用的请求创建第一套接字并部署在所有的协议栈上;在接收请求连接的数据包后,如果请求连接的数据包的协议类型是传输控制协议,则:创建第二套接字以建立会话连接;并根据每个协议栈的负载情况,为第二套接字选择一个协议栈,在第二套接字的数据包通过网卡的默认分流规则不能分流到选择的协议栈所绑定的RSS网卡收队列上时,根据网卡的分流策略在网卡上创建匹配流表,把接收的第二套接字的数据包分流到RSS网卡收队列上;如此通过对协议栈以及应用的负载感知,与RSS网卡收、发队列、流表匹配相结合,选择合适的协议栈以进行数据处理,使协议处理充分并行,提高协议处理能力,能够在多协议栈环境下,实现协议栈的负载均衡,减少了CPU的数据分发开销。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (24)
1.一种多协议栈负载均衡方法,其特征在于,所述方法包括:
响应应用的请求创建第一套接字并部署在所有的协议栈上;
接收请求连接的数据包;
判断所述请求连接的数据包的协议类型,如果所述协议类型是传输控制协议,则:
创建第二套接字以建立会话连接;
根据每个协议栈的负载情况,为所述第二套接字选择一个协议栈;
在所述第二套接字的数据包通过网卡的默认分流规则不能分流到所述选择的协议栈所绑定的接收方扩展RSS网卡收队列上时,根据所述网卡的分流策略在所述网卡上创建匹配流表,并在接收到数据包后,把接收的所述第二套接字的数据包分流到所述RSS网卡收队列上;
进行所述第二套接字与所述选择的协议栈间的数据包分发。
2.根据权利要求1所述的方法,其特征在于,还包括:
所述会话结束后,释放所述第二套接字,并删除所述网卡上创建的所述匹配流表。
3.根据权利要求1所述的方法,其特征在于,如果所述协议类型是用户数据报协议,则:
由收到所述请求连接的数据包的协议栈进行协议处理。
4.根据权利要求1所述的方法,其特征在于,在所述响应应用的请求创建第一套接字并部署在所有的协议栈上的步骤之前,对所述网卡和所有的协议栈进行初始化配置,包括:
读取并存储所述网卡的硬件配置信息;
获取用户配置信息,并结合所述硬件配置信息形成网卡配置策略,写入所述网卡;
启动多个协议栈,并根据所述网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
5.根据权利要求1所述的方法,其特征在于,所述响应应用的请求创建第一套接字并部署在所有的协议栈上包括:
调用应用编程接口创建所述第一套接字;
所述第一套接字创建后,调用bind函数将所述第一套接字绑定到特定的IP地址,并调用listen函数监听指定端口的数据包请求;
收到所述第一套接字的监听方法调用时,将所述第一套接字部署在所有的协议栈上。
6.根据权利要求1所述的方法,其特征在于,所述创建第二套接字以建立会话连接的步骤包括:
根据各协议栈的网络运行的实际情况,创建所述第二套接字。
7.根据权利要求1所述的方法,其特征在于,所述创建第二套接字以建立会话连接的步骤包括:
将接收的对端发送的所述请求连接的数据包转给所述应用;
待所述应用确认后创建所述第二套接字。
8.根据权利要求1所述的方法,其特征在于,所述会话结束包括接收并响应所述应用下发的释放所述第二套接字的请求,或者接收并响应对端发送的连接释放请求。
9.一种多协议栈负载均衡方法,其特征在于,所述方法包括:
创建第一套接字,并根据每个协议栈的负载情况,为所述第一套接字选择一个协议栈以建立会话连接;
若所述第一套接字的数据包通过网卡的默认分流规则不能分流到所述选择的协议栈所绑定的接收方扩展RSS网卡收队列上,则根据所述网卡的分流策略在所述网卡上创建匹配流表,并在接收到数据包后,把接收的所述数据包分流到所述RSS网卡收队列上;
进行所述第一套接字与所述选择的协议栈间的数据包分发。
10.根据权利要求9所述的方法,其特征在于,还包括:
所述会话结束后,释放所述第一套接字,并删除所述网卡上创建的所述匹配流表。
11.根据权利要求9所述的方法,其特征在于,在所述创建第一套接字之前,对所述网卡和所有的协议栈进行初始化配置,包括:
读取并存储所述网卡的硬件配置信息;
获取用户配置信息,并结合所述硬件配置信息形成网卡配置策略,写入所述网卡;
启动多个协议栈,并根据所述网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
12.根据权利要求9所述的方法,其特征在于,所述会话结束包括接收并响应应用下发的释放所述第一套接字的请求,或者接收并响应对端发送的连接释放请求。
13.一种多实例协议栈负载均衡装置,其特征在于,所述装置包括:协议栈模块、网卡、数据分发模块以及负载均衡模块,所述协议栈模块包括多个协议栈,其中:
所述数据分发模块,用于响应应用的请求创建第一套接字并部署在所有的协议栈上;
所述协议栈模块,用于接收请求连接的数据包,判断所述请求连接的数据包的协议类型;
所述数据分发模块,用于,如果所述协议类型是传输控制协议,则创建第二套接字以建立会话连接;
所述负载均衡模块,用于,如果所述协议类型是传输控制协议,则根据每个协议栈的负载情况,为所述第二套接字选择一个协议栈,并在所述第二套接字的数据包通过所述网卡的默认分流规则不能分流到所述选择的协议栈所绑定的接收方扩展RSS网卡收队列上时,根据所述网卡的分流策略在所述网卡上创建匹配流表,并在接收到数据包后,把接收的所述第二套接字的数据包分流到所述RSS网卡收队列上;
所述数据分发模块,还用于进行所述第二套接字与所述选择的协议栈间的数据包分发。
14.根据权利要求13所述的装置,其特征在于,在所述会话结束后,
所述协议栈模块,还用于,控制所述选择的协议栈释放所述第二套接字;
所述负载均衡模块,还用于删除所述网卡上创建的所述匹配流表。
15.根据权利要求13所述的装置,其特征在于,所述协议栈模块,还用于,如果所述协议类型是用户数据报协议,则控制收到请求连接的数据包的所述协议栈进行协议处理。
16.根据权利要求13所述的装置,其特征在于,所述负载均衡模块,还用于对所述网卡和所有的协议栈进行初始化配置,包括:具体用于读取并存储所述网卡的硬件配置信息,获取用户配置信息并结合所述硬件配置信息形成网卡配置策略,写入所述网卡;
所述协议栈模块,还用于启动多个协议栈,并根据所述网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
17.根据权利要求13所述的装置,其特征在于,所述数据分发模块,用于响应应用的请求创建第一套接字并部署在所有的协议栈上,具体为:所述数据分发模块用于响应应用调用应用编程接口的通知创建所述第一套接字,并接收所述第一套接字的监听方法调用,其中,所述第一套接字创建后,所述应用调用bind函数将所述第一套接字绑定到特定的IP地址,并调用listen函数监听指定端口的数据包请求;所述负载均衡模块,还用于通知各协议栈将所述第一套接字部署在所有的协议栈上。
18.根据权利要求13所述的装置,其特征在于,所述数据分发模块用于创建第二套接字以建立会话连接,具体为:用于根据各协议栈的网络运行的实际情况,创建所述第二套接字。
19.根据权利要求13所述的装置,其特征在于,所述协议栈模块用于创建第二套接字以建立会话连接,具体为:用于将接收的对端发送的所述请求连接的数据包转给所述应用;所述数据分发模块,用于待所述应用确认后创建所述第二套接字。
20.根据权利要求13所述的装置,其特征在于,所述数据分发模块接收并响应所述应用下发的释放所述第二套接字的请求,或者所述协议栈模块接收并响应对端发送的连接释放请求,则表示所述会话结束。
21.一种多实例协议栈负载均衡装置,其特征在于,所述装置包括:协议栈模块、网卡、数据分发模块以及负载均衡模块,所述协议栈模块包括多个协议栈,其中:
所述数据分发模块,用于创建第一套接字;
所述负载均衡模块,用于根据每个所述协议栈的负载情况,为所述第一套接字选择一个协议栈以建立会话连接,若所述第一套接字的数据包通过所述网卡的默认分流规则不能分流到所述选择的协议栈所绑定的接收方扩展RSS网卡收队列上,则根据所述网卡的分流策略在所述网卡上创建匹配流表,并在接收到数据包后,把接收的所述数据包分流到所述RSS网卡收队列上;
所述数据分发模块,还用于进行所述第一套接字与所述选择的协议栈间的数据包分发。
22.根据权利要求21所述的装置,其特征在于,在所述会话结束后,
所述协议栈模块,用于控制所述选择的协议栈释放所述第一套接字;
所述负载均衡模块,还用于删除所述网卡上创建的所述匹配流表。
23.根据权利要求21所述的装置,其特征在于,所述负载均衡模块,还用于对所述网卡和所有的协议栈进行初始化配置,包括:具体用于读取并存储所述网卡的硬件配置信息,获取用户配置信息并结合所述硬件配置信息形成网卡配置策略,写入所述网卡;
所述协议栈模块,还用于启动多个协议栈,并根据所述网卡配置策略,为每个协议栈至少绑定一个RSS网卡收队列以及一个RSS网卡发队列。
24.根据权利要求21所述的装置,其特征在于,所述数据分发模块接收并响应应用下发的释放所述第一套接字的请求,或者所述协议栈模块接收并响应对端发送的连接释放请求,则表示所述会话结束。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310554861.XA CN104639578B (zh) | 2013-11-08 | 2013-11-08 | 多协议栈负载均衡方法及装置 |
PCT/CN2014/088442 WO2015067118A1 (zh) | 2013-11-08 | 2014-10-13 | 多协议栈负载均衡方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310554861.XA CN104639578B (zh) | 2013-11-08 | 2013-11-08 | 多协议栈负载均衡方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104639578A CN104639578A (zh) | 2015-05-20 |
CN104639578B true CN104639578B (zh) | 2018-05-11 |
Family
ID=53040885
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310554861.XA Active CN104639578B (zh) | 2013-11-08 | 2013-11-08 | 多协议栈负载均衡方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104639578B (zh) |
WO (1) | WO2015067118A1 (zh) |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105141603B (zh) | 2015-08-18 | 2018-10-19 | 北京百度网讯科技有限公司 | 通信数据传输方法及系统 |
US9983875B2 (en) | 2016-03-04 | 2018-05-29 | International Business Machines Corporation | Operation of a multi-slice processor preventing early dependent instruction wakeup |
US10037211B2 (en) | 2016-03-22 | 2018-07-31 | International Business Machines Corporation | Operation of a multi-slice processor with an expanded merge fetching queue |
US10346174B2 (en) | 2016-03-24 | 2019-07-09 | International Business Machines Corporation | Operation of a multi-slice processor with dynamic canceling of partial loads |
US10761854B2 (en) | 2016-04-19 | 2020-09-01 | International Business Machines Corporation | Preventing hazard flushes in an instruction sequencing unit of a multi-slice processor |
US10037229B2 (en) | 2016-05-11 | 2018-07-31 | International Business Machines Corporation | Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions |
US9934033B2 (en) | 2016-06-13 | 2018-04-03 | International Business Machines Corporation | Operation of a multi-slice processor implementing simultaneous two-target loads and stores |
US10042647B2 (en) | 2016-06-27 | 2018-08-07 | International Business Machines Corporation | Managing a divided load reorder queue |
US10318419B2 (en) | 2016-08-08 | 2019-06-11 | International Business Machines Corporation | Flush avoidance in a load store unit |
CN106789152A (zh) * | 2016-11-17 | 2017-05-31 | 东软集团股份有限公司 | 基于多队列网卡的处理器扩展方法及装置 |
CN107317759A (zh) * | 2017-06-13 | 2017-11-03 | 国家计算机网络与信息安全管理中心 | 一种网卡的线程级动态均衡调度方法 |
CN110022330B (zh) * | 2018-01-09 | 2022-01-21 | 阿里巴巴集团控股有限公司 | 用于网络数据包的处理方法、装置及电子设备 |
CN109039771B (zh) * | 2018-09-04 | 2021-07-20 | 浪潮云信息技术股份公司 | 一种多网卡绑定配置方法及系统 |
CN109165100A (zh) * | 2018-09-06 | 2019-01-08 | 郑州云海信息技术有限公司 | 一种网卡rss配置装置及方法 |
CN109586965A (zh) * | 2018-12-04 | 2019-04-05 | 郑州云海信息技术有限公司 | 一种网卡rss自动配置方法、装置、终端及存储介质 |
CN111294293B (zh) * | 2018-12-07 | 2021-08-10 | 网宿科技股份有限公司 | 一种基于用户态协议栈的网络隔离方法和装置 |
CN109451045A (zh) * | 2018-12-12 | 2019-03-08 | 成都九洲电子信息系统股份有限公司 | 一种可配置自定义以太头的高速报文采集网卡控制方法 |
CN109617833B (zh) * | 2018-12-25 | 2021-12-31 | 深圳市任子行科技开发有限公司 | 多线程用户态网络协议栈系统的nat数据审计方法和系统 |
CN112217772B (zh) * | 2019-07-11 | 2022-07-01 | 中移(苏州)软件技术有限公司 | 一种协议栈实现方法、装置和存储介质 |
CN112291181B (zh) * | 2019-07-23 | 2023-03-10 | 腾讯科技(深圳)有限公司 | 一种基于多网卡的数据传输方法以及相关装置 |
CN111143062A (zh) * | 2019-12-19 | 2020-05-12 | 上海交通大学 | 一种用户态协议栈对外部负载进程的均衡分割策略 |
CN113395293B (zh) * | 2021-07-13 | 2023-09-15 | 上海睿赛德电子科技有限公司 | 一种基于rpc的网络套接字实现方法 |
CN113726611A (zh) * | 2021-09-01 | 2021-11-30 | 深圳市大洲智创科技有限公司 | 一种基于协议进行流量控制的方法 |
CN116192524B (zh) * | 2023-03-06 | 2024-03-12 | 北京亿赛通科技发展有限责任公司 | 一种基于串接流量的应用防火墙 |
CN116668375B (zh) * | 2023-07-31 | 2023-11-21 | 新华三技术有限公司 | 一种报文分流方法、装置、网络设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005038615A2 (en) * | 2003-10-16 | 2005-04-28 | Adaptec, Inc. | Methods and apparatus for offloading tcp/ip processing using a protocol driver interface filter driver |
US7424710B1 (en) * | 2002-12-18 | 2008-09-09 | Vmware, Inc. | TCP/IP offloading for virtual machines |
CN101778048A (zh) * | 2010-02-22 | 2010-07-14 | 浪潮(北京)电子信息产业有限公司 | 数据转发方法、负载均衡调度器和负载均衡系统 |
CN102970244A (zh) * | 2012-11-23 | 2013-03-13 | 上海寰创通信科技股份有限公司 | 一种多cpu核间负载均衡的网络报文处理方法 |
CN103049336A (zh) * | 2013-01-06 | 2013-04-17 | 浪潮电子信息产业股份有限公司 | 一种基于哈希的网卡软中断负载均衡方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070297334A1 (en) * | 2006-06-21 | 2007-12-27 | Fong Pong | Method and system for network protocol offloading |
US8849972B2 (en) * | 2008-11-25 | 2014-09-30 | Polycom, Inc. | Method and system for dispatching received sessions between a plurality of instances of an application using the same IP port |
-
2013
- 2013-11-08 CN CN201310554861.XA patent/CN104639578B/zh active Active
-
2014
- 2014-10-13 WO PCT/CN2014/088442 patent/WO2015067118A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7424710B1 (en) * | 2002-12-18 | 2008-09-09 | Vmware, Inc. | TCP/IP offloading for virtual machines |
WO2005038615A2 (en) * | 2003-10-16 | 2005-04-28 | Adaptec, Inc. | Methods and apparatus for offloading tcp/ip processing using a protocol driver interface filter driver |
CN101778048A (zh) * | 2010-02-22 | 2010-07-14 | 浪潮(北京)电子信息产业有限公司 | 数据转发方法、负载均衡调度器和负载均衡系统 |
CN102970244A (zh) * | 2012-11-23 | 2013-03-13 | 上海寰创通信科技股份有限公司 | 一种多cpu核间负载均衡的网络报文处理方法 |
CN103049336A (zh) * | 2013-01-06 | 2013-04-17 | 浪潮电子信息产业股份有限公司 | 一种基于哈希的网卡软中断负载均衡方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2015067118A1 (zh) | 2015-05-14 |
CN104639578A (zh) | 2015-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104639578B (zh) | 多协议栈负载均衡方法及装置 | |
US6938179B2 (en) | Socket extensions for redundancy | |
US11277313B2 (en) | Data transmission method and corresponding device | |
US10085253B2 (en) | Methods and apparatus for controlling wireless access points | |
US9231820B2 (en) | Methods and apparatus for controlling wireless access points | |
CN107948076B (zh) | 一种转发报文的方法及装置 | |
CN101702657B (zh) | 一种nat业务的热备份方法和设备 | |
US20020016856A1 (en) | Dynamic application port service provisioning for packet switch | |
US8332532B2 (en) | Connectivity over stateful firewalls | |
US7542476B2 (en) | Method and system for manipulating IP packets in virtual private networks | |
CN107070983A (zh) | 一种基于地址转发的负载均衡方法、设备和系统 | |
CN103986638B (zh) | Advpn隧道绑定多公网链路的方法和装置 | |
US8248944B2 (en) | Selectively disabling reliability mechanisms on a network connection | |
KR20080091130A (ko) | 서비스 요청에 기초한 디지털 오브젝트 라우팅 | |
CN103828323A (zh) | 用于可靠的会话迁移的方法和设备 | |
CN107342906A (zh) | 一种大象流的检测方法、设备及系统 | |
CN107547689A (zh) | 一种运营商级的网络地址转换cgn方法和装置 | |
CN105847142B (zh) | 一种报文传输方法及装置 | |
CN106973053A (zh) | 宽带接入服务器的加速方法和系统 | |
US11849493B2 (en) | Modified methods and system of transmitting and receiving transmission control protocol segments over internet protocol packets | |
CN109218222A (zh) | 一种实现发送端调速的方法、装置和系统 | |
CN102315918B (zh) | 一种tcp连接与sctp连接互通的方法及装置 | |
CN108737273A (zh) | 一种报文处理方法和装置 | |
CN104471538B (zh) | 一种数据流处理方法、设备和系统 | |
CN108270689A (zh) | 一种实现业务连接的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |