CN103220168B - 一种基于定长协议数据包长度异常的处理方法 - Google Patents
一种基于定长协议数据包长度异常的处理方法 Download PDFInfo
- Publication number
- CN103220168B CN103220168B CN201310108509.3A CN201310108509A CN103220168B CN 103220168 B CN103220168 B CN 103220168B CN 201310108509 A CN201310108509 A CN 201310108509A CN 103220168 B CN103220168 B CN 103220168B
- Authority
- CN
- China
- Prior art keywords
- packet
- port ram
- data
- length
- write
- 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
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及一种基于定长协议数据包长度异常的处理方法;首先将输入的数据流同步后,通过有序的写调度,将数据包依次写入一组双端口RAM中,实现将长包截短的处理;然后通过有序的读调度,将数据包从双端口RAM中读出,实现将短包补长的处理。根据不同的应用场合,通过增加双端口RAM的块数或提高读取双端口RAM中数据的速度,可以有效提高抵抗短包错误的性能。本发明采用的一种基于定长协议数据包长度异常的处理方法,可以适应不同长度错误情况下的数据包定长处理,最大程度地保留了长度异常的数据包中的有效数据,而不是简单的丢弃;本方法简单实用,易于在FPGA或ASIC上实现。
Description
技术领域
本发明涉及一种基于定长协议数据包长度异常的处理方法,适应于在处理定长数据协议或分组处理协议中,对数据长度异常的数据包进行处理。
背景技术
在定长数据处理协议或分组处理协议中,处理的数据包均是固定长度。例如ATM(AsynchronousTransferMode,异步传输模式)分组协议、CCSDS(ConsultativeCommitteeforSpaceDataSystems,空间数据系统咨询委员会)规定的AOS(AdvancedOrbitingSystems,高级在轨系统)协议等。
对定长的数据包进行处理过程中,发现接收的数据包长度异常时,如果不进行处理,可能会对系统功能造成灾难性后果。目前对长度异常数据包的通常处理方法是将异常的数据丢弃。华为技术有限公司提供了一种定长数据包的传输方法,该方法包括:A.在定长数据包的数据输入过程中进行正确性判断,根据判断结果,设置相应的标志位,并将设置有标志位的定长数据包写入一级缓存;B.将一级缓存中的定长数据包读出,并根据相应的标志位作出判断,然后将定长数据包写入二级缓存或直接丢弃。利用本发明提供的方法传输定长数据包,将定长数据包与其标志位采用同一缓存处理,有效地避免了数据包与标志位不对应所带来的数据包传输错误,同时,采用同一缓存处理简化了定长数据包丢弃错误数据包的流程及数据处理的内部逻辑。该方法发现错误时其处理方式是将错误数据包直接丢弃,这种做法不利于对故障进行分段定位和分析。长度异常的数据通常携带着有用的信息,因此对对长度异常的数据包进行合理处理,将长包截短、短包补长,最大程度的保留原来异常数据包的内容,有利于在数据包长度异常情况下对故障进行分段定位和分析。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供了一种基于定长协议数据包长度异常的处理方法,针对处理定长数据协议或分组处理协议,最大程度地保留原始的异常数据,为故障定位和分析提供参考。
本发明的技术方案是:一种基于定长协议数据包长度异常的处理方法,步骤如下:
1)对输入的数据流进行提同步处理,并对每一个数据包的字节长度进行计数和检查;
2)将步骤1)中进行同步处理和长度检查后的数据包按顺序依次写入N个双端口RAM中,在写入数据的过程中将长数据包截短至长度L;之后再将N个双端口RAM中的数据包按顺序依次读出;同时设置一个写计数器,记录写入每个双端口RAM中数据包的字节数;每写一次双端口RAM后重置该写计数器;所述写计数器的值小于或等于L;所述的双端口RAM的储存深度不小于L,且每块双端口RAM一次只存储一个数据包;
3)根据步骤2)中所述的写计数器的值,决定是否需要对从第i块双端口RAM中读取的数据包进行补长处理;当写计数器的值等于L时,则直接从该写计数器对应的双端口RAM中读出L个字节的数据包;当写计数器的值小于L时,将储存在第i块双端口RAM中的数据全部读出,数据不足L的部分填充固定值,直至将读出的数据包补长至L;所述的固定值区别于从第i块双端口RAM中读出的真实数据。
所述步骤1)中对输入的数据流进行提同步处理,并对数据包的字节长度计数和检查的具体过程为:根据数据协议,对数据包进行同步处理,采用1比特的同步信号卡住接收的数据包,标识该数据包的起始位置;采用计数器统计数据包的字节长度,从1开始计数;当接收的数据包长度超过2L时,停止计数,计数器的值定格在2L;当接收的数据包长度小于或等于2L时,则计数器正常计数;
所述步骤2)中将同步处理和长度检查后的数据包按顺序依次写入N个双端口RAM中并进行长数据包截短处理的具体过程为:设正常的数据包长度为L,当经同步处理后的数据包字节长度大于L时,仅将该数据包中前L字节长度的数据写入双端口RAM中;当经同步处理后的数据包字节长度等于或小于L时,则将该数据包全部写入双端口RAM中;当把数据包写入第N块双端口RAM后,下一数据包将重新写入第1块双端口RAM中并覆盖第1块双端口RAM中的原有数据;设置写指针WPi,表示当前数据包写入的双端口RAM编号为i,其中1≤i≤N;设置读指针RPj,表示当前读出数据包的双端口RAM编号为j,其中1≤j≤N;当将数据包写入到第i块双端口RAM后,需判断WPi+1是否等于RPj;如果WPi+1不等于RPj,WPi的值加1,并将下一个数据包写入第i+1块双端口RAM中;如果WPi+1等于RPj,则WPi的值保持不变,下一个数据包仍然写入第i块双端口RAM中并覆盖原有数据。
所述步骤2)中将数据包从N个双端口RAM中读出的具体过程为:设置写指针WPi,表示当前数据包写入的双端口RAM编号为i,其中1≤i≤N;设置读指针RPj,表示当前读出数据包的双端口RAM编号为j,其中1≤j≤N;当第i块双端口RAM写计数器的值不为0,并且读指针RPj与写指针WPi不相等时,从该块双端口RAM中读取数据,之后读指针RPj加1,准备读取下一块双端口RAM中的数据;当读指针RPj等于写指针WPi,或者第i块双端口RAM写计数器的值为0时,RPj的值保持不变,并停止读取数据;当从第N块双端口RAM中读完数据后,则重新回到第1块双端口RAM中循环读取数据。
本发明与现有技术相比的优点在于:
(1)本发明在处理长度异常的数据包时,不是简单地将其丢弃。而是将长包截短,将短包补长,最大程度地保留长度异常的数据包内容,便于故障定位和分析;
(2)本发明采用了一组双端口RAM,通过读、写指针的合理调度,完成了将长包截短,将短包补长的处理,方法巧妙;
(3)本发明具备很强的健壮性。对使用的计数器采取了防溢出措施;在超出处理能力的情况下,对短包补长的处理采取以新数据覆盖旧数据的方式,当数据包长度恢复正常后,所有的处理均恢复正常;对将短包补长的填充数据,自身具备协议结构,与原始数据不易混淆,不易引入额外的错误;
(4)本发明适应性好。可根据需要通过提高读取双端口RAM中数据的时钟频率,或增加双端口RAM的块数改善将短包补长的性能。
(5)本发明采用的数据长度异常处理方法,硬件实现方便,易于采用FPGA或ASIC实现。
附图说明
图1为本发明方法原理图;
图2为本发明的正常长度的数据包及计数示意图;
图3为本发明的长度偏长的数据包及计数示意图;
图4为本发明的长度偏短的数据包及计数示意图;
图5为本发明的写指针控制及写数据实现流程图;
图6为本发明的顺序循环读写双端口RAM示意图;
图7为本发明的读指针控制及读数据实现流程图;
图8为本发明的短数据包补长后的数据包格式。
具体实施方式
如图1所示,本发明一种基于定长协议数据包长度异常的处理方法,由数据同步及长度检查模块、写指针控制及写数据模块、N块双端口RAM、读指针控制及读数据、长度异常处理共5个模块组成。
数据同步及长度检查模块是将输入的数据进行同步处理,确定数据包的起始位置,并对数据包长度进行计数和检查,检查后的数据包由1比特的包同步信号、包长度计数器和数据包本身组成;将进行同步处理和长度检查后的数据包按顺序依次写入N个双端口RAM中,通过写指针控制决定是否将数据包写入下一块双端口RAM中;采用写计数器Cik(1≤i≤N,1≤k≤L)记录写入第i块双端口RAM中数据包的长度;设置N块双端口RAM用于存储数据包,N的大小可以根据需要调整,通常N不小于2。每块双端口RAM的深度不小于L,每块双端口RAM每次只存储一包数据。读指针控制及读数据模块通过读指针控制决定是否将数据从下一块双端口RAM中读出;每次从双端口RAM中读出的数据包长度为固定值L。长度异常处理模块对读出长度不足L的数据包进行补长处理。在读取第i块双端口RAM中的数据时,根据写入第i块双端口RAM数据包的长度写计数器Cik,决定是否需要对该数据包进行补长处理。补长的字节内容具备独特的协议格式,便于恢复原始数据。
图2所示的是正常数据包提同步后进行长度计数的示意图。1比特的同步信号卡住完整的数据包。同步信号的上升沿对应计数器的值为1,同步信号的下降沿对应计数器的值为数据长度,正常情况下该值为L;
图3所示的是长度偏长的数据包提同步后进行长度计数的示意图。图中的M为整数,取值范围为:1≤M≤L。为防止计数器溢出,当数据包的长度超过正常长度L时,停止计数。
图4所示的是长度偏短的数据包提同步后进行长度计数的示意图。图中的K为整数,取值范围为:1≤K≤L。
图5所示的是写指针控制及写数据模块实现流程图。输入的数据流经同步后,在同步信号的上升沿处初始化双端口RAM写操作相关信号后,开始将数据包写入第i块双端口RAM。当数据包长度大于L时,将前L个字节写入双端口RAM中,丢弃第L字节之后的数据。当数据包长度不大于L时,将该数据完整写入双端口RAM中。在将数据包写入第i块双端口RAM过程中,对写入的数据进行字节计数,即写计数器Cik。设置一个写指针WPi记录当前数据包写入的双端口RAM编号为i,其中1≤i≤N;设置一个读指针RPj记录当前读出数据包的双端口RAM编号为j,其中1≤j≤N;写完当前数据包后判断当前的写指针WPi加1后与读指针RPj是否相等。如果不相等,则将写指针WPi加1,指向第i+1块双端口RAM,并开始准备写下一包数据。如果相等,则写指针WPi的值保持不变,下一数据包继续写入第i块双端口RAM中,覆盖原来的数据。此处规定,WPi+1=i+1,即顺序在N块双端口RAM中存储数据;当WPi=N时,WPi+1=1,即当把数据包写入第N块双端口RAM后,下一数据包将写入第1块双端口RAM中;
图6所示的是顺序循环读、写双端口RAM示意图。其中DPRAM表示双端口RAM;N块双端口RAM组成一个环形的存储器。依次逐个对N块双端口RAM进行读、写操作。写指针WPi和读RPj均为整数,且1≤WPi≤N,1≤RPj≤N。
图7所示的是读指针控制及读数据模块实现流程图。首先判断读指针RPj是否与写指针WPi相等。如果相等,则返回继续判断,处于等待状态;如果不等,开始读取当前读指针RPi指向的第i块双端口RAM中的数据包。当读取的字节数量达到L后,停止从双端口RAM中读数,并且读指针RPi加1计数,准备从下块双端口RAM中读数;
图8所示的是短数据包补长后的数据包格式。判断写入第i块双端口RAM中数据包长度Cik,如果Cik=L,则对读出的数据不作任何处理;如果Cik<L,表明写入第i块双端口RAM中数据包长度小于正常长度L,需要进行补长处理。由于从第i块双端口RAM中读出该短数据包时,形式上已经将短数据包补长至正常长度L,但补长的字节内容无法区分于正常的数据内容。因此,此步骤需要将补长的字节内容进行处理,第Cik+1字节填充的内容为填充字节的长度。由于一个字节最大可进行28=256计数。当填充字节数小于或等于256时,则直接填充补长的字节数减去1后的数值。当填充字节数大于256时,需要将填充的字节数减去1后对256取模,即(L-Cik-1)mod256。第Cik+2至L的字节内容填充固定值,该固定值的‘0’和‘1’的个数需尽可能一致,如填充“A5”。
为便于理解,此处举一个具体的例子。如果短数据包的长度比L少1,则最后一个字节填充十六进制0。如果短数据包的长度比L少2,则第L-1个字节填十六进制“1”,第L个字节填充十六进制“A5”。依此类推。
当短数据包的长度和出现的概率达到一定程度时,会出现数据包丢失的现象。对这种现象进行的理论分析如下:
假设输入的原始数据流的速率为Vi,输出的处理后数据流速率为Vo。必须满足Vo≧Vi,才可保证数据的正常处理和传输。否则原始数据流中所有的数据包均为正常长度的情况下,也会造成数据丢失。
下面对将短数据包补长性能进行简要分析:
当且仅当Vo>Vi时,才具备将短数据包补长而不引起数据丢失的可能性。因此,下面仅在Vo>Vi的情况下进行分析。
假设,在输入的数据流中发生短数据包的概率为e,其中0≤e≤1。短数据包的包长为Ls,其中1≤Ls≤L。那么经过将短数据包补长后的数据流速率为:(1-e)×Vi+Vi×e×(L/Ls)。
为保证处理后的数据流不丢失,必须满足:
由此可以推导出:
因此,在正常数据长度L、原始数据流的速率Vi和短数据包错误概率e确定的情况下,改善将短数据包补长的性能可以提高输出数据流的速率Vo。这样在稳定的包长错误情况下,可以将更短的数据包补长而不会导致数据丢失。
另外,通过增加双端口RAM的数量,可以改善突发包长错误情况下将短数据包补长的性能。
本发明未具体说明部分属于本领域公知技术。
Claims (3)
1.一种基于定长协议数据包长度异常的处理方法,其特征在于步骤如下:
1)对输入的数据流进行同步处理,并对每一个数据包的字节长度进行计数和检查;
2)将步骤1)中进行同步处理和长度检查后的数据包按顺序依次写入N个双端口RAM中,在写入数据的过程中将长数据包截短至长度L;之后再将N个双端口RAM中的数据包按顺序依次读出;同时设置一个写计数器,记录写入每个双端口RAM中数据包的字节数;每写一次双端口RAM后重置该写计数器;所述写计数器的值小于或等于L;所述的双端口RAM的储存深度不小于L,且每块双端口RAM一次只存储一个数据包;
3)根据步骤2)中所述的写计数器的值,决定是否需要对从第i块双端口RAM中读取的数据包进行补长处理;当写计数器的值等于L时,则直接从该写计数器对应的双端口RAM中读出L个字节的数据包;当写计数器的值小于L时,将储存在第i块双端口RAM中的数据全部读出,数据不足L的部分填充固定值,直至将读出的数据包补长至L;所述的固定值区别于从第i块双端口RAM中读出的真实数据;
所述步骤1)中对输入的数据流进行同步处理,并对数据包的字节长度计数和检查的具体过程为:根据数据协议,对数据包进行同步处理,采用1比特的同步信号卡住接收的数据包,标识该数据包的起始位置;采用计数器统计数据包的字节长度,从1开始计数;当接收的数据包长度超过2L时,停止计数,计数器的值定格在2L;当接收的数据包长度小于或等于2L时,则计数器正常计数。
2.根据权利要求1所述的一种基于定长协议数据包长度异常的处理方法,其特征在于:所述步骤2)中将同步处理和长度检查后的数据包按顺序依次写入N个双端口RAM中并进行长数据包截短处理的具体过程为:设正常的数据包长度为L,当经同步处理后的数据包字节长度大于L时,仅将该数据包中前L字节长度的数据写入双端口RAM中;当经同步处理后的数据包字节长度等于或小于L时,则将该数据包全部写入双端口RAM中;当把数据包写入第N块双端口RAM后,下一数据包将重新写入第1块双端口RAM中并覆盖第1块双端口RAM中的原有数据;设置写指针WPi,表示当前数据包写入的双端口RAM编号为i,其中1≤i≤N;设置读指针RPj,表示当前读出数据包的双端口RAM编号为j,其中1≤j≤N;当将数据包写入到第i块双端口RAM后,需判断WPi+1是否等于RPj;如果WPi+1不等于RPj,WPi的值加1,并将下一个数据包写入第i+1块双端口RAM中;如果WPi+1等于RPj,则WPi的值保持不变,下一个数据包仍然写入第i块双端口RAM中并覆盖原有数据。
3.根据权利要求1所述的一种基于定长协议数据包长度异常的处理方法,其特征在于:所述步骤2)中将数据包从N个双端口RAM中读出的具体过程为:设置写指针WPi,表示当前数据包写入的双端口RAM编号为i,其中1≤i≤N;设置读指针RPj,表示当前读出数据包的双端口RAM编号为j,其中1≤j≤N;当第i块双端口RAM写计数器的值不为0,并且读指针RPj与写指针WPi不相等时,从该块双端口RAM中读取数据,之后读指针RPj加1,准备读取下一块双端口RAM中的数据;当读指针RPj等于写指针WPi,或者第i块双端口RAM写计数器的值为0时,RPj的值保持不变,并停止读取数据;当从第N块双端口RAM中读完数据后,则重新回到第1块双端口RAM中循环读取数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310108509.3A CN103220168B (zh) | 2013-03-29 | 2013-03-29 | 一种基于定长协议数据包长度异常的处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310108509.3A CN103220168B (zh) | 2013-03-29 | 2013-03-29 | 一种基于定长协议数据包长度异常的处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103220168A CN103220168A (zh) | 2013-07-24 |
CN103220168B true CN103220168B (zh) | 2015-11-25 |
Family
ID=48817653
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310108509.3A Active CN103220168B (zh) | 2013-03-29 | 2013-03-29 | 一种基于定长协议数据包长度异常的处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103220168B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104468039A (zh) * | 2014-12-01 | 2015-03-25 | 浪潮集团有限公司 | 一种基于fpga的帧解析方法及装置 |
CN105022712A (zh) * | 2015-06-18 | 2015-11-04 | 哈尔滨工业大学 | 一种基于数据流传输的数据包提取方法 |
CN110968538B (zh) * | 2018-09-28 | 2021-07-20 | 龙芯中科技术股份有限公司 | 一种数据缓冲方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1859274A (zh) * | 2005-07-07 | 2006-11-08 | 华为技术有限公司 | 一种定长数据包的传输方法 |
CN101136802A (zh) * | 2007-04-06 | 2008-03-05 | 中兴通讯股份有限公司 | 一种记录诊断数据的方法 |
CN101159520A (zh) * | 2007-10-29 | 2008-04-09 | 中兴通讯股份有限公司 | 数据传输方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005109586A (ja) * | 2003-09-26 | 2005-04-21 | Fujitsu Ltd | イサーネットスイッチにおける入力処理回路 |
-
2013
- 2013-03-29 CN CN201310108509.3A patent/CN103220168B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1859274A (zh) * | 2005-07-07 | 2006-11-08 | 华为技术有限公司 | 一种定长数据包的传输方法 |
CN101136802A (zh) * | 2007-04-06 | 2008-03-05 | 中兴通讯股份有限公司 | 一种记录诊断数据的方法 |
CN101159520A (zh) * | 2007-10-29 | 2008-04-09 | 中兴通讯股份有限公司 | 数据传输方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103220168A (zh) | 2013-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105791777B (zh) | 基于fpga的千兆以太网视频多路采集传输系统 | |
CN103220168B (zh) | 一种基于定长协议数据包长度异常的处理方法 | |
CN100465934C (zh) | 一种在异步时钟域传输数据的装置及其方法 | |
CN102355382A (zh) | 一种控制器局域网总线分析与触发的方法 | |
US8520705B2 (en) | Device and method for serial data transmission between a position-measuring device and a control unit | |
CN106850046A (zh) | 一种基于fpga的星载遥控遥测终端、系统及方法 | |
CN1848715B (zh) | 实现同步串行数据在tdm网透传的方法、系统及处理装置 | |
CN103746966A (zh) | 一种基于udp的上层协议与以太网mac层的数据传输方法 | |
CN112865901A (zh) | 一种基于fpga纳秒时间戳的高速数据包采集系统及方法 | |
CN101594305B (zh) | 一种报文处理方法及装置 | |
CN105610545A (zh) | 一种基于fpga的ft3自适应解码系统及方法 | |
CN101430663B (zh) | 缓存管理单元和缓存管理方法 | |
CN103592489A (zh) | 数字示波器深存储设计方法 | |
CN109902000A (zh) | 变速多通道调试追踪系统、方法、设备及存储介质 | |
RU97114237A (ru) | Способ и система для мультиплексирования/демультиплексирования элемента межпроцессорного обмена в режиме асинхронной передачи при обмене в режиме асинхронной передачи | |
CN114153758B (zh) | 具有帧计数功能的跨时钟域数据处理方法 | |
CN100438500C (zh) | 一种定长数据包的传输方法 | |
CN105933244A (zh) | 一种通道对齐去偏斜的装置和方法 | |
CN101894005A (zh) | 高速接口向低速接口的异步fifo传输方法 | |
CN102799537B (zh) | 一种航天器aos系统双口ram缓冲区管理方法 | |
CN107040784A (zh) | 一种视频缓冲处理方法、系统和装置 | |
CN114509966A (zh) | 一种非同步高速串口实时连续数据采集系统 | |
CN201515392U (zh) | 一种mvb总线控制器 | |
CN101286873B (zh) | 一种以太网错误帧提取接口装置 | |
CN102437893B (zh) | 一种高速1553b总线通讯系统纠错方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |