发明内容
基于此,有必要针对上述技术问题,提供一种能够提高业务处理模块的性能的数据包的处理方法、装置、计算机设备和存储介质。
一种数据包的处理方法,所述方法包括:
依次接收不同的数据包,所述数据包中包括传输控制协议数据;
将接收到的各所述数据包,按照各所述数据包内的通道端标识存入各队列;
基于指针操作分别对存入各所述队列中的数据包进行解码,得到相应通信协议的目标数据;其中,不同所述队列中数据包的解码是在对应CPU核的第一线程上完成的,且在解码过程中不拷贝所述数据包;
利用局部变量将所述目标数据从所述第一线程传递至所述CPU核的第二线程,以通过所述第二线程对所述目标数据进行处理;其中,所述局部变量不加锁;
将经过处理的所述目标数据进行封装,并将封装后的目标数据进行转发。
在其中一个实施例中,所述将接收到的各所述数据包,按照各所述数据包内的通道端标识存入各队列之前,所述方法还包括:
利用DPDK开发包和NFF开发包对所述队列进行设置,并通过多队列网卡支持多个所述队列的收发操作;
其中,多个所述队列支持对所述数据包进行收发操作,多个所述队列对应多个所述CPU核。
在其中一个实施例中,所述将接收到的各所述数据包,按照各所述数据包内的通道端标识存入各队列包括:
将各所述数据包内的通道端标识除以所述队列数量,将所得的余数作为相应所述队列的队列索引;
利用所述队列索引,将各所述数据包发送到相同所述队列。
在其中一个实施例中,所述以通过所述第二线程对所述目标数据进行处理包括:
基于所述通道端标识和包检测规则之间的第一哈希映射流表生成上行路径,当首次获取所述包检测规则时,通过所述通道端标识查询所述第一哈希映射流表,以获取到所述第一哈希映射流表中的包检测规则,并将所述包检测规则进行缓存;当非首次获取所述包检测规则时,直接从缓存中获取所述包检测规则;
基于终端的IP地址和所述包检测规则之间的第二哈希映射流表生成下行路径,当首次获取所述包检测规则时,通过所述终端的IP地址查询所述第二哈希映射流表,以获取到所述第一哈希映射流表中的包检测规则,并将所述包检测规则进行缓存,当非首次获取所述包检测规则时,直接从缓存中获取所述包检测规则。
在其中一个实施例中,所述方法还包括:
根据所述包检测规则确定所述数据包的业务类型;
根据所述业务类型对所述数据包进行业务处理;所述业务处理包括ARP处理、ICMP处理、GTP处理或DN处理。
在其中一个实施例中,所述通过所述第二线程对所述目标数据进行处理包括:
当所述第二线程对所述目标数据进行处理时,基于处理函数对所述目标数据进行处理;所述处理函数包括大函数。
一种数据包的处理装置,所述装置包括:
接收模块,用于依次接收不同的数据包,所述数据包中包括传输控制协议数据;
分发模块,用于将接收到的各所述数据包,按照各所述数据包内的通道端标识存入各队列;
解码模块,用于基于指针操作分别对存入各所述队列中的数据包进行解码,得到相应通信协议的目标数据;其中,不同所述队列中数据包的解码是在对应CPU核的第一线程上完成的,且在解码过程中不拷贝所述数据包;
处理模块,用于利用局部变量将所述目标数据从所述第一线程传递至所述CPU核的第二线程,以通过所述第二线程对所述目标数据进行处理;其中,所述局部变量不加锁;
转发模块,用于将经过处理的所述目标数据进行封装,并将封装后的目标数据进行转发。
在其中一个实施例中,所述装置还包括:
设置模块,用于利用DPDK开发包和NFF开发包对所述队列进行设置,并通过多队列网卡支持多个所述队列的收发操作;其中,多个所述队列支持对所述数据包进行收发操作,多个所述队列对应多个所述CPU核。
在其中一个实施例中,所述分发模块,还用于将各所述数据包内的通道端标识除以所述队列数量,将所得的余数作为相应所述队列的队列索引;利用所述队列索引,将各所述数据包发送到相同所述队列。
在其中一个实施例中,所述处理模块,还用于基于所述通道端标识和包检测规则之间的第一哈希映射流表生成上行路径,当首次获取所述包检测规则时,通过所述通道端标识查询所述第一哈希映射流表,以获取到所述第一哈希映射流表中的包检测规则,并将所述包检测规则进行缓存;当非首次获取所述包检测规则时,直接从缓存中获取所述包检测规则;
基于终端的IP地址和所述包检测规则之间的第二哈希映射流表生成下行路径,当首次获取所述包检测规则时,通过所述终端的IP地址查询所述第二哈希映射流表,以获取到所述第一哈希映射流表中的包检测规则,并将所述包检测规则进行缓存,当非首次获取所述包检测规则时,直接从缓存中获取所述包检测规则。
在其中一个实施例中,所述处理模块,还用于根据所述包检测规则确定所述数据包的业务类型;根据所述业务类型对所述数据包进行业务处理;所述业务处理包括ARP处理、ICMP处理、GTP处理或DN处理。
在其中一个实施例中,所述处理模块,还用于当所述第二线程对所述目标数据进行处理时,基于处理函数对所述目标数据进行处理;所述处理函数包括大函数。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行上述数据包的处理方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行上述数据包的处理方法的步骤。
上述数据包的处理方法、装置、计算机设备和存储介质,依次接收不同的数据包;数据包中包括传输控制协议数据;将接收到的各数据包,按照各数据包内的通道端标识存入各队列;基于指针操作分别对存入各队列中的数据包进行解码,得到相应通信协议的目标数据;其中,不同队列中数据包的解码是在对应CPU核的第一线程上完成的,且在解码过程中不拷贝数据包;利用局部变量将目标数据从第一线程传递至CPU核的第二线程,以通过第二线程对目标数据进行处理;其中,局部变量不加锁;将经过处理的目标数据进行封装,并将封装后的目标数据进行转发。通过按照各数据包内的通道端标识存入各队列,可以实现消息的有序分发;对队列中的数据包进行指针操作可以实现数据包的零拷贝,从而提高数据包的处理速度;不同队列中数据包的处理有对应的CPU核,可以减少上下文的数据传递;使用局部变量来实现不加锁,减少因为资源竞争所带来的等待时间。因此,通过上述操作可以有效提高业务处理模块的性能。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明做进一步详细说明。
本申请提供的数据包的处理方法,可以应用于如图1所示的应用环境中。在该应用环境中,包括终端102和服务器104。
服务器104依次接收不同的数据包,数据包中包括传输控制协议数据;将接收到的各数据包,按照各数据包内的通道端标识存入各队列;基于指针操作分别对存入各队列中的数据包进行解码,得到相应通信协议的目标数据;其中,不同队列中数据包的解码是在对应CPU(central processing unit,中央处理器)核的第一线程上完成的,且在解码过程中不拷贝数据包;利用局部变量将目标数据从第一线程传递至CPU核的第二线程,以通过第二线程对目标数据进行处理;其中,局部变量不加锁;将经过处理的目标数据进行封装,并将封装后的目标数据进行转发。
其中,终端102可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。
服务器104可以是独立的物理服务器,也可以是区块链系统中的服务节点,该区块链系统中的各服务节点之间形成组成点对点(P2P,Peer To Peer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。
此外,服务器104还可以是多个物理服务器构成的服务器集群,可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
终端102与服务器104之间可以通过蓝牙、USB(Universal Serial Bus,通用串行总线)或者网络等通讯连接方式进行连接,本申请在此不做限制。
在一个实施例中,如图2所示,提供了一种数据包的处理方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
S202,依次接收不同的数据包,数据包中包括传输控制协议数据。
其中,数据包是指GPRS(General packet radio service,通用无线分组业务)隧道协议数据包,该数据包中除了封装传输控制协议数据,还可以包括用户数据报协议数据和因特网控制报文协议数据。
在一个实施例中,S202之前,该方法还包括:
服务器利用DPDK(Data Plane Development Kit,数据平面开发套件)开发包和NFF(nff-go)开发包对队列进行设置,并通过多队列网卡支持多个队列的收发操作,如图3。其中,多个队列支持对数据包进行收发操作,多个队列对应多个CPU核,其中对列包括环形队列;多队列网卡包括:intel x710、82599。此外,NFF开发包是网络功能框架,提供CPU多核的动态绑定。
在一个实施例中,服务器可以使用ethtool-l ethX来检查网卡是否支持多队列。其中,ethX指的是网卡名称,ethtool–l ethX指的是网卡ethX的查询指令。例如,当网卡名称为eth0时,服务器使用ethtool-l eth0检查网卡是否支持多队列,当得到结果大于1时,则该网卡可以支持多队列。
在一个实施例中,服务器通过NFF开发包可以对动态增加实例个数的上限进行设置。根据数据包处理线程的数量和队列的数量,选用合理的实例与队列的对应关系,例如,当设置了16个收发队列时,可以设置动态增加实例个数的上限是16,其中实例是指数据包处理线程。
S204,将接收到的各数据包,按照各数据包内的通道端标识存入各队列。
其中,通道端标识是GPRS隧道协议数据包中的重要字段,用于确定GPRS隧道协议数据的传输通道。
在一个实施例中,服务器将各数据包内的通道端标识除以队列数量,将所得的余数作为相应队列的队列索引;利用队列索引,将各数据包发送到相同队列。
在一个实施例中,基于DPDK开发包配置的各队列可以为无锁环形队列,当有两个数据包同时存入同一个队列时,可以使用CAS指令判断是否发生冲突,当有冲突发生时,则数据包存入队列失败,重新进行存入操作。其中CAS(Compare and swap,比较并交换)指令为原子操作,不会被其他线程中断,可以得到最新的入队位置。
S206,基于指针操作分别对存入各队列中的数据包进行解码,得到相应通信协议的目标数据;其中,不同队列中数据包的解码是在对应CPU核的第一线程上完成的,且在解码过程中不拷贝数据包。
在一个实施例中,各队列使用数组构成的环形队列,环形队列里的数组存储的是指向存储数据包的内存地址,环形队列中原先的指针指向存储数据包的内存地址。当收包的时候,服务器会另外申请一个缓存区,将数据包映射至用户空间,随后用指向这个缓存区的指针替换环形队列中原先的指针,使CPU核的第一线程可以直接访问缓存区里的数据包,进行解码,以此实现了零拷贝。当数据包处理完成时,释放该缓存区。
S208,利用局部变量将目标数据从第一线程传递至CPU核的第二线程,以通过第二线程对目标数据进行处理;其中,局部变量不加锁。
其中,对目标数据进行处理时,需要利用控制面的包检测规则来对目标数据进行识别,根据识别结果对应的转发规则,来确定目标数据的上行路径或下行路径。
在一个实施例中,服务器基于通道端标识和包检测规则之间的第一哈希映射流表生成上行路径,当首次获取包检测规则时,通过通道端标识查询第一哈希映射流表,以获取到第一哈希映射流表中的包检测规则,并将包检测规则进行缓存;当非首次获取包检测规则时,直接从缓存中获取包检测规则。
服务器基于终端的IP(Internet Protocol,网际互连协议)地址和包检测规则之间的第二哈希映射流表生成下行路径,当首次获取包检测规则时,通过终端的IP地址查询第二哈希映射流表,以获取到第一哈希映射流表中的包检测规则,并将包检测规则进行缓存,当非首次获取包检测规则时,直接从缓存中获取包检测规则。
在一个实施例中,服务器基于Golang(计算机编程语言)的SyncMap建立第一哈希映射流表和第二哈希映射流表。第一哈希映射流表和第二哈希映射流表的映射关系都由PFCP(Packet Forwarding Control Protocol,数据包转发控制协议)会话流程得到,其中,PFCP会话创建消息中携带通道端标识、终端的IP地址等相关信息,并且PFCP会话可以激活对应的包检测规则。
此外,第一哈希映射流表和第二哈希映射流表是异步更新,当有PFCP会话更新消息时,对第一哈希映射流表和第二哈希映射流表进行更新,并清理之前的缓存数据。
在一个实施例中,当第二线程对目标数据进行处理时,服务器基于处理函数对目标数据进行处理;处理函数包括大函数。其中,大函数指大型函数,大型函数里面包括很多参数和临时变量。
此外,处理函数使用大函数可以减少函数的调用层次,减少处理节点的个数,减少CPU间的数据交换,数据交换是指对处理流程中的上下文信息进行交互,该上下文信息包括用户识别信息、数据网络转发信息、QoS(Quality of Service,服务质量)规则、基站转发信息。
在一个实施例中,目标数据对应的包检测规则会提供一个转发操作规则,该转发操作规则会指示服务器处理已经完成匹配包检测规则的目标数据。处理包括丢弃数据包、转发数据包、缓冲数据包。
S210,将经过处理的目标数据进行封装,并将封装后的目标数据进行转发。
在一个实施例中,包检测规则中的转发操作规则会包含数据包的转发信息,转发信息包括转发目的接口、目标网络实例、是否重定向处理。服务器可以通过这些转发信息,将数据包转发到指定的路径。
这里结合图4对数据包的传输过程进行描述,具体内容包括:
网卡1收到数据包后,数据包通过N3口进入业务处理模块,在数据包完成处理后,数据包通过N6口到达网卡2,网卡2将数据包进行转发,或者,网卡2收到数据包后,数据包通过N6口进入业务处理模块,在数据包完成处理后,数据包通过N3口到达网卡1,网卡1将数据包进行转发。
上述数据包的处理方法中,依次接收不同的数据包;数据包中包括传输控制协议数据;将接收到的各数据包,按照各数据包内的通道端标识存入各队列;基于指针操作分别对存入各队列中的数据包进行解码,得到相应通信协议的目标数据;其中,不同队列中数据包的解码是在对应CPU核的第一线程上完成的,且在解码过程中不拷贝数据包;利用局部变量将目标数据从第一线程传递至CPU核的第二线程,以通过第二线程对目标数据进行处理;其中,局部变量不加锁;将经过处理的目标数据进行封装,并将封装后的目标数据进行转发。通过按照各数据包内的通道端标识存入各队列,可以实现TCP消息的有序分发;对队列中的数据包进行指针操作可以实现数据包的零拷贝,从而提高数据包的处理速度;不同队列中数据包的处理有对应的CPU核,可以减少上下文的数据传递;使用局部变量来实现不加锁,减少因为资源竞争所带来的等待时间。因此,通过上述操作可以有效提高业务处理模块的性能。
在一个实施例中,如图5所示,S208具体还包括:
S502,根据包检测规则确定数据包的业务类型。
其中,业务类型包括寻址业务、返回出错信息业务、传输业务、标识路径业务。
S504,根据业务类型对数据包进行业务处理。
其中,业务处理包括ARP(Address Resolution Protocol,地址解析协议)处理、ICMP(Internet Control Message Protocol,因特网控制报文协议)处理、GTP(GPRSTunneling Protocol,GPRS隧道协议)处理或DN(Distinguished Name,完全限定名)处理,如图6。
例如,当业务类型为寻址业务类时,服务器对数据包的目标的物理地址进行寻找,服务器将包含目标IP地址的物理地址请求信息广播到局域网络上的所有终端,并接收终端返回的消息,通过该信息可以确定目标的物理地址。
上述实施例中,通过确定数据包的业务类型,对数据包进行业务分类,能够提高业务模块的处理性能。
应该理解的是,虽然图2、5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、5中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图7所示,提供了一种数据包的处理装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:接收模块702、分发模块704、解码模块706、处理模块708和转发模块710,其中:
接收模块702,用于依次接收不同的数据包,数据包中包括传输控制协议数据;
分发模块704,用于将接收到的各数据包,按照各数据包内的通道端标识存入各队列;
解码模块706,用于基于指针操作分别对存入各队列中的数据包进行解码,得到相应通信协议的目标数据;其中,不同队列中数据包的解码是在对应CPU核的第一线程上完成的,且在解码过程中不拷贝数据包;
处理模块708,用于利用局部变量将目标数据从第一线程传递至CPU核的第二线程,以通过第二线程对目标数据进行处理;其中,局部变量不加锁;
转发模块710,用于将经过处理的目标数据进行封装,并将封装后的目标数据进行转发。
上述实施例中,依次接收不同的数据包;数据包中包括传输控制协议数据;将接收到的各数据包,按照各数据包内的通道端标识存入各队列;基于指针操作分别对存入各队列中的数据包进行解码,得到相应通信协议的目标数据;其中,不同队列中数据包的解码是在对应CPU核的第一线程上完成的,且在解码过程中不拷贝数据包;利用局部变量将目标数据从第一线程传递至CPU核的第二线程,以通过第二线程对目标数据进行处理;其中,局部变量不加锁;将经过处理的目标数据进行封装,并将封装后的目标数据进行转发。通过按照各数据包内的通道端标识存入各队列,可以实现消息的有序分发;对队列中的数据包进行指针操作可以实现数据包的零拷贝,从而提高数据包的处理速度;不同队列中数据包的处理有对应的CPU核,可以减少上下文的数据传递;使用局部变量来实现不加锁,减少因为资源竞争所带来的等待时间。因此,通过上述操作可以有效提高业务处理模块的性能。
在一个实施例中,如图8,装置还包括:
设置模块712,用于利用DPDK开发包和NFF开发包对队列进行设置,并通过多队列网卡支持多个队列的收发操作;其中,多个队列支持对数据包进行收发操作,多个队列对应多个CPU核。
在一个实施例中,分发模块704,还用于将各数据包内的通道端标识除以队列数量,将所得的余数作为相应队列的队列索引;利用队列索引,将各数据包发送到相同队列。
在一个实施例中,处理模块708,还用于基于通道端标识和包检测规则之间的第一哈希映射流表生成上行路径,当首次获取包检测规则时,通过通道端标识查询第一哈希映射流表,以获取到第一哈希映射流表中的包检测规则,并将包检测规则进行缓存;当非首次获取包检测规则时,直接从缓存中获取包检测规则;
基于终端的IP地址和包检测规则之间的第二哈希映射流表生成下行路径,当首次获取包检测规则时,通过终端的IP地址查询第二哈希映射流表,以获取到第一哈希映射流表中的包检测规则,并将包检测规则进行缓存,当非首次获取包检测规则时,直接从缓存中获取包检测规则。
在一个实施例中,处理模块708,还用于根据包检测规则确定数据包的业务类型;根据业务类型对数据包进行业务处理;业务处理包括ARP处理、ICMP处理、GTP处理或DN处理。
在一个实施例中,处理模块708,还用于当第二线程对目标数据进行处理时,基于处理函数对目标数据进行处理;处理函数包括大函数。
关于数据包的处理装置的具体限定可以参见上文中对于数据包的处理方法的限定,在此不再赘述。上述数据包的处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储目标数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据包的处理方法。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。