基于FPGA的多层协议数据包封装装置及方法与流程

文档序号:12822198阅读:398来源:国知局
基于FPGA的多层协议数据包封装装置及方法与流程

本发明属于大规模集成电路设计以及数据通信技术领域,特别涉及一种基于fpga的多层协议数据包封装装置及方法,可应用于多种复杂协议栈数据处理。



背景技术:

伴随着雷达、遥感、通信等领域的高速发展,对多种信号采集设备、信号处理设备以及显示设备的需求越来越大,不同设备之间的通信更是必不可少,多层次的网络通信协议被广泛应用于实现各设备之间的信息交互,如tcp/ip协议(transmissioncontrolprotocol/internetprotocol,传输控制协议)。通常来讲,实现对多层协议数据包的处理主要有软件实现和硬件实现两种方式。

软件实现方式通常是采用处理器或者嵌入式微处理器,通过操作系统中的应用程序实现对多层协议数据包的处理。这种方式的优点在于实现简单、具有很高的灵活性并且技术成熟,但也存在不可忽视的缺陷。随着光纤技术在通信和数据传输领域的发展,网络带宽的增长速度远远超过处理器性能提升的速度,当网络速度达到吉比特时,处理器越来越繁忙。按照cpu(centralprocessingunit,中央处理器)对网络数据流处理比率分析,大概cpu每处理1比特网络数据,需要消耗1hz主频的处理器全负荷运行,其中大部分处理负荷来自对多层协议数据包的处理,例如对协议数据包的校验、封装等操作。同时,该方式在对协议数据包进行校验、封装时需要申请大量缓存,而对大量缓存的多次读写操作也为cpu增加了负担。因此软件处理多层协议数据包的方式也越来越成为高性能网络通信发展的瓶颈。

硬件方式主要通过fpga(field-programmablegatearray,现场可编程门阵列)使用纯逻辑处理方式来实现协议栈处理。虽然在国内外科研资料中未查阅到有关硬件方式实现对多层协议数据包进行高速处理的具体技术细节,但fpga芯片具有的密度高、速度快、功率小、并行运算等特点和fpga自顶向下的模块化设计思想为硬件方式实现对多层协议数据包的高速处理提供可能性。



技术实现要素:

本发明的目的在于克服上述现有技术存在的缺陷,提出了一种基于fpga的多层协议数据包封装装置及方法,用于解决现有采用处理器或嵌入式微处理器在封装高速多层协议数据包时存在的缓存需求量大和处理能力低的技术问题。

为了实现上述目的,本发明采取的技术方案为:

一种基于fpga的多层协议数据包封装装置,包括缓存模块、校验模块和数据包封装模块,该三个模块的逻辑功能是通过fpga实现的,其中:

缓存模块,用于接收并缓存外部输入的用户数据;

校验模块,用于接收外部输入的用户数据,并对该数据进行校验计算,得到用户数据校验和;

数据包封装模块,包括用户层协议封装层、多层中间层协议封装层和最底层协议封装层,且用户层协议封装层嵌套在多层中间层协议封装层中,多层中间层协议封装层嵌套在最底层协议封装层中,形成嵌套架构,其中:

用户层协议封装层,用于对本层待封装的协议数据包首部进行校验并对缓存模块输出的用户数据和校验模块输出的用户数据校验和进行封装,得到用户层协议数据包;

多层中间层协议封装层,包括多个相互嵌套且结构相同、代表不同协议的封装层,用于对封装后的用户层协议数据包进行多层协议的校验和封装,得到中间层协议数据包;

最底层协议封装层,用于对中间层协议数据包进行最底层的校验和封装,得到数据帧并输出。

上述基于fpga的多层协议数据包封装装置,用户层协议封装层,包括用户层校验模块、用户层封装计数器和多个代表不同协议的用户层子协议封装状态机;

上述基于fpga的多层协议数据包封装装置,多层中间层协议封装层,其多个封装层中的每一层包括中间层校验模块、中间层封装计数器和多个代表不同协议的中间层子协议封装状态机;

上述基于fpga的多层协议数据包封装装置,最底层协议封装层,包括最底层校验模块、最底层封装计数器和最底层协议封装状态机。

