一种全硬件tcp协议栈实现方法
【技术领域】
[0001] 本发明涉及一种全硬件TCP协议栈实现方法,尤其是一种基于ASIC或者FPGA器 件,通过全硬件方式实现TCP/IP协议栈中网络接口层、网络层和传输层的方法。属于大规 模集成电路设计以及网络通信技术领域。
【背景技术】
[0002] 随着信息技术的发展,功能化模块化的设计思想已经逐渐成为了实现复杂功能的 必要选择,实现方式也从复杂的高度集成的单一设备向功能分立的系统实现方式转变。这 种设计思想和实现方式能够显著减低实现复杂度,使设计、调试和维护等操作简单化。比如 在卫星地面站或者雷达中,需要多种信号采集设备、信号处理设备以及显示设备。这就需要 一种成熟开放、传输距离远、方便灵活的通信协议来实现各设备之间的信息交互。作为当前 发展最为成熟、应用最为广泛的TCP/IP协议和以太网技术已经成为了网络通信的标准,其 优点在于通信速率高、传输距离远、方便灵活和抗干扰能力强。
[0003] -般来讲,实现以太网网络接口的方法主要有软件和硬件两种方式。
[0004] 软件方式是采用通用型处理器(INTEUAMD的X86架构的处理器)或者嵌入式处理 器(ARM、IBM的RISC架构的处理器),其上能够运行各种操作系统,通过操作系统中的软件 实现的TCP/IP协议来实现网络通信。这种实现方式的优点是简化了繁琐的硬件设计并且 比较灵活。然而缺点也比较明显,当网络速度达到吉比特数量级时,主CPU越来越繁忙,其 中大部分处理负荷都是来自对TCP/IP协议的处理,比如对IP数据包的校验处理、对TCP数 据流的可靠性和一致性处理。大量协议数据还需要通过I/O中断进行操作,不断在网络接 口缓冲区和应用程序内存之间进行数据交换,这些额外负担极大地降低了主CPU的处理效 率,增加了应用计算的平均等待时间。按照CPU对网络数据流的处理比率分析,大概CPU每 处理1比特网络数据,就将消耗1Hz的处理性能,也就是说需要2GHz的CPU处理能力满负 荷运行才能满足1GB以太网数据流的处理要求。面对网络带宽和速度的飞速增长,这种传 统的通过软件进行TCP/IP协议处理的方式已经越来越成为高性能网络通信的瓶颈。
[0005] 硬件方式是通过FPGA或者ASIC使用全硬件的方式来实现TCP/IP协议栈,囊括了 TCP/IP协议栈全部的四层结构,独立于CPU运作,信息的进栈/出栈,封包/解包等网络数 据处理全部在实现了TCP/IP协议栈的FPGA或者ASIC芯片中进行,卸载掉了CPU对于庞 大数据处理的负载,从而使CPU保持高效运转且能够实现高速网络传输,同时也避免了CPU 受到网络攻击的危险,增加了CPU工作的安全性。该技术通常被成为TCPOffloadEngine (TOE)技术。
[0006]美国专利US6996070B2 "TCP/IPOFFLOADDEVICEWITHREDUCEDSEQUENTIAL PROCESSING" 和美国专利US8402142B2"SYSTEMANDMETHODFORTCP/IPOFFLOAD INDEPENDENTOFBANDWIDTHDELAYPRODUCT"给出了两种实现方法,实现了TOE功能。但是 其存在两个主要的缺陷,首先应用领域有限制,很难移植到嵌入式领域;其次从设计上来讲 其层次化比较模糊,实现架构比较复杂。
[0007] 另外商用化的TOE芯片主要有美国Broadcom公司的BCM5709C系列和韩国WIZnet 公司的W5100系列芯片。目前,国内还没有类似的专利和芯片。
【发明内容】
[0008] 本发明旨在解决传统的通过软件进行TCP/IP协议处理方式带来的网络通信的瓶 颈。本发明基于大规模集成电路器件,通过全硬件的方式实现TCP/IP协议栈中网络接口 层、网络层和传输层,极大的提高了CPU的处理效率和网络传输速率。
[0009] 本发明的目的是通过以下技术方案实现的。
[0010] 本发明的一种全硬件TCP协议栈实现方法在实现上采用了如下五种设计思想和 技术:1)分层设计思想;2)接收和发送通道分离;3)标准化的控制和数据接口技术;4)多 级状态机;5)数据多级缓存和高效预取技术。旨在提高传输速度、降低设计难度、提高设计 可重用性。
[0011] 本发明的一种全硬件TCP协议栈实现方法其硬件平台使用网络接口芯片100、外 置PHY芯片101和DDR芯片102构成。其中网络接口芯片100为主控制芯片,实现了TCP/ IP协议栈数据链路层、网络层和传输层的功能,可采用FPGA(FieldProgrammableGate Array,现场可编程门阵列),也可使用ASIC(Application_SpecificIntegratedCircuit, 专用集成电路)实现。外置PHY芯片101实现了TCP/IP协议栈的物理层功能,可选择性 比较广泛,只要支持Mil、GMII、SGMII和RGMII等标准接口的芯片都可以用在本发明中, 比如MARVELL公司的88E1111、REALTEK公司的RTL8201CP、MICREL公司的KSZ8001L/S和 KSZ8041NL。DDR芯片实现数据缓冲,主要是为了适应比较复杂情况的网络情况和比较大的 网络抖动,在比较简单的网络环境中也可以使用网络接口芯片100中的内部RAM做为数据 缓冲。
[0012] 本发明的一种全硬件TCP协议栈实现方法,其中所述的网络接口芯片100由MAC 模块1、MAC控制模块2、组包模块3、解包模块4、ARP模块5、IP模块6、ICMP模块7、TCP模 块8、数据交互引擎9、DDR控制器10和配置和管理模块11构成。其功能和连接方式为:MAC 模块1与外部的PHY芯片连接,其输入接口与组包模块3相连,输出接口与解包模块4相 连,控制和状态接口与MAC控制模块2相连;MAC控制模块2与MAC模块1交互发送接收状 态信息以及流控制信息,分别控制组包模块3和解包模块4的发送和接收;解包模块4会根 据头信息判断接收包类型,把不同类型的包发送给ARP模块5和IP模块7处理;IP模块7 把接收的ICMP包发给ICMP模块6处理,把数据包去掉IP包头之后交给TCP模块8处理; TCP模块8通过标准的存储器接口方式把接收的数据发送到数据交互引擎9,并从数据交互 引擎9得到需要发送的数据;数据交互引擎9和DDR控制器11相连,完成数据缓冲,并且该 模块还实现了芯片外部接口逻辑;配置和管理模块10通过配置接口分别于TCP模块8和数 据交互引擎9相连。
[0013] 本发明的一种全硬件TCP协议栈实现方法,其中所述的MAC模块1由管理数据接 口仲裁11、地址配置寄存器组12、传输引擎13、接收引擎14、流量控制模块15、PHY接口控 制逻辑16构成;解包模块3由接收计数器21、接收参数寄存器组22、有效性判断和接收分 配模块23构成;组包模块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构成;配置和管理模块10由系统寄 存器组和中断控制单元构成。
[0014] 本发明的一种全硬件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预取数据, 等待主机读取。
[0015] 本发明的一种全硬件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包头缓冲模块, 通知组包模块发送; 5. 在组包模块的发送状态机的控制下,从IP模块读出IP头,从TCP模块读出TCP头, 从数据交互引擎读出待发送的数据,然后根据以太网帧格式生成正确的以太网帧送入MAC 模块
; 6.MAC模块根据接口方式把数据发给外置的PHY芯片完成实际的数据发送动作。
[0016] 与现有技术相比,本发明的有益效果包括: 1. 传输速度快,在千兆以太网环境下平均传输速率高于850Mbps,也就是其传输效率 能达到理论速度的85%以上,远远高于传统的软件协议栈所能实现的传输效率; 2. 层次化和模块化的设计结构,设计可重用性强; 3. 简单灵活的接口方式,便于使用和集成。
[0017]
【附图说明】
[0018]图1为本发明硬件平台架构示意图 图2为本发明网络接口芯片实现架构示意图A图3为本发明网络接口芯片实现架构示意图B 图4为TCP模块主控制状态机状态转移示意图 图5为接收控制状态机状态转移示意图 图6为发送控制状态机状态转移示意图 图7为超时和应答操作控制状态机状态转移示意图 图中标号说明: 100网络接口芯片、101外置PHY芯片、102DDR存储器芯片、1MAC模块、2MAC控制模 块、3组包模块、4解包模块、5ARP模块、6ICMP模块、7IP模块、8TCP模块、9数据交互引 擎、10DDR控制器、11配置和管理模块、11管理数据接口仲裁、12地址配置寄存器组、13传 输引擎、14接收引擎、15流量控制模块、16PHY接口控制逻辑、31接收计数器、32接收参数 寄存器组、33有效性判断和接收分配模块、41发送状态机、42包成形模块、43发送数据缓 冲、61PING应答数据缓冲、62CRC生成模块、71IP包有效性判断模块、72IP包头生成、73 IP包头缓冲RAM、81主控制状态机、82TCP接收引擎、83TCP发送引擎、84TCP包解析和参 数提取模块、85发送合成复用模块、91主机接口控制模块、92读写访问控制模块、93接收 数据通道、94发送数据通道。
【具体实施方式】
[0019] 本发明详细结构、应用原理、作用与功效,参照附图1-6,通过如下实施方式予以说 明。
[0020] 本发明硬件平台架构如图1所示,其中主要的控制器为网络接口芯片,该芯片通 过标准的MII/GMII/SGMII/RGMII接口与外置的PHY芯片相连,通过标准的DDR接口与DDR 芯片相连。本发明中网络接口芯片的实现架构如图2和3所示,主要包括十一个主要的功 能模块。这两部分已经在
【发明内容】
中详细描述了。
[0021] 下面分别描述网络接口芯片中各模块的功能和具体设计方法,进一步对本发明进 行解释,其侧重点在于说明分层设计思想、接收和发送通道分离、标准化的控制和数据接口 技术、多级状态机、数据多级缓存和高效预取技术在设计中如何体现的,以及如何提高传输 性能的。另外对一些关键的实现细节也进行了阐述。
[0022] -、整个网络接口芯片的架构完全按照TCP/IP协议栈分层实现的方式来设计。其 中外置PHY芯片101实现了网络接口层中的物理层功能;MAC模块1、MAC控制模块2、组包 模块3、解包模块4和ARP模块一起实现了网络接口层中的数据链路层的功能;IP模块7和 ICMP模块6组合在一起实现网络层的功能;TCP模块8实现了传输层功能。并且在设计中 层与层之间通过标准化的接口方式交互信息。通过这种方式使得各功能互相独立,提高了 设计的灵活性,减小了设计复杂度。比如需要在设计中加入对IGMP协议的支持,只需要增 加一个IGMP的模块,然后通过IF5同样的接口方式和IP模块连接,通过IF8同样的接口与 组包模块连接就可以实现,而不用改动设计中其他部分。
[0023] 二、在网络接口层中使用解包模块3和组包模块4来处理接收和发送的数据;在 TCP模块8中使用TCP接收引擎82和TCP发送引擎83分别来控制数据的接收和发送;在 数据交互引擎9中使用接收数据通道93完成接收数据的缓存,使用发送数据通道94预取 需要发送数据。这种接收和发送通道分离的设计思想使得数据的发送和接收不会互相影 响,其有益性效果包括1)提高了发送和接收的速度;2)降低了设计的耦合度,降低了实现 难度,减少了设计和运行中出错的概率。
[0024] 三、本发明中所有功能模块的连接方式按照其功能的不同使用了三种标准的接口 方式连接。这种标准化的控制和数据接口技术极大的提高了设计的灵活性和模块的可重用 性。
[0025] 1?模块内部数据交互接口
上表标示的接口方向与图2、3中的接口箭头指示方向相关,输出为箭头方向,输入为 箭头的反方向。下面的说明也使用该规则。
[0026] 2.发送指令、信息和数据交互接口
该组信号分为两类,一类用于传输数据,包括data_rd、data和data_vld三个信号;其 他的信号用于传输指令和信息。从这个方面来讲,IF11和IF12也可以包含在该组中,区别 是只使用了传输数据的信号线。
[0027] 3.数据缓冲控制接口
使用该组信号可以不用考虑具体的物理缓冲介质,物理缓冲介质不管是DDR、芯片内部 的存储器或是其他的存储介质,在实现上只需要修改读写访问控制模块92中对存储器的 访问控制的逻辑就可以实现了,而不用修改设计中其他部分。
[0028] 设计中主要功能模块之间的接口,除了以上所述的三种标准接口以外,只有连接 TCP发送引擎83和发送数据通道94之间的IF20接口比较特殊。因为TCP数据发送的时候, 除了需要预取正常发送数据之外还要读取重传的数据帧的数据,而重传的时间和重传数据 在外部缓冲内的位置都要通过TCP发送引擎通知,所以该接口对比模块内部数据交互接口 增加了缓冲器准备好指示信号、缓冲器选择信号、重传指示信号、重传帧序号和重传完成信 号。
[0029] 四、本发明的难点和重点在于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_C0NN_WAIT:该状态等待客户端发送的带ACK标志位的应答包。接收到之后会跳 转到CONN_EST状态表示连接建立成功; 7) CONN_EST:连接建立状态。TCP数据的传输都在该状态完成。只有当主控制状态机 位于该状态的时候,处理TCP传输的接收控制状态机和发送控制状态机才开始工作; 8) SEND_FIN1 :在TCP传输过程中如果接收到带FIN标志位的关闭连接请求包,状态机 由CONN_EST跳转到该状态。该状态会发送带FIN和ACK标志位的关闭连接应答包,表示同 意关闭连接。发送完成之后跳转到CL0SE_WAIT1状态; 9)CL0SE_WAIT1 :在该状态等待应答包,接收到之后跳到DEV_IDLE状态表示连接关闭; 10)SEND_FIN2:在传输过程中接收到主机关闭连接命令,状态机由CONN_EST跳转到该 状态。该状态会发送带FIN标志位的关闭连接请求包,请求关闭连接。发送完成之后跳转 至ljCL0SE_WAIT2状态; 11) CL0SE_WAIT2 :该状态等待接收带FIN和ACK标志的关闭连接应答包,接收之后跳 转到CLOSE_ACK状态; 12)CL0SE_ACK:该状态发送带ACK标志位的应答包,发送完成之后跳转到DEV_IDLE表 示连接关闭。
[0030] 上述中提到的异常情况主要包含两类:1)接收到带RST标志的复位连接指示包; 2)在CL_C0NN_WAIT、SV_C0NN_WAIT、CL0SE_WAIT1 和CL0SE_WAIT2 这四个等待状态在预定 时间内没有接收到期待的请求或者应答包或接收到的包与期待的不同。此时主控制状态机 都会跳转到DEV_IDLE状态等待TCP重新连接,同时会给出中断信号通知主机。
[0031] 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状态等待下一个数据包的接收。
[0032] 上述的接收控制状态机为第二级状态机,只有当主控制状态机处于C0NN_EST状 态时该状态机才开始工作。如果主控制状态机跳出C0NN_EST状态该状态机会无条件的跳 转到RCV_IDLE状态。
[0033] 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_T0_0PT状态; 4) ACK_T0_0PT:应答和超时处理状态,该状态内会启动应答和超时状态机对应答和超 时做处理。如果JPC条件满足状态机跳转到SEND_DATA状态继续发送数据。
[0034] 上述的发送控制状态机是和接收控制状态机并行操作的第二级状态机,同样只有 当主控制状态机处于C0NN_EST状态时该状态机才开始工作。如果主控制状态机跳出C0NN_EST状态该状态机会无条件的跳转到SEND_IDLE状态。
[0035] 4.在TCP传输过程中会因为网络拥塞、传输错误或接收端缓冲区溢出等问题造成 TCP数据包的丢失,当丢包发生时在传输端的表现是收不到应答包或是收到多次重复的应 答包,这就是TCP协议中定义的超时。当超时发生时需要有一种简单高效的重传机制来恢 复。
[0036]对超时的判断需要一个往返时间超时门限,本发明中使用两种方式得到该门限 值: 1) 固定门限值,上位机配置一个固定值作为超时门限值。这种方式使用在网络拓扑结 构比较简单,要求高速传输的环境下; 2)TCP协议中介绍的往返时间测量方法,也就是Jacobson1988中定义的算法,基于均 值和方差来计算往返时间。其实现公式如下: Err=M- A=A, +g*Err D=D,+h* (|Err|_D,) RT0=A+ 4D 其中M是本次测量的往返时间、A和A'是被平滑的均值估计器,带上标的表示上一次 计算的结果、D和D'是平滑的均值误差,同样带上标的表示上一次的结果、Err为本次测量 结果与上一次的均值估计器之差、增量g起平均作用,取值为0. 125、偏差的增益是h,取值 为0. 25、RT0为下一次超时门限。
[0037]根据上面的算法可知,每一次测量往返之间之后都会对超时门限进行修改,以确 保超时门限和实际的网络延时匹配,不会引起不必要的重传。另外在TCP协议中测量的时 间单位为秒,在本发明中用时钟周期作为计量单位,这样使得实现更加简单。
[0038]另外对每次收到的应答包的包头中的应答序号进行判断,在本发明中如果连续收 到三次相同序号的应答包也判断为传输过程中有丢包的情况发生。
[0039]在TCP协议中使用快速重传和快速恢复算法对超时和重传进行操作。该算法易于 用软件的方式实现,对硬件实现而言实现过于复杂。本发明中如果丢包的情况发生,就重传 丢失的数据包然后等待接收端对丢失的数据包做出应答,在此过程中不发送新的数据包以 免引起更多的丢包。在千兆网络的实际测试中,测试结果如下:
从上表所示的测试结果表明使用本发明的算法数据包重传的比例会小于使用快速重 传和恢复算法。传输速率在丢包率小于1%的情况下与快速重传和恢复算法相当,只有当丢 包率大于2%时传输速率才有明显的下降,但是丢包率大于1%已经是非常极限的情况了。所 以本发明使用的重传算法完全能满足正常的网络环境下传输的需求。
[0040] 本发明使用超时和应答操作状态机来控制应答包的处理和重传操作,。该状态机 的状态转移图如图7所示,状态说明和跳转条件说明如下: 1) AT0_IDLE:空闲状态,状态机默认状态。只有当发送控制状态机处于AT0_T0_0PT状 态时超时和应答操作状态机才会判断跳转条件做相应的跳转操作; 2) AT0_RESEND:超时或收到三次相同的应答包并且发送状态机处于ACK_T0_ACK状态 时状态机由AT0_IDLE跳转到该状态。在该状态会重传丢失的数据包。重传之后状态机停 在该状态等待应答包,如果又出现了超时状态机会跳转到AT0_IDLE状态,如果接收到应答 包并且应答包的序列号大于重传数据包的序列号,表示接收端对当当发送的重传的数据包 做出了应答,状态机跳转到AT0_ACK_0PT状态; 3) AT0_ACK_0PT:该状态不做具体的操作,只持续一个时钟周期。定义该状态的目的是 把该状态作为时间分割点,在状态跳转的过程中修改相应的发送控制和状态寄存器的值。 在该状态如果收到三次相同应答包的指示信号有效状态机跳转到AT0_RESEND状态启动重 传操作,否则状态机跳转到AT0_IDLE状态。
[0041] 超时和应答操作状态机是和发送控制状态机并行操作的第二级状态机,这两个状 态机配合完成TCP的发送操作。比如在发送控制状态机处于SEND_DATA状态正在发送数据 包的过程中接收到应答包,应答包的应答序列号为X,而该应答包已经是接收到的第三个相 同的应答包,此时会使应答包接收指示信号和接收三次相同应答包指示信号同时有效。数 据包头准备好并且启动发送之后发送控制状态机会跳转到SEND_WAIT状态。在SEND_WAIT 状态因为应答包接收指示信号有效,发送控制状态机跳转到ACK_T0_0PT状态处理应答包。 因为应答包接收指示信号有效,超时和重传状态机会跳转到AT0_ACK_0PT,又因为接收三次 相同应答包指示信号有效,会直接从AT0_ACK_0PT跳转到AT0_RESEND状态启动重传操作。 进入该状态会修改发送窗口的值,使其等于重传数据包的长度。如果待重传的数据准备好, 那么JPC跳转条件满足,发送控制状态机会跳转到SEND_DATA状态,发送序列号为X+1的数 据包。完成了丢失的数据包的重传操作。
[0042] 5.滑动窗的处理和拥塞避免的实现是TCP实现中非常重要的部分。滑动窗口协议 是接收方通过TCP头的窗口大小字段通知发送方接收端可用的接收缓冲的大小;拥塞避免 的目的是当出现网络拥塞的时候降低数据包进入网络的传输速率以免造成更大的拥塞。
[0043] TCP协议中定义了拥塞避免算法对其进行处理,本发明中使用更加严格的拥塞避 免算法使其更加适应各种网络情况。算法的工作过程如下: 1)对一个新的连接,初始化发送窗口send_wnd的大小为连接建立过程中接收端回复 的应答包头字段中窗口大小的值; 2)如果sencLwnd大于本次传输的数据长度,启动数据包的发送操作; 3)发送一个数据包之后,sencLwnd需要减去本次发送的数据包长度; 4)每次收到接收端的应答包都会更新sencUnd的值。更新方式为,用已经发送的数 据序号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)当拥塞发生时(超时或接收到重复确认),sencLwnd被设置为重传的数据包的长度, 仅发送重传包。当重传的数据包得到应答后按照第4步操作。
[0044] 上述的拥塞避免算法需要对每个连接维持一组发送控制和状态寄存器。寄存器的 说明和更新的时间如下表所示:
五、为了提高TCP发送的速率,在数据包发送之前数据需要从存取速度相对比较慢的 外部存储器中缓存入存取速度和处理速度匹配的内部存储器中。本发明中该功能使用数据 多级缓存和高效预取技术来完成。具体体现在数据交互引擎9的发送数据通道94的设计 中。
[0045] 在设计中使用容量比较大的发送FIFO作为发送数据的第一级缓存,只要是外部 存储器中有需要发送的数据,读写访问控制模块92就启动预取操作从外部存储器中读出 数据放入发送FIFO中。当判断到发送FIFO中有数据后,发送BUF写状态机会控制数据从发 送FIFO中读出然后写入到发送BUFA和BUFB中,在写入的过程中会计算数据的CRC值,在 数据写入完成之后把CRC值也写入到发送缓冲器中。两个发送缓冲器组成一组乒乓缓冲, 交互的操作,BUFA写入完成之后写入BUFB,然后等待BUFA的数据被读出之后再次把数据写 入到BUFA。这两个发送缓冲器作为发送数据的第二级缓存。
[0046] 另外如果是重传操作,重传BUF控制状态机会从外部存储器中读出需要重传的数 据直接写入到重传BUF中。因为重传的数据是少量和随机的,所以只使用了一级缓冲。
[0047] 当上述的重传BUF、发送BUFA和发送BUFB中的数据准备好之后就通过三个比特的 数据准备好信号通知TCP模块进行发送。开始发送之后,数据交互逻辑根据本次发送是否 为重发操作以及缓冲器选择信号选择TCP模块对CRC的读取操作和组包
模块对数据的读取 操作是对哪个缓冲器执行的。
[0048] 通过上述的数据多级缓存和高效预取技术使得正常发送过程中的数据总是在发 送之前就已经准备好,使得数据的准备和发送能够流水的执行,大大提高了发送速率。
[0049] 本实施方式试运行中,使用XILINX公司型号为XC5VX95TI的FPGA,处理时钟设置 为125MHz,在千兆以太网环境下平均传输速率高于850Mbps,也就是其传输效率能达到理 论速度的85%以上,远远高于传统的软件协议栈所能实现的传输效率,达到了预期效果。
[0050] 以上所述的具体描述,对发明的目的、技术方案和有益效果进行了进一步详细说 明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范 围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明 的保护范围之内。
【主权项】
1. 一种全硬件TCP协议栈实现方法,其特征在于:硬件平台由网络接口芯片(100)、外 置PHY芯片(101)和DDR芯片(102)构成,其中网络接口芯片(100)由MAC模块(1)、MAC控 制模块(2)、组包模块(3)、解包模块(4)、ARP模块(5)、IP模块(6)、ICMP模块(7)、TCP模块 (8)、数据交互引擎(9)、DDR控制器(10)和配置和管理模块(11)构成;其功能和连接方式 为:MAC模块(1)与外部的PHY芯片连接,其输入接口与组包模块(3 )相连,输出接口与解包 模块(4 )相连,控制和状态接口与MAC控制模块(2 )相连;MAC控制模块(2 )与MAC模块(1) 交互发送接收状态信息以及流控制信息,分别控制组包模块(3)和解包模块(4)的发送和 接收;解包模块(4)会根据头信息判断接收包类型,把不同类型的包发送给ARP模块(5)和 IP模块(7)处理;IP模块(7)把接收的ICMP包发给ICMP模块(6)处理,把数据包去掉IP 包头之后交给TCP模块(8)处理;TCP模块(8)通过标准的存储器接口方式把接收的数据发 送到数据交互引擎(9),并从数据交互引擎(9)得到需要发送的数据;数据交互引擎(9)和 DDR控制器(11)相连,完成数据缓冲,并且该模块还实现了芯片外部接口逻辑;配置和管理 模块(10)通过配置接口分别于TCP模块(8)和数据交互引擎(9)相连。2. 如权利要求1所述的一种全硬件TCP协议栈实现方法,其特征在于:所述的MAC模块 (1)由管理数据接口仲裁(11)、地址配置寄存器组(12)、传输引擎(13)、接收引擎(14)、流 量控制模块(15)、PHY接口控制逻辑(16)构成;解包模块(3)由接收计数器(21)、接收参数 寄存器组(22)、有效性判断和接收分配模块(23)构成;组包模块(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)构成;配置和管理模块(10)由系统寄存 器组和中断控制单元构成。3. 如权利要求1所述的一种全硬件TCP协议栈实现方法,其特征在于: 数据的接收包括如下步骤: A. MAC模块(1)接收PHY输出的数据,完成对以太网帧的解包操作,在这个过程中会比 较目的地址是否为本机目的地址,以及判断帧是否正确;如果正确,MAC模块(1)会去掉帧 头部和尾部然后把数据发送到解包模块(2); B. 解包模块(2)会根据头信息判断接收包类型,如果是ARP包会发给ARP模块(5)处 理,ARP模块(5 )处理完成之后产生的ARP应答包会通知组包模块(3 )发送,如果是IP数据 包会发送给IP模块(7)处理; C. IP模块(7)内部的IP包有效性判断模块(71)会分析IP包头的参数信息和CRC是 否正确;如果是ICMP包会发给ICMP模块(6)处理,ICMP模块(6)处理完成之后产生的ICMP 应答包通过组包模块(3)发送,如果是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包头缓冲 模块(72 ),通知组包模块(4 )发送; E. 在组包模块(4)的发送状态机(41)的控制下,从IP模块(7)读出IP头,从TCP模 块(8)读出TCP头,从数据交互引擎(9)读出待发送的数据,然后根据以太网帧格式生成正 确的以太网帧送入MAC模块(1); F. MAC模块(1)根据接口方式把数据发给外置的PHY芯片完成实际的数据发送动作。4.如权利要求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作为发送数据的第一级缓存,使用一组乒乓缓冲作为第二级 缓存。5.如权利要求1所述的一种全硬件TCP协议栈实现方法,其特征在于:为了适应各种 网络情况使用了比TCP协议中定义的拥塞避免算法更加严格的拥塞避免处理算法,算法的 工作过程如下: A. 对一个新的连接,初始化发送窗口的大小为连接建立过程中接收端回复的应答包头 字段中窗口大小的值; B. 如果发送窗口大于本次传输的数据长度,启动数据包的发送操作; C. 发送一个数据包之后,发送窗口需要减去本次发送的数据包长度; D. 每次收到接收端的应答包都会更新发送窗口的值;更新方式为,用已经发送的数据 序号减去已经应答的数据序号得到未应答的数据长度;然后比较接收窗口和未应答的数据 长度,如果未应答的数据长度大于接收窗口,发送窗口赋值为〇不启动新的传输,否则发送 窗口赋值为未应答的数据长度与接收窗口之差;这样就保证了不会因为接收窗口溢出导致 更多的拥塞; E. 当拥塞发生时(超时或接收到重复确认),发送窗口被设置为重传的数据包的长度, 仅发送重传包,当重传的数据包得到应答后按照第4步操作。
【专利摘要】本发明公开了一种全硬件TCP协议栈实现方法,属于大规模集成电路设计以及网络通信技术领域,旨在通过全硬件的方式实现TCP/IP协议栈中网络接口层、网络层和传输层,从而提高网络传输速率。本发明包括网络接口芯片、外置物理层芯片和DDR存储器芯片,其中网络接口芯片由MAC模块、MAC控制模块、组包模块、解包模块、ARP模块、IP模块、ICMP模块、TCP模块、数据交互引擎、DDR控制器和配置和管理模块构成。本发明采用分层设计思想、接收和发送通道分离、标准化的控制和数据接口技术、多级状态机、数据多级缓存和高效预取技术,降低了实现难度、提高了传输速度。
【IPC分类】H04L29/06
【公开号】CN104883335
【申请号】CN201410067748
【发明人】王磊
【申请人】王磊
【公开日】2015年9月2日
【申请日】2014年2月27日
转载请注明原文地址:https://www.famiwei.com/read-8136242.html