CN110602262A - 路由器及其处理数据报文的方法 - Google Patents
路由器及其处理数据报文的方法 Download PDFInfo
- Publication number
- CN110602262A CN110602262A CN201810609335.1A CN201810609335A CN110602262A CN 110602262 A CN110602262 A CN 110602262A CN 201810609335 A CN201810609335 A CN 201810609335A CN 110602262 A CN110602262 A CN 110602262A
- Authority
- CN
- China
- Prior art keywords
- request message
- user
- network protocol
- protocol stack
- router
- 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
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/02—Topology update or discovery
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
-
- 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/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例提供一种路由器处理数据报文的方法,所述方法包括:路由器通过网卡驱动接收第一请求报文,并提供给所述路由器的用户空间;所述用户空间通过用户态网络协议栈解析所述第一请求报文,并判断是否转发所述第一请求报文;若不转发,所述用户空间通过用户态网络协议栈及用户进程将所述第一请求报文转换为第二请求报文,并发送至所述网卡驱动;若转发,所述用户空间通过用户态网络协议栈将所述第一请求报文转换为第三请求报文,并发送至所述网卡驱动。本发明还提供一种路由器。本发明提供的路由器及其处理数据报文的方法,能够提高路由器的性能。
Description
技术领域
本发明涉及网络通信技术领域,特别涉及一种路由器及其处理数据报文的方法。
背景技术
现有使用Linux操作系统的路由器,一般通过内核协议栈处理数据报文,其处理数据报文的方式可参阅图1。网卡将接收到的报文数据发送给内核空间的网络协议栈处理,然后内核通过上下文切换将处理后的报文数据拷贝到用户空间的用户进程;用户进程处理完毕之后,又将数据报文拷贝到内核,经过内核空间的网络协议栈处理以后,再发送到网卡。
本专利申请的发明人,通过研究现有使用Linux操作系统的路由器处理数据报文的过程发现,现有技术至少存在以下问题:通过内核的网络协议栈处理数据报文比较复杂及繁琐,整个过程需要将数据在内核和用户空间之间进行多次拷贝及切换,导致效率下降;其次,内核采用的是中断方式处理数据报文,当并发数据大的时候,容易出现软中断非常高,占用系统资源,将成为系统的性能瓶颈;再次,内核的网络协议栈为防止抢占资源,很多地方需要对进程控制块(Process Control Block,PCB)加锁,这样也影响数据报文的处理效率;最后,同一个数据报文可能由多个CPU处理,而且每个非统一内存访问(Non-uniformMemory Access,NUMA)节点共用同一内存,造成数据报文处理效率低下。
由此可见,上述原因均可能导致路由器的性能下降。
发明内容
本申请的目的在于提供一种路由器及其处理数据报文的方法,以提高路由器的性能。
为实现上述目的,本申请一方面提供一种路由器处理数据报文的方法,所述方法包括:路由器通过网卡驱动接收第一请求报文,并提供给所述路由器的用户空间;所述用户空间通过用户态网络协议栈解析所述第一请求报文,并判断是否转发所述第一请求报文;若不转发,所述用户空间通过用户态网络协议栈及用户进程将所述第一请求报文转换为第二请求报文,并发送至所述网卡驱动;若转发,所述用户空间通过用户态网络协议栈将所述第一请求报文转换为第三请求报文,并发送至所述网卡驱动。
进一步的,所述路由器包括多个CPU,所述用户空间包括多个用户态网络协议栈,所述多个用户态网络协议栈与所述多个CPU之间分别一一对应,且所述用户态网络协议栈仅通过对应的CPU处理数据报文。
进一步的,所述用户空间还包括多个用户进程,所述多个用户态网络协议栈还与所述多个用户进程之间分别一一对应,且所述用户态网络协议栈仅将所述数据报文发送给对应的所述用户进程。
进一步的,所述路由器通过网卡驱动接收第一请求报文,并提供给所述路由器的用户空间的步骤具体包括:所述路由器通过网卡驱动接收第一请求报文,并提供给所述用户空间的散列进程;所述散列进程以共享内存的方式将所述第一请求报文均匀散列至所述多个用户态网络协议栈。
进一步的,所述网卡驱动以轮询的方式接收所述第一请求报文。
进一步的,所述用户空间通过用户态网络协议栈及用户进程将所述第一请求报文转换为第二请求报文,并发送至所述网卡驱动的步骤包括:所述用户空间通过用户态网络协议栈获取第一请求数据,并提供给所述用户进程;所述用户空间通过用户进程生成与所述第一请求数据对应的第二请求数据,并提供给所述用户态网络协议栈;所述用户空间通过用户态网络协议栈将所述第二请求数据封装为第二请求报文,并发送至所述网卡驱动。
进一步的,所述用户空间通过用户态网络协议栈将所述第一请求报文转换为第三请求报文,并发送至所述网卡驱动的步骤包括:所述用户空间通过用户态网络协议栈查询路由表,以获取路由,并根据所述路由对所述第一请求报文进行IP地址转换;所述用户空间通过用户态网络协议栈将进行IP地址转换后的所述第一请求报文封装为第三请求报文,并发送至所述网卡驱动。
为实现上述目的,本申请另一方面还提供一种路由器,包括网卡驱动模块及用户空间模块。所述网卡驱动模块,用于接收第一请求报文,并提供给所述用户空间模块;所述用户空间模块包括用户态网络协议栈模块及用户进程模块,所述用户态网络协议栈模块用于解析所述第一请求报文,并判断是否转发所述第一请求报文;若不转发,所述用户态网络协议栈模块及所述用户进程模块还用于将所述第一请求报文转换为第二请求报文,并发送至所述网卡驱动模块;若转发,所述用户态网络协议栈模块还用于将所述第一请求报文转换为第三请求报文,并发送至所述网卡驱动模块。
进一步的,所述路由器包括多个CPU,所述用户空间模块包括多个用户态网络协议栈模块,所述多个用户态网络协议栈模块与所述多个CPU之间分别一一对应,且所述用户态网络协议栈模块仅通过对应的CPU处理数据报文。
进一步的,所述用户空间模块还包括多个用户进程模块,所述多个用户态网络协议栈模块还与所述多个用户进程模块之间分别一一对应,且所述用户态网络协议栈模块仅将所述数据报文发送给对应的所述用户进程模块。
进一步的,所述用户空间模块还包括散列模块,用于接收所述网卡驱动模块提供的所述第一请求报文,并以共享内存的方式将所述第一请求报文均匀散列至所述多个用户态网络协议栈模块。
进一步的,所述网卡驱动模块以轮询的方式接收所述第一请求报文。
进一步的,所述用户态网络协议栈模块还用于获取第一请求数据,并提供给所述用户进程模块;所述用户进程模块用于生成与所述第一请求数据对应的第二请求数据,并提供给所述用户态网络协议栈模块;所述用户态网络协议栈模块还用于将所述第二请求数据封装为第二请求报文,并发送至所述网卡驱动模块。
进一步的,所述用户态网络协议栈模块还用于:查询路由表,以获取路由,并根据所述路由对所述第一请求报文进行IP地址转换;将进行IP地址转换后的所述第一请求报文封装为第三请求报文,并发送至所述网卡驱动模块。
为实现上述目的,本申请另一方面还提供一种路由器,所述路由器包括存储器和处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现上述的方法。
由上可见,本发明通过将网络协议栈设置在用户空间,将内核协议栈所要处理的所有数据报文交由用户态网络协议栈处理,比内核协议栈处理数据报文的方式效率更高。当出现大流量并发数据时,由于无需像现有技术那样,不断地在内核态和用户态之间进行数据拷贝,此外,无需通过内核处理数据报文,也就无需由内核态向系统请求中断,必然不会导致路由器大流量并发处理时,效率低下的情形。
进一步的,由于用户态网络协议栈设置运行在用户空间,可更方便的跟上层路由器应用程序配合使用,在编译和调试时不涉及内核,比起编译和调试内核更简便。进一步的,用户态网络协议栈仅通过对应的CPU处理数据报文,该方式可以避免用户态网络协议栈之间互相抢占CPU资源,充分利用每个CPU处理数据报文,从而提高了数据报文处理效率。进一步的,由于用户态网络协议栈仅将数据报文提供给对应的用户进程,或者接收对应的用户进程提供的数据报文,使得每个用户进程运行各自的用户态网络协议栈,实现用户态网络协议栈相互独立、互不影响,避免了现有技术中用户进程相互抢占网络协议栈资源而产生死锁的现象。针对NUMA系统,由于用户态网络协议栈与CPU及用户进程之间分别一一对应,每个CPU仅使用其所在的NUMA节点的内存,各个NUMA节点仅使用当前线程所处的CPU预先分配的独立的内存,使数据报文处理效率大大提高。进一步的,用户空间通过散列进程以共享内存的方式将第一请求报文均匀散列至用户态网络协议栈,相对于现有技术中需要将数据报文在内核和用户空间之间进行反复拷贝的方式而言,提高了处理效率,节省了处理时间。进一步的,网卡驱动可以通过轮询的方式接收第一请求报文,并提供给路由器的用户空间。相对于现有的网卡驱动采用中断方式接收第一请求报文而言,不会出现因为并发数据大而出现处理中断的问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有路由器处理数据报文的示意图。
图2为本发明实施例的路由器处理数据报文的方法流程图;
图3为本发明实施例的路由器处理数据报文的具体方法流程图;
图4为本发明路由器实施例一的功能模块示意图;
图5为本发明路由器实施例二的功能模块示意图;
图6为本发明路由器结构示意图;
图7为本发明实施例中计算机终端的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图2为本发明实施例的路由器处理数据报文的方法流程图。
本发明实施例的路由器可以包括多个CPU,且该路由器的用户空间可以包括多个用户态网络协议栈和多个用户进程。用户态网络协议栈是指在用户空间运行的类似内核协议栈的代码,具有TCP/IP(Transmission Control Protocol/Internet Protocol)网络协议栈的功能,可以移植自开源的TCP/IP网络协议,比如FreeBSD网络协议等。用户态网络协议栈提供的应用程序编程接口(Application Programming Interface,API)遵循可移植操作系统接口(Portable Operating System Interface of UNIX,POSIX)标准,可以适用多种平台,所以其可移植性强,且兼容性好。
在执行本发明实施例的路由器处理数据报文的方法之前,需要首先对路由器进行初始化。路由器初始化包括加载网卡驱动、用户进程初始化和用户态网络协议栈初始化。网卡驱动用于通过网卡从网络上接收请求报文。用户进程初始化主要用于创建套接字(Socket),使用Socket.Accept()、Socket.Begin Accept()等方法侦听网络连接以及接收从网络发来的请求数据,以实现进程在网络中通信。与用户态网络协议栈初始化相关的项目,主要分为系统相关项目、网络相关项目和配置类似iptables相关规则。初始化系统相关项目包括为用户网络协议栈预先分配内存,这样在执行后续步骤时,就不用再为用户态网络协议栈分配内存,用户进程在运行时仅使用预先分配的内存;其次,还包括初始化数据接收缓冲区、发送缓冲区,用于存放数据包;初始化系统相关项目还包括绑定用户网络协议栈对应的CPU和对应的用户进程,设置CPU时钟,设置系统定时器、系统环境变量、Sysctl变量等。初始化网络相关项目包括设置要使用的网卡、网卡的物理地址、IP地址、子网掩码、网关等。配置类似iptables相关规则包括在用户态网络协议栈中设置多个钩子节点,所述钩子节点可以是PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING,用于实现数据包过滤、动态网络地址转换(Network Address Translation,NAT)、包速率限制等功能。
具体而言,本发明实施例的路由器处理数据报文的方法,包括如下步骤:
S201,路由器通过网卡驱动接收第一请求报文,并提供给路由器的用户空间;
第一请求报文是网络中的其他节点向本路由器发送的,可以是HTTP请求报文、HTTPS请求报文,或者FTP请求报文等,本发明对此不作限定。在一个实施例中,网卡驱动可以通过轮询的方式接收第一请求报文,并提供给路由器的用户空间。相对于现有的网卡驱动采用中断方式接收请求报文而言,减少中断机制的时间开销。
S202,用户空间通过用户态网络协议栈解析第一请求报文,并判断是否转发第一请求报文;
在一个实施例中,用户态网络协议栈是通过判断第一请求报文的目的IP地址与所述路由器的IP地址是否相同来确定是否转发第一请求报文。如果第一请求报文的目的IP地址与路由器的IP地址相同,则不转发,执行步骤S203;如果第一请求报文的目的IP地址与路由器的IP地址不相同,则转发,执行步骤S204。
S203,用户空间通过用户态网络协议栈及用户进程将第一请求报文转换为第二请求报文,并发送至网卡驱动。
在一个实施例中,用户进程可以是虚拟专用网络(Virtual Private Network,VPN)进程、服务质量(Quality of Service,QOS)进程,或者是路由管理进程。第二请求报文可以是HTTP请求报文、HTTPS请求报文,或者FTP请求报文等,本发明对此不作限定。
S204,用户空间通过用户态网络协议栈将第一请求报文转换为第三请求报文,并发送至网卡驱动。
例如,第三请求报文可以是HTTP请求报文、HTTPS请求报文,或者FTP请求报文等,本发明对此不作限定。
在一个实施例中,用户态网络协议栈进行初始化时,就已经将用户态网络协议栈与CPU进行绑定,使得多个用户态网络协议栈与多个CPU之间分别一一对应。此外,还将用户态网络协议栈与用户进程进行绑定,使得多个用户态网络协议栈与多个用户进程之间分别一一对应。因此,用户态网络协议栈仅通过对应的CPU处理数据报文,该方式可以避免用户态网络协议栈之间互相抢占CPU资源,充分利用每个CPU处理数据报文,从而提高了数据报文处理效率。此外,由于用户态网络协议栈仅将数据报文提供给对应的用户进程,或者接收对应的用户进程提供的数据报文,使得每个用户进程运行各自的用户态网络协议栈,实现用户态网络协议栈相互独立,互不影响,避免了现有技术中用户进程相互抢占网络协议栈资源。并且,针对NUMA系统,由于用户态网络协议栈与CPU及用户进程之间一一对应,每个CPU仅使用其所在的NUMA节点的内存,各个NUMA节点仅使用当前线程所处的CPU预先分配的独立的内存,使数据报文处理效率大大提高。
图3为本发明实施例的路由器处理数据报文的具体方法流程图。
S301,二层网络协议栈通过网卡驱动接收第一请求报文,并将三层及三层以上报文内容提供给三层网络协议栈;
比如可以根据地址解析协议(Address Resolution Protocol,ARP),将MAC地址映射为IP地址,进而获取三层及三层以上报文内容。
S302,三层网络协议栈根据二层网络协议栈提供的报文内容判断是否转发第一请求报文;
三层网络协议栈可以是IP协议栈或者Internet控制报文协议栈(InternetControl Message Protocol,ICMP)。本步骤主要是对报文内容进行IP校验等操作。
在一个实施例中,三层网络协议栈是通过判断第一请求报文的目的IP地址与路由器的IP地址是否相同来确定是否转发第一请求报文。如果第一请求报文的目的IP地址与所述路由器的IP地址相同,则不转发,执行步骤S303至S307;如果第一请求报文的目的IP地址与所述路由器的IP地址不相同,则转发,执行步骤S308至S309。
S303,三层网络协议栈进一步解析二层网络协议栈提供的报文内容,并将四层及四层以上报文内容提供给四层网络协议栈;
本步骤主要是对报文内容进行IP分片等操作。
S304,四层网络协议栈解析三层网络协议栈提供的报文内容,获取第一请求数据并提供给事件监听模块;
四层网络协议栈可以是TCP协议栈或者用户数据报协议栈(User DatagramProtocol,UDP)。TCP协议栈主要实现TCP流程的状态机操作、数据包拆分、流量拥塞控制、TCP校验等功能;UDP协议栈主要实现根据UDP协议数据包拆分和UDP校验等功能。
S305,事件监听模块根据对应的事件句柄,把第一请求数据提供给用户进程;
事件监听层是指位于四层网络协议栈与用户进程之间的套接字(Socket),主要用于维护数据流表,从四层网络协议栈读取第一请求数据并提供给用户进程。换而言之,用户进程可以通过事件监听层监听多个事件,并通过不同事件的句柄获取不同的第一请求数据。
需要说明的是,执行步骤S303至S305可以实现用户空间通过用户态网络协议栈获取第一请求数据,并提供给用户进程。
S306,用户进程生成与第一请求数据对应的第二请求数据,并提供给用户态网络协议栈;
例如,当用户进程为VPN进程时,就可以通过VPN进程对第一请求数据进行加密处理,生成第二请求数据。
S307,用户态网络协议栈将第二请求数据封装为第二请求报文,并发送至网卡驱动。
需要说明的是,步骤S303至S307是图2所示的步骤S203的具体实施步骤,换而言之,执行步骤S303至S307可以实现通过用户态网络协议栈及用户进程将第一请求报文转换为第二请求报文,并发送至网卡驱动。
由于步骤S307正好是步骤S301至S305的逆向执行过程,在此不再赘述。
S308,三层网络协议栈查询路由表,以获取路由,并根据路由对第一请求报文进行IP地址转换;
获取路由主要是为了获取数据报文的输出网卡以及获取下一节点的IP地址。例如,根据路由表最长匹配原则,获取到的路由信息为:目的网络地址(NetworkDestination)=192.168.1.240;网络掩码(Netmask)=255.255.255.240;下一跳服务器(Gateway)=192.168.1.7;出接口(Interface)=192.168.1.6;跳数(Metric)=15,则下一节点的IP地址为192.168.1.7、用于转发数据报文的输出网卡的IP地址为192.168.1.6。本步骤可以将发往外网服务器的请求报文的源IP地址转换为本路由器WAN口的IP地址,还可以将发往本路由器所在网段的用户端的请求报文的目的IP地址转换为所述用户端的IP地址,地址转换过程遵循NAT地址转换原理,本发明对此不作赘述。
S309,二层网络协议栈将进行IP地址转换后的第一请求报文封装为第三请求报文,并发送至网卡驱动。
需要说明的是,步骤S308至S309是图2所示的步骤S204的具体实施步骤。
在另一实施例中,步骤S201可以包括如下步骤:
S211,路由器通过网卡驱动接收第一请求报文,并提供给用户空间的散列进程;
S212,散列进程以共享内存的方式将第一请求报文均匀散列至多个用户态网络协议栈。
本实施例与图2所示的实施例的主要区别在于,本实施例可以通过散列进程接收第一请求报文,并通过散列进程发送第一请求报文至用户态网络协议栈;图2所示的实施例则是网卡驱动直接将第一请求报文发送至用户态网络协议栈。均匀散列可以是散列进程根据哈希(Hash)算法均匀将第一请求报文发送到用户态网络协议栈,并将相同IP地址和端口(Port)的第一请求报文发送至同一个用户态网络协议栈上,使得每个用户进程绑定独立的网卡发送队列与CPU。
此外,共享内存的方式可以是多个散列进程之间直接访问同一块内存区域,该内存区域是在路由器初始化时,所预先分配的内存空间。用户空间通过散列进程以共享内存的方式将第一请求报文均匀散列至用户态网络协议栈,相对于现有技术中需要将数据报文在内核和用户空间之间进行反复拷贝的方式而言,提高了处理效率,节省了处理时间。
本发明通过将用户态网络协议栈设置在用户空间,将内核协议栈所要处理的所有数据报文交由用户态网络协议栈。由于用户态网络协议栈运行在用户空间,所以路由器在处理数据报文时不用通过内核进行转换,不但节省了内核资源,而且比内核协议栈处理数据报文的方式效率更高,也不会出现当处理大流量的并发大数据时,导致路由器出现无法有效处理的情形。此外,由于用户态协议栈设置运行在用户空间,可更方便的跟上层应用程序配合使用,在编译和调试时不涉及内核,比起调试编译和调试内核更简便。
图4为本发明路由器实施例一的功能模块示意图。
如图4所示,本实施例的路由器可以包括:网卡驱动模块及用户空间模块。网卡驱动模块用于接收第一请求报文,并提供给用户空间模块;用户空间模块包括用户态网络协议栈模块,用于解析所述第一请求报文,并判断是否转发所述第一请求报文。如果所述第一请求报文的目的IP地址与所述路由器相同,则不转发,所述用户态网络协议栈还用于获取第一请求数据,并提供给用户进程;所述用户进程用于生成与第一请求数据对应的第二请求数据,并提供给用户态网络协议栈;所述用户态网络协议栈还用于将第二请求数据封装为第二请求报文,并发送至网卡驱动。如果所述第一请求报文的目的IP地址与所述路由器不相同,则转发,所述用户态网络协议栈还用于查询路由表,以获取路由,并根据所述路由对所述第一请求报文进行IP地址转换;所述用户态网络协议栈还用于将进行IP地址转换后的所述第一请求报文封装为第三请求报文,并发送至网卡驱动。
本实施例的路由器可以用于执行图2所示方法实施例的方法,其实现原理和所要达到的技术效果类似,在此不再赘述。
本实施例的路由器,其实现原理和所要达到的技术效果上文中已有论述,在此不再赘述。
图5为本发明路由器实施例二的功能模块示意图。
与图4所示的实施例一不同的是,路由器可以包括多个CPU(图中未示出),用户空间模块包括多个用户态网络协议栈模块,多个用户态网络协议栈模块与多个CPU之间分别一一对应,且用户态网络协议栈模块仅通过对应的CPU处理数据报文。用户空间模块还包括多个用户进程模块,多个用户态网络协议栈模块还与多个用户进程模块之间分别一一对应,且用户态网络协议栈模块仅将数据报文发送给对应的用户进程模块。用户空间模块还包括散列模块,用于接收网卡驱动模块提供的第一请求报文,并以共享内存的方式将第一请求报文均匀散列至用户态网络协议栈模块。网卡驱动模块以轮询的方式接收所述第一请求报文。
本实施例的路由器可以用于执行图2所示方法实施例的方法,其实现原理和所要达到的技术效果类似,在此不再赘述。
本实施例的路由器,其实现原理和所要达到的技术效果上文中已有论述,在此不再赘述。
图6为本发明路由器结构示意图。所述路由器包括存储器和处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,可以实现上述的路由器处理数据报文的方法。
图7为本发明实施例中计算机终端的结构示意图。在本申请中,上述实施例中的技术方案可以应用于如图7所示的计算机终端10上。计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。本领域普通技术人员可以理解,图7所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图7中所示更多或者更少的组件,或者具有与图7所示不同的配置。
具体地,在本申请中,上述的路由器处理数据报文的方法可以作为计算机程序存储于上述的存储器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 (15)
1.一种路由器处理数据报文的方法,其特征在于,包括:
路由器通过网卡驱动接收第一请求报文,并提供给所述路由器的用户空间;
所述用户空间通过用户态网络协议栈解析所述第一请求报文,并判断是否转发所述第一请求报文;
若不转发,所述用户空间通过用户态网络协议栈及用户进程将所述第一请求报文转换为第二请求报文,并发送至所述网卡驱动;
若转发,所述用户空间通过用户态网络协议栈将所述第一请求报文转换为第三请求报文,并发送至所述网卡驱动。
2.如权利要求1所述的方法,其特征在于,所述路由器包括多个CPU,所述用户空间包括多个用户态网络协议栈,所述多个用户态网络协议栈与所述多个CPU之间分别一一对应,且所述用户态网络协议栈仅通过对应的CPU处理数据报文。
3.如权利要求2所述的方法,其特征在于,所述用户空间还包括多个用户进程,所述多个用户态网络协议栈还与所述多个用户进程之间分别一一对应,且所述用户态网络协议栈仅将所述数据报文发送给对应的所述用户进程。
4.如权利要求2所述的方法,其特征在于,所述路由器通过网卡驱动接收第一请求报文,并提供给所述路由器的用户空间的步骤具体包括:
所述路由器通过网卡驱动接收第一请求报文,并提供给所述用户空间的散列进程;
所述散列进程以共享内存的方式将所述第一请求报文均匀散列至所述多个用户态网络协议栈。
5.如权利要求1所述的方法,其特征在于,所述网卡驱动以轮询的方式接收所述第一请求报文。
6.如权利要求3所述的方法,其特征在于,所述用户空间通过用户态网络协议栈及用户进程将所述第一请求报文转换为第二请求报文,并发送至所述网卡驱动的步骤包括:
所述用户空间通过用户态网络协议栈获取第一请求数据,并提供给所述用户进程;
所述用户空间通过用户进程生成与所述第一请求数据对应的第二请求数据,并提供给所述用户态网络协议栈;
所述用户空间通过用户态网络协议栈将所述第二请求数据封装为第二请求报文,并发送至所述网卡驱动。
7.如权利要求3所述的方法,其特征在于,所述用户空间通过用户态网络协议栈将所述第一请求报文转换为第三请求报文,并发送至所述网卡驱动的步骤包括:
所述用户空间通过用户态网络协议栈查询路由表,以获取路由,并根据所述路由对所述第一请求报文进行IP地址转换;
所述用户空间通过用户态网络协议栈将进行IP地址转换后的所述第一请求报文封装为第三请求报文,并发送至所述网卡驱动。
8.一种路由器,包括网卡驱动模块及用户空间模块,其特征在于:
所述网卡驱动模块,用于接收第一请求报文,并提供给所述用户空间模块;
所述用户空间模块包括用户态网络协议栈模块及用户进程模块,所述用户态网络协议栈模块用于解析所述第一请求报文,并判断是否转发所述第一请求报文;
若不转发,所述用户态网络协议栈模块及所述用户进程模块还用于将所述第一请求报文转换为第二请求报文,并发送至所述网卡驱动模块;
若转发,所述用户态网络协议栈模块还用于将所述第一请求报文转换为第三请求报文,并发送至所述网卡驱动模块。
9.如权利要求8所述的路由器,其特征在于,所述路由器包括多个CPU,所述用户空间模块包括多个用户态网络协议栈模块,所述多个用户态网络协议栈模块与所述多个CPU之间分别一一对应,且所述用户态网络协议栈模块仅通过对应的CPU处理数据报文。
10.如权利要求9所述的路由器,其特征在于,所述用户空间模块还包括多个用户进程模块,所述多个用户态网络协议栈模块还与所述多个用户进程模块之间分别一一对应,且所述用户态网络协议栈模块仅将所述数据报文发送给对应的所述用户进程模块。
11.如权利要求9所述的路由器,其特征在于,所述用户空间模块还包括散列模块,用于接收所述网卡驱动模块提供的所述第一请求报文,并以共享内存的方式将所述第一请求报文均匀散列至所述多个用户态网络协议栈模块。
12.如权利要求8所述的路由器,其特征在于,所述网卡驱动模块以轮询的方式接收所述第一请求报文。
13.如权利要求10所述的路由器,其特征在于:
所述用户态网络协议栈模块还用于获取第一请求数据,并提供给所述用户进程模块;
所述用户进程模块用于生成与所述第一请求数据对应的第二请求数据,并提供给所述用户态网络协议栈模块;
所述用户态网络协议栈模块还用于将所述第二请求数据封装为第二请求报文,并发送至所述网卡驱动模块。
14.如权利要求10所述的路由器,其特征在于,所述用户态网络协议栈模块还用于:
查询路由表,以获取路由,并根据所述路由对所述第一请求报文进行IP地址转换;
将进行IP地址转换后的所述第一请求报文封装为第三请求报文,并发送至所述网卡驱动模块。
15.一种路由器,其特征在于,所述路由器包括存储器和处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现如权利要求1至8中任一权利要求所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810609335.1A CN110602262A (zh) | 2018-06-13 | 2018-06-13 | 路由器及其处理数据报文的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810609335.1A CN110602262A (zh) | 2018-06-13 | 2018-06-13 | 路由器及其处理数据报文的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110602262A true CN110602262A (zh) | 2019-12-20 |
Family
ID=68849189
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810609335.1A Pending CN110602262A (zh) | 2018-06-13 | 2018-06-13 | 路由器及其处理数据报文的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110602262A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112769698A (zh) * | 2021-01-06 | 2021-05-07 | 网宿科技股份有限公司 | 一种路由实现方法和装置 |
CN112953833A (zh) * | 2021-03-25 | 2021-06-11 | 全讯汇聚网络科技(北京)有限公司 | 基于网桥实现三层路由转发的方法、系统及网关设备 |
CN113259400A (zh) * | 2021-07-14 | 2021-08-13 | 南京易科腾信息技术有限公司 | 基于网络协议的网络交互系统、方法及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101867558A (zh) * | 2009-04-17 | 2010-10-20 | 深圳市永达电子股份有限公司 | 用户态网络协议栈系统及处理报文的方法 |
CN101873337A (zh) * | 2009-04-22 | 2010-10-27 | 电子科技大学 | 一种基于rt8169千兆网卡和Linux操作系统的零拷贝数据捕获技术 |
US20150089303A1 (en) * | 2013-09-26 | 2015-03-26 | International Business Machines Corporation | Fast path userspace rdma resource error detection |
CN104796337A (zh) * | 2015-04-10 | 2015-07-22 | 京信通信系统(广州)有限公司 | 一种转发报文的方法及装置 |
CN107465620A (zh) * | 2017-08-03 | 2017-12-12 | 爱普(福建)科技有限公司 | 一种通用数据路由器及其通信方法 |
-
2018
- 2018-06-13 CN CN201810609335.1A patent/CN110602262A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101867558A (zh) * | 2009-04-17 | 2010-10-20 | 深圳市永达电子股份有限公司 | 用户态网络协议栈系统及处理报文的方法 |
CN101873337A (zh) * | 2009-04-22 | 2010-10-27 | 电子科技大学 | 一种基于rt8169千兆网卡和Linux操作系统的零拷贝数据捕获技术 |
US20150089303A1 (en) * | 2013-09-26 | 2015-03-26 | International Business Machines Corporation | Fast path userspace rdma resource error detection |
CN104796337A (zh) * | 2015-04-10 | 2015-07-22 | 京信通信系统(广州)有限公司 | 一种转发报文的方法及装置 |
CN107465620A (zh) * | 2017-08-03 | 2017-12-12 | 爱普(福建)科技有限公司 | 一种通用数据路由器及其通信方法 |
Non-Patent Citations (1)
Title |
---|
王静: "协议栈并行化技术的研究与实现", 《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112769698A (zh) * | 2021-01-06 | 2021-05-07 | 网宿科技股份有限公司 | 一种路由实现方法和装置 |
CN112953833A (zh) * | 2021-03-25 | 2021-06-11 | 全讯汇聚网络科技(北京)有限公司 | 基于网桥实现三层路由转发的方法、系统及网关设备 |
CN112953833B (zh) * | 2021-03-25 | 2022-04-15 | 全讯汇聚网络科技(北京)有限公司 | 基于网桥实现三层路由转发的方法、系统及网关设备 |
CN113259400A (zh) * | 2021-07-14 | 2021-08-13 | 南京易科腾信息技术有限公司 | 基于网络协议的网络交互系统、方法及存储介质 |
CN113259400B (zh) * | 2021-07-14 | 2021-09-28 | 南京易科腾信息技术有限公司 | 基于网络协议的网络交互系统、方法及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11677851B2 (en) | Accelerated network packet processing | |
US11422839B2 (en) | Network policy implementation with multiple interfaces | |
CN110313163B (zh) | 分布式计算系统中的负载平衡 | |
Qi et al. | Assessing container network interface plugins: Functionality, performance, and scalability | |
CN110602155A (zh) | 代理服务器及其处理数据报文的方法 | |
US11907749B2 (en) | RDMA with virtual address space | |
CN115134245A (zh) | 用于云与电信网络之间的网络分组处理的技术 | |
US20160112502A1 (en) | Distributed computing based on deep packet inspection by network devices along network path to computing device | |
JP6004410B2 (ja) | サービス・スケジューリング方法および装置ならびにネットワーク・デバイス | |
CN110602154A (zh) | Web服务器及其处理数据报文的方法 | |
CN110602262A (zh) | 路由器及其处理数据报文的方法 | |
US20190042314A1 (en) | Resource allocation | |
CN113891396B (zh) | 数据包的处理方法、装置、计算机设备和存储介质 | |
CN114172852A (zh) | 分布式宽带网络网关控制分组的优先级信道 | |
EP3718269B1 (en) | Packet value based packet processing | |
CN113395212A (zh) | 网络装置及其操作方法和非暂时性计算机可读介质 | |
Perino et al. | A programmable data plane for heterogeneous NFV platforms | |
CN114697387A (zh) | 数据包传输方法、装置及存储介质 | |
WO2023071522A1 (zh) | 建立连接的方法、装置、存储介质及电子装置 | |
JP6279970B2 (ja) | プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム | |
CN116248590B (zh) | 数据转发方法、装置、设备及存储介质 | |
TWI826194B (zh) | 相容於雲原生虛擬網路層的使用者層功能(upf)封包處理方法及計算裝置 | |
Gucea et al. | Shaping the Linux kernel MPTCP implementation towards upstream acceptance | |
Iordache-Sica et al. | Seamless Hardware-Accelerated Kubernetes Networking | |
CN108599998B (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 |