上述基于fpga的多层协议数据包封装装置,用户层子协议封装状态机、中间层子协议封装状态机和最底层协议封装状态机,采用相同的结构及状态跳转机制,各状态机代表不同的协议类型。

上述基于fpga的多层协议数据包封装装置,用户层校验模块、中间层校验模块和最底层校验模块,其结构相同,用于计算各封装层协议数据包的首部校验和并发送至该层的协议封装状态机。

上述基于fpga的多层协议数据包封装装置,用户层封装计数器、中间层封装计数器和最底层封装计数器,其结构相同,用于对其所属封装层中已封装首部的字节数进行计数,并将当前计数值与该层协议数据包的首部长度进行比较。

上述基于fpga的多层协议数据包封装装置,嵌套架构,是通过将各协议层中的各协议封装状态机嵌套在其各自的下层协议封装状态机中实现的。

一种基于fpga的多层协议数据包封装方法,包括如下步骤:

(1)将外部输入的用户数据输入到缓存模块中并缓存;

(2)将外部输入的用户数据输入到校验模块进行校验计算,得到用户数据校验和;

(3)用户分别选用数据包封装模块中各协议层中的一个子协议封装状态机作为当前的工作状态机后,所选的各层协议封装状态机与其各自上、下层中用户所选的协议封装状态机之间,采用握手控制的方式进行两次信息交互,实现步骤为:

(3a)用户层子协议封装状态机在等待状态中,确定用户所选的所有中间层子协议封装状态机和最底层协议封装状态机均处于空闲状态:查询用户所选的所有中间层子协议封装状态机和最底层协议封装状态机是否均处于空闲状态,若是,执行步骤(3b),否则,处于忙碌状态的子协议封装状态机向其上层子协议封装状态机回应忙碌信号,接收忙碌信号的上层子协议封装状态机接收到忙碌信号后均停留在当前状态,并循环执行步骤(3a);

(3b)用户所选的协议封装状态机从等待状态依次进入各自的准备状态:用户所选的用户层子协议封装状态机跳转至准备状态,并检查缓存模块中的用户数据和校验模块中的用户数据校验和是否准备好,若是,则向用户所选多层子协议封装状态机发送准备好信号,并停留在当前状态,同时多层中间层协议封装层中用户所选的各中间层子协议封装状态机收到其上层传递的准备好信号后,分别进入各自的准备状态并向各自的下层子协议封装状态机发送准备好信号,直至最底层协议封装状态机收到准备好信号并跳转至准备状态,并执行步骤(3c),否则,循环执行步骤(3b);

(3c)屏蔽所有未被用户选用的子协议状态机:最底层协议封装状态机向数据包封装模块中所有未被用户选用的子协议状态机发送忙碌信号,收到该忙碌信号后所有未被选用的子协议状态机均处于非工作状态;

(3d)最底层协议封装状态机实现该层协议数据包首部的同步封装和发送:最底层协议封装状态机跳转至封装状态,启动该层的封装计数器并对该层的协议数据包首部进行同步封装和发送,同时向其上层用户所选的子协议封装状态机发送进行同步校验和封装的首部校验开始信号,其上层的校验模块开始校验;当最底层协议数据包首部封装至最后一个字节时,最底层协议封装状态机向其上层用户所选的子协议封装状态机发送封装开始信号,并停留在当前状态;

(3e)各层用户所选的子协议封装状态机实现其各层协议数据包首部的校验、封装和发送:各层用户所选的子协议封装状态机收到封装开始信号后跳转至封装状态,启动该层的封装计数器并对该层的协议数据包进行同步封装和发送,同时向其上层用户所选的子协议封装状态机发送进行同步校验和封装的首部校验开始信号,其上层的校验模块开始校验;当封装至本层协议数据包首部的最后一个字节时,本层所选的子协议封装状态机向其上层用户所选的子协议封装状态机发送开始封装信号,并停留在当前状态;将该层的首部校验和及用户数据校验和整合计算得到最终校验和,并完成用户层协议数据包的同步封装和发送;

