CN104883335B - 一种全硬件tcp协议栈实现系统 - Google Patents

一种全硬件tcp协议栈实现系统 Download PDF

Info

Publication number
CN104883335B
CN104883335B CN201410067748.3A CN201410067748A CN104883335B CN 104883335 B CN104883335 B CN 104883335B CN 201410067748 A CN201410067748 A CN 201410067748A CN 104883335 B CN104883335 B CN 104883335B
Authority
CN
China
Prior art keywords
data
module
tcp
modules
transmission
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
CN201410067748.3A
Other languages
English (en)
Other versions
CN104883335A (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.)
Chengdu Jingyao Communication Technology Co., Ltd.
Original Assignee
王磊
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 王磊 filed Critical 王磊
Priority to CN201410067748.3A priority Critical patent/CN104883335B/zh
Publication of CN104883335A publication Critical patent/CN104883335A/zh
Application granted granted Critical
Publication of CN104883335B publication Critical patent/CN104883335B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种全硬件TCP协议栈实现方法,属于大规模集成电路设计以及网络通信技术领域,旨在通过全硬件的方式实现TCP/IP协议栈中网络接口层、网络层和传输层,从而提高网络传输速率。本发明包括网络接口芯片、外置物理层芯片和DDR存储器芯片,其中网络接口芯片由MAC模块、MAC控制模块、组包模块、解包模块、ARP模块、IP模块、ICMP模块、TCP模块、数据交互引擎、DDR控制器和配置和管理模块构成。本发明采用分层设计思想、接收和发送通道分离、标准化的控制和数据接口技术、多级状态机、数据多级缓存和高效预取技术,降低了实现难度、提高了传输速度。

Description

