CN1604515A - 为具有n块数据的消息产生循环冗余检验的方法和装置 - Google Patents
为具有n块数据的消息产生循环冗余检验的方法和装置 Download PDFInfo
- Publication number
- CN1604515A CN1604515A CN200410080379.8A CN200410080379A CN1604515A CN 1604515 A CN1604515 A CN 1604515A CN 200410080379 A CN200410080379 A CN 200410080379A CN 1604515 A CN1604515 A CN 1604515A
- Authority
- CN
- China
- Prior art keywords
- crc
- remainder
- parts
- engine
- data block
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/004—Arrangements for detecting or preventing errors in the information received by using forward error control
- H04L1/0041—Arrangements at the transmitter end
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/09—Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/09—Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
- H03M13/091—Parallel or block-wise CRC computation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/09—Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
- H03M13/093—CRC update after modification of the information word
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6508—Flexibility, adaptability, parametrability and configurability of the implementation
- H03M13/6516—Support of multiple code parameters, e.g. generalized Reed-Solomon decoder for a variety of generator polynomials or Galois fields
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/004—Arrangements for detecting or preventing errors in the information received by using forward error control
- H04L1/0056—Systems characterized by the type of code used
- H04L1/0061—Error detection codes
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Error Detection And Correction (AREA)
- Detection And Correction Of Errors (AREA)
- Detection And Prevention Of Errors In Transmission (AREA)
Abstract
提供了一种即时地计算部分CRC的方法,该方法无需预先计算出的表,且没有对数据块或包的大小的限制。该方法适用于固定长和可变长的数据块,在数据块被接收时计算2的幂的余数,无需预先计算它们和把它们存入表中。该方法可用于其数据块被无序接收的数据流。
Description
技术领域
一般地说,本发明涉及计算部分循环冗余检验(CRC)的方法,更具体地说,涉及对可变长数据块或包实时计算部分CRC的方法。
背景技术
可靠的数据传输通常涉及计算差错监测检验,如循环冗余检验(CRC),以支持各式各样的协议和传输介质。例如,iSCSI(因特网小型计算机系统接口)标准提供了在TCP/IP(传输控制协议/因特网协议)上交换SCSI命令和数据的机制。iSCSI定义一个PDU(协议数据单元)用于iSCSI始发者和目标之间的交换。iSCSI PDU可能不与TCP段或IP数据报(datagram)对齐,因为TCP层把往返于更上层的数据作为字节流对待。由于TCP可能在任何任意点断开字节流,所以PDU可能不与TCP段对齐,从而PDU的一些部分可能出现在TCP段内。iSCSI标准定义一个CRC32检验,以验证PDU头和数据净荷的完整性。
计算CRC余数的一个困难是PDU的一些部分可能从网络上无序地到达。这种无序分发是用于传送iSCSI PDU的底层TCP/IP协议造成的结果。产生CRC余数的传统实现依赖于被按顺序处理的数据。TCP/IP的这些行为的结果是一个iSCSI PDU的一些部分可能被包含在那些可能无序到达的不同以太网包中。当以太网帧(或类似帧)无序到达时,由硬件计算CRC通常会更加困难。该问题的部分原因是CRC算法本身,因为一个字节数据的CRC结果依赖于CRC所保护的所有先前各字节。这样,CRC计算是不相关联的。第二个因素是iSCSI PDU不在该协议的任何较低级部分内对齐。这样,可能在一个TCP段的数据部分内的任何地方出现PDU边界,因此,在较低各层中也是如此。
影响产生CRC的另一个因素是网络速度的提高。在较高速度时,有较少时间处理每包。这已造成许多途径把TCP/IP处理从主机卸载到专门化的硬件和/或其他处理器。这些途径还最大限度地减少数据在系统中的移动次数。理想地,CRC的产生应作为其他包处理要求中的一部分来完成。
在PDU的所有部分都已被接收之后计算CRC会消耗额外的存储器和总线带宽。在PDU到达时即时地(on the fly)或实时地计算CRC会更加有效和灵活。
发明内容
在本发明的一个方面,提供一种方法用于为一个具有N块数据的消息产生循环冗余检验(CRC),该方法包括如下步骤:为一个无序数据块计算部分CRC并存储结果,产生与该无序数据块关联的CRC余数乘数并存储结果,重复上述计算和产生步骤直至该消息的全部N块数据被接收为止,以及组合计算步骤和产生步骤的结果。
在本发明的另一方面,提供一种装置用于为一个具有N块数据的消息产生循环冗余检验(CRC)。该装置包含一个部件为一个无序数据块计算部分CRC并存储结果,一个部件产生与该无序数据块关联的CRC余数乘数并存储结果,以及一个部件用于组合计算的部分CRC和产生的余数乘数的结果。
在本发明的另一方面,提供一个计算机程序产品,包含一个计算机可用介质,在该介质中体现可读程序代码,该程序产品包括第一部件用于为一个无序数据块计算部分CRC并存储结果,第二部件用于产生与该无序数据块关联的CRC余数乘数并存储结果,以及第三部件用于组合第一部件和第二部件的结果。
附图说明
由下文参考附图对本发明实施例的详细描述,将会更好地理解本发明的上述以及其他目的、方面和优点,这些附图是:
图1A-1C显示可利用本发明的示例性配置方块图;
图2A示意显示有无序包的消息;
图2B示意显示与TCP/IP包有关的iSCSI PDU实施例;
图3是使用本发明的一个实施例的示意流程图;
图4是本发明一个实施例的流程图;以及
图5是使用本发明的一个实施例的流程图。
具体实施方式
本发明的目的是在收到数据块时计算2的幂次的余数,由此计算部分CRC,而不是例如预先计算它们并把它们存储在表中。在一些实施例中,如果假定存在有限个可能的大小,则预先计算的表仍是可能的。
在许多传输介质和协议的拓扑结构中,CRC是很流行的。图1A是可以利用本发明的典型网络的示例性方块图,该网络在操作中使用CRC,图中总体上用参考数字10表示。图1A可以包括例如在TCP/Ip顶上运行iSCSI的以太网网络。在示例性网络10中包括服务器15和存储设备20。服务器15可请求I/O操作,如经过局域网25(LAN)对存储设备20进行读和写。LAN25可与广域网(WAN)相连。
图1B是方块图,显示例如服务器15的服务器示例性配置。该服务器配置可包括CPU30、芯片组35、存储器40以及iSCSI HBA(主机总线适配器)45。除了iSCSI协议外,iSCSI HBA45还可支持例如通用TCP/IP和远程直接存储器存取(RDMA)通信。HBA通常与系统总线50连接,如服务器15内的PCI-X总线。
图1C是一个iSCSI卸载引擎环境的示例性配置方块图,总体由参考数字55表示。这一配置包括一个与网络的接口60,在本例中示为以太网物理接口,一个iSCSI卸载引擎65,它在实施例中可用于即时地计算CRC,以及存储器70。iSCSI卸载引擎可经由PCI-X或其他适当接口与服务器15连接。
术语“数据块”(也称作“块”)是指数据的最小单元,它是一个连续的比特序列。数据块可以无序到达,因为底层传输机制,如以太网包,可以无序到达。术语“消息”是指一个或多个数据块的集合,这些数据块有被定义的顺序。从消息到包的映射把一个消息分割成若干数据块。术语“包”通常是指在网络上被原封不动地传输的数据单元。一个包可包含一个或多个消息的若干部分。包可包含由适当网络协议定义的其他信息。一个包可无序到达,因此在包中含有的数据块可无序到达。术语“包数据”是由CRC保护的消息。术语“PDU”(协议数据单元)是一个iSCSI术语,是在以太网网络上传送的一类消息。术语“数据段”是指一个iSCSI术语,通常是一个PDU的可选部分而且也可以是一类消息。
图2A是带有无序包的消息的示意图,总体上由参考数字80表示。该示例消息含有6个包,表现为接收点(如接口60)无序到达供处理和根据本发明计算部分的和最后的CRC。这些包还显示为有不同的长度。没有显示开销和控制信息,如协议头。因为这些包含有构成消息的数据块,所以该消息也是无序到达的。这些数据块可以有不同的长度。本领域技术人员会理解,任何数量的包和长度变化都是可能的,而且这些包可以以任何顺序到达。这一举例只是一个可能的实施例。
图2B示意显示与TCP/IP包90有关的iSCSI PDU85的一个实施例。图2B显示一系列PDU可如何以TCP/IP包传输。如本领域技术人员会理解的那样,其他实施例可以发生。iSCSI PDU头86可包括基本头段、可选的附加头段以及可选的头文摘,如iSCSI标准(未示出)定义的那样。iSCSI数据被包含在跟随该头的数据段87中。数据段由数据摘要保护,该数据摘要的32比特CRC88由iSCSI标准定义。
TCP在进出一个应用(如iSCSI)的字节流中处理数据。这样,当iSCSIPDU在网络上流动时它们不能以任何方式在TCP/IP包内对齐。一个或多个iSCSI PDU的各部分可被包含在一个TCP/IP包中,而且一个iSCSI PDU可分散在许多TCP/IP包上,对于这种情况,本发明可更灵活地处置。
在CRC检验背后的一个方面是:一个长比特串,例如一个消息,可以表征为一个余数,它是当这个比特串除以一个特定的、较短的除数比特串时计算出来的。这一除数比特串也称作“生成多项式”,而这个余数是原始比特串的CRC值,或只称作CRC。当一个消息被传输时,这一余数也被生成和传输。当该消息被接收时,该余数被重新计算并与传输的余数比较。以一个取决于生成多项式的选择的高概率,如果所接收的和重新计算的余数匹配,则该消息是被无差错传输和接收。
任何部分CRC计算途径需要余数的两个性质。首先,若干项之和的余数等于那些项的余数之和。第二,若干项之积的余数等于那些项的余数之积。用于计算余数的除法运算把比特串作为二进制多项式系数对待,并且与对余数本身的所有其他运算一起,使用模2算术(无进位),以提高计算效率。为保证对余数的所有运算本身是以该除数为模的余数,在需要时要以该除数进行减法或除法。
在其上进行CRC计算的消息由数据块表示如下:
消息=B0×2S(P-1)+B1×2S(P-2)+...+B(P-2)×2S+B(P-1)就是说,有P个数据块,每个含有S比特,BK是每个块的比特模式。通过计算数据块的CRC并进行组合,能计算出该消息的CRC。传统上,在收到每包时,BK被馈送通过硬件CRC引擎,并且这些值被保存在一个数组中,例如:
crc_b[K]=CRC(BK)
对于指数1至L,2的幂次的CRC被预先计算出来并放入一个表中,其中L是最长的可能包中包含的数据块数:
crc_2[K]=CRC(2S(P-K))
当已收到一个消息的全部数据块时,从列表的数据中计算出该消息的CRC如下:
CRC(消息)=crc_b[0]×crc_2[1]+crc_b[1]×crc_2[2]...
其中这些和以及积被定义为以生成多项式为模,如先前描述的那样。
本发明提供由部分CRC计算完整CRC的方法,其中一个消息可包含任意数量数据块,而且数据块的长度是可变的。为允许每个消息有任意多个数据块,消息的表达式可被修改为:
消息=(...((B0×2S+B1)×2S+B2)×2S...+B(P-2))×2S+B(P-1)于是
CRC(消息)=(...(crc_b[0]×crc_2+crc_b[1])×crc_2+crc_b[2])×crc_2对于固定长度数据块,只需要crc_2=CRC(2S)来完成计算,不管一个消息包含多少数据块。
本发明进一步提供灵活性以适应可变长数据块,如下所示,建立在方程1的基本形式上:
其中SK是单元BK的大小,以比特计。在接收每个BK时,它被馈送通过一个CRC引擎以计算部分CRC如下:
crc_b[K]=CRC(BK) (2)与此同时,一个同样长度(加1个比特)的模式被馈送通过第二CRC引擎(见图3)。那个模式是2Sk:
crc_b[K]和crc_2[K]二值都被保存直至全部数据块都已被接收。在那里,可以计算出整个消息的CRC,如下列示例性伪代码所示(如本领域技术人员将理解的那样,实际逻辑可假定为其变体):
Acc=crc_b[0]
For k=1 to P
Acc=(Acc×crc_2[K]+crc_b[K]%poly
CRC(message)=Acc
这里poly是生成多项式,%是余数操作符。这一途径的一个优点是没有预先计算出的表,也没有对数据块、消息或包的大小的限制。
使用本发明
图3-5是流程图,显示使用本发明的实施例的步骤。图3-5可以同样地代表实现本发明步骤的部件的高级方块图。图3-5的步骤可以由计算机程序代码结合适当的硬件来实现。这一计算机程序代码可存储在存储介质上,如软盘、硬盘、CD-ROM、DVD-ROM或磁带,以及存储器存储设备或存储器存储设备的集合,如只读存储器(ROM)或随机存取存储器(RAM)。此外,该计算机程序代码能经由因特网或其他类型网络传送到工作站。
图3是流程图,显示根据本发明接收数据流的实施例。这一实施例利用由以太网物理接口100接收的来自太网网络的iSCSI包。硬件处置在每层协议到来的包,如以太网MAC105、IP引擎110、TCP引擎11以及iSCSI引擎120所示各层。在这些实施例中,iSCSI引擎可包括根据本发明的CRC生成计算。CRC引擎130和135可提供即时CRC和部分CRC的计算。至少两类CRC计算可在iSCSI环境中完成,一个在以太网包一级(它可在以太网物理层100上完成,如以太网协议描述的那样),另一个在iSCSI块级上完成(例如,它可发生在iSCSI引擎120处)。DMA125把到来的包数据移到存储器供进一步处理。在这些实施例中,引擎120、130和135或者以软件或者以硬件实现。
一个CRC32硬件引擎可被放置在网络数据流中以使总线和存储器带宽极小化,如通过包括CRC引擎1(130)所示。理想的是在来自以太网帧的数据已被TCP/IP和iSCSI卸载引擎(即分别为115、120、130或135)处理之后刚好被放入存储器或在放入存储器之前完成CRC32计算。当供TCP连接的携带iSCSI PDU的一些包按顺序到达时,由硬件检测PDU边界和检验CRC摘要是一件直接了当之事。
参考图3,iSCSI引擎120(例如图1C中的55)识别是对其计算CRC32的数据并将它传送通过CRC引擎1(130)。这个引擎计算每个数据块BK的CRC,数据块BK的长度为SK,如上述方程(2)描述的那样。如果数据是被无序接收的,则该iSCSI引擎还启动CRC引擎2。CRC引擎2(135)对于通过CRC引擎1(130)的输入流的长度,根据输入流B’1后跟流B’0(如图3所示)计算CRC乘数余数。就是说,CRC引擎2计算2Sk的CRC,它的长度是S(K+1),如上述方程(3)中描述的那样。一旦CRC引擎2被填装初始的比特“1”,它运行在与CRC引擎1锁住的步骤中,两个引擎都计算SK个比特上的CRC。来自两个CRC引擎的结果被存储,从而使它们与处理过的TCP段关联。当一个iSCSI PDU的全部数据块都被接收时,根据上文给出的公式(例如方程2和3以及伪代码),将由这两个CRC引擎产生的每个数据块的结果组合到一起。这可在软件中完成。CRC引擎1和CRC引擎2可在不同的或相同的物理硬件上实现。
图4是根据本发明的CRC计算过程一个实施例的流程图,过程在步骤200开始。图4和图5的步骤可由引擎130和135完成。在步骤205,完成逻辑控制的初始化。在步骤210,检验是否所有块都已被处理,如果所有块都已被接收和处理,则处理在步骤235继续。如果不是所有块都已被处理,则在块215接收下一块BK。在步骤220,检查确定下一个接收的块BK是否按顺序。如果不按顺序接收,则在步骤225,对该块计算部分CRC并存储供最终计算使用,于是处理在步骤210继续。如果按顺序接收,则在步骤230,为下一个符合顺序的块计算CRC,而对于按顺序接收的先前各块计算出的CRC可用于初始化硬件(或软件,如果适当的话)计算,从而减小在步骤235的最终CRC计算中所需要的计算量。过程在步骤210继续。如果在步骤210的检验确定所有块都已被处理,则在步骤235使用全部的部分CRC和符合顺序的CRC对整个消息计算最终的完全CRC。
图5是根据本发明的CRC计算过程实施例的流程图,过程在步骤300开始。这一举例还包括对符合顺序数据块的优化。该消息包括N块,它们可能以随意的顺序被接收。无序接收的数据块被一个硬件引擎处理,该硬件引擎总体上由该流程图的左手侧代表。按顺序的块由一硬件引擎处理,该硬件引擎总体上由该流程图的右手侧代表,而最终计算总体上由该流程图的底部来代表。
表达式Hcrc(x,y)代表块x的部分CRC的硬件计算,以余数y开始。一旦所有块都已被接收,则可使用对N个块及相应2的幂次计算出的部分CRC值,在软件中完成(或可在硬件中完成)该消息CRC的最终计算。作为优化,按顺序接收的块可由该流程图右手侧硬件计算来处理。在这种情况下,先前计算出的CRC用作该计算中的初始余数,它消除了相应的最终计算迭代。
过程在步骤305继续,在那里控制变量i(下一个按顺序块的块号)和j(接收的块数)被初始化为1,而包CRC被初始化为零,或者其他适当的初始化值。在步骤310,检验是否所有块都已被接收,如果不是,则在步骤315接收下一块BK。在步骤320,检验这一块是否是按顺序接收的。
如果不是,则在步骤325对块BK以及相应的2的幂次乘数余数计算部分CRC。在步骤328对此新块计数。处理以步骤310继续。
如果在步骤320该块是按顺序的,则在步骤330使用先前计算出的CRC作为初始余数来计算按顺序的CRC。在步骤332,下一个预期块号及所接收的块数增1。处理在步骤310继续。
如果在步骤310被接收的块数达到该消息中的总块数,则在步骤333检验是否每个数据块的CRC被包括在最终CRC中。如果不是,则在步骤335将所存储的部分CRC依次包括在最终CRC中。一旦所有部分CRC(如果实际上产生了)被包括在最终CRC中(即在步骤333当i=N时),则过程结束。
借助进一步举例,说明本发明的优化作用,这里假定一个消息由六块组成,它们按如下顺序被接收:B6、B1、B4、B2、B3、B5。块B6在图5的左手侧被处理,然后B1在右手侧被处理。第一块(即B1)被认为是“按顺序”接收的,不论它在何时被接收,下一个是被“按顺序”处理的是B2。所以B4是在左手侧被处理。然后,B2在右手侧被处理。B3是下一个按顺序的,所以它在右手侧被处理。最后,B5在左手侧被处理。
对于最终计算,B1至B3已被充分处理,所以在最终计算中只需包括为B4、B5和B6计算的部分CRC。这一优化的进一步扩展是当这些块被接收时提供以这种方式处理所有的部分序列,使用先前的举例,将使用来自B4的结果处理B5,从而进一步减少最终所需计算量。这些优化减少了在最终计算中需由软件完成的处理量,其优化程度延伸到这些块大多数是按顺序被接收的情况。
在另一个实施例中,如果当前块之前的块已被接收(不一定紧接在立即块之前)并已造成一个部分CRC计算,则来自这个先前块的结果可用于初始化两个CRC引擎。作为举例,考虑块流B1、B2、B4、B3、B5和B6。在这一情况中,块B4是被无序接收的。在这一实施例中,B4将是第一个无序块并将计算出部分CRC,但在这一实施例中,B3将被认为是按顺序的,并且是B1和B2的按顺序处理的继续,因为B3按顺序是先前接收的块,即B2的下一个。在处理B2之后的CRC余数被用于在处理B3之前初始化CRC引擎。以类似的方式,B5和B6将作为B4的部分CRC的扩展被处理。这是通过在处理B5之前以先前块B4的CRC余数和乘数余数初始化CRC引擎来完成的。在这一实施例中,将被组合的项数被减至二(即B1-B3和B4-B6)。这一实施例以图4的流程图工作。在步骤220对按顺序块的检验现在可包括检验紧接在当前块之前的块号是否已在任何时候被接收了。如果是,则在步骤230中的计算如同一个按顺序的块处在按顺序的序列中。否则,提供的计算作为无序序列部分CRC的扩展。这样,使用这另一个替代途径减少最终要组合的项数。
另一个实施例可包括预先计算那些本是从第二CRC引擎得到的值并把它们放入表中。这一途径或可以硬件或可以软件实现。
本发明可用于多种多样协议和可变的数据块大小,此时在包或消息传输之初不知道要接收的数据块个数。本发明提供实质性优化和减少所需处理,而且不需使用预先计算的2的幂。以来自先前CRC计算的数据初始化CRC引擎使得允许正确地接收来自不同消息的被网络相互混合的数据块。
尽管已经利用实施例描述了本发明,但本领域技术人员将认识到,本发明能以各种修改在所附权利要求的精神和范围内实现。
Claims (25)
1.一种为具有N块数据的消息产生循环冗余检验(CRC)的方法,包含:
为一个无序数据块计算部分CRC并存储结果;
产生与该无序数据块关联的CRC余数乘数并存储结果;
重复计算和产生步骤直至该消息的全部N块数据被接收;以及
组合计算步骤和产生步骤的结果。
2.权利要求1的方法,进一步包含:使用任何先前计算出的按顺序CRC计算一个按顺序数据块的CRC。
3.权利要求2的方法,进一步包含:通过对组合步骤和计算一个CRC的步骤的结果进行组合来计算最终CRC。
4.权利要求3的方法,其中的计算步骤包括被一个生成多项式除。
5.权利要求2的方法,进一步包含:启动第一CRC引擎用于为按顺序的数据块计算CRC,以及启动第一CRC引擎和第二CRC引擎用于计算无序数据块的部分CRC,其中第一CRC引擎和第二CRC引擎适应于在相同物理硬件和不同物理硬件之一上实现。
6.权利要求5的方法,其中在启动步骤中当计算无序数据块的部分CRC时,第一引擎计算部分CRC,而第二引擎计算CRC余数乘数。
7.权利要求2的方法,进一步包含以按顺序块的CRC余数初始化CRC引擎,该CRC余数是先前CRC计算的结果。
8.权利要求1的方法,进一步包含以部分CRC余数初始化第一CRC引擎,以CRC余数乘数初始化第二CRC引擎,其中的部分CRC余数和CRC余数乘数是先前部分CRC计算的结果。
9.权利要求8的方法,其中的初始化步骤允许来自不同消息的数据块当被网络相互混合时能被正确地接收。
10.权利要求1的方法,其中的计算步骤包括根据crc_b[K]=CRC(BK)计算部分CRC,其中crc_b[K]是数据块K的部分CRC,而BK是数据块K的数据块比特模式。
11.权利要求1的方法,其中的产生步骤包括根据
产生余数乘数,其中crc_2[K]是数据块K的余数乘数,而SK是数据块K的比特长度。
12.权利要求11的方法,其中产生余数乘数步骤包括向CRC引擎提供长度SK的比特模式加上一比特。
13.权利要求1的方法,其中N块数据包含至少一个数据块具有不同长度或相同长度两种情况之一。
14.一种为具有N块数据的消息产生循环冗余检验(CRC)的装置,包含:
为一个无序数据块计算部分CRC并存储结果的部件;
产生与该无序数据块关联的CRC余数乘数并存储结果的部件;以及
组合计算出的部分CRC和产生的余数乘数的结果的部件。
15.权利要求14的装置,进一步包含一个部件使用紧前计算出的按顺序CRC,如果可得到的话,计算一个按顺序数据块的CRC。
16.权利要求15的装置,其中计算CRC的部件提供CRC余数供初始化CRC引擎,该CRC余数是先前CRC计算的结果。
17.权利要求14的装置,进一步包含一个部件用于以部分CRC余数初始化第一CRC引擎并以CRC余数乘数初始化第二CRC引擎,该部分CRC余数和CRC余数乘数是先前部分CRC计算的结果。
18.权利要求17的装置,其中的初始化部件允许来自不同消息的数据块当被网络相互混合时能被正确地接收。
19.权利要求14的装置,包含一个部件把组合部件的输出与计算部件的输出组合起来以产生最终的CRC,其中的组合部件是把计算出的部分CRC和产生的乘数的结果组合起来的部件,计算部件是使用紧前计算出的按顺序CRC,如果可得到的话,计算一个按顺序数据块的CRC的部件。
20.权利要求19的装置,其中产生最终CRC的部件包括以生成多项式除的装置。
21.权利要求14的装置,其中计算部分CRC的部件提供根据crc_b[K]=CRC(BK)计算部分CRC,其中crc_b[K]是数据块K的部分CRC,而BK是数据块K的数据块比特模式。
22.权利要求14的装置,其中的产生余数乘数的部件包括根据 产生余数乘数,其中crc_2[K]是数据块K的余数乘数,而SK是数据块K的比特长度。
23.权利要求22的装置,其中产生余数乘数的部件包括向CRC引擎提供长度SK的比特模式加一个比特的装置。
24.权利要求14的装置,其中N块数据包含至少一个数据块具有不同长度和相同长度两种情况之一。
25.一种计算机程序产品,包含一个计算机可用介质,在该介质中体现可读程序代码,该计算机程序产品包括:
第一部件,用于为一个无序数据块计算部分CRC并存储结果;
第二部件,用于产生与该无序数据块关联的CRC余数乘数并存储结果;以及
第三部件,用于组合第一部件和第二部件的结果。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/605,436 US7010469B2 (en) | 2003-09-30 | 2003-09-30 | Method of computing partial CRCs |
US10/605,436 | 2003-09-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1604515A true CN1604515A (zh) | 2005-04-06 |
CN100347982C CN100347982C (zh) | 2007-11-07 |
Family
ID=34375673
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100803798A Expired - Fee Related CN100347982C (zh) | 2003-09-30 | 2004-09-29 | 为具有n块数据的消息产生循环冗余检验的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (4) | US7010469B2 (zh) |
CN (1) | CN100347982C (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101031110B (zh) * | 2006-01-18 | 2011-03-23 | 三星电子株式会社 | 无线通信系统中处理突发的装置和方法 |
CN102946297A (zh) * | 2012-11-10 | 2013-02-27 | 华中科技大学 | 一种用于数据传输差错控制的嵌套crc码生成方法及装置 |
CN105528183A (zh) * | 2016-01-26 | 2016-04-27 | 华为技术有限公司 | 一种存储数据的方法及存储设备 |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7111223B2 (en) | 2003-03-28 | 2006-09-19 | Arraycomm, Llc | Error word generation with multiple element input |
US7010469B2 (en) * | 2003-09-30 | 2006-03-07 | International Business Machines Corporation | Method of computing partial CRCs |
US8065439B1 (en) * | 2003-12-19 | 2011-11-22 | Nvidia Corporation | System and method for using metadata in the context of a transport offload engine |
US7949792B2 (en) * | 2004-02-27 | 2011-05-24 | Cisco Technology, Inc. | Encoding a TCP offload engine within FCP |
US7761608B2 (en) * | 2004-09-01 | 2010-07-20 | Qlogic, Corporation | Method and system for processing markers, data integrity fields and digests |
US7826470B1 (en) * | 2004-10-19 | 2010-11-02 | Broadcom Corp. | Network interface device with flow-oriented bus interface |
US8458280B2 (en) | 2005-04-08 | 2013-06-04 | Intel-Ne, Inc. | Apparatus and method for packet transmission over a high speed network supporting remote direct memory access operations |
US7454667B2 (en) * | 2005-04-26 | 2008-11-18 | Intel Corporation | Techniques to provide information validation and transfer |
TWI265451B (en) * | 2005-07-19 | 2006-11-01 | Ind Tech Res Inst | Direct memory access system for iSCSI |
US20070156974A1 (en) * | 2006-01-03 | 2007-07-05 | Haynes John E Jr | Managing internet small computer systems interface communications |
US7782905B2 (en) * | 2006-01-19 | 2010-08-24 | Intel-Ne, Inc. | Apparatus and method for stateless CRC calculation |
US7889762B2 (en) | 2006-01-19 | 2011-02-15 | Intel-Ne, Inc. | Apparatus and method for in-line insertion and removal of markers |
US7849232B2 (en) | 2006-02-17 | 2010-12-07 | Intel-Ne, Inc. | Method and apparatus for using a single multi-function adapter with different operating systems |
US8316156B2 (en) | 2006-02-17 | 2012-11-20 | Intel-Ne, Inc. | Method and apparatus for interfacing device drivers to single multi-function adapter |
US8078743B2 (en) * | 2006-02-17 | 2011-12-13 | Intel-Ne, Inc. | Pipelined processing of RDMA-type network transactions |
US20070208820A1 (en) * | 2006-02-17 | 2007-09-06 | Neteffect, Inc. | Apparatus and method for out-of-order placement and in-order completion reporting of remote direct memory access operations |
EP1912364A1 (en) * | 2006-10-09 | 2008-04-16 | Axalto SA | Integrity of low bandwidth communications |
TWI341096B (en) * | 2007-04-03 | 2011-04-21 | Ind Tech Res Inst | Method and system for calculating crc |
US7925795B2 (en) * | 2007-04-30 | 2011-04-12 | Broadcom Corporation | Method and system for configuring a plurality of network interfaces that share a physical interface |
EP2187525B1 (en) * | 2007-08-07 | 2014-03-12 | Fujitsu Limited | Error detection device, and error correction/error detection decoding device and method |
US7765317B1 (en) * | 2008-06-30 | 2010-07-27 | Qlogic, Corporation | System and methods for locating FPDU headers when markers are disabled |
US8892983B2 (en) * | 2008-11-04 | 2014-11-18 | Alcatel Lucent | Method and apparatus for error detection in a communication system |
US9015333B2 (en) | 2009-12-18 | 2015-04-21 | Cisco Technology, Inc. | Apparatus and methods for handling network file operations over a fibre channel network |
US8745476B1 (en) | 2010-10-13 | 2014-06-03 | Marvell Israel (M.I.S.L.) Ltd. | Systems and methods for cyclic redundancy check implementation |
US9081700B2 (en) | 2013-05-16 | 2015-07-14 | Western Digital Technologies, Inc. | High performance read-modify-write system providing line-rate merging of dataframe segments in hardware |
US9304709B2 (en) | 2013-09-06 | 2016-04-05 | Western Digital Technologies, Inc. | High performance system providing selective merging of dataframe segments in hardware |
US10361721B1 (en) * | 2014-05-01 | 2019-07-23 | Marvell International Ltd. | Methods and network device for uncoded bit protection in 10GBASE-T Ethernet |
US20150339183A1 (en) * | 2014-05-21 | 2015-11-26 | Kabushiki Kaisha Toshiba | Controller, storage device, and control method |
US20170063493A1 (en) * | 2015-08-25 | 2017-03-02 | Signalchip Innovations Private Limited | Methods and circuits for performing cyclic redundancy check (crc) of an input data stream |
CN107704335B (zh) * | 2017-09-28 | 2019-08-20 | 华南理工大学 | 一种基于fpga的crc并行运算ip核 |
US11537560B2 (en) | 2019-07-11 | 2022-12-27 | Samsung Electronics Co., Ltd. | Markers for hash code calculations on occupied portions of data blocks |
US11416332B2 (en) * | 2020-03-27 | 2022-08-16 | Texas Instruments Incorporated | Protection for ethernet physical layer |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE3122381A1 (de) * | 1981-06-05 | 1982-12-23 | Ibm Deutschland Gmbh, 7000 Stuttgart | Verfahren und einrichtung zur erzeugung von pruefbits zur sicherung eines datenwortes |
US5121397A (en) * | 1990-02-14 | 1992-06-09 | Hewlett-Packard Company | Method and apparatus for producing order independent signatures for error detection |
US5247524A (en) * | 1990-06-29 | 1993-09-21 | Digital Equipment Corporation | Method for generating a checksum |
US5321704A (en) * | 1991-01-16 | 1994-06-14 | Xilinx, Inc. | Error detection structure and method using partial polynomial check |
US5321707A (en) | 1992-07-27 | 1994-06-14 | General Instrument Corporation | Remote pumping for active optical devices |
US5383204A (en) * | 1993-06-29 | 1995-01-17 | Mitsubishi Semiconductor America, Inc. | Parallel encoding apparatus and method implementing cyclic redundancy check and Reed-Solomon codes |
US5410546A (en) * | 1993-11-01 | 1995-04-25 | Storage Technology Corporation | Apparatus and method for CRC computation over fixed length blocks containing variable length packets of data received out of order |
US5754564A (en) * | 1994-08-24 | 1998-05-19 | Harris Corporation | Method of continuous calculation of cyclic redundancy check |
KR970009756B1 (ko) * | 1994-12-23 | 1997-06-18 | 한국전자통신연구원 | 에러 정정 및 프레임 복구용 순환 선로 부호화 장치 |
US5691997A (en) * | 1995-09-28 | 1997-11-25 | Cisco Systems, Inc. | Encoder for use in asynchronous transfer mode systems |
US5878057A (en) * | 1995-10-06 | 1999-03-02 | Tektronix, Inc. | Highly parallel cyclic redundancy code generator |
US6349138B1 (en) * | 1996-06-14 | 2002-02-19 | Lucent Technologies Inc. | Method and apparatus for digital transmission incorporating scrambling and forward error correction while preventing bit error spreading associated with descrambling |
US5751725A (en) * | 1996-10-18 | 1998-05-12 | Qualcomm Incorporated | Method and apparatus for determining the rate of received data in a variable rate communication system |
US6094465A (en) * | 1997-03-21 | 2000-07-25 | Qualcomm Incorporated | Method and apparatus for performing decoding of CRC outer concatenated codes |
US6038694A (en) * | 1997-03-24 | 2000-03-14 | Cisco Systems, Inc. | Encoder for producing a checksum associated with changes to a frame in asynchronous transfer mode systems |
US5951707A (en) * | 1997-06-27 | 1999-09-14 | International Business Machines Corporation | Method of partitioning CRC calculation for a low-cost ATM adapter |
US7185266B2 (en) * | 2003-02-12 | 2007-02-27 | Alacritech, Inc. | Network interface device for error detection using partial CRCS of variable length message portions |
US5991911A (en) * | 1997-11-14 | 1999-11-23 | Cirrus Logic, Inc. | Concurrent generation of ECC error syndromes and CRC validation syndromes in a DVD storage device |
US6173431B1 (en) * | 1998-07-01 | 2001-01-09 | Motorola, Inc. | Method and apparatus for transmitting and receiving information packets using multi-layer error detection |
DE69841981D1 (de) | 1998-09-16 | 2010-12-16 | Ibm | Verfahren und Vorrichtung zur Erzeugung und Prüfung vom Datenprüffeld |
US6438724B1 (en) * | 1999-03-16 | 2002-08-20 | International Business Machines Corporation | Method and apparatus for deterministically altering cyclic redundancy check information for data storage |
US6446234B1 (en) * | 1999-03-16 | 2002-09-03 | International Business Machines Corporation | Method and apparatus for updating cyclic redundancy check information for data storage |
US6851086B2 (en) * | 2000-03-31 | 2005-02-01 | Ted Szymanski | Transmitter, receiver, and coding scheme to increase data rate and decrease bit error rate of an optical data link |
US6609226B1 (en) * | 2000-04-10 | 2003-08-19 | Nortel Networks Limited | Networking device and method for making cyclic redundancy check (CRC) immune to scrambler error duplication |
US6647518B1 (en) * | 2000-04-28 | 2003-11-11 | Conexant Systems, Inc. | Methods and apparatus for estimating a bit error rate for a communication system |
US7243289B1 (en) * | 2003-01-25 | 2007-07-10 | Novell, Inc. | Method and system for efficiently computing cyclic redundancy checks |
US7010469B2 (en) * | 2003-09-30 | 2006-03-07 | International Business Machines Corporation | Method of computing partial CRCs |
-
2003
- 2003-09-30 US US10/605,436 patent/US7010469B2/en not_active Expired - Fee Related
-
2004
- 2004-09-29 CN CNB2004100803798A patent/CN100347982C/zh not_active Expired - Fee Related
-
2005
- 2005-09-14 US US11/224,994 patent/US7426674B2/en not_active Expired - Fee Related
-
2007
- 2007-11-08 US US11/937,204 patent/US7971122B2/en not_active Expired - Fee Related
-
2008
- 2008-03-03 US US12/041,060 patent/US8108753B2/en not_active Expired - Fee Related
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101031110B (zh) * | 2006-01-18 | 2011-03-23 | 三星电子株式会社 | 无线通信系统中处理突发的装置和方法 |
CN102946297A (zh) * | 2012-11-10 | 2013-02-27 | 华中科技大学 | 一种用于数据传输差错控制的嵌套crc码生成方法及装置 |
WO2014071658A1 (zh) * | 2012-11-10 | 2014-05-15 | 华中科技大学 | 一种用于数据传输差错控制的嵌套crc码生成方法及装置 |
CN102946297B (zh) * | 2012-11-10 | 2015-06-17 | 华中科技大学 | 一种用于数据传输差错控制的嵌套crc码生成方法及装置 |
US9143276B2 (en) | 2012-11-10 | 2015-09-22 | Hua Zhong University Of Science And Technology | Nested CRC (cyclic redundancy check) code generation method and device for data transmission error control |
CN105528183A (zh) * | 2016-01-26 | 2016-04-27 | 华为技术有限公司 | 一种存储数据的方法及存储设备 |
CN105528183B (zh) * | 2016-01-26 | 2019-01-18 | 华为技术有限公司 | 一种存储数据的方法及存储设备 |
Also Published As
Publication number | Publication date |
---|---|
US20050071131A1 (en) | 2005-03-31 |
US20080091759A1 (en) | 2008-04-17 |
US20060009952A1 (en) | 2006-01-12 |
CN100347982C (zh) | 2007-11-07 |
US7426674B2 (en) | 2008-09-16 |
US20080222488A1 (en) | 2008-09-11 |
US7010469B2 (en) | 2006-03-07 |
US8108753B2 (en) | 2012-01-31 |
US7971122B2 (en) | 2011-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100347982C (zh) | 为具有n块数据的消息产生循环冗余检验的方法和装置 | |
CN106534059A (zh) | 内容中心网络中的网络命名分段 | |
US7904787B2 (en) | Pipelined cyclic redundancy check for high bandwidth interfaces | |
CN108768656B (zh) | 一种基于哈希算法的数据校验方法 | |
CN105637767A (zh) | 编码的速率匹配处理方法和装置 | |
CN107040334A (zh) | 用于通信网络的丢失复原协议 | |
US6870849B1 (en) | Apparatus and method for efficient hashing in networks | |
CN101300790B (zh) | 通信设备和方法 | |
Barenghi et al. | Evaluating the trade-offs in the hardware design of the ledacrypt encryption functions | |
US20060075311A1 (en) | Techniques to perform error detection | |
CN1622504A (zh) | 一种数据包恢复方法 | |
CN107733568A (zh) | 基于fpga实现crc并行计算的方法及装置 | |
CN108574490B (zh) | 计算循环冗余校验crc编码的方法及装置 | |
TWI520528B (zh) | 增壓碼 | |
EP2187526B1 (en) | Fast computation of frame check sequences (FCS/CRC) | |
KR100433632B1 (ko) | 병렬 crc 계산장치 및 그 방법 | |
US20190286515A1 (en) | Dynamic and Preemptive Erasure Encoding in Software Defined Storage (SDS) Systems | |
Wu et al. | The 8-bit parallel crc-32 research and implementation in usb 3.0 | |
CN113721888B (zh) | 一种Equihash算法的数据处理方法及装置 | |
CN108540258A (zh) | 一种循环冗余码校验方法及装置 | |
US20230353281A1 (en) | Method and system for reducing data stored in capture buffer | |
CN116610485B (zh) | 一种隔离网闸数据校验方法、电子设备及存储介质 | |
WO2022228381A1 (zh) | 一种编码方法、一种解码方法、发送端设备以及接收端设备 | |
Klimenko et al. | The Study of Implementations of CRCs Algorithms | |
CN114520710A (zh) | Usb2.0协议五比特循环冗余校验方法、装置和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20071107 Termination date: 20091029 |