(4)用户所选的各协议层的协议封装状态机间依次传递封装完成信号并分别进入各自的初始等待状态,实现一次用户数据包的封装:用户所选的用户层子协议封装状态机完成本层协议数据包封装后,向其下层用户所选的协议封装状态机发送封装完成信号;各层用户所选的协议封装状态机收到封装完成信号后,分别向其各自下层用户所选的协议封装状态机发送封装完成信号,并跳转至初始等待状态,直至最底层协议封装状态机收到封装完成信号后,开始为封装完成的最底层协议数据包添加数据包尾部信息,将该尾部信息添加完毕后,跳转至初始等待状态。

本发明与现有技术相比,具有如下优点:

1.本发明由于缓存模块、校验模块和数据包封装模块均基于fpga实现,且fpga芯片具有密度高、速度快、功率小、并行运算等优点,与现有采用性能有限的处理器或嵌入式微处理器对复杂协议栈进行处理相比,有效地节省了缓存资源并提高了对高速协议数据的处理能力。

2.本发明由于在数据封装模块中采用多层协议状态机嵌套架构,结构清晰、便于维护。

3.本发明由于在实现对多层协议数据包进行封装的过程中,除对用户数据进行缓存外,不对其余各协议层封装后的协议数据包进行缓存,可有效地节省芯片资源,有利于简化逻辑和总体设计的时序优化。

4.本发明由于在实现对多层协议数据包进行封装的过程中,多层协议封装状态机之间采用握手控制的方式进行信息交互,实现多层协议数据包的同步校验和封装以及同步封装和发送,有效地节省了工作时间并提高了工作效率。

附图说明

图1为本发明基于fpga的多层协议数据包封装装置的整体结构示意图;

图2为本发明基于fpga的多层协议数据包封装装置中的多层状态机嵌套架构示意图;

图3为本发明实施例中tcp/ip协议栈的多层状态机嵌套架构示意图;

图4为本发明基于fpga的多层协议数据包封装方法的实现流程框图;

图5为本发明实施例的tcp/ip协议栈中各层协议封装状态机间的握手控制信号流向及各状态机状态转移示意图;

图6为本发明基于fpga的多层协议数据包封装方法所适用的多层协议数据包帧格式示意图;

图7为实施例中tcp/ip协议栈数据包帧格式示意图。

具体实施方式

以下结合附图和实施例,对本发明作进一步详细说明,本实施例中的多层协议以tcp/ip协议栈为例。

参照图1,本发明的基于fpga的多层协议数据包封装装置,包括缓存模块、校验模块和数据包封装模块,该三个模块的逻辑功能通过fpga实现。由于fpga芯片本身具有密度高、速度快、功率小、并行计算等优点,本发明可实现对多层协议数据包的高速处理。

缓存模块,用于接收并缓存外部输入的用户数据。

校验模块,用于接收外部输入的用户数据,并对该数据进行校验计算,得到用户数据校验和;

数据包封装模块,包括用户层协议封装层、多层中间层协议封装层和最底层协议封装层。

用户层协议封装层,包括用户层校验模块、用户层封装计数器和多个代表不同协议的用户层子协议封装状态机,用于对本层待封装的协议数据包首部进行校验并对缓存模块输出的用户数据和校验模块输出的用户数据校验和进行封装,得到用户层协议数据包。

多层中间层协议封装层,包括多个相互嵌套且结构相同、代表不同协议的封装层,其多个封装层中的每一层包括中间层校验模块、中间层封装计数器和多个代表不同协议的中间层子协议封装状态机用于对封装后的用户层协议数据包进行多层协议的校验和封装,得到中间层协议数据包。

最底层协议封装层,包括最底层校验模块、最底层封装计数器和最底层协议封装状态机,用于对中间层协议数据包进行最底层的校验和封装,得到数据帧并输出。

用户层协议封装层嵌套在多层中间层协议封装层中,多层中间层协议封装层嵌套在最底层协议封装层中,形成嵌套架构,具体是通过将各协议层中的各协议封装状态机嵌套在其各自的下层协议封装状态机中实现的。本发明中多层状态机嵌套架构示意图如图2所示。

参照图2,本发明的多层状态机嵌套架构中,各协议封装状态机的工作关系为:在各协议封装状态机的特定状态下,其各自的上层协议封装状态机开始工作,即各协议封装状态机将其各自下层协议封装状态机的状态作为自身的工作条件,各状态机同时运行,彼此依赖,互为条件。