一种全硬件TCP协议栈实现系统
技术领域
本发明涉及一种全硬件TCP协议栈实现系统,尤其是一种基于ASIC或者FPGA器件,通过全硬件方式实现TCP/IP协议栈中网络接口层、网络层和传输层的方法。属于大规模集成电路设计以及网络通信技术领域。
背景技术
随着信息技术的发展,功能化模块化的设计思想已经逐渐成为了实现复杂功能的必要选择,实现方式也从复杂的高度集成的单一设备向功能分立的系统实现方式转变。这种设计思想和实现方式能够显著减低实现复杂度,使设计、调试和维护等操作简单化。比如在卫星地面站或者雷达中,需要多种信号采集设备、信号处理设备以及显示设备。这就需要一种成熟开放、传输距离远、方便灵活的通信协议来实现各设备之间的信息交互。作为当前发展最为成熟、应用最为广泛的TCP/IP协议和以太网技术已经成为了网络通信的标准,其优点在于通信速率高、传输距离远、方便灵活和抗干扰能力强。
一般来讲,实现以太网网络接口的方法主要有软件和硬件两种方式。
软件方式是采用通用型处理器(INTEL、AMD的X86架构的处理器)或者嵌入式处理器(ARM、IBM的RISC架构的处理器),其上能够运行各种操作系统,通过操作系统中的软件实现的TCP/IP协议来实现网络通信。这种实现方式的优点是简化了繁琐的硬件设计并且比较灵活。然而缺点也比较明显,当网络速度达到吉比特数量级时,主CPU越来越繁忙,其中大部分处理负荷都是来自对TCP/IP协议的处理,比如对IP数据包的校验处理、对TCP数据流的可靠性和一致性处理。大量协议数据还需要通过I/O中断进行操作,不断在网络接口缓冲区和应用程序内存之间进行数据交换,这些额外负担极大地降低了主CPU的处理效率,增加了应用计算的平均等待时间。按照CPU对网络数据流的处理比率分析,大概CPU每处理1比特网络数据,就将消耗1Hz的处理性能,也就是说需要2GHz的CPU处理能力满负荷运行才能满足1GB以太网数据流的处理要求。 面对网络带宽和速度的飞速增长,这种传统的通过软件进行TCP/IP协议处理的方式已经越来越成为高性能网络通信的瓶颈。
硬件方式是通过FPGA或者ASIC使用全硬件的方式来实现TCP/IP协议栈,囊括了TCP/IP协议栈全部的四层结构,独立于CPU运作,信息的进栈/出栈,封包/解包等网络数据处理全部在实现了TCP/IP协议栈的FPGA或者ASIC芯片中进行,卸载掉了CPU对于庞大数据处理的负载,从而使CPU保持高效运转且能够实现高速网络传输,同时也避免了CPU受到网络攻击的危险,增加了CPU工作的安全性。该技术通常被成为TCP Offload Engine(TOE)技术。
美国专利US 6996070 B2“TCP/IP OFFLOAD DEVICE WITH REDUCED SEQUENTIALPROCESSING”和美国专利US 8402142 B2“SYSTEM AND METHOD FOR TCP/IP OFFLOADINDEPENDENT OF BANDWIDTH DELAY PRODUCT”给出了两种实现方法,实现了TOE功能。但是其存在两个主要的缺陷,首先应用领域有限制,很难移植到嵌入式领域;其次从设计上来讲其层次化比较模糊,实现架构比较复杂。
另外商用化的TOE芯片主要有美国Broadcom公司的BCM5709C系列和韩国WIZnet公司的W5100系列芯片。目前,国内还没有类似的专利和芯片。
发明内容
本发明旨在解决传统的通过软件进行TCP/IP协议处理方式带来的网络通信的瓶颈。本发明基于大规模集成电路器件,通过全硬件的方式实现TCP/IP协议栈中网络接口层、网络层和传输层,极大的提高了CPU的处理效率和网络传输速率。
本发明的目的是通过以下技术方案实现的。
本发明的一种全硬件TCP协议栈实现系统在实现上采用了如下五种设计思想和技术:1)分层设计思想;2)接收和发送通道分离;3)标准化的控制和数据接口技术;4)多级状态机;5)数据多级缓存和高效预取技术。旨在提高传输速度、降低设计难度、提高设计可重用性。
本发明的一种全硬件TCP协议栈实现系统其硬件平台使用网络接口芯片100、外置PHY芯片101和DDR芯片102构成。其中网络接口芯片100为主控制芯片,实现了TCP/IP协议栈数据链路层、网络层和传输层的功能,可采用FPGA(Field Programmable Gate Array,现场可编程门阵列),也可使用ASIC(Application-Specific Integrated Circuit,专用集成电路)实现。外置PHY芯片101实现了TCP/IP协议栈的物理层功能,可选择性比较广泛,只要支持MII、GMII、SGMII和RGMII等标准接口的芯片都可以用在本发明中,比如MARVELL公司的88E1111、REALTEK公司的RTL8201CP、MICREL公司的KSZ8001L/S和KSZ8041NL。DDR芯片实现数据缓冲,主要是为了适应比较复杂情况的网络情况和比较大的网络抖动,在比较简单的网络环境中也可以使用网络接口芯片100中的内部RAM做为数据缓冲。
本发明的一种全硬件TCP协议栈实现系统,其中所述的网络接口芯片100由MAC模块1、MAC控制模块2、解包模块3、组包模块4、ARP模块5、ICMP模块6、IP模块7、TCP模块8、数据交互引擎9、DDR控制器10和配置和管理模块11构成。其功能和连接方式为:MAC模块1与外部的PHY芯片连接,其输入接口与组包模块4相连,输出接口与解包模块3相连,控制和状态接口与MAC控制模块2相连;MAC控制模块2与MAC模块1交互发送接收状态信息以及流控制信息,分别控制组包模块4和解包模块3的发送和接收;解包模块3会根据头信息判断接收包类型,把不同类型的包发送给ARP模块5和IP模块7处理;IP模块7把接收的 ICMP包发给ICMP模块6处理,把数据包去掉IP包头之后交给TCP模块8处理;TCP模块8通过标准的存储器接口方式把接收的数据发送到数据交互引擎9,并从数据交互引擎9得到需要发送的数据;数据交互引擎9和DDR控制器10相连,完成数据缓冲,并且该模块还实现了芯片外部接口逻辑;配置和管理模块11通过配置接口分别于TCP模块8和数据交互引擎9相连。
本发明的一种全硬件TCP协议栈实现系统,其中所述的MAC模块1由管理数据接口仲裁17、地址配置寄存器组12、传输引擎13、接收引擎14、流量控制模块15、PHY接口控制逻辑16构成;解包模块3由接收计数器31、接收参数寄存器组32、有效性判断和接收分配模块33构成;组包模块4由发送状态机41、包成形模块42、发送数据缓冲43构成;ARP模块5由ARP包检测和一些功能逻辑构成;ICMP模块6由PING应答数据缓冲61、CRC生成模块62构成;IP模块7由IP包有效性判断模块71、IP包头生成72、IP包头缓冲RAM73构成。TCP模块8由主控制状态机81、TCP接收引擎82、TCP发送引擎83、TCP包解析和参数提取模块84和发送合成复用模块85构成;数据交互引擎9由主机接口控制模块91、读写访问控制模块92、接收数据通道93和发送数据通道94构成;配置和管理模块11由系统寄存器组和中断控制单元构成。
本发明的一种全硬件TCP协议栈实现系统,其数据的接收包括如下步骤:
1.MAC模块接收PHY输出的数据,完成对以太网帧的解包操作,在这个过程中会比较目的地址是否为本机目的地址,以及判断帧是否正确。如果正确,MAC模块会去掉帧头部和尾部然后把数据发送到解包模块;
2.解包模块会根据头信息判断接收包类型,如果是ARP包会发给ARP模块处理,ARP模块处理完成之后产生的ARP应答包会通知组包模块发送,如果是IP数据包会发送给IP模块处理;
3.IP模块内部的IP包有效性判断模块会分析IP包头的参数信息和CRC是否正确。如果是ICMP包会发给ICMP模块处理,ICMP模块处理完成之后产生的ICMP应答包通过组包模块发送,如果是TCP数据包会去掉IP头然后发送给TCP模块处理;
4.TCP模块中的TCP包解析和参数提取模块得到TCP包头中的参数,判断TCP包类型。如果是数据包会交给TCP接收引擎处理,TCP接收引擎中的接收控制状态机会根据设置的条件发送数据应答包,并且把接收的数据放入接收数据缓冲,存储控制模块从缓冲中读出数据交给数据交互引擎;
5.接收的数据在数据交互引擎的接收数据通道内再做一级缓存,然后启动读写访问控制模块把接收的数据放入DDR缓存,并且通过主机接口控制模块生成接收数据中断通知主机取数据;
6.主机接口控制模块在有数据接收的时候会启动读写访问控制模块从DDR预取数据,等待主机读取。
本发明的一种全硬件TCP协议栈实现系统,其数据的发送包括如下步骤:
1.主机把需要发送的数据通过数据交互引擎送入DDR缓存;
2.数据交互引擎的发送数据通道通过读写访问控制模块从DDR预取数据放入发送FIFO中缓存。发送BUF写状态机判断到发送FIFO有数据后会启动读FIFO操作,然后把需要发送的数据按照帧长度送入发送BUFA和发送BUFB,在这个过程中完成数据CRC的计算。如果是重传操作,重传BUF控制状态机会从DDR中读取出重传数据放入重传BUF,同样在写入过程中也完成数据CRC的计算。数据准备好之后通知TCP模块有数据需要发送;
3.TCP发送引擎在发送控制状态机的控制下生成TCP包头存入TCP包头缓冲模块,然后通知IP模块发送。因为发送和接收同时进行,所以发送请求会经过发送合成复用模块复用TCP发送引擎和TCP接收引擎的发送请求;
4.IP模块根据TCP模块提供的发送数据包的信息生成IP包头存入IP包头缓冲RAM,通知组包模块发送;
5.在组包模块的发送状态机的控制下,从IP模块读出IP头,从TCP模块读出TCP头,从数据交互引擎读出待发送的数据,然后根据以太网帧格式生成正确的以太网帧送入MAC模块;
6.MAC模块根据接口方式把数据发给外置的PHY芯片完成实际的数据发送动作。
与现有技术相比,本发明的有益效果包括:
1.传输速度快,在千兆以太网环境下平均传输速率高于850Mbps,也就是其传输效率能达到理论速度的85%以上,远远高于传统的软件协议栈所能实现的传输效率;
2.层次化和模块化的设计结构,设计可重用性强;
3.简单灵活的接口方式,便于使用和集成。
附图说明
图1为本发明硬件平台架构示意图;
图2为本发明网络接口芯片实现架构示意图A;
图3为本发明网络接口芯片实现架构示意图B;
图4为TCP模块主控制状态机状态转移示意图;
图5为接收控制状态机状态转移示意图;
图6为发送控制状态机状态转移示意图;
图7为超时和应答操作控制状态机状态转移示意图。
图中标号说明:
100网络接口芯片、101外置PHY芯片、102 DDR存储器芯片、1 MAC模块、2 MAC控制模块、3 解包模块、4 组包模块、5 ARP模块、6 ICMP模块、7 IP模块、8 TCP模块、9数据交互引擎、10 DDR控制器、11配置和管理模块、17管理数据接口仲裁、12地址配置寄存器组、13传输引擎、14接收引擎、15流量控制模块、16 PHY接口控制逻辑、31接收计数器、32接收参数寄存器组、33有效性判断和接收分配模块、41发送状态机、42包成形模块、43发送数据缓冲、61PING应答数据缓冲、62 CRC生成模块、71 IP包有效性判断模块、72 IP包头生成、73 IP包头缓冲RAM、81主控制状态机、82 TCP接收引擎、83 TCP发送引擎、84 TCP包解析和参数提取模块、85 发送合成复用模块、91主机接口控制模块、92读写访问控制模块、93接收数据通道、94发送数据通道。
具体实施方式
使用发送数据通道94预取需要发送数据。这种接收和发送通道分离的设计思想使得数据的发送和接收不会互相影响,其有益性效果包括1)提高了发送和接收的速度;2)降低了设计的耦合度,降低了实现难度,减少了设计和运行中出错的概率。
三、本发明中所有功能模块的连接方式按照其功能的不同使用了三种标准的接口方式连接。这种标准化的控制和数据接口技术极大的提高了设计的灵活性和模块的可重用性。
1.模块内部数据交互接口
上表标示的接口方向与图2、3中的接口箭头指示方向相关,输出为箭头方向,输入为箭头的反方向。下面的说明也使用该规则。
2.发送指令、信息和数据交互接口
该组信号分为两类,一类用于传输数据,包括data_rd、data和data_vld三个信号;其他的信号用于传输指令和信息。从这个方面来讲,IF11和IF12也可以包含在该组中,区别是只使用了传输数据的信号线。
3.数据缓冲控制接口
使用该组信号可以不用考虑具体的物理缓冲介质,物理缓冲介质不管是DDR、芯片内部的存储器或是其他的存储介质,在实现上只需要修改读写访问控制模块92中对存储器的访问控制的逻辑就可以实现了,而不用修改设计中其他部分。
设计中主要功能模块之间的接口,除了以上所述的三种标准接口以外,只有连接TCP发送引擎83和发送数据通道94之间的IF20接口比较特殊。因为TCP数据发送的时候,除了需要预取正常发送数据之外还要读取重传的数据帧的数据,而重传的时间和重传数据在外部缓冲内的位置都要通过TCP发送引擎通知,所以该接口对比模块内部数据交互接口增加了缓冲器准备好指示信号、缓冲器选择信号、重传指示信号、重传帧序号和重传完成信号。
四、本发明的难点和重点在于TCP协议的实现,也就是TCP模块8的实现。其实现难点体现在五个方面:1)TCP连接的建立和终止;2)TCP数据接收控制;3)TCP数据发送控制;4)超时和重传机制的实现;5)滑动窗的处理和拥塞避免的实现。下面针对上述的五个设计难点的具体实现予以详细说明,同时对多级状态机的实现也做了详细的描述:
1.TCP连接的建立和终止是由主控制状态机81实现的。该状态机作为TCP发送和接收控制的第一级状态机,主要完成两个方面的功能:1)控制TCP连接建立和终止的三次握手;2)传输过程中的异常处理和恢复。状态机的状态转移图如图4所示,状态说明和跳转条件说明如下:
1)DEV_IDLE: 设备空闲状态,设备上电系统默认处于该状态,在运行过程中出现异常情况状态机会跳转到该状态;
2)CL_SEND_SYNC:如果设备作为客户端并且接收到启动连接命令,状态机由DEV_IDLE状态跳转到该状态。设备在该状态会发送带SYN标志位的同步包到服务器端。同步包发送完成之后状态机跳转到CL_CONN_WAIT状态;
3)CL_CONN_WAIT:该状态为设备作为客户端时连接的等待状态,等待服务器端回复的带SYN和ACK标志位的应答包。接收之后跳转到CL_SEND_ACK状态;
4)CL_SEND_ACK:在该状态发送带ACK标志的应答包。发送完成之后状态机跳转到CONN_EST状态表示连接建立成功;
5)SV_SEND_SYNC:如果设备作为服务器端并且接收到客户端发送的带SYN标志位的同步包,状态机由DEV_IDLE状态跳转到该状态。设备在该状态会发送带SYN和ACK标志位的同步包到客户器端。同步包发送完成之后状态机跳转到SV_CONN_WAIT状态;
6)SV_CONN_WAIT:该状态等待客户端发送的带ACK标志位的应答包。接收到之后会跳转到CONN_EST状态表示连接建立成功;
7)CONN_EST:连接建立状态。TCP数据的传输都在该状态完成。只有当主控制状态机位于该状态的时候,处理TCP传输的接收控制状态机和发送控制状态机才开始工作;
8)SEND_FIN1:在TCP传输过程中如果接收到带FIN标志位的关闭连接请求包,状态机由CONN_EST跳转到该状态。该状态会发送带FIN和ACK标志位的关闭连接应答包,表示同意关闭连接。发送完成之后跳转到CLOSE_WAIT1状态;
9) CLOSE_WAIT1:在该状态等待应答包,接收到之后跳到DEV_IDLE状态表示连接关闭;
10)SEND_FIN2:在传输过程中接收到主机关闭连接命令,状态机由CONN_EST跳转到该状态。该状态会发送带FIN标志位的关闭连接请求包,请求关闭连接。发送完成之后跳转到CLOSE_WAIT2状态;
11)CLOSE_WAIT2:该状态等待接收带FIN和ACK标志的关闭连接应答包,接收之后跳转到CLOSE_ACK状态;
12)CLOSE_ACK:该状态发送带ACK标志位的应答包,发送完成之后跳转到DEV_IDLE表示连接关闭。
上述中提到的异常情况主要包含两类:1)接收到带RST标志的复位连接指示包;2)在CL_CONN_WAIT、SV_CONN_WAIT、CLOSE_WAIT1和CLOSE_WAIT2这四个等待状态在预定时间内没有接收到期待的请求或者应答包或接收到的包与期待的不同。此时主控制状态机都会跳转到DEV_IDLE状态等待TCP重新连接,同时会给出中断信号通知主机。
2.TCP数据接收控制是由TCP模块8中的TCP接收引擎82实现的,其主要功能包括1)数据接收;2)CRC校验;3)把接收的数据送入数据交互引擎存储;4)发送数据接收应答包。设计中是通过接口控制状态机来控制何时把接收的数据写入到接收数据缓冲、何时启动存储控制模块读出数据送入数据交互引擎,何时生成发送数据接收应答包等等动作的。该状态机的状态转移图如图5所示,状态说明和跳转条件说明如下:
1)RCV_IDLE: 空闲状态。当接收到有效的数据包时跳转到RECEIVE状态开始接收;
2)RECEIVE:在该状态首先会把接收的数据放入接收数据缓冲,接收数据缓冲设计为乒乓缓冲方式,在数据放入的同时启动存储控制模块从另一个缓冲器里面读出数据送入数据交互引擎。并且在接收的同时对数据的CRC进行判断,根据CRC判断结果作状态跳转;
3)RCV_WAIT:等待状态,在该状态会判断是否达到了应答包发送条件。接收控制和状态寄存器组里包含了接收的数据包个数计数器、接收间隔时间计数器和应答间隔时间计数器。当这三个计数器达到设定的门限状态机跳转到SEND_ACK状态发送数据应答包;
4)SEND_ACK:如果接收数据的CRC错误或者是达到了应答包发送条件状态机跳转到该状态启动数据应答包的发送。该状态只持续一个时钟周期,然后状态机自动跳转到RCV_IDLE状态等待下一个数据包的接收。
上述的接收控制状态机为第二级状态机,只有当主控制状态机处于CONN_EST状态时该状态机才开始工作。如果主控制状态机跳出CONN_EST状态该状态机会无条件的跳转到RCV_IDLE状态。
3.TCP数据发送控制是由TCP模块8中的TCP发送引擎83实现的。设计中是通过发送控制状态机来控制发送的动作。该状态机的状态转移图如图6所示,状态说明和跳转条件说明如下:
1)SEND_IDLE: 空闲状态。当需要发送的数据准备好并且发送窗口(发送窗口的大小和接收端接收窗口剩余的空间以及还没有应答的数据的长度相关)大于本次发送的数据包长度(图中的JPC表示的状态机跳转条件)时跳转到SEND_DATA状态开始发送数据;
2)SEND_DATA:发送数据状态。其主要的动作是生成TCP数据包的包头,每一次TCP数据包的发送其包头内需要变更的是序列号、应答序列号和CRC值。其中序列号是根据发送数据计数器得到的,表示已经发送的数据字节的个数;应答序列号的更新是在发送合成复用模块85里完成的,在TCP发送引擎内不会对其进行操作;CRC值的生成首先需要从数据接口引擎9里读出需要发送的数据的CRC,然后加上包头内其他参数的值。TCP数据包的包头会放入TCP包头缓冲,然后通知IP模块有TCP数据包需要发送。这些动作完成之后状态机跳转到SEND_WAIT状态;
3)SEND_WAIT:发送的中间等待状态。如果JPC条件满足状态机跳转到SEND_DATA状态继续发送数据;如果接收到数据应答包或应答包接收超时状态机跳转到ACK_TO_OPT状态;
4)ACK_TO_OPT:应答和超时处理状态,该状态内会启动应答和超时状态机对应答和超时做处理。如果JPC条件满足状态机跳转到SEND_DATA状态继续发送数据。
上述的发送控制状态机是和接收控制状态机并行操作的第二级状态机,同样只有当主控制状态机处于CONN_EST状态时该状态机才开始工作。如果主控制状态机跳出CONN_EST状态该状态机会无条件的跳转到SEND_IDLE状态。
4.在TCP传输过程中会因为网络拥塞、传输错误或接收端缓冲区溢出等问题造成TCP数据包的丢失,当丢包发生时在传输端的表现是收不到应答包或是收到多次重复的应答包,这就是TCP协议中定义的超时。当超时发生时需要有一种简单高效的重传机制来恢复。
对超时的判断需要一个往返时间超时门限,本发明中使用两种方式得到该门限值:
1)固定门限值,上位机配置一个固定值作为超时门限值。这种方式使用在网络拓扑结构比较简单,要求高速传输的环境下;
2)TCP协议中介绍的往返时间测量方法,也就是Jacobson 1988中定义的算法,基于均值和方差来计算往返时间。其实现公式如下:
Err= M – A’
A= A’+ g * Err
D= D’+ h * (|Err|-D’)
RTO = A + 4D
其中M是本次测量的往返时间、A和A’是被平滑的均值估计器,带上标的表示上一次计算的结果、D和D’是平滑的均值误差,同样带上标的表示上一次的结果、Err为本次测量结果与上一次的均值估计器之差、增量g起平均作用,取值为0.125、偏差的增益是h,取值为0.25、RTO为下一次超时门限。
根据上面的算法可知,每一次测量往返之间之后都会对超时门限进行修改,以确保超时门限和实际的网络延时匹配,不会引起不必要的重传。另外在TCP协议中测量的时间单位为秒,在本发明中用时钟周期作为计量单位,这样使得实现更加简单。
另外对每次收到的应答包的包头中的应答序号进行判断,在本发明中如果连续收到三次相同序号的应答包也判断为传输过程中有丢包的情况发生。
在TCP协议中使用快速重传和快速恢复算法对超时和重传进行操作。该算法易于用软件的方式实现,对硬件实现而言实现过于复杂。本发明中如果丢包的情况发生,就重传丢失的数据包然后等待接收端对丢失的数据包做出应答,在此过程中不发送新的数据包以免引起更多的丢包。在千兆网络的实际测试中,测试结果如下:
从上表所示的测试结果表明使用本发明的算法数据包重传的比例会小于使用快速重传和恢复算法。传输速率在丢包率小于1%的情况下与快速重传和恢复算法相当,只有当丢包率大于2%时传输速率才有明显的下降,但是丢包率大于1%已经是非常极限的情况了。所以本发明使用的重传算法完全能满足正常的网络环境下传输的需求。
本发明使用超时和应答操作状态机来控制应答包的处理和重传操作,。该状态机的状态转移图如图7所示,状态说明和跳转条件说明如下:
1) ATO_IDLE:空闲状态,状态机默认状态。只有当发送控制状态机处于ATO_TO_OPT状态时超时和应答操作状态机才会判断跳转条件做相应的跳转操作;
2) ATO_RESEND:超时或收到三次相同的应答包并且发送状态机处于ACK_TO_ACK状态时状态机由ATO_IDLE跳转到该状态。在该状态会重传丢失的数据包。重传之后状态机停在该状态等待应答包,如果又出现了超时状态机会跳转到ATO_IDLE状态,如果接收到应答包并且应答包的序列号大于重传数据包的序列号,表示接收端对当当发送的重传的数据包做出了应答,状态机跳转到ATO_ACK_OPT状态;
3) ATO_ACK_OPT:该状态不做具体的操作,只持续一个时钟周期。定义该状态的目的是把该状态作为时间分割点,在状态跳转的过程中修改相应的发送控制和状态寄存器的值。在该状态如果收到三次相同应答包的指示信号有效状态机跳转到ATO_RESEND状态启动重传操作,否则状态机跳转到ATO_IDLE状态。
超时和应答操作状态机是和发送控制状态机并行操作的第二级状态机,这两个状态机配合完成TCP的发送操作。比如在发送控制状态机处于SEND_DATA状态正在发送数据包的过程中接收到应答包,应答包的应答序列号为X,而该应答包已经是接收到的第三个相同的应答包,此时会使应答包接收指示信号和接收三次相同应答包指示信号同时有效。数据包头准备好并且启动发送之后发送控制状态机会跳转到SEND_WAIT状态。在SEND_WAIT状态因为应答包接收指示信号有效,发送控制状态机跳转到ACK_TO_OPT状态处理应答包。因为应答包接收指示信号有效,超时和重传状态机会跳转到ATO_ACK_OPT,又因为接收三次相同应答包指示信号有效,会直接从ATO_ACK_OPT跳转到ATO_RESEND状态启动重传操作。进入该状态会修改发送窗口的值,使其等于重传数据包的长度。如果待重传的数据准备好,那么JPC跳转条件满足,发送控制状态机会跳转到SEND_DATA状态,发送序列号为X+1的数据包。完成了丢失的数据包的重传操作。
5.滑动窗的处理和拥塞避免的实现是TCP实现中非常重要的部分。滑动窗口协议是接收方通过TCP头的窗口大小字段通知发送方接收端可用的接收缓冲的大小;拥塞避免的目的是当出现网络拥塞的时候降低数据包进入网络的传输速率以免造成更大的拥塞。
TCP协议中定义了拥塞避免算法对其进行处理,本发明中使用更加严格的拥塞避免算法使其更加适应各种网络情况。算法的工作过程如下:
1)对一个新的连接,初始化发送窗口send_wnd的大小为连接建立过程中接收端回复的应答包头字段中窗口大小的值;
2)如果send_wnd大于本次传输的数据长度,启动数据包的发送操作;
3)发送一个数据包之后,send_wnd需要减去本次发送的数据包长度;
4)每次收到接收端的应答包都会更新send_wnd的值。更新方式为,用已经发送的数据序号sended_data_number减去已经应答的数据序号acked_data_number得到未应答的数据长度noack_data_len。然后比较接收窗口rcv_wnd和noack_data_len,如果noack_data_len大于rcv_wnd,send_wnd赋值为0不启动新的传输,否则send_wnd赋值为noack_data_len与rcv_wnd之差。这样就保证了不会因为接收窗口溢出导致更多的拥塞;
5)当拥塞发生时(超时或接收到重复确认),send_wnd被设置为重传的数据包的长度,仅发送重传包。当重传的数据包得到应答后按照第4步操作。
上述的拥塞避免算法需要对每个连接维持一组发送控制和状态寄存器。寄存器的说明和更新的时间如下表所示:
五、为了提高TCP发送的速率,在数据包发送之前数据需要从存取速度相对比较慢的外部存储器中缓存入存取速度和处理速度匹配的内部存储器中。本发明中该功能使用数据多级缓存和高效预取技术来完成。具体体现在数据交互引擎9的发送数据通道94的设计中。
在设计中使用容量比较大的发送FIFO作为发送数据的第一级缓存,只要是外部存储器中有需要发送的数据,读写访问控制模块92就启动预取操作从外部存储器中读出数据放入发送FIFO中。当判断到发送FIFO中有数据后,发送BUF写状态机会控制数据从发送FIFO中读出然后写入到发送BUFA和BUFB中,在写入的过程中会计算数据的CRC值,在数据写入完成之后把CRC值也写入到发送缓冲器中。两个发送缓冲器组成一组乒乓缓冲,交互的操作,BUFA写入完成之后写入BUFB,然后等待BUFA的数据被读出之后再次把数据写入到BUFA。这两个发送缓冲器作为发送数据的第二级缓存。
另外如果是重传操作,重传BUF控制状态机会从外部存储器中读出需要重传的数据直接写入到重传BUF中。因为重传的数据是少量和随机的,所以只使用了一级缓冲。
当上述的重传BUF、发送BUFA和发送BUFB中的数据准备好之后就通过三个比特的数据准备好信号通知TCP模块进行发送。开始发送之后,数据交互逻辑根据本次发送是否为重发操作以及缓冲器选择信号选择TCP模块对CRC的读取操作和组包模块对数据的读取操作是对哪个缓冲器执行的。
通过上述的数据多级缓存和高效预取技术使得正常发送过程中的数据总是在发送之前就已经准备好,使得数据的准备和发送能够流水的执行,大大提高了发送速率。
本实施方式试运行中,使用XILINX公司型号为XC5VX95TI的FPGA,处理时钟设置为125MHz,在千兆以太网环境下平均传输速率高于850Mbps,也就是其传输效率能达到理论速度的85%以上,远远高于传统的软件协议栈所能实现的传输效率,达到了预期效果。
以上所述的具体描述,对发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (4)

1.一种全硬件TCP协议栈实现系统,其特征在于:硬件平台由网络接口芯片(100)、外置PHY芯片(101)和DDR芯片(102)构成,其中网络接口芯片(100)由MAC模块(1)、MAC控制模块(2)、解包模块(3)、组包模块(4)、ARP模块(5)、ICMP模块(6)、IP模块(7)、TCP模块(8)、数据交互引擎(9)、DDR控制器(10)和配置和管理模块(11)构成;其功能和连接方式为:MAC模块(1)与外部的PHY芯片连接,其输入接口与组包模块(4)相连,输出接口与解包模块(3)相连,控制和状态接口与MAC控制模块(2)相连;MAC控制模块(2)与MAC模块(1)交互发送接收状态信息以及流控制信息,分别控制组包模块(4)和解包模块(3)的发送和接收;解包模块(3)会根据头信息判断接收包类型,把不同类型的包发送给ARP模块(5)和IP模块(7)处理;IP模块(7)把接收的 ICMP包发给ICMP模块(6)处理,把数据包去掉IP包头之后交给TCP模块(8)处理;TCP模块(8)通过标准的存储器接口方式把接收的数据发送到数据交互引擎(9),并从数据交互引擎(9)得到需要发送的数据;数据交互引擎(9)和DDR控制器(10)相连,完成数据缓冲,并且该模块还实现了芯片外部接口逻辑;配置和管理模块(11)通过配置接口分别于TCP模块(8)和数据交互引擎(9)相连;所述的MAC模块(1)由管理数据接口仲裁(17)、地址配置寄存器组(12)、传输引擎(13)、接收引擎(14)、流量控制模块(15)、PHY接口控制逻辑(16)构成;解包模块(3)由接收计数器(31)、接收参数寄存器组(32)、有效性判断和接收分配模块(33)构成;组包模块(4)由发送状态机(41)、包成形模块(42)、发送数据缓冲(43)构成;ARP模块(5)由ARP包检测和一些功能逻辑构成;ICMP模块(6)由PING应答数据缓冲(61)、CRC生成模块(62)构成;IP模块(7)由IP包有效性判断模块(71)、IP包头生成(72)、IP包头缓冲RAM(73)构成;TCP模块(8)由主控制状态机(81)、TCP接收引擎(82)、TCP发送引擎(83)、TCP包解析和参数提取模块(84)和发送合成复用模块(85)构成;数据交互引擎(9)由主机接口控制模块(91)、读写访问控制模块(92)、接收数据通道(93)和发送数据通道(94)构成;配置和管理模块(11)由系统寄存器组和中断控制单元构成。
2.如权利要求1所述的一种全硬件TCP协议栈实现系统,其特征在于:
数据的接收包括如下步骤:
A.MAC模块(1)接收PHY输出的数据,完成对以太网帧的解包操作,在这个过程中会比较目的地址是否为本机目的地址,以及判断帧是否正确;如果正确,MAC模块(1)会去掉帧头部和尾部然后把数据发送到解包模块(3);
B.解包模块(3)会根据头信息判断接收包类型,如果是ARP包会发给ARP模块(5)处理,ARP模块(5)处理完成之后产生的ARP应答包会通知组包模块(4)发送,如果是IP数据包会发送给IP模块(7)处理;
C.IP模块(7)内部的IP包有效性判断模块(71)会分析IP包头的参数信息和CRC是否正确;如果是ICMP包会发给ICMP模块(6)处理,ICMP模块(6)处理完成之后产生的ICMP应答包通过组包模块(4)发送,如果是TCP数据包会去掉IP头然后发送给TCP模块(8)处理;
D.TCP模块(8)中的TCP包解析和参数提取模块(84)得到TCP包头中的参数,判断TCP包类型;如果是数据包会交给TCP接收引擎(82)处理,TCP接收引擎中的接收控制状态机会根据设置的条件发送数据应答包,并且把接收的数据放入接收数据缓冲,存储控制模块从缓冲中读出数据交给数据交互引擎(9);
E.接收的数据在数据交互引擎(9)的接收数据通道(93)内再做一级缓存,然后启动读写访问控制模块(92)把接收的数据放入DDR缓存,并且通过主机接口控制模块(91)生成接收数据中断通知主机取数据;
F.主机接口控制模块(91)在有数据接收的时候会启动读写访问控制模块(92)从DDR中预取数据,等待主机读取;
数据的发送包括如下步骤:
A.主机把需要发送的数据通过数据交互引擎(9)送入DDR缓存;
B.数据交互引擎(9)的发送数据通道(94)通过读写访问控制模块(92)从DDR预取数据放入发送FIFO中缓存;发送BUF写状态机判断到发送FIFO有数据后会启动读FIFO操作,然后把需要发送的数据按照帧长度送入发送BUFA和发送BUFB,在这个过程中完成数据CRC的计算;如果是重传操作,重传BUF控制状态机会从DDR中读取出重传数据放入重传BUF,同样在写入过程中也完成数据CRC的计算;数据准备好之后通知TCP模块(8)有数据需要发送;
C.TCP发送引擎(83)在发送控制状态机的控制下生成TCP包头存入TCP包头缓冲模块,然后通知IP模块(7)发送;因为发送和接收同时进行,所以发送请求会经过发送合成复用模块(85)复用TCP发送引擎(83)和TCP接收引擎(82)的发送请求;
D.IP模块(7)根据TCP模块提供的发送数据包的信息生成IP包头存入IP包头缓冲RAM(73),通知组包模块(4)发送;
E.在组包模块(4)的发送状态机(41)的控制下,从IP模块(7)读出IP头,从TCP模块(8)读出TCP头,从数据交互引擎(9)读出待发送的数据,然后根据以太网帧格式生成正确的以太网帧送入MAC模块(1);
F.MAC模块(1)根据接口方式把数据发给外置的PHY芯片完成实际的数据发送动作。
3.如权利要求1所述的一种全硬件TCP协议栈实现系统,其特征在于:实现上综合运用了分层设计思想、接收和发送通道分离、标准化的控制和数据接口技术、多级状态机、数据多级缓存和高效预取技术,其中:
A.分层设计思想体现在实现按照TCP/IP协议栈分层的方式来设计,并且层与层之间通过标准化的接口方式交互信息,使得各功能互相独立;
B.接收和发送通道分离体现在在网络接口层中使用解包模块(3)和组包模块(4)来处理接收和发送的数据;在TCP模块(8)中使用TCP接收引擎(82)和TCP发送引擎(83)分别来控制数据的接收和发送;在数据交互引擎(9)中使用接收数据通道(93)完成接收数据的缓存,使用发送数据通道(94)预取需要发送数据;这种接收和发送通道分离的思想使得数据的发送和接收不会互相影响,减少了设计耦合性;
C.标准化的控制和数据接口技术体现在所有功能模块的连接方式按照其功能的不同使用了三种标准的接口方式连接;
D.多级状态机体现在TCP模块(8)的实现中,包括主控制状态机、接收控制状态机、发送控制状态机、超时和应答操作状态机,其中主控制状态机为第一级状态机、接收控制状态机和发送控制状态机为第二级状态机、超时和应答操作状态机为第三级状态机,下级状态机只有在上级状态机处于某种特定状态时候才开始动作;
E.数据多级缓存和高效预取技术体现在数据交互引擎(9)的发送数据通道(94)的设计中;使用比较大的发送FIFO作为发送数据的第一级缓存,使用一组乒乓缓冲作为第二级缓存。
4.如权利要求1所述的一种全硬件TCP协议栈实现系统,其特征在于:为了适应各种网络情况使用了比TCP协议中定义的拥塞避免算法更加严格的拥塞避免处理算法,算法的工作过程如下:
A.对一个新的连接,初始化发送窗口的大小为连接建立过程中接收端回复的应答包头字段中窗口大小的值;
B.如果发送窗口大于本次传输的数据长度,启动数据包的发送操作;
C.发送一个数据包之后,发送窗口需要减去本次发送的数据包长度;
D.每次收到接收端的应答包都会更新发送窗口的值;更新方式为,用已经发送的数据序号减去已经应答的数据序号得到未应答的数据长度;然后比较接收窗口和未应答的数据长度,如果未应答的数据长度大于接收窗口,发送窗口赋值为0不启动新的传输,否则发送窗口赋值为未应答的数据长度与接收窗口之差;这样就保证了不会因为接收窗口溢出导致更多的拥塞;
E.当拥塞发生时,发送窗口被设置为重传的数据包的长度,仅发送重传包,当重传的数据包得到应答后按照第4步操作。
CN201410067748.3A 2014-02-27 2014-02-27 一种全硬件tcp协议栈实现系统 Active CN104883335B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410067748.3A CN104883335B (zh) 2014-02-27 2014-02-27 一种全硬件tcp协议栈实现系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410067748.3A CN104883335B (zh) 2014-02-27 2014-02-27 一种全硬件tcp协议栈实现系统

