一种传输数据包的方法和装置与流程

文档序号:22621490发布日期:2020-10-23 19:27阅读:90来源:国知局
一种传输数据包的方法和装置与流程

本发明涉及数据传输领域,尤其涉及一种传输数据包的方法和装置。



背景技术:

在linux操作系统中,i/o操作能使数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。数据传输过程中cpu开销较大,数据传输能力较低。

现有一种零拷贝传输数据的方法,可以包括以下两个步骤:

1)创建有效的用户级通信接口,即应用程序直接将数据从通信接口发送出去或接收进来,消除系统内核中不必要的拷贝过程;

2)路由器的入端到出端的直接数据传输,即接收的报文只经过一次存储器缓冲,而缓冲队列中的报文经过必要的控制信息处理后,直接传送到输出端口发送出去,实现报文快速转发。

这种现有的零拷贝传输数据的方法通常对数据包随机存储,使得存储数据包的位置分散,在传输过程中容易出现丢包的情况。

如何降低传输数据包的丢包率,是本申请所要解决的技术问题。



技术实现要素:

本申请实施例的目的是提供一种传输数据包的方法和装置,用以解决传输数据包的丢包率高的问题。

第一方面,提供了一种传输数据包的方法,包括:

根据网络层接收的至少一个数据包和内核层中的环形的预设区块队列,确定用户层中的至少一个目标区块,其中,当确定的目标区块的数量为多个时,多个所述目标区块在所述预设区块队列中相邻;

将所述至少一个数据包存储至所述至少一个目标区块中。

第二方面,一种传输数据包的装置,包括:

确定模块,根据网络层接收的至少一个数据包和内核层中的环形的预设区块队列,确定用户层中的至少一个目标区块,其中,当确定的目标区块的数量为多个时,多个所述目标区块在所述预设区块队列中相邻;

存储模块,将所述至少一个数据包存储至所述至少一个目标区块中。

第三方面,提供了一种电子设备,包括处理器、存储器及存储在该存储器上并可在该处理器上运行的计算机程序,该计算机程序被该处理器执行时实现如第一方面该的方法的步骤。

第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质上存储计算机程序,该计算机程序被处理器执行时实现如第一方面该的方法的步骤。

在本申请实施例中,根据网络层接收的至少一个数据包和内核层中的环形的预设区块队列,确定用户层中的至少一个目标区块,其中,当确定的目标区块的数量为多个时,多个所述目标区块在所述预设区块队列中相邻;将所述至少一个数据包存储至所述至少一个目标区块中。本发明实施例的方案,能保证存储数据包的目标区块符合预设区块队列,使存储的数据包的物理地址在逻辑上连续,避免逻辑地址分散导致的丢包问题,降低丢包概率。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1a是本申请的一种传输数据包的方法流程示意图之一;

图1b是本申请的一种传输数据包的逻辑结构示意图;

图1c是本申请的预设区块队列逻辑结构示意图;

图2是本申请的一种传输数据包的方法流程示意图之二;

图3是本申请的一种传输数据包的方法流程示意图之三;

图4是本申请的一种传输数据包的方法流程示意图之四;

图5是本申请的一种传输数据包的方法流程示意图之五;

图6是本申请的一种传输数据包的方法流程示意图之六;

图7是本申请的一种传输数据包的方法流程示意图之七;

图8是本申请的一种传输数据包的方法流程示意图之八;

图9是本申请的一个电子设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本申请中附图编号仅用于区分方案中的各个步骤,不用于限定各个步骤的执行顺序,具体执行顺序以说明书中描述为准。

在现有技术中,典型的零拷贝数据传输架构包含网卡层、内核层、用户层。零拷贝方案中,用户层与网卡层直接交互,避免了内核层复制传输所需的资源开销,达到了零拷贝的目标。

由于当前高速网络环境下,数据包数量多、容量大,现有的零拷贝技术对抓到的数据包采取随机存储的方法,因此使得数据包存储的位置往往是分散的,这对入侵检测的后续工作读数据包以及分析数据包造成了不便。另外,由于数据包是分散存储的,丢包的概率往往较大,用户进程最终获取的数据包有可能是不完整的。

针对现有技术中存在的问题,本申请提供一种传输数据包的方法,如图1a所示,包括以下步骤:

s11:根据网络层接收的至少一个数据包和内核层中的环形的预设区块队列,确定用户层中的至少一个目标区块,其中,当确定的目标区块的数量为多个时,多个所述目标区块在所述预设区块队列中相邻;

s12:将所述至少一个数据包存储至所述至少一个目标区块中。

参见图1b示出的结构,本申请提供的方案适用于包含有网络层z、内核层y和用户层x的传输架构。

其中,用户层x(user)中包括至少一个缓冲区n,当用户层x包括多个缓冲区n时,每个缓冲区n的大小可以不同,多个缓冲区n的物理位置可以不连续。根据多个缓冲区n的位置、大小,可以预先将用户层x中的缓冲区n划分成多个缓冲区块,较优的,每个缓冲区块的容量相等。随后,可以为每个缓冲区块建立唯一的描述符,该描述符用以表征缓冲区块。

另外,本方案中的用户层x也可以视为应用程序的一部分,用户层x中的缓冲区n可以是与应用程序关联的可存储数据的区域。

内核层y(kernel)的功能是实现网络层与用户层x之间的数据传输。该内核层y中预先设置有一个环形的预设区块队列m,该预设区块队列m也可以称为空闲队列。该预设区块队列m中包括多个能够表征用户层x中可以存放数据的缓冲区块的标识符,具体的,这些标识符可以是上述区块的描述符。上述预设区块队列m中的每一项均包括一个上述区块的描述符。较优的,在预设区块队列m中不会存在两个或两个以上的相同的区块描述符。

网络层z(networkinformationcenter,nic)中可以包含接收环(在图1b中未示出),该接收环的内容与内核层y中的预设区块队列m同步。网络层z根据接收环中的信息将从网络上接收的数据包o直接传输到用户层x的缓冲区中。

具体的,可以根据网络层z中接收的数据包o的容量确定目标区块的数量,当数据包的容量较大时,确定的目标区块的数量可以较多。在确定目标区块的数量之后,可以从预设区块队列m中选取上述数量的目标区块的描述符。当上述数量大于1时,从预设区块队列m中选取的描述符是相邻的。

如图1c所示,图中示出了预设区块队列的逻辑结构示意图。该预设区块队列中包括m1、m2、m3、m4、m5、m6、m7、m8共8个与缓冲区块对应的描述符。

假设网络层根据接收到的数据包确定目标区块的数量是1,则基于图1c示出的预设区块队列,选取的描述符可以是m1。假设网络层根据接收到的数据包确定目标区块的数量是3,则基于图1c示出的预设区块队列,选取的描述符可以是m1、m2、m3。实际上,可以根据实际情况预先在预设区块队列中设定选取描述符的起始位置。例如,将图1c中示出的虚线框所示的m1描述符所在的位置设定为选取描述符的起始位置,则随后根据确定的目标区块的数量,从虚线框所示的位置沿预设方向选取连续的描述符。在本实施例中,预设方向可以为顺时针方向。

在实际应用过程中,网络层能连续接收多个数据包。假设网络层依次接收了o1、o2、o3共三个数据包。同时,假设每个预设区块队列中的区块能存储一个数据包,则确定的目标区块的数量为三个。基于图1c示出的预设区块队列结构,选取的三个目标区块的描述符可以为m1、m2、m3。随后,网络层可以将数据包o1传输至描述符m1对应的目标区块内,将数据包o2传输至描述符m2对应的目标区块内,将数据包o3传输至描述符m3对应的目标区块内。

另外,网络层也可以先接收数据包o1,并将数据包o1传输至描述符m1对应的目标区块之后再接收数据包o2。

本申请提供的方案,在确定至少一个目标区块之后,网络层直接将数据包传输至用户层中的上述至少一个目标区块内。能保证存储数据包的目标区块符合预设区块队列,使存储的数据包的物理地址在逻辑上连续,应用程序能够基于预设区块队列确定存储数据包的物理位置,避免逻辑地址分散导致的丢包问题,降低丢包概率。相比较下,现有技术中网络层将数据包先从网络层的存储单元传输到内核的某块缓冲区,然后中断处理程序将这个内核层中的数据包推入上层的协议栈。这种传输数据的方式的缺点主要在于多次的拷贝和系统调用。本申请提供的方案中网络层根据接收环传输数据包,能根据预设区块队列中的描述符确定位于用户层的目标区块,然后直接将数据包从网络层传到用户层,数据包不再进入内核的协议栈。

较优的,执行以上步骤之前,需要先对用户层、内核层以及网络层执行初始化操作。基于上述实施例提供的方法,在执行上述步骤s11之前,如图2所示,本申请提供的方法还包括:

s101:在所述用户层建立至少一个区块,生成包含所述至少一个区块和所述至少一个区块的物理地址的映射关系的区块地址映射表;

s102:根据建立的所述至少一个区块在所述内核层中生成所述预设区块队列。

具体的,先对用户层执行初始化操作。首先,确定用户层中至少一个可以用于存储数据包的缓冲区,将至少一个缓冲区划分为多个缓冲区块(userbuffer)。缓冲区块的大小及数量可以根据实际需求预先设定。随后,初始化用户层的地址映射表,该地址映射表的大小与缓冲区块数量相关。地址映射表包括上述缓冲区块与缓冲区块的物理地址的对应关系。

在初始化用户层之后,对内核层执行初始化操作。建立环形的预设区块队列(freeq),该队列中的每一项均对应于用户层中的一个可以存储数据的缓冲区块。具体的,定义freeq为空闲链表,对freeq进行初始化,赋值free[i]=i;使得free(i)的指针指向userbuffer[i]。

本申请提供的上述方案,能实现对用户层和内核层的初始化操作,使内核层中的预设区块队列与用户层中的区块相关联。根据内核层中的预设区块队列即可获知用户层中哪些区块可以用于存放数据,以便随后网络层将数据包存储在用户层中空闲的缓冲区块中。

基于上述实施例提供的方法,较优的,如图3所示,上述步骤s102包括:

s1021:生成与所述至少一个区块一一对应的描述符,所述描述符包括与所述描述符对应的区块的块符;

s1022:在所述内核层中生成包含至少一个描述符的预设区块队列。

具体的,用户层中的每一个缓冲区块对应一个块符,将每一个块符填充到与缓冲区块对应的描述符的偏移量域中。随后,将这些与缓冲区块对应的描述符环形排列编入上述预设区块队列(freeq)中,使预设区块队列中的每一项都对应一个用户层中可以用于存储数据的缓冲区块。

本申请提供的上述方案能基于缓冲区块的块符生成与缓冲区块对应的描述符,使预设区块队列中的每一项都与用户层中的一个缓冲区块对应。

基于上述实施例提供的方法,较优的,在上述步骤s102之后,如图4所示,本申请提供的方法还包括:

s103:根据建立的所述至少一个区块在所述内核层中生成物理地址表,所述物理地址表包括每个建立的区块与所述每个建立的区块的物理地址的对应关系;

s104:根据所述预设区块队列和所述物理地址表在所述网络层中生成数据域,所述数据域包含指向所述预设区块队列的指针和所述物理地址表的地址。

具体的,在初始化内核层的过程中,还可以在内核层中建立物理地址表,该物理地址表与上述预设区块队列相关联。该物理地址表中包括缓冲区块与缓冲区块物理地址的对应关系。

本申请提供的上述方案,能在内核层中建立与预设区块队列相关联的物理地址表,该物理地址表包括预设区块队列中每个区块的物理地址,以便网络层根据预设区块队列和物理地址表确定可以用于存放数据的缓冲区块,并且确定缓冲区块的物理地址,进而传输接收到的数据。

随后,对网络层进行初始化操作。在网络层中初始化数据域,将内核层中的预设区块队列的指针和物理地址表中的地址填充到网络层中的数据域中。使网络层能根据内核层中的预设区块队列和物理地址表确定能用于存储数据的缓冲区块及区块的物理地址。

基于上述实施例提供的方法,较优的,在上述步骤s12之前,如图5所示,还包括:

s105:将所述网络层接收的至少一个数据包的大小写入所述数据域;

其中,上述步骤s12,包括:

s121:根据所述网络层的数据域,确定所述预设区块队列中的目标区块的描述符;

s122:根据所述网络层的数据域,确定所述物理地址表中的与所述目标区块的描述符对应的物理地址;

s123:根据所述网络层的数据域中的至少一个数据包的大小,将所述至少一个数据包存储至所述目标区块中。

具体的,在初始化上述用户层、内核层以及网络层之后,网络层执行捕包。待存储的数据包到达网络层之后,发出一次硬件中断,收包中断处理程序。

随后,基于网络层的数据域,确定预设区块队列中的可用的目标区块的描述符,解析该描述符得到目标区块的块号和物理地址。接着,将该目标区块的物理地址写入网络层的数据域中,基于数据包的大小对数据包进行传输。

本申请提供的方案能将网络层接收到的数据包直接传输到用户层中的缓冲区块中。在传输的过程中,网络层根据内核层中的预设区块队列和物理地址列表确定能用于存放接收到的数据包的至少一个目标区块,保证确定的目标区块能用于存放接收到的数据包,避免在传输过程中丢包或溢出等情况。

在网络层将数据包传输至用户层中的目标区块之后,用户层的应用程序可以对目标区块中存储的数据包进行解析。具体的,用户层的应用程序可以监听预设区块队列中描述符的数量,一旦预设区块队列中描述符数量变化,则表明用户层中有缓冲区块存储了新的数据。用户层的应用程序可以通过区块地址映射表中的指针找到存放数据的目标区块地址,进而对该地址的目标区块中的数据进行解析。

本申请提供的技术方案能将数据包从网络层直接传输至用户层,使用户层中的应用程序直接解析目标区块中的数据。在传输的过程中,数据包无需进入内核层,实现零拷贝。而且,本申请提供的方案能有效降低系统的负担,提高捕包的效率,避免丢包、溢出等情况。。基于上述实施例提供的方法,较优的,所述预设区块队列包括至少一个空闲的区块的描述符;

如图6所示,上述步骤s11,包括:

s111:根据所述网络层接收的至少一个数据包确定待存储的数据包的大小;

s112:根据所述待存储的数据包的大小确定目标区块的数量;

s113:根据所述预设区块队列中的所述目标区块的描述符确定每个目标区块在所述用户层的物理地址。

在本申请提供的实施例中,网络层可以预先接收多个数据包,然后将多个数据包传输到用户层中的目标区块中。上述待存储的数据包的大小可以为网络层接收的至少一个数据包的容量的总和。

较优的,预先将用户层中的缓冲区划分成大小相等的若干个缓冲区块,根据划分的缓冲区块的大小和待存储的数据包的大小确定目标区块的数量。使确定的数量的目标区块的总容量大于或等于上述待存储的数据包的大小。

从预设区块队列中取出上述数量的区块描述符,根据这些描述符确定上述数量的目标区块的物理地址,网络层根据上述目标区块的物理地址将接收的至少一个数据包传输至用户层的目标区块内。

通过本申请提供的技术方案,网络层能对多个数据包实现批量传输,确定的目标区块的数量适应于待存储的数据包,避免目标区块数量过少导致数据溢出或者目标区块数量过多造成资源浪费的情况。

基于上述实施例提供的方法,较优的,上述步骤s12,包括:

当确定的目标区块的数量为多个时,根据所述每个目标区块在所述用户层的物理地址,将所述待存储的数据包按照所述预设区块队列的顺序存储至确定的多个目标区块中。

本申请实施例中,确定的目标区块的数量为多个,网络层按照预设区块队列的顺序将数据包传输至用户层的目标区块内。具体的,假设网络层接收2个数据包,第一数据包大小为17.3m,第二数据包大小为8.2m。预设每个缓存区块的容量为10m,则根据待存储区块的大小,确定目标区块的数量为3个,依次为第一目标区块、第二目标区块和第三目区块。从预设区块队列中获取3个目标区块的描述符,根据获取的描述符确定3个目标区块的物理地址。随后,将第一数据包划分为两部分,第一部分为10m,第二部分为7.3m。将第一数据包的第一部分传输至第一目标区块内,将第一数据包的第二部分传输至第二目标区块内,将第二数据包传输至第三目标区块内,从而实现对数据包传输。

通过本申请提供的方案,能将网络层接收的数据包按照预设区块队列的顺序传输存储在用户层的目标区块内。便于应用程序可以根据预设区块队列确定读取目标区块的顺序,避免应用程序读取到多个不完整的数据包,提高应用程序读取数据包的效率。

基于上述实施例提供的方法,较优的,在上述步骤s12之后,如图7所示,还包括:

s114:将存储所述至少一个数据包的所述至少一个目标区块的物理地址写入所述用户层的区块地址映射表;

s115:应用程序根据所述用户层的区块地址映射表解析所述至少一个数据包。

本实施例中,用户层中还包括区块地址映射表,该区块地址映射表包括存储了数据包的目标区块与该目标区块的物理地址的对应关系。应用程序可以根据该区块地址映射表确定已经存储了数据包的目标区块及其物理地址,以便读取该目标区块的物理地址,执行对数据包的解析。

基于上述实施例提供的方法,较优的,在上述步骤s12之后,如图8所示,本申请提供的方法还包括:

s116:移除所述预设区块队列中的存储所述至少一个数据包的所述至少一个目标区块的描述符;

在上述步骤s115之后,还包括:

s117:在所述预设区块队列中添加存储所述至少一个数据包的至少一个目标区块的描述符。

本实施例将存储了数据包的目标区块的描述符从预设区块队列中去除,使预设区块队列中的描述符表征的缓冲区块均是未存储数据的缓冲区块。当应用程序解析了目标区块中的数据包之后,将原存储了数据包的目标区块的描述符添加回预设区块队列,使目标区块队列能继续存储网络层接收到的新的数据包。

本申请提供的方案,能在目标区块存储新的数据包之后将目标区块的描述符从预设区块队列中去除,避免目标区块中存储的数据包在应用程序解析之前被新的数据覆盖。另外,在应用程序解析目标区块中的数据之后,将目标区块的描述符添加回预设区块队列中,保证预设区块队列中一直有能够存储数据的目标区块的描述符。

为了解决现有技术中存在的上述问题,本申请还提供一种传输数据包的装置90,如图9所示,包括:

确定模块91,根据网络层接收的至少一个数据包和内核层中的环形的预设区块队列,确定用户层中的至少一个目标区块,其中,当确定的目标区块的数量为多个时,多个所述目标区块在所述预设区块队列中相邻;

存储模块92,将所述至少一个数据包存储至所述至少一个目标区块中。

在本申请实施例中,根据网络层接收的至少一个数据包和内核层中的环形的预设区块队列,确定用户层中的至少一个目标区块,其中,当确定的目标区块的数量为多个时,多个所述目标区块在所述预设区块队列中相邻;将所述至少一个数据包存储至所述至少一个目标区块中。本发明实施例的方案,能保证存储数据包的目标区块符合预设区块队列,使存储的数据包的物理地址在逻辑上连续,避免逻辑地址分散导致的丢包问题,降低丢包概率。

优选的,本发明实施例还提供一种电子设备,包括处理器,存储器,存储在存储器上并可在所述处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述一种图像处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。

本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述一种图像处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

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

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。

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