本发明中多层状态机嵌套的设计具有结构清晰、便于维护的优点,适用于复杂的多层协议数据包封装应用场合。

由于编程复杂度及实际工程应用的需求,本发明实施例中的tcp/ip协议栈只具有三个协议封装层,分别对应于本发明中的户层协议封装层、中间层协议封装层、和最底层协议封装层,其中中间层协议封装层只具有一个协议层,但本发明同样适用于中间层协议封装层含多个协议层的场合。实施例中tcp/ip协议栈的多层状态机嵌套架构示意图如图3所示。

参照图3,tcp/ip协议作为一种成熟开放、方便灵活的通信协议,被广泛应用于实现各设备之间的信息交互且tcp/ip协议栈具有多层协议,其协议除应用层外具有三层的层级结构,其中:

用户协议封装层包括两个子协议封装状态机,分别为icmp封装状态机和tcp封装状态机;

中间层协议封装层包括两个子协议封装状态机,分别为arp封装状态机和ip封装状态机;

最底层协议封装层包括以太网协议封装状态机。

由于工程实际应用需求,将用户协议封装层的icmp封装状态机和tcp封装状态机嵌套在中间层协议封装层的ip封装状态机中,再将arp封装状态机和ip封装状态机嵌套在最底层协议封装层的以太网协议封装状态机中。各状态机工作关系为:以太网协议封装状态机的特定状态下arp封装状态机和ip封装状态机开始工作,在ip封装状态机的特定状态下icmp封装状态机和tcp封装状态机开始工作。

由于本发明的基于fpga的多层协议数据包封装装置中的用户层子协议封装状态机、中间层子协议封装状态机和最底层协议封装状态机数量庞大,因此采用相同的状态机结构和状态跳转机制,降低了实现难度,利于开发者进行代码设计与维护。同时各状态机代表不同的协议类型,可根据用户的实际需求灵活修改各状态机所代表的协议类型,工程适用性强。

用户层校验模块、中间层校验模块和最底层校验模块,其结构相同,用于计算各封装层协议数据包的首部校验和并发送至该层的协议封装状态机。

用户层封装计数器、中间层封装计数器和最底层封装计数器,其结构相同,用于对其所属封装层中已封装首部的字节数进行计数,并将当前计数值与该层协议数据包的首部长度进行比较。所得结果用于判断该封装层的协议数据包首部是否封装至最后一个字节。该计数器与其各自所属层中封装状态机的状态跳转机制严密配合,实现封装后上、下层协议数据包的首部之间无缝连接。

参照图4,本发明的基于fpga的多层协议数据包封装方法,包括如下步骤:

步骤(1):将外部输入的用户数据输入到缓存模块中并缓存。本发明的基于fpga的多层协议数据包封装方法中,只对用户数据进行缓存,其余各层协议封装层均无需申请缓存,因此可以节省有限的芯片资源并省去对内存的多次读写操作,有利于简化逻辑和总体设计的时序优化。

步骤(2):将外部输入的用户数据输入到校验模块进行校验计算,得到用户数据校验和。

由于校验用户数据需要的计算量及校验需花费的时钟周期依据用户协议数据包的帧长而定,为了节省时钟周期,提高用户协议数据包的封装发送效率,在用户数据写入缓存模块的同时,校验模块以拟定的帧长对用户数据包进行校验计算,因此当缓存模块的用户数据准备好时,已经计算得出待发送用户数据的校验和。

该步骤中用户数据的校验与步骤(3)中用户层协议数据包首部的校验独立进行,分别得到用户数据校验和及用户层协议数据包首部校验和。当用户层协议封装状态机开始封装后,再将用户数据校验和及用户层协议数据包首部校验和合并计算出最终校验和,并参与该层协议数据包的封装。

步骤(3):用户分别选用数据包封装模块中各协议层中的一个子协议封装状态机作为当前的工作状态机后,所选的各层协议封装状态机与其各自上、下层中用户所选的协议封装状态机之间,采用握手控制的方式进行两次信息交互,实现步骤为:

