一种多级流水线电路生成TCP校验和的方法与流程

文档序号:21816383发布日期:2020-08-11 21:26阅读:179来源:国知局
一种多级流水线电路生成TCP校验和的方法与流程

本发明涉及网络通信技术领域,特别涉及一种多级流水线电路生成tcp校验和的方法。



背景技术:

在网络通信领域,发送端使用tcp协议传输数据时,需要对tcp报文的伪头部、头部和净荷数据内容进行二进制反码的校验和计算,并将校验和结果嵌入到tcp头部中。在校验和的计算过程将所有净荷数据作为二进制加法运算的一部分,并且在每个周期的计算过程中均需要将前一个周期的加法计算结果作为后一个周期加法计算的输入,从而使得校验和的计算过程存在一个反馈环路。然而,由于反馈环路的存在,从而造成无法在加法运算的组合逻辑内部添加流水线分割组合逻辑以提高电路运行频率。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的不足,提供一种多级流水线电路生成tcp校验和的方法。

为了解决上述技术问题,本发明所采用的技术方案如下:

一种多级流水线电路生成tcp校验和的方法,所述方法包括:

当接收到数据请求报文时,根据所述数据请求报文读取其对应的存储报文的第一标识码,其中,所述第一标识码为根据所述存储报文的第一tcp伪头部及头部通过多级流水线电路生成的标识码;

确定所述数据请求报文对应的第二标识码,其中,所述第二标识为根据所述数据请求报文的第二tcp伪头部及头部通过多级流水线电路生成的标识码;

基于所述第一标识码和所述第二标识码生成tcp校验和。

所述多级流水线电路生成tcp校验和的方法,其中,所述通过多级流水线电路生成的标识码的过程具体包括:

获取待处理报文的tcp伪头部及头部,并将获取到tcp伪头部及头部划等分为若干数据段,其中,所述待处理报文为存储报文或数据请求报文;

将所述若干数据段两两一组以形成为若干数据组;

分别计算每组数据组的数据和,并将计算得到的数据和两两一组以形成为若干数据组;

重复分别计算每组数据组的数据和的步骤,直至得到一数据和以得到所述tcp伪头部及头部对应的标识码。

所述多级流水线电路生成tcp校验和的方法,其中,所述多级流水线电路为五级流水线电路,每组数据组通过32比特位宽的加法器计算每组数据组的数据和。

所述多级流水线电路生成tcp校验和的方法,其中,所述基于所述第一标识码和所述第二标识码生成tcp校验和具体包括:

计算所述第二标识码和所述第一标识码的差值;

获取所述存储报文的tcp检验和反码,并根据所述差值以及所述存储报文的tcp检验和反码生成tcp校验和。

所述多级流水线电路生成tcp校验和的方法,其中,所述获取所述存储报文的tcp检验和反码,并根据所述差值以及所述存储报文的tcp检验和反码生成tcp校验和具体包括:

获取所述存储报文的tcp检验和反码,并将所述差值转换为加法和;

根据所述加法和以及所述存储报文的tcp检验和反码生成tcp校验和。

所述多级流水线电路生成tcp校验和的方法,其中,所述根据所述数据请求报文读取其对应的存储报文的第一标识码之后,所述方法还包括:

将所述第一标识码与所述存储报文的tcp校验和反码进行比较;

若所述第一标识码大于所述存储报文的tcp检验和反码,则将所述存储报文的tcp检验和反码减一并添加数值为1的扩充位,以更新所述存储报文的tcp检验和反码;

若所述第一标识码小于或等于所述存储报文的tcp检验和反码,则保持所述存储报文tcp检验和反码不变。

所述多级流水线电路生成tcp校验和的方法,其中,所述基于所述第一标识码和所述第二标识码生成tcp校验和之后,所述方法还包括:

将所述tcp校验和的反码嵌入到所述数据请求报文的tcp头部中,并将所述存储文件对应的净荷数据添加到所述数据请求报文,以更新所述数据请求报文;

发送更新后的数据请求报文。

所述多级流水线电路生成tcp校验和的方法,其中,所述方法还包括存储报文的存储过程,其中,所述存储过程具体包括:

当接收到存储报文时,提取所述存储报文的第一tcp伪头部及头部;

