CN109246036A - 一种处理分片报文的方法和装置 - Google Patents
一种处理分片报文的方法和装置 Download PDFInfo
- Publication number
- CN109246036A CN109246036A CN201710557080.4A CN201710557080A CN109246036A CN 109246036 A CN109246036 A CN 109246036A CN 201710557080 A CN201710557080 A CN 201710557080A CN 109246036 A CN109246036 A CN 109246036A
- Authority
- CN
- China
- Prior art keywords
- fragment
- correct
- new
- tail
- address
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9057—Arrangements for supporting packet reassembly or resequencing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9015—Buffering arrangements for supporting a linked list
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种处理分片报文的方法和装置,包括:预先创建正确队列链表、错误队列链表,并为每个队列链表创建头指针、尾指针、虚尾指针;当有新分片到达时,为新分片分配地址,将新分片的地址分别存入正确队列链表和错误队列链表的尾节点,将正确虚尾指针和错误虚尾指针分别指向新分片的地址;检查新分片是否正确且新分片是否为尾分片;如果正确且为尾分片,将正确链尾指针更新为正确虚尾指针的值,将错误虚尾指针更新为错误链尾指针的值;如果错误,将正确虚尾指针更新为正确链尾指针的值,将错误链尾指针更新为错误虚尾指针的值。本发明通过创建链表和采用虚拟入队的方法,节省了存储资源,提高了报文检查效率。
Description
技术领域
本发明涉及网络通信技术领域,尤其涉及一种处理分片报文的方法和装置。
背景技术
由于以太网成本低、组网灵活且扩展性好,IP(Internet Protocol)数据越来越多的承载在以太网上,但是由于以太网对承载的净荷长度有1500字节(Byte)的上限,导致IP报文通过以太网时,长度过长的报文必须经过分片和重组。
但是,由于传输报文的网络会存在延时或抖动,分片报文可能会发生丢失、乱序等错误,一种传统的检查分片错误的方法是先申请一块较大的缓存,报文的首分片到达时,将报文的首分片置入缓存,如图1所示,将分片存入缓存0的位置,报文的后续分片到达时,根据分片的序列号,依次置入缓存1、缓存2和缓存3的位置,直至报文的尾分片到达。如果分片报文检查为正确,则将分片报文发送至目的地,缓存被清空;如果分片报文检查为错误,存储错误的分片报文的缓存被清空。例如,当第4片分片到达发现错误时,缓存0至缓存3的空间被释放。为了防止报文突发情况下输出端出现拥塞,缓存的空间需要考虑最大的拥塞量。上述方法的不足之处是,当不同类型的报文间插到达的时候,一种报文的尾分片没有全部到达时,其它类型的首分片可能已经到达,此时需要为这种类型的首分片分配一块新的存储空间以待其检查错误重组完成。因此当有多种类型的报文间插到达的情况下,需要为每一种报文分配M的缓存空间供其检查错误和重组。如果报文的类型有N种,所需的存储空间量为M×N。因此,现有技术方案需要申请较大的缓存,当连接较大时,就需要海量的存储空间;而且报文检查重组速度较慢,报文数据的传输速率不快,大流量时容易引起拥塞。
发明内容
为了解决上述技术问题,本发明提供了一种处理分片报文的方法和装置,能够节省存储资源、提高报文检查效率。
为了达到本发明目的,本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种处理分片报文的方法,包括:
预先创建正确队列链表、错误队列链表和空闲地址链表,分别用于存储正确的分片的地址、错误的分片的地址以及空闲的分片地址;并创建正确链头指针、正确链尾指针、正确虚尾指针、错误链头指针、错误链尾指针和错误虚尾指针,所述正确链头指针和错误链头指针分别指向正确队列链表和错误队列链表的头节点,所述正确链尾指针和错误链尾指针分别指向正确队列链表和错误队列链表的尾节点;
当有新分片到达时,从空闲地址链表中为新分片分配地址,将新分片存入所分配的地址,将新分片的地址分别存入正确队列链表和错误队列链表的尾节点,将正确虚尾指针和错误虚尾指针分别指向新分片的地址;
检查新分片是否正确且新分片是否为尾分片;
如果新分片正确且新分片为尾分片,将正确链尾指针更新为正确虚尾指针的值,将错误虚尾指针更新为错误链尾指针的值;
如果新分片错误,将正确虚尾指针更新为正确链尾指针的值,将错误链尾指针更新为错误虚尾指针的值。
进一步地,所述检查新分片是否正确且新分片是否为尾分片,具体包括:
检查所述新分片是否是尾分片且所述新分片的分片号与上一分片的分片号是否连续;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号连续,则暂时判定所述新分片正确且所述新分片不是尾分片,等待下一新分片到达后继续判定;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号不连续,则检查所述新分片是否是首分片,如果是首分片,则判定该首分片之前到达报文的新分片错误;如果不是首分片,则判定所述新分片错误;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号连续,则判定所述新分片正确且新分片是尾分片;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号不连续,则判定所述新分片错误。
进一步地,所述检查新分片是否正确且新分片是否为尾分片,还包括:
当判定某一新分片错误时,在该新分片之前到达的属于同一重组报文的新分片或在该新分片之后到达的属于同一重组报文的新分片也判定为错误。
进一步地,所述方法还包括:
检查所述正确队列链表的头分片是否被调度;
如果所述正确队列链表的头分片被调度,将所述被调度的头分片的地址存入所述空闲地址链表,将所述正确链头指针更新为所述被调度的头分片的地址所指向的下一分片的地址。
进一步地,所述方法还包括:
检查所述错误队列链表的头分片的地址是否被回收;
如果所述错误队列链表的头分片的地址被回收,将所述被回收的头分片的地址存入所述空闲地址链表,将所述错误链头指针更新为所述被回收的头分片的地址所指向的下一分片的地址。
本发明实施例还提供了一种处理分片报文的装置,包括链表模块、分配模块、检查模块,其中:
链表模块,用于预先创建正确队列链表、错误队列链表和空闲地址链表,分别用于存储正确的分片的地址、错误的分片的地址以及空闲的分片地址;并创建正确链头指针、正确链尾指针、正确虚尾指针、错误链头指针、错误链尾指针和错误虚尾指针,所述正确链头指针和错误链头指针分别指向正确队列链表和错误队列链表的首分片的地址,所述正确链尾指针和错误链尾指针分别指向正确队列链表和错误队列链表的尾节点;
分配模块,用于当有新分片到达时,从链表模块的空闲地址链表中为新分片分配地址,将新分片存入所分配的地址,将新分片的地址分别存入链表模块的正确队列链表和错误队列链表的尾节点,将正确虚尾指针和错误虚尾指针分别指向新分片的地址,通知检查模块;
检查模块,用于接收到分配模块的通知,检查新分片是否正确且新分片是否为尾分片;如果新分片正确且新分片为尾分片,将正确链尾指针更新为正确虚尾指针的值,将错误虚尾指针更新为错误链尾指针的值;如果新分片错误,将正确虚尾指针更新为正确链尾指针的值,将错误链尾指针更新为错误虚尾指针的值。
进一步地,所述检查模块检查新分片是否正确且新分片是否为尾分片,具体包括:
检查所述新分片是否是尾分片且所述新分片的分片号与上一分片的分片号是否连续;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号连续,则暂时判定所述新分片正确且所述新分片不是尾分片,等待下一新分片到达后继续判定;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号不连续,则检查所述新分片是否是首分片,如果是首分片,则判定该首分片之前到达报文的新分片错误;如果不是首分片,则判定所述新分片错误;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号连续,则判定所述新分片正确且新分片是尾分片;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号不连续,则判定所述新分片错误。
进一步地,当所述检查模块判定某一新分片错误时,在该新分片之前到达的属于同一重组报文的新分片或在该新分片之后到达的属于同一重组报文的新分片也判定为错误。
进一步地,所述检查模块还用于:
检查所述正确队列链表的头分片是否被调度;
如果所述正确队列链表的头分片被调度,将所述被调度的头分片的地址存入所述空闲地址链表,将所述正确链头指针更新为所述被调度的头分片的地址所指向的下一分片的地址。
进一步地,所述检查模块还用于:
检查所述错误队列链表的头分片的地址是否被回收;
如果所述错误队列链表的头分片的地址被回收,将所述被回收的头分片的地址存入所述空闲地址链表,将所述错误链头指针更新为所述被回收的头分片的地址所指向的下一分片的地址。
本发明的技术方案,具有如下有益效果:
本发明提供的处理分片报文的方法和装置,通过创建正确队列链表和虚拟队列链表,并为每个队列链表设置头指针、尾指针及虚拟尾指针,在报文检查前,令分片虚拟入队;在报文检查后,令分片真实入队,节省了存储资源,提高了报文检查效率,加快了重组后的调度速率,并快速的将错误的报文从缓存中清空出去,减少了无效缓存的占用时间,从而提高了报文数据的传输速率,减少了大流量时的拥塞;并且各队列相互独立,增加了队列调度的多样性。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为现有的处理分片报文的方法的缓存结构示意图;
图2为本发明实施例的一种处理分片报文的方法的流程示意图;
图3为本发明实施例的一种处理分片报文的装置的结构示意图;
图4为本发明优选实施例的分片报文检查的流程示意图;
图5为本发明优选实施例的正确队列链表的结构示意图;
图6为本发明优选实施例的正确队列链表或错误队列链表的存储结构示意图;
图7为图5中首分片被调度出队时的正确队列链表的结构示意图;
图8为图5中有正确的非尾分片c到达时的正确队列链表的结构示意图;
图9为图5中有错误的分片c到达时的正确队列链表的结构示意图;
图10为图5中有正确的尾分片c到达时的正确队列链表的结构示意图;
图11为本发明优选实施例的错误队列链表的结构示意图;
图12为图11中首分片地址被回收出队时的错误队列链表的结构示意图;
图13为图11中有正确的非尾分片c到达时的错误队列链表的结构示意图;
图14为图11中有正确的尾分片c到达时的错误队列链表的结构示意图;
图15为图11中有错误的分片c到达时的错误队列链表的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
如图2所示,根据本发明的一种处理分片报文的方法,包括如下步骤:
步骤201:预先创建正确队列链表、错误队列链表和空闲地址链表,所述正确队列链表、错误队列链表和空闲地址链表分别用于存储正确的分片的地址、错误的分片的地址以及空闲的分片地址;并为每条正确队列链表创建正确链头指针、正确链尾指针、正确虚尾指针,为每条错误队列链表创建错误链头指针、错误链尾指针和错误虚尾指针,所述正确链头指针和错误链头指针分别指向正确队列链表和错误队列链表的首分片的地址,所述正确链尾指针和错误链尾指针分别指向正确队列链表和错误队列链表的尾节点;
进一步地,根据报文的类型数N,所述N为自然数,预先创建N条正确队列链表和N条错误队列链表。
步骤202:当有新分片到达时,从空闲地址链表中为新分片分配一个地址,同时将新分片存入所分配的地址,将新分片的地址分别存入正确队列链表和错误队列链表的尾节点,将正确虚尾指针和错误虚尾指针分别指向新分片的地址;
进一步地,根据所述新分片的分片类型,将所述新分片的地址分别存入对应的报文类型的正确队列链表和错误队列链表的尾节点。
值得说明的是,当分片到达下行侧时,每个分片携带有分片类型(TYPE)、分片号(SEQ)、首分片标志(SOP)和尾分片标志(EOP)等信息,如表1所示。
分片携带信息 | 说明 |
分片类型TYPE | 报文类型 |
分片号SEQ | 一个报文若被切割成n片,则分片号范围为0~(n-1)。 |
首分片标志SOP | 为1时有效,表示该分片为一个报文的首分片。 |
尾分片标志EOP | 为1时有效,表示该分片为一个报文的尾分片。 |
表1
需要说明的是,在对这个新分片进行报文检查之前,新分片的地址同时存储在正确队列链表和错误队列链表的尾节点中,此时不更新正确链尾指针和错误链尾指针的值,即此时正确链尾指针仍然指向正确队列链表中已检查为正确的报文的尾节点,错误链尾指针仍然指向错误队列链表中已检查为错误的报文的尾节点。
步骤203:检查新分片是否正确且新分片是否为尾分片;
如果新分片正确且新分片为尾分片,将正确链尾指针更新为正确虚尾指针的值,将错误虚尾指针更新为错误链尾指针的值;
如果新分片错误,将正确虚尾指针更新为正确链尾指针的值,将错误链尾指针更新为错误虚尾指针的值。
进一步地,如果新分片正确且新分片不是尾分片,则等待下一分片的到达,转到步骤202。
需要说明的是,将正确链尾指针更新为正确虚尾指针的值,将错误虚尾指针更新为错误链尾指针的值,即是将已检查为正确的新分片的地址存储在正确队列链表中,并将已检查为正确的新分片的地址从错误队列链表中删除;将正确虚尾指针更新为正确链尾指针的值,将错误链尾指针更新为错误虚尾指针的值,即是将已检查为错误的新分片的地址存储在错误队列链表中,并将已检查为错误的新分片的地址从正确队列链表中删除。
进一步地,所述检查新分片是否正确且新分片是否为尾分片,具体包括:
检查所述新分片是否是尾分片且所述新分片的分片号与上一分片的分片号是否连续;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号连续,则暂时判定所述新分片正确且所述新分片不是尾分片,等待下一新分片到达后继续判定;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号不连续,则检查所述新分片是否是首分片,如果是首分片,则判定该首分片之前到达报文的新分片错误;如果不是首分片,则判定所述新分片错误;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号连续,则判定所述新分片正确且新分片是尾分片;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号不连续,则判定所述新分片错误。
需要说明的是,当判定某一新分片错误时,在该新分片之前到达的属于同一重组报文的新分片或在该新分片之后到达的属于同一重组报文的新分片也判定为错误。
进一步地,所述方法还包括:
检查正确队列链表的头分片是否被调度;
如果正确队列链表的头分片被调度,将被调度的头分片的地址存入空闲地址链表,将正确链头指针更新为被调度的头分片的地址所指向的下一分片的地址。
进一步地,所述方法还包括:
检查错误队列链表的头分片的地址是否被回收;
如果错误队列链表的头分片的地址被回收,将被回收的头分片的地址存入空闲地址链表,将错误链头指针更新为被回收的头分片的地址所指向的下一分片的地址。
如图3所示,根据本发明的一种处理分片报文的装置,包括链表模块、分配模块、检查模块,其中:
链表模块,用于预先创建正确队列链表、错误队列链表和空闲地址链表,所述正确队列链表、错误队列链表和空闲地址链表分别用于存储正确的分片的地址、错误的分片的地址以及空闲的分片地址;并为每条正确队列链表创建正确链头指针、正确链尾指针、正确虚尾指针,为每条错误队列链表创建错误链头指针、错误链尾指针和错误虚尾指针,所述正确链头指针和错误链头指针分别指向正确队列链表和错误队列链表的首分片的地址,所述正确链尾指针和错误链尾指针分别指向正确队列链表和错误队列链表的尾节点;
分配模块,用于当有新分片到达时,从链表模块的空闲地址链表中为新分片分配一个地址,同时将新分片存入所分配的地址,将新分片的地址分别存入链表模块的正确队列链表和错误队列链表的尾节点,将正确虚尾指针和错误虚尾指针分别指向新分片的地址,通知检查模块;
检查模块,用于接收到分配模块的通知,检查新分片是否正确且新分片是否为尾分片;如果新分片正确且新分片为尾分片,将正确链尾指针更新为正确虚尾指针的值,将错误虚尾指针更新为错误链尾指针的值;如果新分片错误,将正确虚尾指针更新为正确链尾指针的值,将错误链尾指针更新为错误虚尾指针的值。
进一步地,所述链表模块根据报文的类型数N,所述N为自然数,预先创建N条正确队列链表和N条错误队列链表;
所述分配模块根据所述新分片的分片类型,将所述新分片的地址分别存入对应的报文类型的正确队列链表和错误队列链表的尾节点。
值得说明的是,当分片到达下行侧时,每个分片携带有分片类型(TYPE)、分片号(SEQ)、首分片标志(SOP)和尾分片标志(EOP)等信息,如表1所示。
需要说明的是,在检查模块对新分片进行报文检查之前,新分片的地址同时存储在正确队列链表和错误队列链表的尾节点中,此时不更新正确链尾指针和错误链尾指针的值,即此时正确链尾指针仍然指向正确队列链表中已检查为正确的报文的尾节点,错误链尾指针仍然指向错误队列链表中已检查为错误的报文的尾节点。
进一步地,所述检查模块检查新分片是否正确且新分片是否为尾分片时,如果新分片正确且新分片不是尾分片,则等待下一分片的到达。
需要说明的是,所述检查模块将正确链尾指针更新为正确虚尾指针的值,将错误虚尾指针更新为错误链尾指针的值,即是将已检查为正确的新分片的地址存储在正确队列链表中,并将已检查为正确的新分片的地址从错误队列链表中删除;将正确虚尾指针更新为正确链尾指针的值,将错误链尾指针更新为错误虚尾指针的值,即是将已检查为错误的新分片的地址存储在错误队列链表中,并将已检查为错误的新分片的地址从正确队列链表中删除。
进一步地,所述检查模块检查新分片是否正确且新分片是否为尾分片,具体包括:
检查所述新分片是否是尾分片且所述新分片的分片号与上一分片的分片号是否连续;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号连续,则暂时判定所述新分片正确且所述新分片不是尾分片,等待下一新分片到达后继续判定;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号不连续,则检查所述新分片是否是首分片,如果是首分片,则判定该首分片之前到达报文的新分片错误;如果不是首分片,则判定所述新分片错误;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号连续,则判定所述新分片正确且新分片是尾分片;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号不连续,则判定所述新分片错误。
需要说明的是,当检查模块判定某一新分片错误时,在该新分片之前到达的属于同一重组报文的新分片或在该新分片之后到达的属于同一重组报文的新分片也判定为错误。
进一步地,所述检查模块还用于:
检查正确队列链表的头分片是否被调度;
如果正确队列链表的头分片被调度,将被调度的头分片的地址存入空闲地址链表,将正确链头指针更新为被调度的头分片的地址所指向的下一分片的地址。
进一步地,所述检查模块还用于:
检查错误队列链表的头分片的地址是否被回收;
如果错误队列链表的头分片的地址被回收,将被回收的头分片的地址存入空闲地址链表,将错误链头指针更新为被回收的头分片的地址所指向的下一分片的地址。
以下通过一个优选实施例,说明如何应用本发明的处理分片报文的方法和装置。值得注意的是,以下的优选实施例只是为了更好的描述本发明,并不构成对本发明不当的限定。
根据报文的类型数N,所述N为自然数,预先创建N条正确队列链表、N条错误队列链表和一条空闲地址链表,所述正确队列链表、错误队列链表和空闲地址链表分别用于存储正确的分片的地址、错误的分片的地址以及空闲的分片地址;并为每条正确队列链表创建正确链头指针、正确链尾指针、正确虚尾指针,为每条错误队列链表创建错误链头指针、错误链尾指针和错误虚尾指针,所述正确链头指针和错误链头指针分别指向正确队列链表和错误队列链表的首分片的地址,所述正确链尾指针和错误链尾指针分别指向正确队列链表和错误队列链表的尾节点;
当有新分片到达时,从空闲地址链表中为新分片分配一个地址,同时将新分片存入所分配的地址,将新分片的地址分别存入正确队列链表和错误队列链表的尾节点,将正确虚尾指针和错误虚尾指针分别指向新分片的地址(在能够确定新分片对应的报文为正确报文或者是错误报文之前,分片地址同时存储在队列模块的正确队列和错误队列里);
根据报文头中携带的信息检查是否为正确的分片,如果报文被检查为正确,报文就只存储在正确队列里,等待调度模块的出队调度,出队调度后,分片的地址被回收;如果报文被检查为错误,报文就只存储在错误队列里,并等待分片的地址被回收。具体的报文检查过程如图4所示,包括:
步骤401:检查新到达的分片是否是尾分片,即检查报文头中的尾分片标志(EOP)是否为1;如果不是尾分片,转到步骤402;如果是尾分片,转到步骤407;
步骤402:检查分片号(SEQ)是否正确,即分片号与上一分片的分片号是否连续,如果连续,转到步骤403;如果不连续,转到步骤404;
步骤403:判定此报文正在重组中,将此分片“虚拟入队”,继续等待下一分片到达;
步骤404:检查所述新到达的分片是否是首分片,即检查报文头中的首分片标志(SOP)是否为1;如果是首分片,转到步骤405;如果不是首分片,转到步骤406;
步骤405:判定上个报文某些分片已经丢失,即上一个报文的所有分片错误,本次新到达的分片的报文继续等待下一个分片的到达;
步骤406:判定此报文发生错误;
步骤407:检查分片号是否正确;如果正确,转到步骤408;如果错误,转到步骤409;
步骤408:判定此报文是一个正确的报文,置入队列中,等待调度出队;
步骤409:判定此报文为错误报文,已到达的分片及后续到达的此报文的分片将被全部丢弃。
如图5至图15所示,本发明通过“虚拟入队”完成正确报文的重组和错误报文的丢弃。每个正确队列链表和错误队列链表均由一个链表头、链表尾和虚拟链表尾寄存器组成,所有的队列共享一块随机存取存储器(Random Access Memory,RAM)。
如图5所示,正确队列链表的链表头记录的是队列首分片的地址,链表尾记录的是已经真正入队的报文最后一个分片的分片地址,链表头和链表尾之间是已被检查为正确的报文的分片地址。其中,分片在RAM中的存储是以队列中上一个分片的地址作为存储地址链接起来,如图6所示,可以通过分片2的地址读RAM,读内容即为分片3的地址。
正确队列链表的虚拟链表尾记录的是全部入队的报文(包括正在重组中的报文)的队列的最后一个分片的分片地址。链表尾和虚拟链表尾之间的报文是部分分片未到达的正在重组中的报文的分片地址,这部分分片地址是属于“虚拟入队”的,是否真正加入队列要由是否整包检查正确决定。
如图7所示,分片1由于被调度出队,正确队列链表的链表头寄存器中的内容需要更新为原链表头指针分片1指向的下一个寄存器,即用分片1的地址读RAM中存储的分片2的地址,更新为新的链表头。
如图8所示,检查正确的非尾分片c到达,则将分片c链在分片b的后面,将分片c的地址写入分片b的存储地址。
如图9所示,检查错误的分片c到达,则可确定此报文为错误,需要丢弃,则将虚拟链表尾的内容更新为与链表尾一致。
如图10所示,尾分片c到达而且检查正确,则此报文的所有分片已全部到达且为正确报文,将链表尾寄存器和虚拟链表尾寄存器更新为尾分片c的地址,将分片c的地址写入分片b的地址的内容。
如图11所示,错误队列链表中保留的是错误报文的分片,这部分分片一旦确认为错误,这些分片的地址将被回收。错误队列链表的链表头寄存器记录的是错误报文队列的首分片的地址,链表尾寄存器记录的是已经被确认为错误的报文的队列的最后一个分片的分片地址,链表头和链表尾之间是已被确认为错误的报文的分片地址。
错误队列链表的虚拟链表尾记录的是全部入队的报文(包括正在重组的报文)的队列的最后一个分片的分片地址,链表尾和虚拟链表尾之间的报文是部分分片未到达的正在重组中的报文的分片地址。
如图12所示,分片1由于回收被调度出队,错误队列链表的链表头更新为下一链接地址:分片2的地址,方式是以分片1作为读地址读取RAM内容。
如图13所示,检查正确的非尾分片c到达,则表示此报文正在重组,将分片c链在分片b后面,虚拟链表尾寄存器更新为分片c的地址。
如图14所示,检查正确的尾分片c到达,则整个报文从错误队列中清空——将虚拟链表尾寄存器的内容更新为与链表尾寄存器一致。
如图15所示,检查错误的分片到达,则表明此报文为错误报文。将分片c的地址链在分片b后面,虚拟链表尾和链表尾寄存器更新为分片c的地址。
本发明提供的处理分片报文的方法和装置,通过创建正确队列链表和虚拟队列链表,并为每个队列链表设置头指针、尾指针及虚拟尾指针,在报文检查前,令分片虚拟入队;在报文检查后,令分片真实入队,节省了存储资源,提高了报文检查效率,加快了重组后的调度速率,并快速的将错误的报文从缓存中清空出去,减少了无效缓存的占用时间,从而提高了报文数据的传输速率,减少了大流量时的拥塞;并且各队列相互独立,增加了队列调度的多样性。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种处理分片报文的方法,其特征在于,包括:
预先创建正确队列链表、错误队列链表和空闲地址链表,分别用于存储正确的分片的地址、错误的分片的地址以及空闲的分片地址;并创建正确链头指针、正确链尾指针、正确虚尾指针、错误链头指针、错误链尾指针和错误虚尾指针,所述正确链头指针和错误链头指针分别指向正确队列链表和错误队列链表的头节点,所述正确链尾指针和错误链尾指针分别指向正确队列链表和错误队列链表的尾节点;
当有新分片到达时,从空闲地址链表中为新分片分配地址,将新分片存入所分配的地址,将新分片的地址分别存入正确队列链表和错误队列链表的尾节点,将正确虚尾指针和错误虚尾指针分别指向新分片的地址;
检查新分片是否正确且新分片是否为尾分片;
如果新分片正确且新分片为尾分片,将正确链尾指针更新为正确虚尾指针的值,将错误虚尾指针更新为错误链尾指针的值;
如果新分片错误,将正确虚尾指针更新为正确链尾指针的值,将错误链尾指针更新为错误虚尾指针的值。
2.根据权利要求1所述的方法,其特征在于,所述检查新分片是否正确且新分片是否为尾分片,具体包括:
检查所述新分片是否是尾分片且所述新分片的分片号与上一分片的分片号是否连续;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号连续,则暂时判定所述新分片正确且所述新分片不是尾分片,等待下一新分片到达后继续判定;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号不连续,则检查所述新分片是否是首分片,如果是首分片,则判定该首分片之前到达报文的新分片错误;如果不是首分片,则判定所述新分片错误;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号连续,则判定所述新分片正确且新分片是尾分片;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号不连续,则判定所述新分片错误。
3.根据权利要求2所述的方法,其特征在于,所述检查新分片是否正确且新分片是否为尾分片,还包括:
当判定某一新分片错误时,在该新分片之前到达的属于同一重组报文的新分片或在该新分片之后到达的属于同一重组报文的新分片也判定为错误。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
检查所述正确队列链表的头分片是否被调度;
如果所述正确队列链表的头分片被调度,将所述被调度的头分片的地址存入所述空闲地址链表,将所述正确链头指针更新为所述被调度的头分片的地址所指向的下一分片的地址。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
检查所述错误队列链表的头分片的地址是否被回收;
如果所述错误队列链表的头分片的地址被回收,将所述被回收的头分片的地址存入所述空闲地址链表,将所述错误链头指针更新为所述被回收的头分片的地址所指向的下一分片的地址。
6.一种处理分片报文的装置,其特征在于,包括链表模块、分配模块、检查模块,其中:
链表模块,用于预先创建正确队列链表、错误队列链表和空闲地址链表,分别用于存储正确的分片的地址、错误的分片的地址以及空闲的分片地址;并创建正确链头指针、正确链尾指针、正确虚尾指针、错误链头指针、错误链尾指针和错误虚尾指针,所述正确链头指针和错误链头指针分别指向正确队列链表和错误队列链表的首分片的地址,所述正确链尾指针和错误链尾指针分别指向正确队列链表和错误队列链表的尾节点;
分配模块,用于当有新分片到达时,从链表模块的空闲地址链表中为新分片分配地址,将新分片存入所分配的地址,将新分片的地址分别存入链表模块的正确队列链表和错误队列链表的尾节点,将正确虚尾指针和错误虚尾指针分别指向新分片的地址,通知检查模块;
检查模块,用于接收到分配模块的通知,检查新分片是否正确且新分片是否为尾分片;如果新分片正确且新分片为尾分片,将正确链尾指针更新为正确虚尾指针的值,将错误虚尾指针更新为错误链尾指针的值;如果新分片错误,将正确虚尾指针更新为正确链尾指针的值,将错误链尾指针更新为错误虚尾指针的值。
7.根据权利要求6所述的装置,其特征在于,所述检查模块检查新分片是否正确且新分片是否为尾分片,具体包括:
检查所述新分片是否是尾分片且所述新分片的分片号与上一分片的分片号是否连续;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号连续,则暂时判定所述新分片正确且所述新分片不是尾分片,等待下一新分片到达后继续判定;
如果所述新分片不是尾分片且所述新分片的分片号与上一分片的分片号不连续,则检查所述新分片是否是首分片,如果是首分片,则判定该首分片之前到达报文的新分片错误;如果不是首分片,则判定所述新分片错误;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号连续,则判定所述新分片正确且新分片是尾分片;
如果所述新分片是尾分片且所述新分片的分片号与上一分片的分片号不连续,则判定所述新分片错误。
8.根据权利要求7所述的装置,其特征在于,当所述检查模块判定某一新分片错误时,在该新分片之前到达的属于同一重组报文的新分片或在该新分片之后到达的属于同一重组报文的新分片也判定为错误。
9.根据权利要求6所述的装置,其特征在于,所述检查模块还用于:
检查所述正确队列链表的头分片是否被调度;
如果所述正确队列链表的头分片被调度,将所述被调度的头分片的地址存入所述空闲地址链表,将所述正确链头指针更新为所述被调度的头分片的地址所指向的下一分片的地址。
10.根据权利要求6所述的装置,其特征在于,所述检查模块还用于:
检查所述错误队列链表的头分片的地址是否被回收;
如果所述错误队列链表的头分片的地址被回收,将所述被回收的头分片的地址存入所述空闲地址链表,将所述错误链头指针更新为所述被回收的头分片的地址所指向的下一分片的地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710557080.4A CN109246036B (zh) | 2017-07-10 | 2017-07-10 | 一种处理分片报文的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710557080.4A CN109246036B (zh) | 2017-07-10 | 2017-07-10 | 一种处理分片报文的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109246036A true CN109246036A (zh) | 2019-01-18 |
CN109246036B CN109246036B (zh) | 2021-02-09 |
Family
ID=65083465
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710557080.4A Active CN109246036B (zh) | 2017-07-10 | 2017-07-10 | 一种处理分片报文的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109246036B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111352781A (zh) * | 2020-02-28 | 2020-06-30 | 天津飞腾信息技术有限公司 | 用于重传部件模块级验证的报文自动比对正确性检查方法及装置 |
CN112433884A (zh) * | 2020-11-12 | 2021-03-02 | 苏州长风航空电子有限公司 | 防写时掉电数据破坏的双备份交叉存储方法 |
CN112600764A (zh) * | 2020-12-07 | 2021-04-02 | 盛科网络(苏州)有限公司 | 直通转发模式的调度方法、设备及存储介质 |
CN113259715A (zh) * | 2021-05-07 | 2021-08-13 | 广州小鹏汽车科技有限公司 | 多路视频数据的处理方法、装置、电子设备及介质 |
CN115190089A (zh) * | 2022-05-26 | 2022-10-14 | 中科驭数(北京)科技有限公司 | 一种报文存储方法、装置、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050117513A1 (en) * | 2003-11-28 | 2005-06-02 | Park Jeong S. | Flow generation method for internet traffic measurement |
US6910092B2 (en) * | 2001-12-10 | 2005-06-21 | International Business Machines Corporation | Chip to chip interface for interconnecting chips |
CN101022411A (zh) * | 2007-03-07 | 2007-08-22 | 华为技术有限公司 | 多链路捆绑协议报文分片接收方法 |
CN101594201A (zh) * | 2009-05-20 | 2009-12-02 | 清华大学 | 链式队列管理结构整合错误数据过滤的方法 |
CN101676906A (zh) * | 2008-09-18 | 2010-03-24 | 中兴通讯股份有限公司 | 一种利用位图对内存数据库空间进行管理的方法 |
-
2017
- 2017-07-10 CN CN201710557080.4A patent/CN109246036B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6910092B2 (en) * | 2001-12-10 | 2005-06-21 | International Business Machines Corporation | Chip to chip interface for interconnecting chips |
US20050117513A1 (en) * | 2003-11-28 | 2005-06-02 | Park Jeong S. | Flow generation method for internet traffic measurement |
CN101022411A (zh) * | 2007-03-07 | 2007-08-22 | 华为技术有限公司 | 多链路捆绑协议报文分片接收方法 |
CN101676906A (zh) * | 2008-09-18 | 2010-03-24 | 中兴通讯股份有限公司 | 一种利用位图对内存数据库空间进行管理的方法 |
CN101594201A (zh) * | 2009-05-20 | 2009-12-02 | 清华大学 | 链式队列管理结构整合错误数据过滤的方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111352781A (zh) * | 2020-02-28 | 2020-06-30 | 天津飞腾信息技术有限公司 | 用于重传部件模块级验证的报文自动比对正确性检查方法及装置 |
CN112433884A (zh) * | 2020-11-12 | 2021-03-02 | 苏州长风航空电子有限公司 | 防写时掉电数据破坏的双备份交叉存储方法 |
CN112433884B (zh) * | 2020-11-12 | 2022-10-21 | 苏州长风航空电子有限公司 | 防写时掉电数据破坏的双备份交叉存储方法 |
CN112600764A (zh) * | 2020-12-07 | 2021-04-02 | 盛科网络(苏州)有限公司 | 直通转发模式的调度方法、设备及存储介质 |
CN112600764B (zh) * | 2020-12-07 | 2022-04-15 | 苏州盛科通信股份有限公司 | 直通转发模式的调度方法、设备及存储介质 |
WO2022121808A1 (zh) * | 2020-12-07 | 2022-06-16 | 苏州盛科通信股份有限公司 | 直通转发模式的调度方法、设备及存储介质 |
CN113259715A (zh) * | 2021-05-07 | 2021-08-13 | 广州小鹏汽车科技有限公司 | 多路视频数据的处理方法、装置、电子设备及介质 |
CN115190089A (zh) * | 2022-05-26 | 2022-10-14 | 中科驭数(北京)科技有限公司 | 一种报文存储方法、装置、设备及存储介质 |
CN115190089B (zh) * | 2022-05-26 | 2024-03-22 | 中科驭数(北京)科技有限公司 | 一种报文存储方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109246036B (zh) | 2021-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109246036A (zh) | 一种处理分片报文的方法和装置 | |
KR101407743B1 (ko) | 패킷 처리 장비내에서의 플로우 데이터의 저장 관리 방법 및 패킷 처리 장비 | |
JP3777161B2 (ja) | マルチキャスト伝送の効率的処理 | |
US9081742B2 (en) | Network communications processor architecture | |
US8489540B2 (en) | Management of storage and retrieval of data labels in random access memory | |
CN103946803B (zh) | 具有高效工作排队的处理器 | |
US8761204B2 (en) | Packet assembly module for multi-core, multi-thread network processors | |
CN103647726B (zh) | 一种报文调度方法及装置 | |
US8873550B2 (en) | Task queuing in a multi-flow network processor architecture | |
CN100571195C (zh) | 多端口以太网交换装置及数据传输方法 | |
WO2012162949A1 (zh) | 一种报文重组重排序方法、装置和*** | |
TW201703475A (zh) | 用於使用多個連結的記憶體清單的方法及裝置 | |
CN106059957A (zh) | 一种高并发网络环境下快速流表查找方法和*** | |
CN102035738A (zh) | 一种获取路由信息的方法及装置 | |
CN100589477C (zh) | 一种基于绑定链路实现数据发送的方法 | |
CN114584560A (zh) | 一种分片帧重组方法及装置 | |
CN111211990B (zh) | 一种数据包处理方法和装置 | |
CN105933325A (zh) | 一种基于NFSoRDMA的内核态RPC通信加速方法 | |
CN110519180A (zh) | 网卡虚拟化队列调度方法及*** | |
CN106533976A (zh) | 一种数据包处理方法及装置 | |
CN101594201A (zh) | 链式队列管理结构整合错误数据过滤的方法 | |
CN106372013B (zh) | 远程内存访问方法、装置和*** | |
US9703739B2 (en) | Return available PPI credits command | |
US20100284410A1 (en) | Packet relay apparatus and packet relay method | |
US7493392B1 (en) | Method and apparatus for assembly of virtually concatenated data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |