CN113783800B - 数据包处理方法、装置、计算机设备及可读存储介质 - Google Patents

数据包处理方法、装置、计算机设备及可读存储介质 Download PDF

Info

Publication number
CN113783800B
CN113783800B CN202111323397.4A CN202111323397A CN113783800B CN 113783800 B CN113783800 B CN 113783800B CN 202111323397 A CN202111323397 A CN 202111323397A CN 113783800 B CN113783800 B CN 113783800B
Authority
CN
China
Prior art keywords
storage
address
data packet
sequence number
output
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
Application number
CN202111323397.4A
Other languages
English (en)
Other versions
CN113783800A (zh
Inventor
王云翔
吴凤雏
朱哲科
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hundsun Technologies Inc
Original Assignee
Hundsun Technologies Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hundsun Technologies Inc filed Critical Hundsun Technologies Inc
Priority to CN202111323397.4A priority Critical patent/CN113783800B/zh
Publication of CN113783800A publication Critical patent/CN113783800A/zh
Application granted granted Critical
Publication of CN113783800B publication Critical patent/CN113783800B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9057Arrangements for supporting packet reassembly or resequencing

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请提供了一种数据包处理方法、装置、计算机设备及可读存储介质,该方法包括:获取当前接收到的数据包的序列号以及有效载荷长度;根据预期序列号以及所述接收到的数据包的序列号,确定是否输出所述接收到的数据包;若确定不输出所述接收到的数据包,则根据存储器的存储容量、所述接收到的数据包的序列号以及有效载荷长度,将所述接收到的数据包存储至所述存储器中的目标存储段中;若确定输出所述接收到的数据包,则输出所述接收到的数据包,并根据所述接收到的数据包的序列号和有效载荷长度更新所述预期序列号。该方法无需增加额外的乱序参数表即可实现数据包的乱序重组,避免了处理时延的发生以及存储资源的占用。

Description

数据包处理方法、装置、计算机设备及可读存储介质
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种数据包处理方法、装置、计算机设备及可读存储介质。
背景技术
现场可编程逻辑门阵列(Field Programmable Gate Array,简称FPGA)作为一种可编程的器件,可以通过编程实现各种功能。例如,FPGA可以代替网卡实现以太网通信的功能。又例如,FPGA可以通过对网络数据的编辑和处理实现更丰富的功能。在以太网通信中,很多数据是通过传输控制协议(Transmission Control Protocol,简称TCP)进行传输,TCP数据包(以下简称数据包)是有序的,但是由于网络环境因素导致的丢包、重传等,会使得接收到数据包的顺序发生错乱,或者收到重复的数据包或者重叠的数据包。因此,当FPGA实现涉及数据包处理的功能时,就需要FPGA在进行后续数据编辑和处理之前,将收到的乱序数据包重组为正常顺序数据包。
现有技术中,FPGA在进行乱序重组时,会把乱序的数据包存储在FPGA的内部随机存取存储器(Random Access Memory,简称RAM)中,同时,利用一个额外的乱序参数表来决定读取顺序。其中,乱序参数表中记录了每个乱序数据包的序列号、长度、数据包在RAM中的地址映射等信息。乱序参数表通常可以使用链表、哈希表或内容寻址存储器(ContentAddressable Memory,简称CAM)等形式。
但是,使用现有技术的方法,需要依赖额外的乱序参数表进行数据包重组,而对乱序参数表的访问会增加的额外的处理时延,同时,乱序参数表还会占用较大的存储资源。
发明内容
本申请的目的在于,针对上述现有技术中的不足,提供一种数据包处理方法、装置、计算机设备及可读存储介质,以解决现有技术中使用乱序参数表所造成的处理时延过长以及占用较大资源的问题。
为实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请提供一种数据包处理方法,包括:
获取当前接收到的数据包的序列号以及有效载荷长度;
根据预期序列号以及所述接收到的数据包的序列号,确定是否输出所述接收到的数据包,其中,所述预期序列号用于指示当前待输出的数据包的序列号;
若确定不输出所述接收到的数据包,则根据存储器的存储容量、所述接收到的数据包的序列号以及有效载荷长度,将所述接收到的数据包存储至所述存储器中的目标存储段中,并将所述目标存储段中每个存储地址的存储标记更新为已存储,其中,所述目标存储段的存储地址的数量为所述有效载荷长度;
若确定输出所述接收到的数据包,则输出所述接收到的数据包,并根据所述接收到的数据包的序列号和有效载荷长度更新所述预期序列号,得到新的所述预期序列号。
在一种可能的实现方式中,所述根据预期序列号以及所述接收到的数据包的序列号,确定是否输出所述接收到的数据包,包括:
确定所述预期序列号与所述接收到的数据包的序列号的实际差值;
若所述实际差值等于零,则确定输出所述接收到的数据包;
若所述实际差值小于零,则确定不输出所述接收到的数据包。
在一种可能的实现方式中,所述方法还包括:
若所述实际差值大于零,且所述实际差值小于所述接收到的数据包的有效载荷长度,则输出所述接收到的数据包中的未输出数据,并且,将所述预期序列号更新为所述接收到的数据包的序列号与所述有效载荷长度之和,得到新的所述预期序列号。
在一种可能的实现方式中,所述根据存储器的存储容量、所述接收到的数据包的序列号以及有效载荷长度,将所述接收到的数据包存储至所述存储器中的目标存储段中,包括:
确定所述接收到的数据包的序列号与所述存储器的存储容量的取模结果,得到所述接收到的数据包在所述存储器中的目标存储起始地址;
将所述接收到的数据包存储至所述存储器中的以所述目标存储起始地址为起始的所述目标存储段中。
在一种可能的实现方式中,所述方法还包括:
根据所述预期序列号以及所述存储器的存储容量,确定待输出起始地址;
根据所述待输出起始地址的存储标记,确定是否输出数据;
若是,则读取并输出以所述待输出起始地址为起始且存储标记均为已存储的连续地址段内的数据,并且,将所述连续地址段内各存储地址的存储标记更新为未存储,并且,计算所述预期序列号与所述连续地址段的长度之和,得到新的所述预期序列号。
在一种可能的实现方式中,所述根据所述待输出起始地址的存储标记,确定是否输出数据,包括:
若所述待输出起始地址的存储标记为已存储,则确定输出数据。
在一种可能的实现方式中,所述读取并输出以所述待输出起始地址为起始且存储标记均为已存储的连续地址段内的数据,并且,将所述连续地址段内各存储地址的存储标记更新为未存储,包括:
按照预设位宽读取可选地址段内的数据,所述可选地址段的长度为所述预设位宽的倍数,所述可选地址段包含所述连续地址段;
将所述存储器中所述可选地址段内各存储地址的存储标记更新为未存储;
根据读取到的所述可选地址段内各存储地址的存储标记,从所述可选地址段中筛选出所述连续地址段,并输出所述连续地址段内的数据。
在一种可能的实现方式中,所述根据读取到的所述可选地址段内各存储地址的存储标记,从所述可选地址段中筛选出所述连续地址段,包括:
以所述待输出起始地址为起始,顺序遍历所述可选地址段,直至遍历到的当前地址的存储标记为未存储;
将所述待输出起始地址与所述当前地址的前一地址所组成的地址段作为所述连续地址段。
在一种可能的实现方式中,所述将所述存储器中所述可选地址段内各存储地址的存储标记更新为未存储之后,还包括:
根据读取到的所述可选地址段内各存储地址的存储标记,确定所述可选地址段内的待回写地址;
将所述待回写地址的数据写入所述存储器中的所述待回写地址中。
在一种可能的实现方式中,所述根据读取到的所述可选地址段内各存储地址的存储标记,确定所述可选地址段内的待回写地址,包括:
若所述可选地址段中存在存储标记为未存储的存储地址,且所述存储标记为未存储的存储地址之后的存储地址的存储标记为已存储,则将所述存储标记为未存储的存储地址之后的存储地址作为所述待回写地址。
第二方面,本申请提供一种数据包处理装置,包括:
获取模块,用于获取当前接收到的数据包的序列号以及有效载荷长度;
确定模块,用于根据预期序列号以及所述接收到的数据包的序列号,确定是否输出所述接收到的数据包,其中,所述预期序列号用于指示当前待输出的数据包的序列号;
保存模块,用于在确定不输出所述接收到的数据包时,根据存储器的存储容量、所述接收到的数据包的序列号以及有效载荷长度,将所述接收到的数据包存储至所述存储器中的目标存储段中,并将所述目标存储段中每个存储地址的存储标记更新为已存储,其中,所述目标存储段的存储地址的数量为所述有效载荷长度;
传输模块,用于在确定输出所述接收到的数据包,则输出所述接收到的数据包,并根据所述接收到的数据包的序列号和有效载荷长度更新所述预期序列号,得到新的所述预期序列号。
在一种可能的实现方式中,所述确定模块具体用于:
确定所述预期序列号与所述接收到的数据包的序列号的实际差值;
若所述实际差值等于零,则确定输出所述接收到的数据包;
若所述实际差值小于零,则确定不输出所述接收到的数据包。
在一种可能的实现方式中,所述传输模块还用于:
若所述实际差值大于零,且所述实际差值小于所述接收到的数据包的有效载荷长度,则输出所述接收到的数据包中的未输出数据,并且,将所述预期序列号更新为所述接收到的数据包的序列号与所述有效载荷长度之和,得到新的所述预期序列号。
在一种可能的实现方式中,所述保存模块具体用于:
确定所述接收到的数据包的序列号与所述存储器的存储容量的取模结果,得到所述接收到的数据包在所述存储器中的目标存储起始地址;
将所述接收到的数据包存储至所述存储器中的以所述目标存储起始地址为起始的所述目标存储段中。
在一种可能的实现方式中,所述确定模块还用于:
根据所述预期序列号以及所述存储器的存储容量,确定待输出起始地址;
根据所述待输出起始地址的存储标记,确定是否输出数据;
若是,则读取并输出以所述待输出起始地址为起始且存储标记均为已存储的连续地址段内的数据,并且,将所述连续地址段内各存储地址的存储标记更新为未存储,并且,计算所述预期序列号与所述连续地址段的长度之和,得到新的所述预期序列号。
在一种可能的实现方式中,所述确定模块具体用于:
若所述待输出起始地址的存储标记为已存储,则确定输出数据。
在一种可能的实现方式中,所述确定模块具体用于:
按照预设位宽读取可选地址段内的数据,所述可选地址段的长度为所述预设位宽的倍数,所述可选地址段包含所述连续地址段;
将所述存储器中所述可选地址段内各存储地址的存储标记更新为未存储;
根据读取到的所述可选地址段内各存储地址的存储标记,从所述可选地址段中筛选出所述连续地址段,并输出所述连续地址段内的数据。
在一种可能的实现方式中,所述确定模块具体用于:
以所述待输出起始地址为起始,顺序遍历所述可选地址段,直至遍历到的当前地址的存储标记为未存储;
将所述待输出起始地址与所述当前地址的前一地址所组成的地址段作为所述连续地址段。
在一种可能的实现方式中,所述确定模块具体用于:
根据读取到的所述可选地址段内各存储地址的存储标记,确定所述可选地址段内的待回写地址;
将所述待回写地址的数据写入所述存储器中的所述待回写地址中。
在一种可能的实现方式中,所述确定模块具体用于:
若所述可选地址段中存在存储标记为未存储的存储地址,且所述存储标记为未存储的存储地址之后的存储地址的存储标记为已存储,则将所述存储标记为未存储的存储地址之后的存储地址作为所述待回写地址。
第三方面,本申请提供一种计算机设备,包括:处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器执行所述机器可读指令,以执行时执行如前述第一方面所述的数据包处理方法的步骤。
第四方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如前述第一方面所述的数据包处理方法的步骤。
本申请的有益效果包括:
基于数据包的序列号和有效载荷的固有关系,可以得到待输出的预期序列号。当接收到一个数据包之后,基于该预期序列号与接收到的数据包的序列号的比对,可以识别出是否输出该数据包,如果该数据包并不是预期需要输出的数据包,则可以利用存储器的容量以及接收到的数据包的序列号以及有效载荷长度来确定数据包在存储器中的目标存储段,以使得在顺序输出数据包时能够快速准确地读取并输出顺序的数据包。通过上述过程,无需增加额外的乱序参数表即可实现数据包的乱序重组,避免了处理时延的发生以及存储资源的占用,同时,即使在数据流存在多个TCP乱序空洞时,利用上述过程也可以实现数据包的乱序重组。
另外,利用数据包的序列号对存储器的容量取模得到数据包在RAM中的目标存储起始地址,并依次将数据包的有效载荷数据存储至目标存储起始地址开始的连续地址中,并且将这些地址的存储标记更新为已存储,基于此,可以使得后续从RAM读取数据包可以快速准确地完成数据读取。
另外,通过对预期序列号与RAM的存储容量的运算可以获知当前需要输出的数据包在RAM中的存储起始地址,根据该存储起始地址的存储标记可以获知当前需要输出的数据包是否已经存储在RAM中,若是,则可以从RAM中读取当前需要输出的数据包并进行输出,从而实现数据包的顺序输出。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为TCP乱序空洞的一种示例图;
图2为FPGA进行数据包乱序重组的一种场景示意图;
图3为FPGA进行数据包乱序重组的另一种场景示意图;
图4为FPGA的模块架构示例图;
图5为本申请实施例提供的数据包处理方法的流程示意图;
图6为存储的示意图;
图7为本申请实施例提供的数据包处理方法的另一流程示意图;
图8为本申请实施例提供的数据包处理方法的又一流程示意图;
图9为按照预设位宽读取数据的示例图;
图10为本申请提供的一种数据包处理装置的模块结构图;
图11为本申请实施例提供的计算机设备110的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。 应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。 此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了使得本领域技术人员能够使用本申请内容,结合特定应用场景“FPGA的TCP数据包乱序重组”,给出以下实施方式。对于本领域技术人员来说,在不脱离本申请的精神和范围的情况下,可以将这里定义的一般原理应用于其他实施例和应用场景。虽然本申请主要围绕FPGA的TCP数据包乱序重组进行描述,但是应该理解,这仅是一个示例性实施例。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
现有的FPGA在进行TCP数据包乱序重组时,需要依赖额外的乱序参数表进行数据包重组,而对乱序参数表的访问会增加的额外的处理时延,同时,乱序参数表还会占用较大的存储资源。
另外,使用现有的TCP数据包乱序重组方法,可能仅能支持一个TCP乱序空洞。其中,TCP乱序空洞是指TCP数据流中连续的缺失部分。图1为TCP乱序空洞的一种示例图,如图所示,FPGA当前已经接收到第1、2、4、8、9、12个TCP包,丢失了第3、5、6、7、10、11个TCP包,则说明当前存在三个TCP乱序空洞,分别为3、5-7和10-11。
本申请实施例基于上述问题,提出一种数据包处理方法,利用顺序的数据包的序列号之间的固有关系,可以确定是否直接输出数据包或者将数据包暂存至存储器的相应地址中,并且利用存储地址与序列号之间的关系,从相应地址读取数据包并输出,从而无需增加额外的乱序参数表即可实现数据包的乱序重组,避免了处理时延的发生以及存储资源的占用,同时,该方法还可以支持多个TCP乱序空洞。
本申请实施例可以适用于FPGA的TCP数据包乱序重组的场景中,然而,本申请并不以此为限,本申请同样可以应用于其他器件或设备,所处理的数据包也可以为TCP数据包之外的其他数据包。为便于描述,本申请以下实施例均以FPGA的TCP数据包乱序重组为例进行解释说明,另外,以下实施例中将FPGA的TCP数据包乱序重组简称为FPGA的数据包乱序重组。
以下,首先对FPGA进行数据包乱序重组的场景进行示例说明。
图2为FPGA进行数据包乱序重组的一种场景示意图,如图2所示,FPGA可以作为一个TCP端点,与前一TCP端点建立TCP连接,从前一TCP端点接收数据包,将接收到的乱序数据包重组为正常顺序的数据包,并将正常顺序的数据包发送给后续的其他模块或其他设备。
图3为FPGA进行数据包乱序重组的另一种场景示意图,如图3所示,TCP端点A和TCP端点B之间建立TCP连接并进行数据包传递。FPGA可以作为侦听设备,侦听TCP端点A和TCP端点B之间的上行数据和下行数据。在该场景下,FPGA可以不与TCP端点A和TCP端点B建立连接,而仅将接收到的乱序数据包重组为正常顺序的数据包,并将正常顺序的数据包发送给其他模块或其他设备进行后续的处理。
值得说明的是,上述图2和图3仅是一种示例,具体实施时,FPGA可以同时与多个TCP端点建立连接,或者,同时侦听多条链路的数据。
可选的,FPGA中可以设置多个模块,通过这些模块之间的相互配合以完成数据包的乱序重组。图4为FPGA的模块架构示例图,如图4所示,FPGA可以包括:预处理模块、输出模块、存储模块以及加载模块。可选的,预处理模块、输出模块、存储模块以及加载模块可以为软件模块,各模块之间可以独立并行执行。可选的,预处理模块用于接收数据包,并判断数据包需要由输出模块进行直接输出或者由存储模块存储至FPGA的RAM中。存储模块用于确定数据包在RAM中的存储位置,并将数据包存储至该存储位置。加载模块用于确认当前RAM中是否存在需要输出的数据包,并在确认存在需要输出的数据包时,从RAM中读取需要输出的数据包并发送给输出模块。输出模块用于将预处理模块判断出的需要直接输出的数据包以及加载模块从RAM中读取的数据包发送至FPGA的输出端口进行输出。
应理解,上述的模块划分仅是一种示例,以下实施例相应以上述的模块方式对本申请的技术方案进行解释说明,然而,这并非对本申请的限制,本申请还可以使用其他的模块划分方式或者不进行模块划分而由FPGA中的一个进程或模块统一实现本申请的技术方案。
图5为本申请实施例提供的数据包处理方法的流程示意图,该方法的执行主体可以为上述的FPGA,但并不以此为限。如图5所示,该方法包括:
S501、获取当前接收到的数据包的序列号以及有效载荷长度。
示例性的,预处理模块接收到来自前一TCP端点的数据包,相应的,预处理模块对数据包进行解析,从中解析出数据包的序列号以及有效载荷(payload)长度。设备或模块之间基于特定的通信协议传递数据包时,数据包的格式遵循该通信协议的规定。因此,预处理模块可以基于协议的规定解析出数据包中的序列号和有效载荷长度。
其中,上述有效载荷长度可以指数据包中有效载荷所占用的字节长度。
S502、根据预期序列号以及上述接收到的数据包的序列号,确定是否输出上述接收到的数据包,其中,该预期序列号用于指示当前待输出的数据包的序列号。
可选的,数据包的序列号和有效载荷之间具有固有的关系。例如,以TCP数据包为例,数据包的序列号关于有效载荷具有连续性。具体的,相邻的两个数据包中,后一个数据的序列号等于前一个数据包的序列号与前一个数据包的有效载荷长度之和。基于数据包的这一特点,FPGA可以在每输出一个数据包时计算出下一个待输出的数据包的序列号,即上述的预期序列号。进而,每当接收到一个数据包时,基于预期序列号以及接收到的数据包的序列号,判断出接收到的数据包是顺序数据包,需要直接输出,或者是乱序数据包,需要存储至RAM中待顺序输出。
示例性的,预处理模块在接收到首个数据包之后,直接确定该数据包需要由数据模块进行直接输出,并且,将上述预期序列号的值初始化为该首个数据包的序列号与有效载荷长度之和。同时,预处理模块可以将直接输出标志direct_output_flag置为1,表示需要直接输出当前的数据包。值得说明的是,FPGA中的各模块可以按照相同的时钟周期并行运行,在每个时钟周期内,各模块可以分别对包括上述direct_output_flag在内的标记进行读取或设置,以执行相应的操作。具体的,当预处理模块将直接输出标志direct_output_flag置为1之后,输出模块读取到direct_output_flag的值为1,会触发输出模块将上述首个数据包直接发送到FPGA的输出端口进行输出。
在发送完首个数据包之后,上述预期序列号具有了初始值,在此之后,每当接收到一个数据包,预处理模块均可以基于当前的预期序列号以及接收到的数据包的序列号,判断出当前接收到的数据包需要被直接输出或者被暂存至RAM中。
S503、若确定不输出上述接收到的数据包,则根据存储器的存储容量、上述接收到的数据包的序列号以及有效载荷长度,将上述接收到的数据包存储至上述存储器中的目标存储段中,并将上述目标存储段中每个存储地址的存储标记更新为已存储,其中,上述目标存储段的存储地址的数量为上述有效载荷长度。
其中,上述存储器可以指RAM,存储器的存储容量可以预先读取到。
如果确定不输出接收到的数据包,表示需要将接收到的数据包暂存至RAM中,则可以由存储模块基于存储器的存储容量以及接收到的数据包的序列号以及有效载荷长度,将接收到的数据包存储至上述目标存储段中。也即,上述目标存储段是由存储器的容量以及接收到的数据包的序列号以及有效载荷长度决定的,能够使得FPGA在顺序输出数据包时能够快速准确地读取并输出顺序的数据包。
另外,RAM中每个存储地址可以分别具有一个存储标记,存储标记的值可以为已存储或未存储,当某个存储地址存入数据时,该存储地址的存储标记更新为已存储,当某个存储地址的数据未存入数据或者数据被读取之后,该存储地址的存储标记更新为未存储。
示例性的,本申请中的一个存储地址可以包括一个字节,该一个字节包括9比特,其中的8比特为数据,1比特为存储标记。
S504、若确定输出上述接收到的数据包,则输出上述接收到的数据包,并根据上述接收到的数据包的序列号和有效载荷长度更新上述预期序列号,得到新的预期序列号。
以TCP数据包为例,可以将上述接收到的数据包的序列号与有效载荷长度之和作为新的预期序列号。
如果确定输出接收到的数据包,表示需要由输出模块对接收到的数据包进行直接输出。示例性的,预处理模块将直接输出标志direct_output_flag置为1,输出模块读取到direct_output_flag的值为1,会触发输出模块将接收到的数据包直接发送到FPGA的输出端口进行输出。
另外,当上述接收到的数据包被输出之后,变为当前已输出的数据包,将该数据包的序列号与有效载荷长度相加的结果作为新的预期序列号,即下一个输出的数据包的序列号应该为该预期序列号,当再次接收到数据包后,基于上述步骤S502的判断确定接收到的数据包是否是预期需要输出的数据包,基于此,可以实现乱序数据包的重组以及顺序发送。
本实施例中,基于数据包的序列号和有效载荷的固有关系,可以得到待输出的预期序列号。当接收到一个数据包之后,基于该预期序列号与接收到的数据包的序列号的比对,可以识别出是否输出该数据包,如果该数据包并不是预期需要输出的数据包,则可以利用存储器的容量以及接收到的数据包的序列号以及有效载荷长度来确定数据包在存储器中的目标存储段,以使得在顺序输出数据包时能够快速准确地读取并输出顺序的数据包。通过上述过程,无需增加额外的乱序参数表即可实现数据包的乱序重组,避免了处理时延的发生以及存储资源的占用,同时,即使在数据流存在多个TCP乱序空洞时,利用上述过程也可以实现数据包的乱序重组。
作为一种可选的实施方式,上述步骤S501可以包括:
确定上述预期序列号与上述接收到的数据包的序列号的实际差值;若上述实际差值等于零,则确定输出上述接收到的数据包;若上述实际差值小于零,则确定不输出所述接收到的数据包。
示例性的,假设预期序列号为e_seq,接收到的数据包的序列号为r_seq,有效载荷长度为r_len,e_seq减去r_seq的差值为diff,预处理模块可以首先将diff转换为32位有符号整数s_diff,进而可以进行如下判断。
如果s_diff等于0,则说明接收到的数据包的序列号为预期序列号,因此,接收到的数据包为当前需要输出的数据包,因此,预处理模块可以将上述的直接输出标志direct_output_flag置为1,当输出模块读取到direct_output_flag为1时,将接收到的数据包发送至FPGA的输出端口进行输出,并由输出模块更新预期序列号的值为e_seq = r_seq + r_len。
如果s_diff小于0,表明接收到的数据包的序列号在预期序列号之后,即接收到的数据包为乱序数据包,因此,确定不输出接收到的数据包,而需要将其暂存在RAM中。预处理模块可以将RAM保存标记ram_save置为1,表示需要将接收到的数据包暂存至RAM。相应的,存储模块读取到ram_save为1,可以按照前述步骤S503的过程将接收到的数据包保存至RAM的目标地址段中。
除了上述两种情况外,还可能包括如下两种情况:
第一种情况下,上述实际差值大于零,且实际差值大于或等于接收到的数据包的有效载荷长度,即,s_diff > 0,且r_len <= s_diff,在这种情况下,表示接收到的数据包的有效载荷均已经输出,即接收到的数据包为重复包,因此,可以将接收到的数据包直接丢弃。
第二种情况下,上述实际差值大于零,且所述实际差值小于所述接收到的数据包的有效载荷长度,即,s_diff > 0,且r_len > s_diff,在这种情况下,表示接收到的数据包的一部分有效载荷已经输出,而另一部分有效载荷尚未输出,且接收到的数据包为顺序包,因此,可以直接输出接收到的书包中的未输出的部分。可选的,可以输出接收到的数据包中的未输出数据,并且,将上述预期序列号更新为上述接收到的数据包的序列号与有效载荷长度之和,得到新的预期序列号。
示例性的,预处理模块可以将直接输出标志direct_output_flag置为1,并且将部分输出标记direct_output_part置为1,表示需要将接收到的数据包中的未输出部分进行输出,输出模块读取到direct_output_flag为1,且direct_output_part为1时,将接收到的数据包中的未输出部分输出,并由输出模块更新预期序列号的值为e_seq = r_seq + r_len。
作为一种可选的实施方式,上述步骤S503包括:
确定上述接收到的数据包的序列号与上述存储器的存储容量的取模结果,得到上述接收到的数据包在上述存储器中的目标存储起始地址;将上述接收到的数据包存储至上述存储器中的以所述目标存储起始地址为起始的上述目标存储段中。
示例性的,假设接收到的数据包的序列号为r_seq,有效载荷长度为r_len,存储器的存储容量为M,上述目标存储起始地址为s_index。存储模块在读取到上述ram_save为1时,首先计算r_seq对M的取模结果,得到s_index,具体的,s_index = r_req % M。当计算出s_index之后,将r_len长度的有效载荷数据依次存储至地址s_index至地址s_index+r_len的连续地址中,并且,将地址s_index至地址s_index+r_len的存储标记更新为已存储。
例如,假设M=1024,e_seq = 4108, s_seq = 4121,s_len = 10,则s_index = % M= 25,即数据包在RAM中的目标存储起始地址为25,并且,存储的地址长度为10。图6为存储的示意图,如图6所示,数据包在RAM中的存储地址阴影部分,即为25至34的地址。
本实施例中,利用数据包的序列号对存储器的容量取模得到数据包在RAM中的目标存储起始地址,并依次将数据包的有效载荷数据存储至目标存储起始地址开始的连续地址中,并且将这些地址的存储标记更新为已存储,基于此,可以使得后续从RAM读取数据包可以快速准确地完成数据读取。
上述实施例说明了在接收到一个数据包后,基于对序列号的判断以确定直接输出或者暂存数据包的过程,与上述的处理过程并列的,FPGA还可以实时监测e_seq以确定RAM中是否存在需要顺序输出的数据包,以使得RAM中暂存的数据包可以被顺序输出。以下这一过程进行详细说明。
图7为本申请实施例提供的数据包处理方法的另一流程示意图,如图7所示,上述方法还包括:
S701、根据上述预期序列号以及所述存储器的存储容量,确定待输出起始地址。
值得说明的是,本实施例可以是与前述的实施例并行执行。示例性的,由加载模块在每个时钟周期均执行本实施例的过程,以使得RAM中的数据包可以被顺序输出。
如前文所述的,存储模块在存储数据包时,可以将数据包的序列号与存储器的存储容量取模得到数据包在RAM中的目标存储起始地址,因此,对于每个存储在RAM中的数据包,其存储起始地址都是由序列号和存储器的存储容量决定的。基于此,在本步骤中,加载模块基于预期序列号以及存储器的存储容量,可以得到当前应该输出的数据包在RAM中的待输出起始地址。
具体的,将预期序列号与上述存储容量取模,所得到的值即为当前应该输出的数据包在RAM中的待输出起始地址。
预期序列号表示了当前应该输出的数据包的序列号,由于数据包在存储至RAM时均是基于序列号与RAM的存储容量运算得到存储起始地址的,因此,对于当前需要输出的数据包来说,可以利用其序列号,即预期序列号,与RAM的存储容量运算得到其在RAM中的存储起始地址,即上述的待输出起始地址。
S702、根据上述待输出起始地址的存储标记,确定是否输出数据。
一种情况下,如果上述待输出起始地址的存储标记为已存储,则可以确定输出数据。
具体的,如果上述待输出起始地址的存储标记为已存储,则说明当前待输出的数据包已经保存在RAM中,因此,可以通过下述步骤S703进行输出。
另一种情况下,如果上述待输出起始地址的存储标记为未存储,则不做处理。
具体的,如果上述待输出起始地址的存储标记为未存储,则说明当前待输出的数据包还未保存至RAM中,需要继续等待至下个时钟周期中,根据新的预期序列号重新进行计算。
S703、若是,则读取并输出以上述待输出起始地址为起始且存储标记均为已存储的连续地址段内的数据,并且,将该连续地址段内各存储地址的存储标记更新为未存储,并且,计算上述预期序列号与该连续地址段的长度之和,得到新的预期序列号。
示例性的,加载模块从上述待输出起始地址开始,顺序读取后续地址中的数据,直至某个地址的存储标记为未存储,则将该地址的前一地址与待输出起始地址之间的地址段作为连续地址段,将连续地址段内各存储地址的存储标记更新为未存储,其中,将连续地址段内各存储地址的存储标记更新为未存储,能够使得存储器被循环使用。加载模块读取到上述连续地址段的数据之后,将RAM输出标记ram_output_flag置为1,表示需要将RAM中的数据包输出。当输出模块读取到ram_output_flag为1时,相应将从RAM读取出的上述连续地址段的数据发送到FPGA的输出端口进行输出。
本实施例中,通过对预期序列号与RAM的存储容量的运算可以获知当前需要输出的数据包在RAM中的存储起始地址,根据该存储起始地址的存储标记可以获知当前需要输出的数据包是否已经存储在RAM中,若是,则可以从RAM中读取当前需要输出的数据包并进行输出,从而实现数据包的顺序输出。
图8为本申请实施例提供的数据包处理方法的又一流程示意图,如图8所示,作为一种可选的实施方式,上述步骤S703的一种可选方式包括:
S801、按照预设位宽读取可选地址段内的数据,该可选地址段的长度为所述预设位宽的倍数,该可选地址段包含上述连续地址段。
在具体实施过程中,在从RAM中读取数据包时,可能并非是逐个数据单独读取的,而是按照一定的位宽批量读取的。例如,FPGA的位宽可以设置为4个字节,在这种情况下,加载模块每次会读取4个地址的数据。
按照预设位宽读取到的数据,可能仅包括上述连续地址段的数据,也可能包括上述连续地址段之外的数据。
S802、将上述存储器中上述可选地址段内各存储地址的存储标记更新为未存储。
由于RAM需要循环使用,因此,需要在RAM中数据读取之后对读取数据的地址进行清空。如果本申请的技术方案应用在CPU等设备上,则其操作方法是非常清晰而简单的。例如,CPU可以对某地址先执行读取操作,再执行清空操作,然后再读取下一个地址的数据。而对于FPGA来说,在不翻倍运行频率的情况下,无法进行上述CPU的操作,否则就无法实现流水化处理。而为了实现流水化的处理,就需要在读取数据的同时将数据对应的标志位清零,即,将数据所在地址的存储标记更新为未存储。
S803、根据读取到的上述可选地址段内各存储地址的存储标记,从上述可选地址段中筛选出上述连续地址段,并输出上述连续地址段内的数据。
一种情况下,如果按照预设位宽读取到的数据仅包括上述连续地址段的数据,则可以由输出模块直接进行输出。
另一种情况下,按照预设位宽读取到的数据,可能包括上述连续地址段之外的数据,则可以按照下述过程进行处理。
可选的,以上述待输出起始地址为起始,顺序遍历上述可选地址段,直至遍历到的当前地址的存储标记为未存储;将上述待输出起始地址与上述当前地址的前一地址所组成的地址段作为上述连续地址段。
利用存储标记,能够从可选地址段中筛选出连续地址段的数据并输出,从而可以避免输出当前需要输出的数据包之外的数据。
如上所述的,为了实现流水化处理,FPGA需要在读取数据的同时将数据所在地址的存储标记更新为未存储,然而,FPGA可能是按照预设的位宽批量读取数据的,也就是说,某次读取的数据可能包括上述连续地址段之外的数据,即包括了不需要输出的数据,在这种情况下,可能会出现某些不需要输出的数据所在地址的存储标记被错误地更新,而FPGA在一个时钟周期内无法获知是否存在这种错误,这可能造成后续的数据读取错误。
例如,图9为按照预设位宽读取数据的示例图,如图9所示,RAM中的数据存在一个空洞33-34,当读取28-31这段数据时可以正常更新存储标记,但是,当读取32-35这段数据并更新存储标记时,会将35的数据读取出来并将存储标记也更新为未存储,而35的数据此时是不应该输出的,这就导致数据丢失以及后续的数据读取错误。
为了解决这一问题,本申请提出一种回写机制,通过在当前周期的后续周期判断出被错误更新了存储标记的地址,并对这些地址的存储数据以及存储标记进行回写,使得这些地址的存储数据以及存储标记可以被恢复,从而避免出现数据读取错误。具体的方案如下。
可选的,在上述步骤S802之后,还包括:
根据读取到的上述可选地址段内各存储地址的存储标记,确定上述可选地址段内的待回写地址;将该待回写地址的数据写入存储器中的该待回写地址中。并且,还可以将该待回写地址的存储标记更新为已存储。
可选的,本实施例可以在上述步骤S802执行时的时钟周期之后的目标时钟周期中执行,该目标时钟周期例如可以是之后步骤S802执行时的时钟周期之后的第二个时钟周期。在该目标时钟周中,FPGA可以通过本实施例的处理过程将原本被错误更新的存储标记以及数据进行回写。
可选的,若上述可选地址段中存在存储标记为未存储的存储地址,且该存储标记为未存储的存储地址之后的存储地址的存储标记为已存储,则将所述存储标记为未存储的存储地址之后的存储地址作为所述待回写地址。
应理解,本实施例中进行判断的数据是指从前述存储地址中读取出来的数据,这些数据对应的存储标记未被更新,因此,可以用其中的存储标记进行判断。
具体的,若上述可选地址段中存在存储标记为未存储的存储地址,且该存储标记为未存储的存储地址之后的存储地址的存储标记为已存储,则说明上述可选地址段中存在空洞,且该空洞之后的存储地址的存储标记被错误更新,因此,可以将空洞之后的地址作为待回写地址,将待回写地址的数据写入存储器中的该待回写地址中,并将存储标记更新为已存储,从而使得被错误更新了数据的地址的数据可以被恢复。
继续参照图的示例,当按照预设位宽将32-35这段数据读取并且将存储标记修改为未存储之后,利用上述的判断处理,可以获知35上的数据为待回写地址。进而,可以将从35上读取的数据回写至35中,并将35的存储标记更新为已存储,从而实现数据的恢复。
基于同一发明构思,本申请实施例中还提供了与数据包处理方法对应的数据包处理装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述数据包处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
图10为本申请提供的一种数据包处理装置的模块结构图,如图10所示,该装置包括:
获取模块1001,用于获取当前接收到的数据包的序列号以及有效载荷长度。
确定模块1002,用于根据预期序列号以及所述接收到的数据包的序列号,确定是否输出所述接收到的数据包,其中,所述预期序列号用于指示当前待输出的数据包的序列号。
保存模块1003,用于在确定不输出所述接收到的数据包时,根据存储器的存储容量、所述接收到的数据包的序列号以及有效载荷长度,将所述接收到的数据包存储至所述存储器中的目标存储段中,并将所述目标存储段中每个存储地址的存储标记更新为已存储,其中,所述目标存储段的存储地址的数量为所述有效载荷长度。
传输模块1004,用于在确定输出所述接收到的数据包,则输出所述接收到的数据包,并根据上述接收到的数据包的序列号和有效载荷长度更新上述预期序列号,得到新的预期序列号。
作为一种可选的实施方式,确定模块1002具体用于:
确定所述预期序列号与所述接收到的数据包的序列号的实际差值;
若所述实际差值等于零,则确定输出所述接收到的数据包。
若所述实际差值小于零,则确定不输出所述接收到的数据包。
作为一种可选的实施方式,传输模块1004还用于:
若所述实际差值大于零,且所述实际差值小于所述接收到的数据包的有效载荷长度,则输出所述接收到的数据包中的未输出数据,并且,将所述预期序列号更新为所述接收到的数据包的序列号与所述有效载荷长度之和,得到新的所述预期序列号。
作为一种可选的实施方式,保存模块1003具体用于:
确定所述接收到的数据包的序列号与所述存储器的存储容量的取模结果,得到所述接收到的数据包在所述存储器中的目标存储起始地址。
将所述接收到的数据包存储至所述存储器中的以所述目标存储起始地址为起始的所述目标存储段中。
作为一种可选的实施方式,确定模块1002还用于:
根据所述预期序列号以及所述存储器的存储容量,确定待输出起始地址。
根据所述待输出起始地址的存储标记,确定是否输出数据。
若是,则读取并输出以所述待输出起始地址为起始且存储标记均为已存储的连续地址段内的数据,并且,将所述连续地址段内各存储地址的存储标记更新为未存储,并且,计算所述预期序列号与所述连续地址段的长度之和,得到新的所述预期序列号。
作为一种可选的实施方式,确定模块1002具体用于:
若所述待输出起始地址的存储标记为已存储,则确定输出数据。
作为一种可选的实施方式,确定模块1002具体用于:
按照预设位宽读取可选地址段内的数据,所述可选地址段的长度为所述预设位宽的倍数,所述可选地址段包含所述连续地址段。
将所述存储器中所述可选地址段内各存储地址的存储标记更新为未存储。
根据读取到的所述可选地址段内各存储地址的存储标记,从所述可选地址段中筛选出所述连续地址段,并输出所述连续地址段内的数据。
作为一种可选的实施方式,确定模块1002具体用于:
以所述待输出起始地址为起始,顺序遍历所述可选地址段,直至遍历到的当前地址的存储标记为未存储。
将所述待输出起始地址与所述当前地址的前一地址所组成的地址段作为所述连续地址段。
作为一种可选的实施方式,确定模块1002具体用于:
根据读取到的所述可选地址段内各存储地址的存储标记,确定所述可选地址段内的待回写地址。
将所述待回写地址的数据写入所述存储器中的所述待回写地址中。
作为一种可选的实施方式,确定模块1002具体用于:
若所述可选地址段中存在存储标记为未存储的存储地址,且所述存储标记为未存储的存储地址之后的存储地址的存储标记为已存储,则将所述存储标记为未存储的存储地址之后的存储地址作为所述待回写地址。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本申请实施例还提供了一种计算机设备110,如图11所示,为本申请实施例提供的计算机设备110的结构示意图,包括:处理器111、存储器112,可选的,还可以包括总线113。所述存储器112存储有所述处理器111可执行的机器可读指令(比如,图10中的装置中获取模块、确定模块、保存模块以及传输模块对应的执行指令等),当计算机设备110运行时,所述处理器111与所述存储器112之间通过总线113通信,所述机器可读指令被所述处理器111执行时执行前述方法实施例中的方法步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述数据包处理方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***和装置的具体工作过程,可以参考方法实施例中的对应过程,本申请中不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。

Claims (11)

1.一种数据包处理方法,其特征在于,应用于传输控制协议数据包领域,包括:
获取当前接收到的数据包的序列号以及有效载荷长度;
根据预期序列号以及所述接收到的数据包的序列号,确定是否输出所述接收到的数据包,其中,所述预期序列号用于指示当前待输出的数据包的序列号;
若确定不输出所述接收到的数据包,则根据存储器的存储容量、所述接收到的数据包的序列号以及有效载荷长度,将所述接收到的数据包存储至所述存储器中的目标存储段中,并将所述目标存储段中每个存储地址的存储标记更新为已存储,其中,所述目标存储段的存储地址的数量为所述有效载荷长度;
若确定输出所述接收到的数据包,则输出所述接收到的数据包,并根据所述接收到的数据包的序列号和有效载荷长度更新所述预期序列号,得到新的所述预期序列号;
其中,所述根据存储器的存储容量、所述接收到的数据包的序列号以及有效载荷长度,将所述接收到的数据包存储至所述存储器中的目标存储段中,包括:
确定所述接收到的数据包的序列号与所述存储器的存储容量的取模结果,得到所述接收到的数据包在所述存储器中的目标存储起始地址;
将所述接收到的数据包存储至所述存储器中的以所述目标存储起始地址为起始的所述目标存储段中;
其中,所述方法还包括:
根据所述预期序列号以及所述存储器的存储容量,确定待输出起始地址;
根据所述待输出起始地址的存储标记,确定是否输出数据;
若是,则读取并输出以所述待输出起始地址为起始且存储标记均为已存储的连续地址段内的数据,并且,将所述连续地址段内各存储地址的存储标记更新为未存储,并且,计算所述预期序列号与所述连续地址段的长度之和,得到新的所述预期序列号。
2.根据权利要求1所述的方法,其特征在于,所述根据预期序列号以及所述接收到的数据包的序列号,确定是否输出所述接收到的数据包,包括:
确定所述预期序列号与所述接收到的数据包的序列号的实际差值;
若所述实际差值等于零,则确定输出所述接收到的数据包;
若所述实际差值小于零,则确定不输出所述接收到的数据包。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若所述实际差值大于零,且所述实际差值小于所述接收到的数据包的有效载荷长度,则输出所述接收到的数据包中的未输出数据,并且,将所述预期序列号更新为所述接收到的数据包的序列号与所述有效载荷长度之和,得到新的所述预期序列号。
4.根据权利要求1所述的方法,其特征在于,所述根据所述待输出起始地址的存储标记,确定是否输出数据,包括:
若所述待输出起始地址的存储标记为已存储,则确定输出数据。
5.根据权利要求1所述的方法,其特征在于,所述读取并输出以所述待输出起始地址为起始且存储标记均为已存储的连续地址段内的数据,并且,将所述连续地址段内各存储地址的存储标记更新为未存储,包括:
按照预设位宽读取可选地址段内的数据,所述可选地址段的长度为所述预设位宽的倍数,所述可选地址段包含所述连续地址段;
将所述存储器中所述可选地址段内各存储地址的存储标记更新为未存储;
根据读取到的所述可选地址段内各存储地址的存储标记,从所述可选地址段中筛选出所述连续地址段,并输出所述连续地址段内的数据。
6.根据权利要求5所述的方法,其特征在于,所述根据读取到的所述可选地址段内各存储地址的存储标记,从所述可选地址段中筛选出所述连续地址段,包括:
以所述待输出起始地址为起始,顺序遍历所述可选地址段,直至遍历到的当前地址的存储标记为未存储;
将所述待输出起始地址与所述当前地址的前一地址所组成的地址段作为所述连续地址段。
7.根据权利要求5所述的方法,其特征在于,所述将所述存储器中所述可选地址段内各存储地址的存储标记更新为未存储之后,还包括:
根据读取到的所述可选地址段内各存储地址的存储标记,确定所述可选地址段内的待回写地址;
将所述待回写地址的数据写入所述存储器中的所述待回写地址中。
8.根据权利要求7所述的方法,其特征在于,所述根据读取到的所述可选地址段内各存储地址的存储标记,确定所述可选地址段内的待回写地址,包括:
若所述可选地址段中存在存储标记为未存储的存储地址,且所述存储标记为未存储的存储地址之后的存储地址的存储标记为已存储,则将所述存储标记为未存储的存储地址之后的存储地址作为所述待回写地址。
9.一种数据包处理装置,其特征在于,应用于传输控制协议数据包领域,包括:
获取模块,用于获取当前接收到的数据包的序列号以及有效载荷长度;
确定模块,用于根据预期序列号以及所述接收到的数据包的序列号,确定是否输出所述接收到的数据包,其中,所述预期序列号用于指示当前待输出的数据包的序列号;
保存模块,用于在确定不输出所述接收到的数据包时,根据存储器的存储容量、所述接收到的数据包的序列号以及有效载荷长度,将所述接收到的数据包存储至所述存储器中的目标存储段中,并将所述目标存储段中每个存储地址的存储标记更新为已存储,其中,所述目标存储段的存储地址的数量为所述有效载荷长度;
传输模块,用于在确定输出所述接收到的数据包,则输出所述接收到的数据包,并根据所述接收到的数据包的序列号和有效载荷长度更新所述预期序列号,得到新的所述预期序列号;
所述保存模块,具体用于确定所述接收到的数据包的序列号与所述存储器的存储容量的取模结果,得到所述接收到的数据包在所述存储器中的目标存储起始地址;将所述接收到的数据包存储至所述存储器中的以所述目标存储起始地址为起始的所述目标存储段中;
所述确定模块,还用于根据所述预期序列号以及所述存储器的存储容量,确定待输出起始地址;根据所述待输出起始地址的存储标记,确定是否输出数据;若是,则读取并输出以所述待输出起始地址为起始且存储标记均为已存储的连续地址段内的数据,并且,将所述连续地址段内各存储地址的存储标记更新为未存储,并且,计算所述预期序列号与所述连续地址段的长度之和,得到新的所述预期序列号。
10.一种计算机设备,其特征在于,包括:处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器执行所述机器可读指令,以执行时执行如权利要求1至8任一所述的数据包处理方法的步骤。
11.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至8任一所述的数据包处理方法的步骤。
CN202111323397.4A 2021-11-10 2021-11-10 数据包处理方法、装置、计算机设备及可读存储介质 Active CN113783800B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111323397.4A CN113783800B (zh) 2021-11-10 2021-11-10 数据包处理方法、装置、计算机设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111323397.4A CN113783800B (zh) 2021-11-10 2021-11-10 数据包处理方法、装置、计算机设备及可读存储介质

Publications (2)

Publication Number Publication Date
CN113783800A CN113783800A (zh) 2021-12-10
CN113783800B true CN113783800B (zh) 2022-03-01

Family

ID=78873665

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111323397.4A Active CN113783800B (zh) 2021-11-10 2021-11-10 数据包处理方法、装置、计算机设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN113783800B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114024924B (zh) * 2022-01-05 2022-04-12 北京安博通科技股份有限公司 一种tcp流重组方法、装置、电子设备及存储介质
CN114726920A (zh) * 2022-06-07 2022-07-08 恒生电子股份有限公司 Tcp数据的处理方法及装置
CN116909624B (zh) * 2023-09-12 2024-01-26 苏州浪潮智能科技有限公司 位图数据处理方法、随机存储器、电子设备和存储介质
CN117834570B (zh) * 2024-03-04 2024-06-07 山东云海国创云计算装备产业创新中心有限公司 传输***的数据包处理方法、装置、电子设备及存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9191332B2 (en) * 2012-06-29 2015-11-17 Ixia Methods, systems, and computer readable media for updating sequence and acknowledgment numbers associated with replay packets
CN103825841B (zh) * 2014-03-19 2017-04-05 武汉众合德信技术有限公司 一种以太网报文排序方法及装置
CN108021513B (zh) * 2016-11-02 2021-09-10 杭州海康威视数字技术股份有限公司 一种数据存储方法及装置
CN106789917B (zh) * 2016-11-25 2019-10-01 北京百家互联科技有限公司 数据包处理方法及装置
CN112131828B (zh) * 2020-09-18 2022-06-17 山东云海国创云计算装备产业创新中心有限公司 一种数据处理方法、装置、设备及可读存储介质
CN112565115A (zh) * 2020-11-27 2021-03-26 上海金仕达软件科技有限公司 Tcp数据的传输方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
CN113783800A (zh) 2021-12-10

Similar Documents

Publication Publication Date Title
CN113783800B (zh) 数据包处理方法、装置、计算机设备及可读存储介质
CN105794172B (zh) 网络设备和用于在网络设备中处理报文的方法
US20180191835A1 (en) System and method to process packets in a transmission control protocol session
CN112235302B (zh) 一种适用于多种总线的协议解析方法
WO2021083341A1 (zh) 一种报文处理的方法、网络节点和***
JP5039292B2 (ja) ネットワークアダプタ、通信システムおよび通信方法
US20150264142A1 (en) Communication apparatus, information processor, communication method, and computer-readable storage medium
CN111026324B (zh) 转发表项的更新方法及装置
EP3120528B1 (en) System and method for adapting to network protocol updates
US20150264141A1 (en) Communication apparatus, information processor, communication method, and computer-readable storage medium
CN112787922A (zh) 一种报文处理的方法、网络节点和***
CN106789446B (zh) 一种节点对等的集群分布式测试***和方法
US20080301537A1 (en) Packet transmission device and packet transmission method
JP5014199B2 (ja) 通信記録装置、通信データ処理方法および通信データ処理プログラム
CN107707548B (zh) Tlv报文解析方法、装置、电子设备及存储介质
US8711851B1 (en) Multi-protocol data transfers
US9210093B2 (en) Alignment circuit and receiving apparatus
CN113973091A (zh) 一种报文处理方法、网络设备以及相关设备
US9948756B1 (en) Automated pipeline generation
CN114490861A (zh) 遥测数据解析方法、装置、设备及介质
US9736080B2 (en) Determination method, device and storage medium
JP5630033B2 (ja) バッファ管理プログラム及び方法、並びにメッセージ分析装置
US8091136B2 (en) Packet transfer device, packet transfer method, and program
JP3935021B2 (ja) パケット処理方法及び装置
EP3343875B1 (en) System and method to process packets in a transmission control protocol session

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
GR01 Patent grant
GR01 Patent grant