根据所述存储报文的第一tcp伪头部及头部计算所述存储报文的第一标识码,其中,所述第一标识码为根据所述存储报文的第一tcp伪头部及头部通过多级流水线电路生成的标识码;

存储所述第一标识码、存储报文中的校验和以及净荷数据。

一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个可编程逻辑设备配置文件,所述一个或者多个可编程逻辑设备配置文件可下载到可编程逻辑设备中生成逻辑电路,以实现如上任一所述的多级流水线电路生成tcp校验和的方法中的步骤。

一种终端设备,其包括:可编程逻辑设备、存储器及通信总线;所述存储器上存储有可下载到所述可编程逻辑设备生成逻辑电路的可编程逻辑设备配置文件;

所述通信总线实现可编程逻辑设备和存储器之间的连接通信;

所述可编程逻辑设备配置文件下载到所述可编程逻辑设备生成逻辑电路实现如上任一所述的多级流水线电路生成tcp校验和的方法中的步骤。

有益效果:与现有技术相比,本发明提供了一种多级流水线电路生成tcp校验和的方法,所述方法在接收到数据请求报文时,根据所述tcp/ip头部信息确定其对应的第二标识码;根据所述数据请求报文确定读取其对应的存储报文的第一标识码;基于所述第一标识码和第二标识码生成tcp校验和。本发明仅采用tcp伪头部和头部内容计算检验和,不将净荷数据作为校验和运算的一部分,在校验和运算中插入多级流水线电路,从而提高电路运行频率,增大系统吞吐率。

附图说明

图1为本发明提供的多级流水线电路生成tcp校验和的方法的流程图。

图2为本发明提供的多级流水线电路生成tcp校验和的方法中流程示意图。

图3为本发明提供的多级流水线电路生成tcp校验和的方法中多级流水线电路的一个实施例的结构原理图。

图4为本发明提供的终端设备的结构原理图。

具体实施方式

本发明提供一种多级流水线电路生成tcp校验和的方法,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。

本实施例提供了一种多级流水线电路生成tcp校验和的方法,该方法可以应用于电子设备,所述电子设备可以以各种形式来实现。例如,服务器、pc机、平板电脑、掌上电脑、个人数字助理(personaldigitalassistant,pda)等。另外,该方法所实现的功能可以通过电子设备中的可编程逻辑设备的内部数字逻辑电路来实现,可见,该电子设备至少包括可编程逻辑设备和存储介质。

本实施提供了一种多级流水线电路生成tcp校验和的方法,如图1和2所示,所述方法可以包括以下步骤:

s10、当接收到数据请求报文时,根据所述数据请求报文读取其对应的存储报文的第一标识码,其中,所述第一标识码为根据所述存储报文的第一tcp伪头部及头部通过多级流水线电路生成的标识码;

s20、确定所述数据请求报文对应的第二标识码,其中,所述第二标识为根据所述数据请求报文的第二tcp伪头部及头部通过多级流水线电路生成的标识码;

s30、基于所述第一标识码和所述第二标识码生成tcp校验和。

具体地,所述数据请求报文为系统接收到,用于从系统中读取数据的请求,其中,所述数据请求报文携带有待读取数据的存储地址。由此,在接收到数据请求报文时,可以解析所述数据请求报文,提取所述数据请求包括中的tcp/tp头部信息,并且可以获取到待读取数据的存储地址,根据所述存储地址从存储空间中读取待存储数据对应的存储报文中的第一标识码stcp0_hdr,存储报文中的tcp检验和字段中的tcp检验和反码~ctcp0。其中,所述存储地址为待存储数据对应的存储起始地址,所述存储起始地址可以存储于数据请求报文的描述符信息。

进一步,由于在接收到数据请求报文时,需要根据数据请求报文中的存储起始地址来获取存储报文的第一标识码stcp0_hdr,存储报文中的tcp检验和字段中的tcp检验和反码~ctcp0,从而存储空间中需要预先存储有存储报文的tcp检验和字段中的tcp检验和反码~ctcp0。由此,在本实施例的一个实现方式中,所述方法还包括存储报文的存储过程,所述存储过程具体包括:

h10、当接收到存储报文时,提取所述存储报文的第一tcp伪头部及头部;