步骤(3a):用户层子协议封装状态机在等待状态中,确定用户所选的所有中间层子协议封装状态机和最底层协议封装状态机均处于空闲状态:查询用户所选的所有中间层子协议封装状态机和最底层协议封装状态机是否均处于空闲状态,若是,执行步骤(3b),否则,处于忙碌状态的子协议封装状态机向其上层子协议封装状态机回应忙碌信号,接收忙碌信号的上层子协议封装状态机接收到忙碌信号后均停留在当前状态,并循环执行步骤(3a);

步骤(3b):用户所选的协议封装状态机从等待状态依次进入各自的准备状态:用户所选的用户层子协议封装状态机跳转至准备状态,并检查缓存模块中的用户数据和校验模块中的用户数据校验和是否准备好,若是,则向用户所选多层子协议封装状态机发送准备好信号,并停留在当前状态,同时多层中间层协议封装层中用户所选的各中间层子协议封装状态机收到其上层传递的准备好信号后,分别进入各自的准备状态并向各自的下层子协议封装状态机发送准备好信号,直至最底层协议封装状态机收到准备好信号并跳转至准备状态,并执行步骤(3c),否则,循环执行步骤(3b);

步骤(3c):屏蔽所有未被用户选用的子协议状态机:最底层协议封装状态机向数据包封装模块中所有未被用户选用的子协议状态机发送忙碌信号,收到该忙碌信号后所有未被选用的子协议状态机均处于非工作状态;

步骤(3d):最底层协议封装状态机实现该层协议数据包首部的同步封装和发送:最底层协议封装状态机跳转至封装状态,启动该层的封装计数器并对该层的协议数据包首部进行同步封装和发送,同时向其上层用户所选的子协议封装状态机发送进行同步校验和封装的首部校验开始信号,其上层的校验模块开始校验;当最底层协议数据包首部封装至最后一个字节时,最底层协议封装状态机向其上层用户所选的子协议封装状态机发送封装开始信号,并停留在当前状态;

步骤(3e):各层用户所选的子协议封装状态机实现其各层协议数据包首部的校验、封装和发送:各层用户所选的子协议封装状态机收到封装开始信号后跳转至封装状态,启动该层的封装计数器并对该层的协议数据包进行同步封装和发送,同时向其上层用户所选的子协议封装状态机发送进行同步校验和封装的首部校验开始信号,其上层的校验模块开始校验;当封装至本层协议数据包首部的最后一个字节时,本层所选的子协议封装状态机向其上层用户所选的子协议封装状态机发送开始封装信号,并停留在当前状态;将该层的首部校验和及用户数据校验和整合计算得到最终校验和,并完成用户层协议数据包的同步封装和发送。

步骤(3d)和步骤(3e)中所涉及的同步校验和封装,是指各协议层的协议数据首部封装与其各自的上层协议数据包首部校验同步进行,可以节省校验协议数据包首部需要的时间,并有效提高工作效率,具体为:

当各协议层的下层协议封装状态机开始封装其协议数据包首部时,该层的协议封装状态机收到首部校验开始信号并使能该层的校验模块,该校验模块开始校验计算本层的协议数据包首部校验和;

当各协议层的下层协议数据包首部被封装完毕时,其各自的协议封装状态机开始封装发送本层协议数据包,此时该层的校验模块已将其协议数据包首部校验完毕,并得到协议数据包首部校验和。

步骤(3d)和步骤(3e)中所涉及的同步封装和发送,是指各协议层中协议数据包封装与协议数据包发送同步进行:一次用户数据包封装发送操作中,经过各层协议封装层快速的握手响应后,最底层协议封装状态机立即跳转至封装状态开始封装该协议层首部,并且各层协议封装层中封装后数据包数据信号与该层数据输出接口直接相连,做到封装与发送同步进行,有效提高工作效率。

实施例的tcp/ip协议栈中各层协议封装状态机间的握手控制信号流向及各状态机状态转移示意图如图5所示。

参照图5,对封装一次tcp协议数据包时各协议封装状态机之间的信息交互和各协议封装状态机的状态跳转进行说明:

用户层子协议状态机选用tcp封装状态机,中间层子协议状态机选用ip封装状态机,最底层协议封装状态机为以太网协议封装状态机;

