CN110602155A - 代理服务器及其处理数据报文的方法 - Google Patents
代理服务器及其处理数据报文的方法 Download PDFInfo
- Publication number
- CN110602155A CN110602155A CN201810609376.0A CN201810609376A CN110602155A CN 110602155 A CN110602155 A CN 110602155A CN 201810609376 A CN201810609376 A CN 201810609376A CN 110602155 A CN110602155 A CN 110602155A
- Authority
- CN
- China
- Prior art keywords
- data
- network protocol
- request
- user mode
- protocol stack
- 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.)
- Pending
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/2866—Architectures; Arrangements
- H04L67/2876—Pairs of inter-processing entities at each side of the network, e.g. split proxies
-
- 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/50—Network services
- H04L67/56—Provisioning of proxy services
-
- 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/30—Definitions, standards or architectural aspects of layered protocol stacks
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供了一种代理服务器处理数据报文的方法,包括:代理服务器通过网卡驱动接收第一请求报文,并提供给所述代理服务器的用户空间;所述用户空间通过用户态网络协议栈解析所述第一请求报文,以获取第一请求数据,并提供给所述用户空间的代理进程;所述代理进程,根据代理策略生成第二请求数据,并发送至所述用户态网络协议栈;所述用户态网络协议栈封装所述第二请求数据得到第二请求报文,并将所述第二请求报文发送至代理服务器的网卡驱动。本发明提供的代理服务器及其处理数据报文的方法,能够提高代理服务器的性能。
Description
技术领域
本发明涉及互联网技术领域,特别涉及一种代理服务器及其处理数据报文的方法。
背景技术
代理服务器广泛应用于互联网中,主要设置于个人网络和Internet服务商之间,用于代理用户端获取网络信息。现有的代理服务器大多运行于Linux操作系统,而且是通过内核进行数据报文的处理和收发。图1所示为现有代理服务器处理数据报文的示意图。网卡将接收到的数据报文发送至内核空间的网络协议栈处理,然后通过内核上下文切换将处理后的数据报文拷贝到用户空间的代理进程,用户空间的代理进程处理完毕后,又将数据报文拷贝到内核,经过内核空间的网络协议栈处理后,再发送到网卡。
本专利申请的发明人,通过研究现有的数据报文处理过程发现,现有技术至少存在以下问题:首先,通过内核的网络协议栈处理数据报文比较复杂,且内核的Netfilter模块处理数据报文的效率较低,在整个过程中需要将数据在内核和用户空间之间进行多次拷贝和切换,不仅使编译和调试变得繁琐,还导致数据处理效率下降;其次,内核采用的是中断方式处理数据报文,当并发数据大的时候,极易出现软中断非常高、占用系统资源的现象,进而将成为系统的性能瓶颈;最后,内核的网络协议栈为防止资源抢占,很多地方需要对进程控制块(Process Control Block,PCB)加锁,这样也影响数据报文的处理效率。
由此可见,上述原因均可能导致代理服务器的性能下降。
发明内容
本申请的目的在于提供一种代理服务器及其处理数据报文的方法,以提高代理服务器的性能。
为实现上述目的,本申请一方面提供一种代理服务器处理数据报文的方法,所述方法包括:代理服务器通过网卡驱动接收第一请求报文,并提供给所述代理服务器的用户空间;所述用户空间通过用户态网络协议栈解析所述第一请求报文,以获取第一请求数据,并提供给所述用户空间的代理进程;所述代理进程,根据代理策略生成第二请求数据,并发送至所述用户态网络协议栈;所述用户态网络协议栈封装所述第二请求数据得到第二请求报文,并将所述第二请求报文发送至代理服务器的网卡驱动。
进一步的,所述代理服务器包括多个CPU,所述用户空间包括多个用户态网络协议栈,所述多个用户态网络协议栈与所述多个CPU之间分别一一对应,且所述用户态网络协议栈仅通过对应的CPU处理数据报文。
进一步的,所述用户空间还包括多个代理进程,所述多个用户态网络协议栈还与所述多个代理进程之间分别一一对应,且所述用户态网络协议栈仅将所述数据报文发送给对应的所述代理进程。
进一步的,所述代理服务器通过网卡驱动接收第一请求报文,并提供给所述代理服务器的用户空间的步骤具体包括:所述代理服务器通过网卡驱动接收所述第一请求报文,并提供给所述用户空间的散列进程;所述散列进程以共享内存的方式将所述第一请求报文均匀散列至所述多个用户态网络协议栈。
进一步的,所述网卡驱动以轮询的方式接收所述第一请求报文。
进一步的,所述用户空间通过用户态网络协议栈解析所述第一请求报文,以获取第一请求数据,并提供给所述用户空间的代理进程的步骤之后,还包括:所述代理进程接收所述第一请求数据,并在缓存数据中搜索与所述第一请求数据对应的响应数据;若在所述缓存数据中未搜索到与所述第一请求数据对应的响应数据,则根据代理策略生成所述第二请求数据,并发送至所述用户态网络协议栈;所述用户态网络协议栈封装所述第二请求数据得到第二请求报文,并将所述第二请求报文发送至代理服务器的网卡驱动;若在所述缓存数据中搜索到与所述第一请求数据对应的响应数据,则读取所述响应数据,并将所述响应数据发送给所述用户态网络协议栈;所述用户态网络协议栈封装所述响应数据得到响应报文,并将所述响应报文发送至代理服务器的网卡驱动;
为实现上述目的,本申请另一方面还提供一种代理服务器,包括网卡驱动模块和用户空间模块,所述网卡驱动模块,用于接收第一请求报文,并提供给所述用户空间模块;所述用户空间模块包括用户态网络协议栈模块和代理模块,其中:所述用户态网络协议栈模块用于解析所述第一请求报文,以获取第一请求数据,并提供给所述用户空间的代理模块;代理模块用于根据代理策略生成第二请求数据,并发送给所述用户态网络协议栈模块;所述用户态网络协议栈模块封装所述第二请求数据得到第二请求报文,并将所述第二请求报文发送至代理服务器的网卡驱动模块。
进一步的,所述代理服务器包括多个CPU,所述用户空间模块包括多个用户态网络协议栈模块,所述多个用户态网络协议栈模块与所述多个CPU之间分别一一对应,且所述用户态网络协议栈模块仅通过对应的CPU处理数据报文。
进一步的,所述用户空间模块还包括多个代理模块,所述多个用户态网络协议栈模块还与所述多个代理模块之间分别一一对应,且所述用户态网络协议栈模块仅将所述数据报文发送给对应的所述代理模块。
进一步的,所述用户空间模块还包括散列模块:用于接收所述网卡驱动模块提供的所述第一请求报文,并以共享内存的方式将所述第一请求报文均匀散列至所述多个用户态网络协议栈模块。
进一步的,所述网卡驱动模块以轮询的方式接收所述第一请求报文。
进一步的,所述代理模块还用于接收所述第一请求数据,并在缓存数据中搜索与所述第一请求数据对应的响应数据;若在所述缓存数据中未搜索到与所述第一请求数据对应的响应数据,所述代理模块还用于根据代理策略生成所述第二请求数据,并发送至所述用户态网络协议栈模块;所述用户态网络协议栈模块还用于封装所述第二请求数据得到第二请求报文,并将所述第二请求报文发送至代理服务器的网卡驱动模块;若在所述缓存数据中搜索到与所述第一请求数据对应的响应数据,所述代理模块还用于读取所述响应数据,并将所述响应数据发送给所述用户态网络协议栈模块;所述用户态网络协议栈模块还用于封装所述响应数据得到响应报文,并将所述响应报文发送至代理服务器的网卡驱动模块。
为实现上述目的,本申请另一方面还提供一种代理服务器,所述代理服务包括存储器和处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现上述的方法。
由上可见,本发明通过将用户态网络协议栈设置在用户空间,将内核协议栈所要处理的所有数据报文交由用户态网络协议栈,比内核协议栈处理数据报文的方式效率更高。当出现大流量并发数据时,由于无需像现有技术那样,不断的在内核态和用户态之间进行数据拷贝,此外,无需通过内核处理,也就无需由内核态向系统请求中断,必然不会导致代理服务器大流量并发处理时,效率低下的情形。
进一步的,由于用户态网络协议栈设置运行在用户空间,可更方便的跟上层应用程序配合使用,在编译和调试时不涉及内核,比起编译和调试内核更简便。进一步的,用户态网络协议栈仅通过对应的CPU处理数据报文,该方式可以避免用户态网络协议栈之间互相抢占CPU资源,充分利用每个CPU处理数据报文,从而提高了数据报文处理效率。进一步的,由于用户态网络协议栈仅将数据报文提供给对应的代理进程,或者接收对应的代理进程提供的数据报文,使得每个代理进程运行各自的用户态网络协议栈,实现用户态网络协议栈相互独立,互不影响,避免了现有技术中代理进程相互抢占网络协议栈资源而产生死锁的现象。进一步的,用户空间通过散列进程以共享内存的方式将请求报文均匀散列至多个用户态网络协议栈,相对于现有技术中需要将数据报文在内核和用户空间之间进行反复拷贝的方式而言,提高了处理效率,节省了处理时间。进一步的,网卡驱动可以通过轮询的方式接收请求报文,并提供给代理服务器的用户空间。相对于现有的网卡驱动采用中断方式接收请求报文而言,不会出现因为并发数据量大而出现处理中断的问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有代理服务器处理数据报文的示意图。
图2是本发明实施例一的代理服务器处理数据报文的方法流程图。
图3是本发明实施例二的代理服务器处理数据报文的方法流程图。
图4为本发明实施例的用户态网络协议栈解析请求报文的流程图。
图5为本发明代理服务器实施例一的功能模块示意图。
图6为本发明代理服务器实施例二的功能模块示意图。
图7为本发明代理服务器结构示意图。
图8为本发明实施例中计算机终端的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图2是本发明实施例一的代理服务器处理数据报文的方法流程图。
本发明实施例中,代理服务器可以是超文本传输协议(Hyper Text TransferProtocol,HTTP)代理服务器、防火墙安全会话转换协议(Protocol for Sessionstraversal across firewall securely,Socks)代理服务器、虚拟专用网络(VirtualPrivate Network,VPN)代理服务器、文件传输协议(File Transfer Protocol,FTP)代理服务器、实时流传输协议(Real Time Streaming Protocol,RTSP)代理服务器、邮局协议版本3(Post Office Protocol-Version 3,POP3)代理服务器等,本发明对此不作限定。
本发明实施例中的代理服务器可以包括多个CPU,该服务器的用户空间可以包括多个用户态网络协议栈和多个代理进程。用户态网络协议栈是指在用户空间运行的类似内核协议栈的代码,具有TCP/IP(Transmission Control Protocol/Internet Protocol)网络协议栈的功能,可以移植自开源的TCP/IP网络协议,比如FreeBSD网络协议等。用户态网络协议栈提供的应用程序编程接口(Application Programming Interface,API)遵循可移植操作系统接口(Portable Operating System Interface of UNIX,POSIX)标准,可以适用于多种平台,具有较好的可移植性和兼容性。代理进程可以处理HTTP请求、Socks请求、VPN请求、FTP请求、RTSP请求以及POP3请求等,而且还可以向客户端发送与请求对应的响应。
在执行本发明实施例的代理服务器处理数据报文的方法前,需要先进行代理服务器的初始化,包括加载网卡驱动、代理进程初始化、用户态网络协议栈初始化。网卡驱动只有经过初始化以后才可以通过网卡从客户端接收第一请求报文。代理模块的初始化主要用于创建套接字(Socket),Socket可以使用AcceptAsync、Accept、BeginAccep等方式侦听客户端的连接以及接收客户端发送的请求数据。用户态网络协议栈初始化相关的项目,主要分为系统相关项目、网络相关项目和代理相关项目。初始化系统相关项目包括给用户态网络协议栈预先分配内存,这样在执行后续步骤时,就不用再为用户态网络协议栈分配内存;其次,还包括初始化数据接收缓冲区、发送缓冲区,用于存放数据包;初始化系统相关项目还包括绑定用户态网络协议栈对应的CPU和对应的代理进程,设置CPU时钟,设置系统定时器、系统环境变量、Sysctl变量等。初始化网络相关项目包括设置需要使用的接口、接口的物理地址、IP地址、子网掩码、网关等。初始化代理相关项目包括配置代理策略,代理策略将在下文内容中进行详细描述。
具体而言,本发明实施例的代理服务器处理数据报文的方法,包括如下步骤:
S201,代理服务器通过网卡驱动接收第一请求报文,并提供给代理服务器的用户空间。
第一请求报文是指由客户端向代理服务器发出的原请求报文,第一请求报文可以是HTTP请求报文、Socks请求报文、VPN请求报文、FTP请求报文、RTSP请求报文、POP3请求报文等。在一个实施例中,网卡驱动可以通过轮询的方式接收第一请求报文,并提供给代理服务器的用户空间。相对于现有的网卡驱动采用中断方式接收请求报文而言,减少了中断机制的时间开销。
S202,用户空间通过用户态网络协议栈解析第一请求报文,以获取第一请求数据,并提供给用户空间的代理进程。
例如,第一请求数据可以是HTTP请求数据、Socks请求数据、VPN请求数据、FTP请求数据、RTSP请求数据、POP3请求数据等。本步骤的具体过程请参阅图4及下文的具体描述,在此先不赘述。
S203,代理进程根据代理策略生成第二请求数据,并发送至用户态网络协议栈。
在本实施例中,代理服务器不存在缓存数据,在接收到第一请求报文之后,直接根据代理策略生成第二请求数据。代理服务器根据不同的功能需求配置不同的代理策略,包括:安全策略、负载均衡策略、最优策略等;例如,负载均衡策略用来分发请求到服务器组,防止某个服务器负载过重而响应太慢。本发明对此不作限定。
S204,用户态网络协议栈封装第二请求数据得到第二请求报文,并发送至代理服务器的网卡驱动。
在一个实施例中,网卡驱动接收第二请求报文,可以将第二请求报文发送至目标服务器;目标服务器接收第二请求报文后,生成与第二请求报文对应的响应报文,并发送至代理服务器,由代理服务器将该响应报文发送给客户端。需要说明的是,由于代理服务器从目标服务器接收响应报文,并发送给客户端的过程与步骤S201到S204基本一致,所以在此不再赘述。
由于用户态网络协议栈进行初始化时,就已经将用户态网络协议栈与CPU进行绑定使得多个用户态网络协议栈与多个CPU之间分别一一对应。此外,还将用户态网络协议栈与代理进程进行绑定,使得多个用户态网络协议栈与多个代理进程之间分别一一对应。因此,在上述步骤中,用户态网络协议栈仅通过对应的CPU处理数据报文,该方式可以避免用户态网络协议栈之间互相抢占CPU资源,充分利用每个CPU处理数据报文,从而提高了数据报文处理效率。此外,由于用户态网络协议栈仅将数据报文提供给对应的代理进程,或者接收对应的代理进程提供的数据报文,使得每个代理进程运行各自的用户态网络协议栈,实现多个用户态网络协议栈相互独立,互不影响,避免了现有技术中代理进程相互抢占网络协议栈资源。
图3是本发明实施例二的代理服务器处理数据报文的方法流程图。
S301,代理服务器通过网卡驱动接收第一请求报文,并提供给代理服务器的用户空间。
S302,用户空间通过用户态网络协议栈解析第一请求报文,以获取第一请求数据,并提供给用户空间的代理进程。
S303,代理进程在缓存数据中搜索与第一请求数据对应的响应数据。
在一个实施例中,由于代理服务器缓存有其它客户端请求过的响应数据,所以当代理服务器接收到本次请求时,会通过代理进程首先在缓存数据中搜索本次请求对应的响应数据是否曾经被其它客户端请求过并缓存在代理服务器中。所以在本步骤中,如果代理进程在缓存数据中搜索到与请求数据对应的响应数据,执行S304及S305;若未搜索到与请求数据对应的响应数据,执行S306及S307。
S304,代理进程读取响应数据,并将响应数据发送给用户态网络协议栈。
例如,响应数据可以是HTTP响应数据、Socks响应数据、VPN响应数据、FTP响应数据、RTSP响应数据、POP3响应数据等。
S305,用户态网络协议栈封装响应数据得到响应报文,并发送至网卡驱动。
S306,代理进程根据代理策略生成所述第二请求数据,并发送至用户态网络协议栈。
S307,用户态网络协议栈封装第二请求数据得到第二请求报文,并发送至网卡驱动。
与图2所示的实施例不同的是,本实施例的代理服务器缓存有其它客户端请求过的响应数据,所以当代理服务器收到请求相同响应数据的请求报文时,可直接将响应数据发送给客户端,进而明显的提高了数据报文处理效率。
图4为本发明实施例的用户态网络协议栈解析请求报文的流程图。
S401,二层网络协议栈解析请求报文,并将三层及三层以上报文内容提供给三层网络协议栈。
比如可以根据地址解析协议(Address Resolution Protocol,ARP),将MAC地址映射为IP地址,进而获取三层及三层以上报文内容。
S402,三层网络协议栈解析二层网络协议栈提供的报文内容,并将四层及四层以上报文内容提供给四层网络协议栈。
三层网络协议栈可以是IP协议栈或者Internet控制报文协议栈(InternetControl Message Protocol,ICMP)。本步骤主要是对报文内容进行IP校验、IP分片、IP组包、IP路由等操作。
S403,四层网络协议栈解析三层网络协议栈提供的报文内容,并将请求数据提供给事件监听层。
四层网络协议栈可以是传输控制协议栈(Transmission Control Protocol,TCP)或者用户数据报协议栈(User Datagram Protocol,UDP)。TCP协议栈主要实现TCP流程的状态机操作、数据包拆分、IP分片、流量拥塞控制、TCP校验等功能;UDP协议栈主要实现根据UDP协议数据包拆分和UDP校验等功能。
S404,事件监听层根据对应的事件句柄,把请求数据提供给代理进程。
事件监听层是指位于四层网络协议栈与代理进程之间的套接字(Socket),主要用于维护数据流表,从四层网络协议栈读取请求数据并提供给代理进程。换而言之,代理进程可以通过事件监听层监听多个事件,并通过不同事件的句柄获取不同的请求数据。
需要说明的是,S305中用户态网络协议栈封装响应数据得到响应报文及S204、S307中用户态网络协议栈封装第二请求数据得到第二请求报文,是图4所示步骤的逆向执行过程,在此不再赘述。
在另一个实施例中,S201可以包括如下步骤:
S2011,代理服务器通过网卡驱动接收第一请求报文,并提供给用户空间的散列进程;
S2012,散列进程以共享内存的方式将第一请求报文均匀散列至多个用户态网络协议栈。
在另一个实施例中,S301亦可包括上述步骤,在此不再赘述。
本实施例与图2、图3所示的实施例的主要区别在于,本实施例可以通过散列进程接收第一请求报文,并通过散列进程将第一请求报文发送至多个用户态网络协议栈;图2、图3所示的实施例是网卡驱动直接将第一请求报文发送至用户态网络协议栈。均匀散列可以是散列进程根据哈希(Hash)算法均匀的将第一请求报文发送到多个用户态网络协议栈,并将相同IP地址和端口(Port)的第一请求报文发送至同一个用户态网络协议栈上。
此外,共享内存的方式可以是多个散列进程之间直接访问同一块内存区域,该内存区域在代理服务器初始化时所预先分配的空间。用户空间通过散列进程以共享内存的方式将第一请求报文均匀散列至多个用户态网络协议栈,相对于现有技术中需要将数据报文在内核和用户空间之间进行反复拷贝的方式而言,提高了处理效率,节省了处理时间。
本发明通过将用户态网络协议栈设置在用户空间,将内核协议栈所要处理的所有数据报文交由用户态网络协议栈处理。由于用户态网络协议栈运行在用户空间,所以代理服务器在处理数据报文时不用通过内核进行转换,不但节省了内核资源,而且比内核协议栈处理数据报文的方式效率更高,同时当处理大流量的并发大数据时,也不会出现代理服务器效率低下的情形。此外,由于用户态协议栈进程设置运行在用户空间,可更方便的跟上层应用程序配合使用,在编译和调试时不涉及内核,比起编译和调试内核更简便。
图5为本发明代理服务器实施例一的功能模块示意图。
如图5所示,本实施例的代理服务器可以包括:网卡驱动模块和用户空间模块。网卡驱动模块用于接收第一请求报文,并提供给用户空间模块;用户空间模块包括用户态网络协议栈模块和代理模块,其中:用户态网络协议栈模块用于解析第一请求报文,以获取第一请求数据并提供给代理模块;代理模块用于根据代理策略生成第二请求数据,并发送给用户态网络协议栈模块;用户空间的用户态网络协议栈模块封装第二请求数据得到第二请求报文,并将第二请求报文发送至代理服务器的网卡驱动模块。
代理模块还可以用于在缓存数据中搜索与第一请求数据对应的响应数据;若在所述缓存数据中未搜索到与第一请求数据对应的响应数据,代理模块还用于根据代理策略生成第二请求数据,并发送至用户态网络协议栈模块;用户态网络协议栈模块还用于封装第二请求数据得到第二请求报文,并将第二请求报文发送至代理服务器的网卡驱动模块;若在缓存数据中搜索到与第一请求数据对应的响应数据,代理模块还用于读取响应数据,并将响应数据发送给用户态网络协议栈模块;用户态网络协议栈模块还用于封装响应数据得到响应报文,并将响应报文发送至代理服务器的网卡驱动模块。
本实施例的代理服务器可以用于执行图2、图3所示方法实施例的方法,其实现原理和所要达到的技术效果类似,在此不再赘述。
图6为本发明代理服务器实施例二的功能模块示意图。
与图5所示的实施例一不同的是,代理服务器可以包括多个CPU(图中未示出),用户空间模块包括多个用户态网络协议栈模块,多个用户态网络协议栈模块与多个CPU之间分别一一对应,且用户态网络协议栈模块仅通过对应的CPU处理数据报文。用户空间模块还包括多个代理模块,多个用户态网络协议栈模块还与多个代理模块之间分别一一对应,且用户态网络协议栈模块仅将数据报文发送给对应的代理模块。用户空间模块还包括散列模块,用于接收网卡驱动模块提供的第一请求报文,并以共享内存的方式将第一请求报文均匀散列至多个用户态网络协议栈模块。网卡驱动模块以轮询的方式接收所述第一请求报文。
本实施例的代理服务器可以用于执行图2、图3所示方法实施例的方法,其实现原理和所要达到的技术效果类似,在此不再赘述。
图7为本发明代理服务器结构示意图。所述代理服务器包括存储器、处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,可以实现上述的代理服务器处理数据报文的方法。
图8为本发明实施例中计算机终端的结构示意图。在本申请中,上述实施例中的技术方案可以应用于如图8所示的计算机终端10上。计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。本领域普通技术人员可以理解,图8所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图8中所示更多或者更少的组件,或者具有与图8所示不同的配置。
具体地,在本申请中,上述的代理服务器处理数据报文的方法可以作为计算机程序存储于上述的存储器104中,所述存储器104可以与处理器102耦合,那么当处理器102执行所述存储器104中的计算机程序时,便可以实现上述的代理服务器处理数据报文的方法中的各个步骤。
存储器104可用于存储应用软件的软件程序以及模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
由上可见,本发明通过将用户态网络协议栈设置在用户空间,将内核协议栈所要处理的所有数据报文交由用户态网络协议栈,比内核协议栈处理数据报文的方式效率更高。当出现大流量并发数据时,由于无需像现有技术那样,不断的在内核态和用户态之间进行数据拷贝,此外,无需通过内核处理,也就无需由内核态向系统请求中断,必然不会导致代理服务器大流量并发处理时,效率低下的情形。
进一步的,由于用户态协议栈设置运行在用户空间,可更方便的跟上层应用程序配合使用,在编译和调试时不涉及内核,比起编译和调试内核更简便。进一步的,用户态网络协议栈仅通过对应的CPU处理数据报文,该方式可以避免用户态网络协议栈之间互相抢占CPU资源,充分利用每个CPU处理数据报文,从而提高了数据报文处理效率。进一步的,由于用户态网络协议栈仅将数据报文提供给对应的代理进程,或者接收对应的代理进程提供的数据报文,使得每个代理进程运行各自的用户态网络协议栈,实现用户态网络协议栈且相互独立,互不影响,避免了现有技术中代理进程相互抢占网络协议栈资源而产生死锁的现象。进一步的,用户空间通过散列进程以共享内存的方式将请求报文均匀散列至多个用户态网络协议栈,相对于现有技术中需要将数据报文在内核和用户空间之间进行反复拷贝的方式而言,提高了处理效率,节省了处理时间。进一步的,网卡驱动可以通过轮询的方式接收请求报文,并提供给代理服务器的用户空间。相对于现有的网卡驱动采用中断方式接收请求报文而言,不会出现因为并发数据大而出现处理中断的问题。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (13)
1.一种代理服务器处理数据报文的方法,其特征在于,包括:
代理服务器通过网卡驱动接收第一请求报文,并提供给所述代理服务器的用户空间;
所述用户空间通过用户态网络协议栈解析所述第一请求报文,以获取第一请求数据,并提供给所述用户空间的代理进程;
所述代理进程根据代理策略生成第二请求数据,并发送至所述用户态网络协议栈;
所述用户态网络协议栈封装所述第二请求数据得到第二请求报文,并将所述第二请求报文发送至代理服务器的网卡驱动。
2.如利要求1所述的方法,特征在于,所述代理服务器包括多个CPU,所述用户空间包括多个用户态网络协议栈,所述多个用户态网络协议栈与所述多个CPU之间分别一一对应,且所述用户态网络协议栈仅通过对应的CPU处理数据报文。
3.如权利要求2所述的方法,其特征在于,所述用户空间还包括多个代理进程,所述多个用户态网络协议栈还与所述多个代理进程之间分别一一对应,且所述用户态网络协议栈仅将所述数据报文发送给对应的所述代理进程。
4.如权利要求2所述的方法,其特征在于,所述代理服务器通过网卡驱动接收第一请求报文,并提供给所述代理服务器的用户空间的步骤具体包括:
所述代理服务器通过网卡驱动接收所述第一请求报文,并提供给所述用户空间的散列进程;
所述散列进程以共享内存的方式将所述第一请求报文均匀散列至所述多个用户态网络协议栈。
5.如权利要求1所述的方法,其特征在于,所述网卡驱动以轮询的方式接收所述第一请求报文。
6.如权利要求1所述的方法,其特征在于,所述用户空间通过用户态网络协议栈解析所述第一请求报文,以获取第一请求数据,并提供给所述用户空间的代理进程的步骤之后,还包括:
所述代理进程接收所述第一请求数据,并在缓存数据中搜索与所述第一请求数据对应的响应数据;
若在所述缓存数据中未搜索到与所述第一请求数据对应的响应数据,则根据代理策略生成所述第二请求数据,并发送至所述用户态网络协议栈;
所述用户态网络协议栈封装所述第二请求数据得到第二请求报文,并将所述第二请求报文发送至代理服务器的网卡驱动;
若在所述缓存数据中搜索到与所述第一请求数据对应的响应数据,则读取所述响应数据,并将所述响应数据发送给所述用户态网络协议栈;
所述用户态网络协议栈封装所述响应数据得到响应报文,并将所述响应报文发送至代理服务器的网卡驱动。
7.一种代理服务器,包括网卡驱动模块和用户空间模块,其特征在于:
所述网卡驱动模块,用于接收第一请求报文,并提供给所述用户空间模块;
所述用户空间模块包括用户态网络协议栈模块和代理模块,其中:
所述用户态网络协议栈模块,用于解析所述第一请求报文,以获取第一请求数据,并提供给所述用户空间的代理模块;
所述代理模块,用于根据代理策略生成第二请求数据,并发送给所述用户态网络协议栈模块;
所述用户态网络协议栈模块还用于封装所述第二请求数据得到第二请求报文,并将所述第二请求报文发送至所述网卡驱动模块。
8.如权利要求7所述的代理服务器,其特征在于,所述代理服务器包括多个CPU,所述用户空间模块包括多个用户态网络协议栈模块,所述多个用户态网络协议栈模块与所述多个CPU之间分别一一对应,且所述用户态网络协议栈模块仅通过对应的CPU处理数据报文。
9.如权利要求8所述的代理服务器,其特征在于,所述用户空间模块还包括多个代理模块,所述多个用户态网络协议栈模块还与所述多个代理模块之间分别一一对应,且所述用户态网络协议栈模块仅将所述数据报文发送给对应的所述代理模块。
10.如权利要求8所述的代理服务器,其特征在于,所述用户空间模块还包括散列模块,用于接收所述网卡驱动模块提供的所述第一请求报文,并以共享内存的方式将所述第一请求报文均匀散列至所述多个用户态网络协议栈模块。
11.如权利要求7所述的代理服务器,其特征在于,所述网卡驱动模块以轮询的方式接收所述第一请求报文。
12.如权利要求7所述的代理服务器,其特征在于:
所述代理模块还用于接收所述第一请求数据,并在缓存数据中搜索与所述第一请求数据对应的响应数据;
若在所述缓存数据中未搜索到与所述第一请求数据对应的响应数据,所述代理模块还用于根据代理策略生成所述第二请求数据,并发送至所述用户态网络协议栈模块;
所述用户态网络协议栈模块还用于封装所述第二请求数据得到第二请求报文,并将所述第二请求报文发送至代理服务器的网卡驱动模块;
若在所述缓存数据中搜索到与所述第一请求数据对应的响应数据,所述代理模块还用于读取所述响应数据,并将所述响应数据发送给所述用户态网络协议栈模块;
所述用户态网络协议栈模块还用于封装所述响应数据得到响应报文,并将所述响应报文发送至代理服务器的网卡驱动模块。
13.一种代理服务器,其特征在于,所述代理服务器包括存储器和处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现如权利要求1至6中任一权利要求所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810609376.0A CN110602155A (zh) | 2018-06-13 | 2018-06-13 | 代理服务器及其处理数据报文的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810609376.0A CN110602155A (zh) | 2018-06-13 | 2018-06-13 | 代理服务器及其处理数据报文的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110602155A true CN110602155A (zh) | 2019-12-20 |
Family
ID=68849127
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810609376.0A Pending CN110602155A (zh) | 2018-06-13 | 2018-06-13 | 代理服务器及其处理数据报文的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110602155A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113067849A (zh) * | 2021-02-05 | 2021-07-02 | 湖南国科亿存信息科技有限公司 | 基于Glusterfs的网络通信优化方法及装置 |
CN113810397A (zh) * | 2021-09-09 | 2021-12-17 | 山石网科通信技术股份有限公司 | 协议数据的处理方法及装置 |
CN113810380A (zh) * | 2021-08-23 | 2021-12-17 | 杭州安恒信息安全技术有限公司 | 代理层次切换方法、系统、可读存储介质及计算机设备 |
CN114205185A (zh) * | 2020-09-16 | 2022-03-18 | 厦门网宿有限公司 | 一种控制报文的代理方法及装置 |
CN115361443A (zh) * | 2022-08-16 | 2022-11-18 | 武汉思普崚技术有限公司 | 一种报文处理方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101330473A (zh) * | 2007-06-18 | 2008-12-24 | 电子科技大学 | 一种多协议支持的网络垃圾信息过滤方法和装置 |
CN101867558A (zh) * | 2009-04-17 | 2010-10-20 | 深圳市永达电子股份有限公司 | 用户态网络协议栈系统及处理报文的方法 |
CN101917350A (zh) * | 2010-09-13 | 2010-12-15 | 南京中兴特种软件有限责任公司 | 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法 |
US20120278878A1 (en) * | 2011-04-27 | 2012-11-01 | International Business Machines Corporation | Systems and methods for establishing secure virtual private network communications using non-privileged vpn client |
CN106557444A (zh) * | 2015-09-30 | 2017-04-05 | 中兴通讯股份有限公司 | 实现sr-iov网卡的方法和装置、实现动态迁移的方法和装置 |
CN107302479A (zh) * | 2017-06-27 | 2017-10-27 | 广州市威士丹利智能科技有限公司 | 基于多种通信协议的智能家庭网关 |
-
2018
- 2018-06-13 CN CN201810609376.0A patent/CN110602155A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101330473A (zh) * | 2007-06-18 | 2008-12-24 | 电子科技大学 | 一种多协议支持的网络垃圾信息过滤方法和装置 |
CN101867558A (zh) * | 2009-04-17 | 2010-10-20 | 深圳市永达电子股份有限公司 | 用户态网络协议栈系统及处理报文的方法 |
CN101917350A (zh) * | 2010-09-13 | 2010-12-15 | 南京中兴特种软件有限责任公司 | 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法 |
US20120278878A1 (en) * | 2011-04-27 | 2012-11-01 | International Business Machines Corporation | Systems and methods for establishing secure virtual private network communications using non-privileged vpn client |
CN106557444A (zh) * | 2015-09-30 | 2017-04-05 | 中兴通讯股份有限公司 | 实现sr-iov网卡的方法和装置、实现动态迁移的方法和装置 |
CN107302479A (zh) * | 2017-06-27 | 2017-10-27 | 广州市威士丹利智能科技有限公司 | 基于多种通信协议的智能家庭网关 |
Non-Patent Citations (1)
Title |
---|
王静: "《协议栈并行化技术的研究与实现》", 《中国优秀硕士学位论文全文数据库(电子期刊)》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114205185A (zh) * | 2020-09-16 | 2022-03-18 | 厦门网宿有限公司 | 一种控制报文的代理方法及装置 |
CN114205185B (zh) * | 2020-09-16 | 2023-03-24 | 厦门网宿有限公司 | 一种控制报文的代理方法及装置 |
CN113067849A (zh) * | 2021-02-05 | 2021-07-02 | 湖南国科亿存信息科技有限公司 | 基于Glusterfs的网络通信优化方法及装置 |
CN113810380A (zh) * | 2021-08-23 | 2021-12-17 | 杭州安恒信息安全技术有限公司 | 代理层次切换方法、系统、可读存储介质及计算机设备 |
CN113810380B (zh) * | 2021-08-23 | 2023-08-01 | 杭州安恒信息安全技术有限公司 | 代理层次切换方法、系统、可读存储介质及计算机设备 |
CN113810397A (zh) * | 2021-09-09 | 2021-12-17 | 山石网科通信技术股份有限公司 | 协议数据的处理方法及装置 |
CN113810397B (zh) * | 2021-09-09 | 2023-04-18 | 山石网科通信技术股份有限公司 | 协议数据的处理方法及装置 |
CN115361443A (zh) * | 2022-08-16 | 2022-11-18 | 武汉思普崚技术有限公司 | 一种报文处理方法及系统 |
CN115361443B (zh) * | 2022-08-16 | 2023-06-20 | 武汉思普崚技术有限公司 | 一种报文处理方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110602155A (zh) | 代理服务器及其处理数据报文的方法 | |
US7506063B2 (en) | Method and system for initiating execution of software in response to a state | |
US9100409B2 (en) | Method and system for selecting a computing device for maintaining a client session in response to a request packet | |
US7895348B2 (en) | Virtual dispersive routing | |
US8014312B2 (en) | Method and system for handling connection setup in a network | |
US7418522B2 (en) | Method and system for communicating an information packet through multiple networks | |
CN101217493B (zh) | 一种tcp数据包的传输方法 | |
US7512686B2 (en) | Method and system for establishing a data structure of a connection with a client | |
US20020120761A1 (en) | Method and system for executing protocol stack instructions to form a packet for causing a computing device to perform an operation | |
CN110602154A (zh) | Web服务器及其处理数据报文的方法 | |
US8150977B1 (en) | Resource scheduler within a network device | |
US20190042314A1 (en) | Resource allocation | |
WO2023151264A1 (zh) | 负载均衡方法、装置、节点及存储介质 | |
CN110602262A (zh) | 路由器及其处理数据报文的方法 | |
CN113891396A (zh) | 数据包的处理方法、装置、计算机设备和存储介质 | |
US20020116532A1 (en) | Method and system for communicating an information packet and identifying a data structure | |
Barbette et al. | Cheetah: A high-speed programmable load-balancer framework with guaranteed per-connection-consistency | |
Andreolini et al. | Scalability of content-aware server switches for cluster-based Web information systems | |
US20020116605A1 (en) | Method and system for initiating execution of software in response to a state | |
Yang et al. | HEELS: A Host-Enabled eBPF-Based Load Balancing Scheme | |
Zeng et al. | Middlenet: A high-performance, lightweight, unified nfv and middlebox framework | |
WO2024113776A1 (zh) | 数据传输方法以及相关设备 | |
Takahashi et al. | Tcp-migration with application-layer dispatching: A new http request distribution architecture in locally distributed web server systems | |
Melnyk | Modeling of the messages search mechanism in the messaging process on the basis of TCP protocols | |
CN113419810A (zh) | 数据交互方法、装置、电子设备及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191220 |
|
RJ01 | Rejection of invention patent application after publication |