h20、根据所述存储报文的第一tcp伪头部及头部计算所述存储报文的第一标识码,其中,所述第一标识码为根据所述存储报文的第一tcp伪头部及头部通过多级流水线电路生成的标识码;

h30、存储所述第一标识码、存储报文中的校验和以及净荷数据。

具体地,所述存储报文为系统接收到的用于向系统中存入数据的报文,其中,所述存储报文携带tcp伪头部及头部、tcp检验和字段中的tcp检验和反码以及净荷数据。在接收到存储报文后,解析接收到的存储报文,并提取所述存储报文的第一tcp伪头部及头部,并计算所述存储报文的第一tcp伪头部及头部的二进制反码加法结果,并将所述二进制反码加法结果作为所述存储报文的第一标识码,其中,所述第一标识码是通过多级流水线电路生成的。此外,在获取到存储报文的第一标识码、tcp检验和字段中的tcp检验和反码以及净荷数据后,将所述存储报文的第一标识码、存储报文的tcp检验和字段中的tcp检验和反码以及净荷数据存储于系统的存储空间内。

进一步,所述第一标识码为所述存储报文的第一tcp伪头部及头部的二进制反码加法结果,并且所述第一tcp伪头部及头部的二进制反码加法结果是通过多级流水线电路计算得到。相应的,在本实施例的一个实现方式中,所述通过多级流水线电路生成的标识码的过程具体包括:

获取待处理报文的tcp伪头部及头部,并将获取到tcp伪头部及头部划等分为若干数据段,其中,所述待处理报文为存储报文或数据请求报文;

将所述若干数据段两两一组以形成为若干数据组;

分别计算每组数据组的数据和,并将计算得到的数据和两两一组以形成为若干数据组;

重复分别计算每组数据组的数据和的步骤,直至得到一数据和以得到所述tcp伪头部及头部对应的标识码。

具体地,所述待处理报文可以为存储报文,也可以是数据请求报文。也就是说,存储报文对应的第一标识码和数据请求报文对应的第二标识码均是通过多级流水电路生成。如图3所示,所述多级流水电路包括若干级联的加法器,并且相邻两级加法器之间设置有d触发器级;每级加法器包括若干并列的加法器,并且对于相邻两级加法器中,前一级的加法器包括的加法器的数量多于后一级的加法器的数量。其中,所述加法器用于对两个数据进行加法运算,并且当加法结果需要进位时,将进位作为加数重新加到最低位上;所述触发器用于寄存加法器输出的加法结果,以分割组合逻辑。

进一步,所述tcp伪头部及头部划等分得到的若干数据段的数量根据tcp伪头部及头部的字节数以及加法器的比特位宽确定,例如,若干数据段的数量等于字节数对应的比特位宽除以加法器的比特位宽。所述tcp伪头部及头部的字节数为72个字节,每个字节占用8个比特位,所述加法器的比特位宽为32比特位宽,那么所述若干数据段的数量为=(72*8)/32=18。此外,由于每个加法器用于对两个数据段进行加法计算,在获取到若干数据段后,将所述若干数据段两两一组以得到若干数据组,从而所述每一级别的加法器中的加法器的数量等于输入该级别的加法器的数据组的数量,例如,若干数据段的数量为18,那么第一级加法器中加法器的数量为18/2=9;而在将通过9个加法器计算得到的9数据和两两分组时,可以划分得到4组,从而第二级加法器中加法器的数量为4,依次类推。当然,值得说明的,当若干数据段的数量不是2的倍数时,在两两一组后将剩余一个数据段或者数据和通过d触发器依次传递直至该数据段或数据和前的数据仅剩余一个,此时将该数据段或数据和与位于前的数据划分为一组,通过加法器进行运算。

在本实施例的一实现方式中,如图3所示,所述多级流水线电路为五级流水线电路,每组数据组通过32比特位宽的加法器计算每组数据组的数据和,五级流水线电路中的触发器为32比特位宽的d触发器,这样通过五级流水线电路,并通过d触发器切割组合逻辑,从而大大减少了流水线电路的组合逻辑层数,从而提高电路运行频率。此外,由于本实施例中采用32比特位宽的加法器,而符合tcpchecksum为16bit的规范,所述多级流水线电路的第五级加法器后设置第六级加法器,第六级加法器用于将第五级流水加法运算得到的32bit结果分拆为高低两个16bit相加,也就是说,第六级加法器中的加法器为16比特位宽的加法器,第五级加法器级与第六级加法器之间的d触发器为16比特位宽的d触发器。此外,所述加法器可以为二进制反码加法器,并且在本申请方法是在硬件中实现时,所述加法器也可以是二进制补码加法器。

