CN115052055B - 一种基于FPGA的网络报文的checksum卸载方法 - Google Patents
一种基于FPGA的网络报文的checksum卸载方法 Download PDFInfo
- Publication number
- CN115052055B CN115052055B CN202210984800.6A CN202210984800A CN115052055B CN 115052055 B CN115052055 B CN 115052055B CN 202210984800 A CN202210984800 A CN 202210984800A CN 115052055 B CN115052055 B CN 115052055B
- Authority
- CN
- China
- Prior art keywords
- checksum
- data
- message
- counter
- udp
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9063—Intermediate storage in different physical parts of a node or terminal
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/165—Combined use of TCP and UDP protocols; selection criteria therefor
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Environmental & Geological Engineering (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Detection And Prevention Of Errors In Transmission (AREA)
Abstract
本发明涉及一种基于FPGA的网络报文的checksum卸载方法,属于网络报文处理领域。本发明采用8位宽深度为4096的双口ram实现乒乓操作,ram分了两个储存区可缓存两个报文,并且固定首字节存储方式,使checksum字段的偏移地址固定,在实现兵乓操作的同时让FPGA实现更为简单,在处理完一个报文后,马上可以开始处理另一个报文。本发明实现采用计数器counter一直累加的方式对应报文各个字段,实现简单便捷,减少了算法逻辑资源,而且报文接收完成时就是校验和计算结果完成时,提高了处理性能。本发明实现了千兆网络通信在FPAG上对checksum的卸载。
Description
技术领域
本发明属于网络报文处理领域,具体涉及一种基于FPGA的网络报文的checksum卸载方法。
背景技术
在网络通信过程中有时候报文内容会发生改变(IP报文头中TTL发生变化,IP地址需要替换,数据需要加密等)这个时候报文中的checksum需要重新计算。
目前对网络报文的校验和重新计算方法,一种是处理时钟频率不变,但是数据传输带宽降低;一种是提高处理时钟频率,使数据传输带宽不变,但是增加了功耗。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是如何提供一种基于FPGA的网络报文的checksum卸载方法,以解决现有的对网络报文的校验和重新计算方法数据传输带宽降、增加功耗等方面的问题。
(二)技术方案
为了解决上述技术问题,本发明提出一种基于FPGA的网络报文的checksum卸载方法,该方法包括如下步骤:
S1、当UDP/TCP报文进来时,将报文存放在ram中;将UDP/TCP头部中的校验和字段修改为0;启动状态机和counter;
S2、状态机由IDLE状态跳转至IP_HEAD状态,从ram逐字节提取报文数据,移入移位寄存器data_sft,校验和寄存器checksum在counter为奇数时对data_sft进行累加;counter从0开始累加,当counter累加至19时IP头收取结束,如果是TCP报文则状态机跳转至TCP_HEAD,执行S4;如果是UDP报文则跳转至UDP_HEAD,执行S3;
S3、对于UDP报文进入UDP_HEAD收取UDP头,当counter累加至27时,UDP头收取结束跳转至PAYLOAD_DATA,执行S5;
S4、对于TCP报文进入TCP_HEAD收取TCP头,当counter累加至39时,UDP头收取结束跳转至PAYLOAD_DATA,执行S5;
S5、进入PAYLOAD_DATA收取载荷数据,当counter累加至ip_lenth-1+ip_lenth[0]时,载荷数据收取结束时跳转至UPDATA_CHECKSUM,执行S6;其中,ip_lenth为报文总长度,当载荷数据是偶数个字节长时,ip_lenth[0]=0,当载荷数据是奇数个字节长时,ip_lenth[0]=1;
S6、将计算出的校验和checksum写入ram对应的地址中,状态跳转至DONE,本次报文处理结束,然后跳转至IDLE,等待下个报文进入。
进一步地,计数器counter为16位的计数器,在IDLE状态为0,其他状态counter每周期加1。
进一步地,移位寄存器data_sft为16位的移位寄存器,每周期将高8位数据移出,将低8位数据移到高8位,向低8位移入一个新的8位数据;UDP/TCP包括n+1个字节d0-dn,当计数器counter为0时,移入d0,d0位于低8位,当计数器counter为1时,移入d1,d0位于高8位,d1位于低8位,依次类推,当counter为n时,全部数据均已移入。
进一步地,校验和寄存器checksum为16位的校验和寄存器,是根据状态机和counter为奇数时对data_sft进行累加。
进一步地,ram为8位宽深度为4096的双口ram,对报文数据进行缓存,且采用固定首字节存储方式,ram包括2个缓存区,当一个缓存区中报文的校验和计算结束后马上开始另一个缓存区中报文的校验和计算。
进一步地,所述步骤S1中,如果UDP/TCP的载荷数据不是偶数个字节长,在载荷数据结尾填充一个值为0的字节。
进一步地,所述步骤S2中,IP头收取过程中,提取IP头中的总长度ip_lenth、协议号ip_protocol、源IP地址src_addr和目的IP地址dst_addr。
进一步地,所述步骤S2中,当协议号为17且counter=19时进入UDP_HEAD;当协议号为6且counter=19时进入TCP_HEAD。
进一步地,所述步骤S6中,当报文为UDP报文时,校验和checksum写入ram的偏移地址为0x1a,0x1b;当报文为TCP报文时,校验和checksum写入ram的偏移地址为0x24,0x25。
进一步地,所述步骤S6中,下个报文来自ram的另一储存区。
(三)有益效果
本发明提出一种基于FPGA的网络报文的checksum卸载方法,本发明采用8位宽深度为4096的双口ram实现乒乓操作(网络报文最大长度1518字节),ram分了两个储存区可缓存两个报文,并且固定首字节存储方式,使checksum字段的偏移地址固定,在实现兵乓操作的同时让FPGA实现更为简单,在处理完一个报文后,马上可以开始处理另一个报文。
本发明实现采用计数器counter一直累加的方式对应报文各个字段,实现简单便捷,减少了算法逻辑资源,而且报文接收完成时就是校验和计算结果完成时,提高了处理性能。
本发明实现了千兆网络通信在FPAG上对checksum的卸载。
附图说明
图1为IP/UDP/TCP头协议格式;
图2为用于计算UDP/TCP的校验和字段包含伪头部、UDP/TCP头部和数据;
图3为本发明的状态机流程图;
图4为本发明的ram缓存示意图;
图5为本发明的移位寄存器同计数器和数据的关系。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
本发明的目的就是提供一种基于FPAG的网络报文的校验和的实现方法。
IP、UDP、TCP报文头部协议格式如图1所示。如图2所示UDP/TCP的校验和计算方式是,UDP/TCP校验和=UDP/TCP的伪头部+ UDP/TCP的头部+UDP/TCP的载荷数据。如图2所示,UDP/TCP的伪头部包括源IP、目的IP、协议号、UDP/TCP总长度等,UDP的头部包括源端口、目的端口、UDP长度和UDP校验和,TCP的头部包括源端口、目的端口、序列号、确认号、头部长度、控制字段、窗口大小、TCP校验和以及紧急指针。其中,在计算UDP/TCP的校验和时,用于计算的UDP/TCP头部中的校验和字段必须改为0,另外,如果UDP/TCP的载荷数据不是偶数个字节长,在载荷数据结尾填充一个值为0的字节以计算校验和。
本发明的基于FPGA的网络报文的checksum卸载方法涉及一个16位的计数器counter,一个16位的移位寄存器data_sft,一个16位的校验和寄存器checksum,一个8位宽深度为4096的双口ram和一个状态机。
计数器counter在IDLE状态为0,其他状态counter每周期加1;
移位寄存器data_sft与报文数据和计数器的关系如图5所示,移位寄存器data_sft每周期将高8位数据移出,将低8位数据移到高8位,向低8位移入一个新的8位数据。如图5所示,UDP/TCP包括n+1个字节d0-dn,当计数器counter为0时,移入d0,d0位于低8位,当计数器counter为1时,移入d1,d0位于高8位,d1位于低8位,依次类推,当counter为n时,全部数据均已移入。
校验和寄存器checksum是根据状态机和counter为奇数时对data_sft进行累加;为了避免重复累加,仅仅对counter为奇数的data_sft进行累加。
ram对报文数据进行缓存,且采用固定首字节存储方式,如果是UDP报文,计算得到的校验和存储的偏移地址为0x1a,0x1b;如果是TCP报文,计算得到的校验和存储的偏移地址为0x24,0x25。ram包括2个缓存区,分别为0x0000-0x07ff和0x0800-0x1000,当一个缓存区中报文的校验和计算结束后马上开始另一个缓存区中报文的校验和计算。
具体流程如图3所示:
S1、当UDP/TCP报文进来时,将报文存放在ram中;将UDP/TCP头部中的校验和字段修改为0,如果UDP/TCP的载荷数据不是偶数个字节长,在载荷数据结尾填充一个值为0的字节;启动状态机和计数器;
S2、状态机由IDLE状态跳转至IP_HEAD状态,从ram逐字节提取报文数据,移入移位寄存器data_sft,校验和寄存器checksum根据状态机在counter为奇数时对data_sft进行累加;counter从0开始累加,当counter累加至19时IP头收取结束,如果是TCP报文则状态机跳转至TCP_HEAD,执行S4;如果是UDP报文则跳转至UDP_HEAD,执行S3;
其中,IP头收取过程中,提取IP头中的总长度ip_lenth、协议号ip_protocol、源IP地址src_addr和目的IP地址dst_addr;
其中,当协议号为17且counter=19时进入UDP_HEAD。
其中,当协议号为6且counter=19时进入TCP_HEAD。
S3、对于UDP报文进入UDP_HEAD收取UDP头,当counter累加至27时,UDP头收取结束跳转至PAYLOAD_DATA,执行S5;
S4、对于TCP报文进入TCP_HEAD收取TCP头,当counter累加至39时,UDP头收取结束跳转至PAYLOAD_DATA,执行S5;
S5、进入PAYLOAD_DATA收取载荷数据,当counter累加至ip_lenth-1+ip_lenth[0]时,载荷数据收取结束时跳转至UPDATA_CHECKSUM,执行S6;其中,当载荷数据是偶数个字节长时,ip_lenth[0]=0,当载荷数据是奇数个字节长时,ip_lenth[0]=1;
S6、将计算出的校验和checksum写入ram对应的地址中,状态跳转DONE,本次报文处理结束,然后跳转IDLE,等待下个报文进入。
进一步地,当报文为UDP报文时,校验和checksum写入ram的偏移地址为0x1a,0x1b。
进一步地,当报文为TCP报文时,校验和checksum写入ram的偏移地址为0x24,0x25。
进一步地,IDLE状态时,counter置0。
进一步地,下个报文来自ram的另一储存区。
本发明采用8位宽深度为4096的双口ram实现乒乓操作(网络报文最大长度1518字节),如图4所示,ram分了两个储存区可缓存两个报文,并且固定首字节存储方式,使checksum字段的偏移地址固定,在实现兵乓操作的同时让FPGA实现更为简单,在处理完一个报文后,马上可以开始处理另一个报文。
本发明实现采用计数器counter一直累加的方式对应报文各个字段,实现简单便捷,减少了算法逻辑资源,而且报文接收完成时就是校验和计算结果完成时,提高了处理性能。
本发明实现了千兆网络通信在FPAG上对checksum的卸载。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (10)
1.一种基于FPGA的网络报文的checksum卸载方法,其特征在于,该方法包括如下步骤:
S1、IDLE状态:当UDP/TCP报文进来时,将报文存放在随机存取存储器ram中;将UDP/TCP头部中的校验和字段修改为0;启动状态机和计数器counter;
S2、IP_HEAD状态:状态机由IDLE状态跳转至IP_HEAD状态,从ram逐字节提取报文数据,移入移位寄存器data_sft,校验和寄存器checksum在counter为奇数时对data_sft进行累加;counter从0开始累加,当counter累加至19时IP头收取结束,如果是TCP报文则状态机跳转至TCP_HEAD,执行S4;如果是UDP报文则跳转至UDP_HEAD,执行S3;
S3、UDP_HEAD状态:对于UDP报文进入UDP_HEAD收取UDP头,当counter累加至27时,UDP头收取结束跳转至PAYLOAD_DATA,执行S5;
S4、TCP_HEAD状态:对于TCP报文进入TCP_HEAD收取TCP头,当counter累加至39时,TCP头收取结束跳转至PAYLOAD_DATA,执行S5;
S5、PAYLOAD_DATA状态:进入PAYLOAD_DATA收取载荷数据,当counter累加至ip_lenth-1+ip_lenth[0]时,载荷数据收取结束时跳转至UPDATA_CHECKSUM,执行S6;其中,ip_lenth为报文总长度,当载荷数据是偶数个字节长时,ip_lenth[0]=0,当载荷数据是奇数个字节长时,ip_lenth[0]=1;
S6、UPDATA_CHECKSUM状态:将校验和寄存器checksum累加计算出的校验和写入ram对应的地址中,状态跳转至DONE,本次报文处理结束,然后跳转至IDLE,等待下个报文进入。
2.如权利要求1所述的基于FPGA的网络报文的checksum卸载方法,其特征在于,counter为16位的计数器,在IDLE状态为0,其他状态counter每周期加1。
3.如权利要求2所述的基于FPGA的网络报文的checksum卸载方法,其特征在于,移位寄存器data_sft为16位的移位寄存器,每周期将高8位数据移出,将低8位数据移到高8位,向低8位移入一个新的8位数据;UDP/TCP包括n+1个字节d0-dn,当counter为0时,移入d0,d0位于低8位,当counter为1时,移入d1,d0位于高8位,d1位于低8位,依次类推,当counter为n时,全部数据均已移入。
4.如权利要求3所述的基于FPGA的网络报文的checksum卸载方法,其特征在于,校验和寄存器checksum为16位的校验和寄存器,是根据状态机和counter为奇数时对data_sft进行累加。
5.如权利要求4所述的基于FPGA的网络报文的checksum卸载方法,其特征在于,ram为8位宽深度为4096的双口ram,对报文数据进行缓存,且采用固定首字节存储方式,ram包括2个缓存区,当一个缓存区中报文的校验和计算结束后马上开始另一个缓存区中报文的校验和计算。
6.如权利要求1-5任一项所述的基于FPGA的网络报文的checksum卸载方法,其特征在于,所述步骤S1中,如果UDP/TCP的载荷数据不是偶数个字节长,在载荷数据结尾填充一个值为0的字节。
7.如权利要求6所述的基于FPGA的网络报文的checksum卸载方法,其特征在于,所述步骤S2中,IP头收取过程中,提取IP头中的总长度ip_lenth、协议号ip_protocol、源IP地址src_addr和目的IP地址dst_addr。
8.如权利要求7所述的基于FPGA的网络报文的checksum卸载方法,其特征在于,所述步骤S2中,当协议号为17且counter=19时进入UDP_HEAD;当协议号为6且counter=19时进入TCP_HEAD。
9.如权利要求7所述的基于FPGA的网络报文的checksum卸载方法,其特征在于,所述步骤S6中,当报文为UDP报文时,校验和写入ram的偏移地址为0x1a,0x1b;当报文为TCP报文时,校验和写入ram的偏移地址为0x24,0x25。
10.如权利要求9所述的基于FPGA的网络报文的checksum卸载方法,其特征在于,所述步骤S6中,下个报文来自ram的另一储存区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210984800.6A CN115052055B (zh) | 2022-08-17 | 2022-08-17 | 一种基于FPGA的网络报文的checksum卸载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210984800.6A CN115052055B (zh) | 2022-08-17 | 2022-08-17 | 一种基于FPGA的网络报文的checksum卸载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115052055A CN115052055A (zh) | 2022-09-13 |
CN115052055B true CN115052055B (zh) | 2022-11-11 |
Family
ID=83168300
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210984800.6A Active CN115052055B (zh) | 2022-08-17 | 2022-08-17 | 一种基于FPGA的网络报文的checksum卸载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115052055B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200943793A (en) * | 2007-11-28 | 2009-10-16 | Ibm | Methods and arrangements for partial word stores in networking adapters |
CN103595661A (zh) * | 2013-11-28 | 2014-02-19 | 杭州华三通信技术有限公司 | 一种报文分片重组方法及装置 |
CN104660460A (zh) * | 2015-01-15 | 2015-05-27 | 北京奥普维尔科技有限公司 | 一种测试以太网性能的系统及方法 |
CN109426633A (zh) * | 2017-08-30 | 2019-03-05 | 英特尔公司 | 用于管理网络接口控制器的灵活主机接口的技术 |
WO2021208092A1 (zh) * | 2020-04-17 | 2021-10-21 | 华为技术有限公司 | 一种有状态业务的处理方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112769745B (zh) * | 2019-11-01 | 2022-07-22 | 华为技术有限公司 | 传输组播报文的方法和相关装置 |
-
2022
- 2022-08-17 CN CN202210984800.6A patent/CN115052055B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200943793A (en) * | 2007-11-28 | 2009-10-16 | Ibm | Methods and arrangements for partial word stores in networking adapters |
CN103595661A (zh) * | 2013-11-28 | 2014-02-19 | 杭州华三通信技术有限公司 | 一种报文分片重组方法及装置 |
CN104660460A (zh) * | 2015-01-15 | 2015-05-27 | 北京奥普维尔科技有限公司 | 一种测试以太网性能的系统及方法 |
CN109426633A (zh) * | 2017-08-30 | 2019-03-05 | 英特尔公司 | 用于管理网络接口控制器的灵活主机接口的技术 |
WO2021208092A1 (zh) * | 2020-04-17 | 2021-10-21 | 华为技术有限公司 | 一种有状态业务的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN115052055A (zh) | 2022-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108462642B (zh) | 基于fpga的udp/ip硬件协议栈及实现方法 | |
US20060168272A1 (en) | Response time analysis of network performance | |
US8717898B2 (en) | Method and apparatus for calculating packet arrival time interval | |
CN110300074B (zh) | 一种ip报文分片重组方法 | |
CN114584560B (zh) | 一种分片帧重组方法及装置 | |
CN1949695A (zh) | 一种帧数据传输中错帧丢弃的方法和系统 | |
CN115052055B (zh) | 一种基于FPGA的网络报文的checksum卸载方法 | |
CN110620637A (zh) | 一种基于fpga的数据解压装置及方法 | |
CN112787902B (zh) | 报文封装方法及装置、报文解封装方法及装置 | |
CN114422617B (zh) | 一种报文处理方法、系统及计算机可读存储介质 | |
US8943214B2 (en) | Communication apparatus | |
CN111782579B (zh) | 一种基于fpga的以太网协议硬件逻辑处理结构 | |
CN113542148A (zh) | 一种报文聚合方法、装置、网络网卡及可读存储介质 | |
US7133911B1 (en) | Response time analysis of network performance | |
CN111181682A (zh) | 一种基于fpga的gfp帧分片传输的实现方法 | |
CN114153758B (zh) | 具有帧计数功能的跨时钟域数据处理方法 | |
CN114205115A (zh) | 一种数据包处理优化方法、装置、设备及介质 | |
CN110134629B (zh) | 一种基于FPGA的NVMe SSD PCIe数据包解析方法 | |
JP5892325B2 (ja) | ループバック回路 | |
US20020078246A1 (en) | Method and system for network protocol processing | |
CN116893987B (zh) | 硬件加速方法、硬件加速器及硬件加速系统 | |
CN113726753B (zh) | 一种PCIe IP核数据传输方法、装置、设备及介质 | |
JP6873953B2 (ja) | 通信装置、通信装置の制御方法およびプログラム | |
CN114979041B (zh) | 一种提升片上缓存利用效率的拼包方法 | |
CN113872886B (zh) | 一种报文封装的方法及装置 |
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 |