一种基于FPGA的以太网报文可靠传输的实现方法与流程

文档序号:30368577发布日期:2022-06-10 23:53阅读:290来源:国知局
一种基于FPGA的以太网报文可靠传输的实现方法与流程
一种基于fpga的以太网报文可靠传输的实现方法
技术领域
1.本发明属于网络通信技术领域,具体涉及一种基于fpga的以太网报文可靠传输的实现方法。


背景技术:

2.目前在网络可靠传输通信方面的技术有已经很成熟的tcp协议,tcp协议是面向连接并且是在传输层实现的可靠传输。在点对点的网络环境,如果用tcp协议实现报文的可靠传输相对来说比较复杂。由于fpga的资源有限的客观性存在,在fpga实现一套tcp协议的可靠传输机制比较困难。此外,当通信出现异常时恢复正常通信也比较困难。


技术实现要素:

3.(一)要解决的技术问题
4.本发明要解决的技术问题是提出一种在fpga上比较容易实现,消耗资源少,传输效率高,当通信异常时可快速定位问题,也可快速恢复正常通信的可靠传输方法。
5.(二)技术方案
6.为了解决上述技术问题,本发明提出了一种基于fpga的以太网报文可靠传输的实现方法,所述技术方案如下:
7.一种基于fpga的以太网报文可靠传输的实现方法,其特征在于,重新定义可靠传输的报文帧格式,包括可靠头字段,所述可靠头字段包含包序列号;具体通信过程如下:s1初始化阶段:以太网终端1向fpga端发送握手包,握手包携带以太网终端1即将发送的报文的包序列号,fpga端接收到握手包后向以太网终端1发送握手包,握手包携带fpga侧即将发送的报文的包序列号;s2数据通信阶段:以太网终端1把报文发送给fpga的可靠模块1的接收模块;fpga的可靠模块1的接收模块对报文的可靠头字段进行解析,并将所述报文发送给fpga的可靠模块2的发送模块;fpga的可靠模块2的发送模块把所述报文发送给以太网终端2,并等待以太网终端2回复相应的应答包;s3结束通信阶段:当fpga侧发送超时重传数据包达到一定数量并且没有收到任何包,认为链路断开通信结束。
8.进一步地,所述可靠头字段还包括:报文类型、包应答号、接收状态和发送状态。
9.进一步地,所述fpga的可靠模块1的接收模块对报文的可靠头字段进行解析,包括:
10.判断是否是数据包,如果是数据包,判断该包的包序列号是否是期望的包序列号,如果是,将该包进行缓存等待被取走,如果连续收到n个正常的数据包,告知本侧发送模块向以太网终端1发送正常的应答包,应答包的包应答号为第n个正常数据包的包序列号+1。
11.进一步地,如果该包的包序列号小于期望的包序列号,认为是重传的数据包,fpga侧丢弃此包同时告知本侧发送模块立即向以太网终端1发送正常的应答包;如果该包的包序列号大于期望的包序列号并且收到的包序列号和期望的包序列号差值小于窗口值,则认为数据包丢包,丢弃所有大于期望包序列号的数据包,并且告知本侧发送模块立即向以太
网终端1发送重传应答包;如果该包的包序列号大于期望的包序列号并且收到的包序列号和期望的包序列号差值不小于窗口值,则认为失步,告知本侧发送模块立即向以太网终端1发送含有失步信息的应答包。
12.进一步地,以太网终端1收到fpga侧发送的含有失步状态的应答包后,会向fpga侧发送握手包,当fpga侧收到握手包后,会返回一个握手包,重新建立通信。
13.进一步地,可靠模块2的发送模块采用滑动窗口向以太网终端2发送数据包,启动计时器等待以太网终端2回复相应的应答包,如果计时器超时,可靠模块2的接收模块还未接收到期望的应答包,可靠模块2的发送模块会重传相应的数据包;如果计时器未超时,可靠模块2的接收模块收到期望的应答包,更新滑动窗口;如果可靠模块2的接收模块收到重传应答包,告知可靠模块2的发送模块重传相应的数据包。
14.进一步地,所述s2数据通信阶段还可以进行双向通信:以太网终端1把报文1发送给fpga的可靠模块1的接收模块,以太网终端2把报文2发送给fpga的可靠模块2的接收模块;fpga的可靠模块1的接收模块对以太网终端1发送的所述报文1进行可靠头字段解析,并将所述报文1发送给fpga的可靠模块2的发送模块;fpga的可靠模块2的接收模块对以太网终端2发送的所述报文2进行可靠头字段解析,并将所述报文2发送给fpga的可靠模块1的发送模块;fpga的可靠模块2的发送模块把所述报文1发送给以太网终端2,fpga的可靠模块2的接收模块等待以太网终端2回复相应的应答包1,fpga的可靠模块1的发送模块把所述报文2发送给以太网终端1,fpga的可靠模块1的接收模块等待以太网终端1回复相应的应答包2。
15.(三)有益效果
16.本发明提高了可靠传输的性能,消耗逻辑资源较少,降低复杂度。当网络出现异常失步时,已接收的数据包不丢失,大大降低网络异常时的重传率。当网络异常时,终端通过解析报文的可靠头字段,可以快速定位出现的问题,便于快速恢复到正常网络。
附图说明
17.图1为本发明的整体框架图。
18.图2为传输的报文帧格式。
19.图3为报文单向通信框图。
20.图4为重传流程。
21.图5为报文双向通信框图。
22.图6为fpga侧实现报文双向可靠传输流程。
23.图7为滑动窗口机制。
具体实施方式
24.为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
25.图1为本发明的整体框架图。如图1所示,以太网终端1和以太网终端2之间是全双工通信。其中实线代表应用数据报文从以太网终端1经过fpga到达以太网终端2的处理过程,虚线代表应用数据报文从以太网终端2经过fpga到达以太网终端1的处理过程。以太网
终端1和fpga之间、以太网终端2和fpga之间均需可靠传输以确保以太网终端之间传送的报文是无丢失,无重复,流量可控制。
26.为实现以太网终端和fpga之间的可靠传输,重新定义传输的报文帧格式见图2。可靠头字段的定义如下:
27.报文类型:定义了四种报文类型,分别为握手包,数据包,应答包,数据+应答包。
28.握手包一是用于初始化以太网终端和fpga的包序列号,二是用于当以太网终端和fpga之间通信失步后,重新更新以太网终端和fpga的包序列号。当报文类型为握手包时需关注包序列号字段。
29.数据包是指仅包含应用数据的包,包括重传的数据包。当报文类型为数据包,只需关注包序列号和发送状态。
30.应答包一是当接收到正常的包含应用数据的包时,回复给发送方表示收到此包的确认包,二是当接收到包含应用数据的包有丢包时,回复给发送方表示需要发送方重传的应答包。当报文类型为应答包时,需关注包应答号和接收状态。
31.数据+应答包是指数据包中携带需要应答信息的包。当报文类型为数据+应答包时,需关注包序列号、包应答号、接收状态和发送状态。
32.包序列号:数据包(含数据+应答包)或者握手包的编号。以太网终端和fpga各自维护自己的包序列号。如果是正常的数据包(含数据+应答包),包序列号累加1;如果是重传的数据包(含数据+应答包),包序列号为重传应答包(含数据+应答包)的应答号;如果是握手包,初始化阶段,该字段以太网终端从任意值开始,fpga从0开始,失步时,握手包中该字段表示期望收到的下一个数据包(含数据+应答包)的包序列号。
33.包应答号:应答包(含数据+应答包)的编号,表示期望收到下一数据包(含数据+应答包)的包序列号。当以太网终端接收到正常的数据包(含数据+应答包),此字段是该数据包(含数据+应答包)的包序列号加1;当fpga连续接收到n(n值可通过寄存器配置获得,1《=n《窗口值)个正常的数据包(含数据+应答包),此字段是第n个数据包(含数据+应答包)的包序列号加1。当接收到丢包的数据包(含数据+应答包),此字段是丢的第一个数据包(含数据+应答包)的包序列号。
34.接收状态:表示接收数据包(含数据+应答包)的状态,包括是否有丢包,缓存是否满,报文类型是否正常。应答包(含数据+应答包)中更新此状态。正常情况下,此状态为正常,缓存未满,报文类型正常。如果有丢包,将正常更新为丢包状态,如果缓存满,将缓存未满更新为缓存满状态,如果报文类型异常,将报文类型正常更新为异常。
35.发送状态:表示发送方当前发送的状态,包括是否是重传数据包(含数据+应答包),窗口是否满,是否失步。正常情况下,此状态为正常,窗口未满,无失步。如果已发送的数据包(含数据+应答包)等待相应应答包超时或者收到重传应答包重传数据包(含数据+应答包)时,将正常更新为重传;如果没有多余的窗口可发送数据包(含数据+应答包),将窗口未满更新为窗口满;如果接收的应答包(含数据+应答包)的包应答号超出窗口最大值,将无失步更新为失步。
36.以太网终端和fpga之间实现可靠传输共有s1、s2、s3三个阶段。
37.s1.初始化阶段。
38.首先以太网终端1向fpga发送握手包,握手包携带以太网终端1即将发送的报文的
包序列号,fpga接收到握手包后初始化接收模块维护的期望接收包序列号,然后向以太网终端1发送握手包,握手包携带fpga侧即将发送的报文的包序列号,以太网终端1接收到握手包后初始化维护的期望接收包序列号。
39.通过一发一收的握手包机制初始化以太网终端和fpga侧的包序列号,然后再开始通信,简化了建立通信的流程。
40.s2.数据通信阶段。
41.分为单向通信和双向通信。单向通信,要么是以太网终端1经过fpga向以太网终端2发送数据包,要么是以太网终端2经过fpga向以太网终端1发送数据包,即仅有图1的实线流程或者虚线流程,此时接收方在向发送方回复应答包时不会有数据包发送,所以不会出现数据+应答包。双向通信即图1的实线流程和虚线流程同时处理。以太网终端1和以太网终端2同时经过fpga向对端发送数据包,此时接收方在向发送方回复应答包的同时会有数据包要发送,所以会出现数据+应答包。
42.图3为报文单向通信的实现框图,以太网终端1向以太网终端2发送数据包为例。
43.s11:以太网终端1把报文发送给fpga的可靠模块1的接收模块;
44.s12:fpga的可靠模块1的接收模块对报文的可靠头进行解析,一方面告知本侧的发送模块向以太网终端1发送相应的应答包,另一方面fpga的可靠模块1的接收模块会把报文发送给fpga的可靠模块2的发送模块;
45.s13:fpga的可靠模块2通过发送模块把报文发送给以太网终端2的同时本侧的接收模块等待以太网终端2回复相应的应答包。
46.fpga侧具体实现过程如下:可靠模块1的接收模块对接收的报文帧格式中的可靠头字段进行解析。判断是否是数据包,如果是数据包,判断该包的包序列号是否是期望的包序列号,如果是,一方面将该包进行缓存等待被取走,另一方面如果是连续收到n个正常的数据包,告知本侧发送模块向以太网终端1发送正常的应答包,应答包的包应答号为第n个正常数据包的包序列号+1;
47.如果该包的包序列号小于期望的包序列号,认为是重传的数据包,为避免以太网终端一直重传该数据包,fpga侧丢弃此包的同时告知本侧发送模块立即向以太网终端1发送正常的应答包;
48.如果该包的包序列号大于期望的包序列号并且收到的包序列号和期望的包序列号差值小于窗口值,认为数据包丢包,丢弃所有大于期望包序列号的数据包,并且告知本侧发送模块立即向以太网终端1发送重传应答包;
49.如果该包的包序列号大于期望的包序列号并且收到的包序列号和期望的包序列号差值不小于窗口值,认为失步,告知本侧发送模块立即向以太网终端1发送含有失步信息的应答包。以太网终端收到fpga侧发送的含有失步状态的应答包后,会向fpga侧发送握手包,当fpga侧收到握手包后,会返回一个握手包,表明重新建立起通信,更新本侧接收模块期望收到的应答包的包应答号。握手包只会改变期望的数据包的包序列号或者期望的应答包的包应答号,已正常缓存的数据包不会丢失。
50.如果不是数据包,是握手包,则更新期望收到的数据包的包序列号,告知本侧发送模块发送握手包。如果是其他报文做丢弃操作。
51.如果是数据包,其可靠头信息会被裁减掉,被裁减后的数据包达到可靠模块2的发
送模块后,可靠模块2的发送模块根据本侧的包序列号编号,对包含应用数据的包添加可靠头信息变成新的数据包再发送给以太网终端2,采用滑动窗口发送数据包,如果滑动窗口未满并且还有待发送的数据包,继续向以太网终端2发送数据包。如果滑动窗口已满并且还有待发送的数据包,此时不会继续向以太网终端2发送数据包,一直等到滑动窗口不满时才会继续发送数据包。可靠模块2的发送模块启动计时器等待以太网终端2发送的应答包,如果计时器超时,可靠模块2的接收模块还未接收到期望的应答包,可靠模块2的发送模块会重传相应的数据包;如果计时器未超时,本侧的接收模块如果收到期望的应答包,更新滑动窗口;如果可靠模块2的收到重传应答包,告知本侧发送模块重传相应的数据包,重传数据包处理过程见图4;如果收到的应答包的包应答号超出期望包应答号和窗口值的和,认为失步,告知本侧发送模块发送包含失步信息的应答包。
52.图5为报文双向通信的实现框图。当双向通信以以太网终端1向以太网终端2发送数据包的同时以太网终端2也会向以太网终端1发送数据包为例。
53.s21:以太网终端1把该侧数据包(含数据+应答包)发送给fpga的可靠模块1的接收模块的同时以太网终端2把该侧数据包(含数据+应答包)发送给fpga的可靠模块2的接收模块;
54.s22:fpga的可靠模块1的接收模块对以太网终端1发送的报文进行可靠头字段解析,一方面告知本侧的发送模块向以太网终端1发送相应的应答包,另一方面fpga的可靠模块1的接收模块会把数据包发送给fpga的可靠模块2的发送模块;fpga的可靠模块2的接收模块对以太网终端2发送的可靠头字段解析,一方面告知本侧的发送模块以太网终端2发送相应的应答包,另一方面fpga的可靠模块2会把数据包发送给fpga的可靠模块1的发送模块。
55.s23:fpga的可靠模块2通过发送模块把数据包(含数据+应答包)发送给以太网终端2的同时本侧的接收模块等待以太网终端2回复相应的应答包(含数据+应答包);fpga的可靠模块1通过发送模块把数据包(含数据+应答包)发送给以太网终端1的同时本侧的接收模块等待以太网终端1回复相应的应答包(含数据+应答包)。
56.以太网终端1对应fpga的可靠模块1,以太网终端2对应fpga的可靠模块2。可靠模块1的对侧为可靠模块2,可靠模块2的对侧为可靠模块1。
57.fpga侧具体实现过程参见图6,可靠模块1和可靠模块2实现流程相同。以可靠模块1为例。
58.可靠模块1的接收模块对接收的报文帧格式进行可靠头解析判断,如果是数据包,判断该包的包序列号是否是期望的包序列号,如果是,一方面将该包缓存等待被取走,另一方面如果是连续收到n个正常的数据包,告知本侧发送模块向对应的以太网终端发送正常的应答包,应答包的包应答号为第n个正常数据包的包序列号+1;如果小于期望的包序列号,认为是重传的数据包,为避免以太网终端一直重传该数据包,丢弃此包的同时告知本侧发送模块立即向对应的以太网终端发送正常的应答包;如果大于期望的包序列号并且收到的包序列号和期望的包序列号差值小于窗口值,认为数据包丢包,丢弃所有大于期望包序列号的数据包,并且告知本侧发送模块立即向对应的以太网终端发送重传应答包;如果大于期望的包序列号并且收到的包序列号和期望的包序列号差值不小于窗口值,认为失步,告知本侧发送模块立即向对应的以太网终端发送含有失步信息的应答包。此时如果有对侧
发送过来的数据包需要发送到本侧对应的以太网终端,数据包携带应答包信息发送给对应的以太网终端,如果没有对侧数据包需要发送,发送应答包给对应的以太网终端。
59.如果是期望的应答包,更新本侧发送模块的滑动窗口;如果是重传应答包,告知本侧发送模块重传相应的数据包,此时如果有需要发送的应答包,重传数据包携带应答信息;如果收到的应答包的包应答号超出期望包应答号和窗口值的和,认为失步,告知本侧发送模块发送包含失步信息的应答包。如果是数据+应答包,按照数据包和应答包分析。
60.如果是握手包更新期望收到的数据包的包序列号,告知本侧发送模块发送握手包。如果是其他报文做丢弃操作。如果接收模块没有收到任何包,并且对侧发送过来的数据包需要发送到本侧对应的以太网终端,只发送正常的数据包,不携带应答信息。
61.双向通信中带应答信息和不带应答信息的数据包发送的规则和单向通信中不带应答信息的数据包的发送规则是相同的。
62.fpga侧滑动窗口控制流量机制见图7。仅在发送数据包时使用滑动窗口,滑动窗口值大小由以太网终端通过寄存器配置获得。fpga需维护滑动窗口最左侧、最右侧和当前发送的指针。滑动窗口的最左侧是已经发送的数据包但还未收到相应应答包的数据包的最小包序列号a,最右侧是可以发送的数据包的最大包序列号记为b,b等于a+滑动窗口值。如果数据包的包序列号在a和b之间记为d,说明滑动窗口未满,数据包可以发送出去。如果数据包的包序列号为b+1,说明滑动窗口已满,该数据包暂时不能发送出去,当滑动窗口未满时才能发送出去。收到正常应答包的包应答号记为c,如果a小于等于c-1小于等于b,认为从a到c-1(含c-1)之间的所有数据包接收方均已接收到,此时滑动窗口的最左侧值更新为c,最右侧值更新为c+滑动窗口值。
63.s3.结束通信阶段。
64.当fpga侧发送因超时重传数据包达到一定数量m(由寄存器配置),并且没有收到任何包,认为链路断开通信结束。
65.本发明首先简化了建立通信的流程。通过一发一收的握手包机制初始化以太网终端和fpga侧的包序列号,然后再开始通信。当fpga接收侧检测到有数据包丢包时,将丢包之后的所有数据包丢弃,节省fpga缓存资源,同时降低在fpga内部因丢包须做乱序处理的复杂度。在数据通信过程中,依据包的包序列号、包应答号、发送状态和接收状态在fpga实现报文可靠传输,简单易实现,另一方面以太网终端也可以快速判断fpga发送数据包的能力,分析fpga发送侧的状态。如果失步,fpga侧已接收的数据包不会丢失的前提下可再次通过握手包初始化双方的通信,由异常快速恢复到正常通信的同时也提高了通信的效率。当fpga收到小于期望包序列号的数据包时丢弃此包的同时,立即向对应以太网终端回复应答包,避免以太网终端一直重传,减少了通信的拥堵。另外,fpga侧收到正常数据包,采取多包合并回复应答包的方式,大大提高传输效率。通过以太网终端和fpga采用滑动窗口控制流量比其他机制比如中断方式效率高。当结束通信时,fpga侧发送重传数据包达到一定数量,并且没有收到任何包,认为双方通信结束,从而减少心跳包的使用,降低处理复杂度。
66.相对tcp协议的可靠传输,本发明提高了可靠传输的性能,消耗逻辑资源较少,降低复杂度。当网络出现异常失步时,已接收的数据包不丢失,大大降低网络异常时的重传率。当网络异常时,终端通过解析报文的可靠头字段,可以快速定位出现的问题,便于快速恢复到正常网络。
67.以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。发明的具体实施方式作进一步详细描述。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1