举例说明:假设tcp伪头部(12个字节)内容为:0x0000_1111_2222_3333_4444_5555;tcp头部(60个字节)内容为:0x0000_1111_2222_3333_4444_5555_6666_7777_8888_9999_aaaa_bbbb_cccc_dddd_eeee_ffff_0000_1111_2222_3333_4444_5555_6666_7777_8888_9999_aaaa_bbbb_cccc_dddd;采用如图3所述的多级流水线电路进行第一标识码计算,所述计算过程具体为:

对tcp伪头部和tcp头部的划分方式得到18个数据段,第一级流水加法运算为:(从上到下依次对应,一共9组加法运算)

0x0000_1111+0x2222_3333=0x2222_4444;

0x4444_5555+0x0000_1111=0x4444_6666;

0x2222_3333+0x4444_5555=0x6666_8888;

0x6666_7777+0x8888_9999=0xeeef_1110;

0xaaaa_bbbb+0xcccc_dddd=0x7777_9999;

0xeeee_ffff+0x0000_1111=0xeeef_1110;

0x2222_3333+0x4444_5555=0x6666_8888;

0x6666_7777+0x8888_9999=0xeeef_1110;

0xaaaa_bbbb+0xcccc_dddd=0x7777_9999;

第二级流水加法运算为:(从上到下依次对应,一共4组加法运算,最后一个数据0x7777_9999不参与运算)

0x2222_4444+0x4444_6666=0x6666_aaaa;

0x6666_8888+0xeeef_1110=0x5555_9999;

0x7777_9999+0xeeef_1110=0x6666_aaaa;

0x6666_8888+0xeeef_1110=0x5555_9999;

0x7777_9999=0x7777_9999;

第三级流水加法运算为:(从上到下依次对应,一共2组加法运算,最后一个数据0x7777_9999不参与运算)

0x6666_aaaa+0x5555_9999=0xbbbc_4443;

0x6666_aaaa+0x5555_9999=0xbbbc_4443;

0x7777_9999=0x7777_9999;

第四级流水加法运算为:(从上到下依次对应,一共1组加法运算,最后一个数据0x7777_9999不参与运算)

0xbbbc_4443+0xbbbc_4443=0x7778_8887;

0x7777_9999=0x7777_9999;

第五级流水加法运算为:(从上到下依次对应,一共1组加法运算)

0x7778_8887+0x7777_9999=0xeef02220;

第六级流水加法运算将第五级流水加法运算得到的32bit结果分拆为高低两个16bit相加,得到一个16bit结果,以符合tcpchecksum为16bit的规范:0xeef0+0x2220=0x1111,以得到tcp伪头部和tcp头部相加得到的第一标识码0x1111。

进一步,在本实施例的一个实现方式中,所述根据所述数据请求报文读取其对应的存储报文的第一标识码之后,所述方法还包括:

将所述第一标识码与所述存储报文的tcp校验和反码进行比较;

若所述第一标识码大于所述存储报文的tcp检验和反码,则将所述存储报文的tcp检验和反码减一并添加数值为1的扩充位,以更新所述存储报文的tcp检验和反码;

若所述第一标识码小于或等于所述存储报文的tcp检验和反码,则保持所述存储报文tcp检验和反码不变。

具体地,当第一标识码stcp0_hdr大于tcp检验和反码~ctcp0时,说明在根据第一标识码stcp0_hdr与根据数据请求报文计算得到的第二标识码stcp0_pl通过加法计算得到校验和时产生了溢出,从而通过将所述存储报文的tcp检验和反码减一并添加数值为1的扩充位的方式。