步骤(3)中的信息交互开始时,所有状态机均处于各自的等待状态,两次信息交互具体步骤如下:

步骤(3a):tcp封装状态机确认ip封装状态机和以太网协议封装状态机是否均处于空闲状态:tcp封装状态机向ip封装状态机发送询问信号,ip封装状态机收到询问信号后向以太网封装状态机发送询问信号;以太网封装状态机收到询问信号后向ip封装状态机回应空闲信号,ip封装状态机收到空闲信号后向tcp封装状态机发送空闲信号;tcp封装状态机收到空闲信号后,确定ip封装状态机和以太网协议封装状态机均处于空闲状态,所有状态机停留在当前状态,并执行下一步骤;

步骤(3b):tcp封装状态机、ip封装状态机和以太网协议封装状态机依次进入各自的准备状态:tcp封装状态机跳转至准备状态,并向ip封装状态机发送准备好信号;ip封装状态机收到准备好信号后跳转至准备状态,并向以太网协议封装状态机发送准备好信号;以太网协议封装状态机收到准备好信号后跳转至准备状态,执行下一步骤;

步骤(3c):屏蔽icmp封装状态机和arp封装状态机:以太网协议封装状态机向icmp封装状态机和arp封装状态机发送忙碌信号,使icmp封装状态机和arp封装状态机均处于非工作状态;

步骤(3d):以太网协议封装状态机实现以太网协议数据包首部的同步封装和发送:

以太网协议封装状态机跳转至封装状态,开始同步封装和发送以太网协议数据包首部并向ip封装状态机发送首部校验开始信号,ip封装状态机收到首部校验开始信号后使能ip层的校验模块,该校验模块开始校验ip数据包首部;当以太网协议数据包首部封装至最后一个字节时,以太网协议封装状态机向ip封装状态机发送封装开始信号,并停留在当前状态;

步骤(3e):ip封装状态机实现ip层的ip数据包首部的校验、封装和发送,tcp封装状态机实现tcp层的tcp数据包首部的校验、封装和发送:ip收到封装开始信号后,开始同步封装和发送ip数据包首部并向tcp封装状态机发送首部校验开始信号,tcp封装状态机收到首部校验开始信号后使能tcp层的校验模块,该校验模块开始校验tcp数据包首部;当ip数据包首部封装至最后一个字节时,ip封装状态机向tcp封装状态机发送封装开始信号,并停留在当前状态;tcp收到封装开始信号后,将用户数据校验和及tcp数据包首部校验和合并计算,得到最终校验和,并完成tcp数据包的同步封装和发送;

步骤(4):各协议层的协议封装状态机间依次传递封装完成信号并分别进入各自的初始等待状态,实现一次用户数据包的封装:用户所选的用户层子协议封装状态机完成本层协议数据包封装后,向其下层用户所选的协议封装状态机发送封装完成信号;各层用户所选的协议封装状态机收到封装完成信号后,分别向其各自下层用户所选的协议封装状态机发送封装完成信号,并跳转至初始等待状态,直至最底层协议封装状态机收到封装完成信号后,开始为封装完成的最底层协议数据包添加数据包尾部信息,将该尾部信息添加完毕后,跳转至初始等待状态。

本发明基于fpga的多层协议数据包封装方法所适用的多层协议数据包帧格式如图6所示。

参照图6,本发明基于fpga的多层协议数据包封装方法所适用的多层协议数据包帧格式具有多层嵌套的特点,除最底层协议数据包具有尾部信息外,每个协议的数据包均由首部和数据区组成,每层子协议数据包均封装于其下层子协议数据包中。

实施例中tcp/ip协议栈数据包帧格式如图7所示。

参照图7,实施例中tcp/ip协议栈数据包帧格式为:tcp数据包、ip数据包、均由协议数据包首部和用户数据组成,以太网协议数据包由协议数据包首部、用户数据和以太网帧尾组成。tcp数据包封装于ip数据包中,ip数据包封装于以太网数据包中。

以上描述仅是本发明的一个具体实例,显然对于本领域的专业人员来说,在了解了本发明内容和原理后,都可能在不背离本发明原理、结构的情况下,进行形式和细节上的各种修正和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利要求保护范围之内。

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