Publications (2)

Publication Number Publication Date
CN104883335A CN104883335A (zh) 2015-09-02
CN104883335B true CN104883335B (zh) 2017-12-01

Family

ID=53950670

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410067748.3A Active CN104883335B (zh) 2014-02-27 2014-02-27 一种全硬件tcp协议栈实现系统

Country Status (1)

Country Link
CN (1) CN104883335B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109756517A (zh) * 2019-03-05 2019-05-14 中国科学院软件研究所 一种基于winpcap的高速网络数据传输方法

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107920043A (zh) * 2016-10-09 2018-04-17 武汉芯泰科技有限公司 芯片内ip包缓冲区与io间安全过滤方法及安全收发器芯片
CN106730823B (zh) * 2016-11-29 2020-07-10 深圳市景创科技电子有限公司 一种数据快速收发的方法及装置
CN109660322B (zh) * 2017-10-12 2022-01-11 深圳市中兴微电子技术有限公司 一种数据处理方法、装置及计算机存储介质
CN110535566B (zh) * 2019-08-30 2021-12-07 重庆高开清芯科技产业发展有限公司 一种基于有限状态机的重传方法及其有效性验证方法
CN112866184B (zh) * 2019-11-28 2022-09-09 科大国盾量子技术股份有限公司 量子密钥分发系统及其专用交互网络协议接口ip
CN111245866B (zh) * 2020-03-04 2021-09-14 深圳市龙信信息技术有限公司 基于硬件加速的以太网应用层协议控制系统及方法
CN112187408B (zh) * 2020-09-28 2024-04-12 北京龙鼎源科技股份有限公司 数据处理方法、系统、装置、存储介质和处理器
CN112953967A (zh) * 2021-03-30 2021-06-11 扬州万方电子技术有限责任公司 网络协议卸载装置和数据传输系统
CN113572582B (zh) * 2021-07-15 2022-11-22 中国科学院计算技术研究所 数据发送、重传控制方法及系统、存储介质及电子设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1910869A (zh) * 2003-12-05 2007-02-07 艾拉克瑞技术公司 具有简化的顺序处理的tcp/ip卸载设备
CN101009659A (zh) * 2006-01-26 2007-08-01 索尼株式会社 接收装置和方法、以及程序
CN201657338U (zh) * 2010-01-26 2010-11-24 烟台毅康电子科技有限公司 一种基于Zigbee技术的以太网无线网关
CN201690477U (zh) * 2010-02-04 2010-12-29 烟台毅康电子科技有限公司 一种基于ZigBee技术的分布式控制器
CN102143218A (zh) * 2011-01-24 2011-08-03 上海红神信息技术有限公司 web接入云体系结构及接入方法
CN102523633A (zh) * 2011-12-16 2012-06-27 西安大唐电信有限公司 一种无线传感器网络网关设备及其信道算法
CN102946447A (zh) * 2012-12-11 2013-02-27 西南大学 一种工业设备远程数据传输系统及方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7295555B2 (en) * 2002-03-08 2007-11-13 Broadcom Corporation System and method for identifying upper layer protocol message boundaries
US7400639B2 (en) * 2003-08-07 2008-07-15 Intel Corporation Method, system, and article of manufacture for utilizing host memory from an offload adapter
US7870268B2 (en) * 2003-09-15 2011-01-11 Intel Corporation Method, system, and program for managing data transmission through a network
US7949792B2 (en) * 2004-02-27 2011-05-24 Cisco Technology, Inc. Encoding a TCP offload engine within FCP

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1910869A (zh) * 2003-12-05 2007-02-07 艾拉克瑞技术公司 具有简化的顺序处理的tcp/ip卸载设备
CN101009659A (zh) * 2006-01-26 2007-08-01 索尼株式会社 接收装置和方法、以及程序
CN201657338U (zh) * 2010-01-26 2010-11-24 烟台毅康电子科技有限公司 一种基于Zigbee技术的以太网无线网关
CN201690477U (zh) * 2010-02-04 2010-12-29 烟台毅康电子科技有限公司 一种基于ZigBee技术的分布式控制器
CN102143218A (zh) * 2011-01-24 2011-08-03 上海红神信息技术有限公司 web接入云体系结构及接入方法
CN102523633A (zh) * 2011-12-16 2012-06-27 西安大唐电信有限公司 一种无线传感器网络网关设备及其信道算法
CN102946447A (zh) * 2012-12-11 2013-02-27 西南大学 一种工业设备远程数据传输系统及方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109756517A (zh) * 2019-03-05 2019-05-14 中国科学院软件研究所 一种基于winpcap的高速网络数据传输方法