进一步,在所述步骤s20中,所述第二标识码stcp1_hdr为根据所述数据请求报文的第二tcp伪头部及头部通过多级流水线电路生成的标识码,其中,所述第二tcp伪头部及头部的获取过程可以为:获取到数据请求报文后,解析所述数据请求报文并提取数据请求报文中的tcp/ip头部信息,最后从tcp/ip头部信息中提取第二tcp伪头部及头部。此外,所述通过多级流水线电路计算第二标识码的过程与通过多级流水线电路计算第一标识码的过程相同,并且采用的多级流水线电路也相同,具体可以参照第一标识码的生产过程,这里就不再赘述。

进一步,在所述步骤s30中,所述基于所述第一标识码和第二标识码生成tcp校验和具体包括:

s31、计算所述第二标识码和所述第一标识码的差值;

s32、获取所述存储报文的tcp检验和反码,并根据所述差值以及所述存储报文的tcp检验和反码生成tcp校验和。

具体地,所述差值为第一标识码stcp0_hdr与第二标识码stcp1_hdr,记为stcp1_hdr–stcp0_hdr。由于,在计算tcp校验和是使用的加法器,从而在获取到stcp1_hdr–stcp0_hdr后,需要将stcp1_hdr–stcp0_hdr转换为加法和。从而,在本实施例的一个实现方式中,所述获取所述存储报文的tcp检验和反码,并根据所述差值以及所述存储报文的tcp检验和反码生成tcp校验和具体包括:获取所述存储报文的tcp检验和反码,并将所述差值转换为加法和;根据所述加法和以及所述存储报文的tcp检验和反码生成tcp校验和。其中,所述将所述差值转换为加法和的方式可以为:将–stcp0_hdr转换为-stcp0_hdr转换为二进制补码stcp0_hdr_c,从而将stcp1_hdr–stcp0_hdr转换为stcp1_hdr+stcp0_hdr_c。此外,所述tcp校验和ctcp1等于所述加法和与tcp检验和反码的加法和的反码,即~ctcp1=~ctcp0+(stcp1_hdr+stcp0_hdr_c)。

进一步,在本实施例的一个实现中,在生成tcp校验和后,可以将成tcp校验和以及数据请求报文对应的存储报文的净荷数据添加到所述数据请求报文中,以使得所述数据请求报文携带需要的请求数据。相应的,所述基于所述第一标识码和所述第二标识码生成tcp校验和之后,所述方法还包括:将所述tcp校验和的反码嵌入到所述数据请求报文的tcp头部中,并将所述存储文件对应的净荷数据添加到所述数据请求报文,以更新所述数据请求报文;发送更新后的数据请求报文。

基于上述多级流水线电路生成tcp校验和的方法,本实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有可编程逻辑设备的配置文件,所述可编程逻辑设备的配置文件下载到可编程逻辑设备中以实现如上述实施例所述的多级流水线电路生成tcp校验和的方法中的步骤。

基于上述多级流水线电路生成tcp校验和的方法,本发明还提供了一种终端设备,如图4所示,其包括至少一个可编程逻辑设备20;显示屏21;以及存储器(memory)22,还可以包括通信接口(communicationsinterface)23和总线24。其中,可编程逻辑设备20、显示屏21、存储器22和通信接口23可以通过总线24完成相互间的通信。显示屏21设置为显示初始设置模式中预设的用户引导界面。通信接口23可以传输信息。可编程逻辑设备20读取存储器22中的配置文件信息实现多级流水线电路,以执行上述实施例中的方法。

此外,上述的存储器22中的配置文件可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。

存储器22作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序、可编程逻辑设备配置文件,如本公开实施例中的方法对应的程序指令或模块。可编程逻辑设备20通过读取存储在存储器22中的可编程逻辑设备配置文件生成逻辑电路,从而执行功能应用以及数据处理,即实现上述实施例中的方法。

存储器22可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序、可编程逻辑设备配置文件等;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。

可编程逻辑设备20作为执行主体,存储器可以为可编程逻辑设备自身配置的存储器,可编程逻辑设备20通过读取存储于存储器上的可编程逻辑设备配置文件,以实现上述实例中的方法。其中,所述可编程逻辑设备可以为fpga或者cpld芯片等。

此外,上述存储介质以及终端设备中的可编程逻辑设备的逻辑电路的具体过程在上述方法中已经详细说明,在这里就不再一一陈述。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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