Also Published As

Publication number Publication date
CN104883335A (zh) 2015-09-02

Similar Documents

Publication Publication Date Title
CN104883335B (zh) 一种全硬件tcp协议栈实现系统
US20210119930A1 (en) Reliable transport architecture
CN107980213A (zh) 内联网络加速器
US7962825B2 (en) System and methods for high rate hardware-accelerated network protocol processing
CN106341266B (zh) 具有主动和被动传输模式的硬件tcp/ip协议栈装置
US8099474B2 (en) Hardware-accelerated high availability integrated networked storage system
CN105359468B (zh) 用于传送数据的装置、方法、系统和介质
CN103929334B (zh) 网络异常通知方法和装置
CN109089029B (zh) 一种基于FPGA的Gige Vision接口图像传输系统与方法
US20080228897A1 (en) Layering serial attached small computer system interface (sas) over ethernet
CN103731409B (zh) 用于具有tcp加速的嵌入式汽车采集设备的分布式测量装置
CN102065569B (zh) 一种适用于wlan的以太网mac子层控制器
CN1319332C (zh) 基于Linux内核的高速网络流量测量器及流量测量方法
CN101436978A (zh) 使用udp协议进行可靠数据传输的方法
WO1997033227A1 (fr) Procede et appareil de transfert de fichiers sequentiels a grande vitesse, et support d'enregistrement pour le stockage d'un programme en charge dudit transfert
CN110061923A (zh) 流量控制方法、装置、交换机、发送端服务器及介质
CN106534168A (zh) 基于fpga的tcpip协议栈安全化处理系统
CN107787570A (zh) 轻量传送协议
CN110190893A (zh) 一种基于dpdk的卫星信道高速可靠数据传输方法
CN107147655A (zh) 一种网络双协议栈并行处理模型及其处理方法
Chihani et al. A Multipath TCP model for ns-3 simulator
CN110121868A (zh) 通过被配置为加速服务的加速组件的消息传输
JP2986798B2 (ja) データ伝送制御方法およびデータ通信装置
CN111782579B (zh) 一种基于fpga的以太网协议硬件逻辑处理结构
CN109951425B (zh) 基于fpga的tcp流状态完整性检测方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20190624

Address after: 610000 Chunfeng Road, Jinquan Street, Jinniu District, Chengdu City, Sichuan Province

Patentee after: Chengdu Jingyao Communication Technology Co., Ltd.

Address before: 610000 Taisheng Building 2205, 61 Da'an East Road, Qingyang District, Chengdu City, Sichuan Province

Patentee before: Wang Lei