CN113676413A - 一种乱序报文的重排方法、装置及存储介质 - Google Patents

一种乱序报文的重排方法、装置及存储介质 Download PDF

Info

Publication number
CN113676413A
CN113676413A CN202110987126.2A CN202110987126A CN113676413A CN 113676413 A CN113676413 A CN 113676413A CN 202110987126 A CN202110987126 A CN 202110987126A CN 113676413 A CN113676413 A CN 113676413A
Authority
CN
China
Prior art keywords
message
sequence number
expected
window
messages
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
Application number
CN202110987126.2A
Other languages
English (en)
Other versions
CN113676413B (zh
Inventor
张俊辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ruijie Networks Co Ltd
Original Assignee
Ruijie Networks Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Ruijie Networks Co Ltd filed Critical Ruijie Networks Co Ltd
Priority to CN202110987126.2A priority Critical patent/CN113676413B/zh
Priority claimed from CN202110987126.2A external-priority patent/CN113676413B/zh
Publication of CN113676413A publication Critical patent/CN113676413A/zh
Application granted granted Critical
Publication of CN113676413B publication Critical patent/CN113676413B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/34Flow control; Congestion control ensuring sequence integrity, e.g. using sequence numbers

Abstract

本公开涉及通信领域,公开了一种乱序报文的重排方法、装置及存储介质,该方法应用于排序装置,排序装置设置在报文传输的上一节点和下一节点之间,包括:接收上一节点发送的报文段中的多个报文,以及每个报文对应的序列号,根据序列号确定期望序列号和排序窗口,通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,在满足预设条件即期望序列号对应的报文已存入对应的缓存地址,或期望序列号对应的报文已丢失后,更新期望序列号和排序窗口,判定缓存地址中存储有对应的报文后,从缓存地址中读取报文,按各个缓存地址的先后顺序将读取到的各个报文发给下一节点,从而提高了对乱序报文重新排序的效率。

Description

一种乱序报文的重排方法、装置及存储介质
技术领域
本申请涉及通信领域,特别涉及一种乱序报文的重排方法、装置及存储介质。
背景技术
在路由整机当中,数据报文从源线卡到目标背板采用的是包交换方式。现有的分布式架构中通常采用五元组哈希方式,从多个交换网板(Fabric Element,FE)端口当中选择一个端口通往目标背板。这样,当数据流量较大的时候,就很容易造成端口拥塞,参阅图1所示,甚至出现丢包的情况,进而导致接收方(目标背板)接收到的报文顺序错乱,这种情况下,需要对乱序的报文进行重新排序才能继续传输到下一节点。
目前,常见的比较类的重新排序的方法都是在一段乱序报文输入完成后再进行处理的,即接收到该段乱序报文的结束标识后,才能对接收到的该段乱序报文进行重新排序。假如,一段乱序报文数据量较大,即便接收到该段乱序报文中的绝大多数报文,但鉴于未有结束标识,仍无法为乱序的报文进行重新排序。显然,上述比较类排序在数据量大的时候不适合使用。而目前应用硬件来进行重新排序处理的方法,算法复杂度较高,在对乱序报文进行排序的过程中稳定性和可靠性较差。
发明内容
本公开实施例提供一种乱序报文的重排方法、装置及存储介质,用以提升对乱序报文重新进行排序的稳定性和可靠性。
本公开提供的具体技术方案如下:
第一方面,一种乱序报文的重排方法,应用于排序装置,排序装置设置在报文传输的上一节点和下一节点之间,该方法包括:
接收上一节点发送的报文段中的多个报文,并分别获取多个报文中每个报文对应的序列号;
根据序列号确定期望序列号和排序窗口;
通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,其中,缓存地址按照对应期望序列号的先后顺序进行排序;
判断满足预设条件之后,更新期望序列号和排序窗口,其中预设条件包括:期望序列号对应的报文已存入对应的缓存地址,或期望序列号对应的报文已丢失;
判定缓存地址中存储有对应的报文后,从缓存地址中读取报文;以及,按照各个缓存地址的先后顺序将读取到的各个报文发送给下一节点。
可选地,接收上一节点发送的报文段中的多个报文之后,还包括:
分别判断接收到的报文段中的每个报文是否有效;
丢弃报文段中无效的报文。
可选地,排序窗口的窗口区间大小等于数据存储区的大小,排序窗口的内部最后N位设置为内部跟随区,且紧随排序窗口设置外部跟随区;
通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,包括:
若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口内,且不在内部跟随区内,则将报文存储到序列号对应的期望序列号的缓存地址中;
若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口的内部跟随区,则确认当前期望序列号对应的报文已丢失,将当前接收到的报文存储到序列号对应的期望序列号的缓存地址中;
相应地,更新期望序列号和排序窗口,包括:
更新当前期望序列号并移动排序窗口和外部跟随区;
若当前报文的序列号落在当前期望序列号对应的排序窗口的外部跟随区,则确认当前期望序列号对应的报文已丢失,并将当前报文直接发送至下一节点;
相应地,更新期望序列号和排序窗口,包括:
持续更新当前期望序列号并移动排序窗口和外部跟随区,直至接收到更新后的当前期望序列号对应的报文为止,并在移动过程中将接收到的报文直接发送至下一节点。
可选地,通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中之前,还包括:
若当前序列号对应的报文到达排序窗口的时限超过预设阈值,则确定报文已丢失,并更新期望序列号。
可选地,判定缓存地址中存储有对应的报文后,从缓存地址中读取报文之前,还包括:
将存入缓存地址的各个报文各自对应的存储状态设置为已存储,并将各个存储状态分别存储到状态存储区内各个当前期望序列号对应的状态地址中;
判定缓存地址中存储有报文,包括:
判断各个期望序列号对应的状态地址中各个存储状态是否为已存储,若是,则判定缓存地址中存储有报文。
第二方面,一种乱序报文的重排装置,重排装置设置在报文传输的上一节点和下一节点之间,该重排装置包括:
接收单元,用于接收上一节点发送的报文段中的多个报文,并分别获取多个报文中每个报文对应的序列号;
确定单元,用于根据序列号确定期望序列号和排序窗口;
存储单元,用于通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,其中,缓存地址按照对应期望序列号的先后顺序进行排序;
更新单元,用于判断满足预设条件之后,更新期望序列号和排序窗口,其中预设条件包括:期望序列号对应的报文已存入对应的缓存地址,或期望序列号对应的报文已丢失;
读取单元,用于判定缓存地址中存储有对应的报文后,从缓存地址中读取报文;以及,按照各个缓存地址的先后顺序将读取到的各个报文发送给下一节点。
可选地,接收上一节点发送的报文段中的多个报文之后,还包括判断单元,判断单元,用于:
分别判断接收到的报文段中的每个报文是否有效;
丢弃报文段中无效的报文。
可选地,排序窗口的窗口区间大小等于数据存储区的大小,排序窗口的内部最后N位设置为内部跟随区,且紧随排序窗口设置外部跟随区;
通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,存储单元,用于:
若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口内,且不在内部跟随区内,则将报文存储到序列号对应的期望序列号的缓存地址中;
若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口的内部跟随区,则确认当前期望序列号对应的报文已丢失,将当前接收到的报文存储到序列号对应的期望序列号的缓存地址中;
相应地,更新期望序列号和排序窗口,更新单元,用于:
更新当前期望序列号并移动排序窗口和外部跟随区;
若当前报文的序列号落在当前期望序列号对应的排序窗口的外部跟随区,则确认当前期望序列号对应的报文已丢失,并将当前报文直接发送至下一节点;
相应地,更新期望序列号和排序窗口,更新单元,用于:
持续更新当前期望序列号并移动排序窗口和外部跟随区,直至接收到更新后的当前期望序列号对应的报文为止,并在移动过程中将接收到的报文直接发送至下一节点。
可选地,通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中之前,还包括超时确定单元,超时确定单元,用于:
若当前序列号对应的报文到达排序窗口的时限超过预设阈值,则确定报文已丢失,并更新期望序列号。
可选地,判定缓存地址中存储有对应的报文后,从缓存地址中读取报文之前,还包括状态判定单元,状态判定单元,用于:
将存入缓存地址的各个报文各自对应的存储状态设置为已存储,并将各个存储状态分别存储到状态存储区内各个当前期望序列号对应的状态地址中;
判定缓存地址中存储有报文,读取单元,用于:
判断各个期望序列号对应的状态地址中各个存储状态是否为已存储,若是,则判定缓存地址中存储有报文。
第三方面,一种终端,包括:
存储器,用于存储可执行指令;
处理器,用于读取并执行存储器中存储的可执行指令,以实现如第一方面任一项的方法。
第四方面,一种计算机可读存储介质,当所述存储介质中的指令由处理器执行时,使得所述处理器能够执行上述第一方面任一项所述的方法。
综上所述,本公开实施例中,公开了一种乱序报文的重排方法、装置及存储介质,该方法应用于排序装置,排序装置设置在报文传输的上一节点和下一节点之间,该方法包括:接收上一节点发送的报文段中的多个报文,以及获取接收到的每个报文对应的序列号,根据序列号确定期望序列号和排序窗口,通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,在满足预设条件即期望序列号对应的报文已存入对应的缓存地址,或期望序列号对应的报文已丢失后,更新期望序列号和排序窗口,以在判定缓存地址中存储有对应的报文后,从缓存地址中读取报文,按各个缓存地址的先后顺序将读取到的各个报文发给下一节点,从而使得排序装置输出的报文是遵循序列号的先后顺序的,上述利用排序装置进行基于序列号的报文存储与读出的方式,提高了对乱序报文重新排序的效率,保障了报文排序后的稳定性和可靠性。
附图说明
图1为现有技术中的报文在网络节点中传输情况的示意图;
图2为本申请实施例中对乱序报文进行重排的系统架构示意图;
图3为本申请实施例中对乱序报文进行重排的流程示意图;
图4为本申请实施例中判断报文是否有效的流程示意图;
图5为本申请实施例中利用排序窗口对乱序报文进行重排的流程示意图;
图6为本申请实施例中排序窗口、内部跟随区和外部跟随区的示意图;
图7为本申请实施例中数据存储区和状态存储区的示意图;
图8a为本公开实施例中一种排序装置的逻辑架构示意图;
图8b为本公开实施例中另一种排序装置的逻辑架构示意图;
图9为本公开实施例中终端的实体架构示意图。
具体实施方式
为了提升对乱序报文重新排序的效率,本申请实施例中,在报文传输的上一节点和下一节点之间设置有排序装置,排序装置接收上一节点发送的报文段中的多个报文,以及每个报文对应的序列号,根据序列号确定期望序列号和排序窗口,通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,在满足预设条件即期望序列号对应的报文已存入对应的缓存地址,或期望序列号对应的报文已丢失后,更新期望序列号和排序窗口,判定缓存地址中存储有对应的报文后,从缓存地址中读取报文,按各个缓存地址的先后顺序将读取到的各个报文发给下一节点,上述利用排序装置进行基于序列号的报文存储与读出的方式,提高了对乱序报文重新排序的效率,保障了报文排序后的稳定性和可靠性。
下面结合附图对本申请优选的实施方式进行详细说明,首先本公开实施例中,系统中包含了上一节点、下一节点和排序装置,参阅图2所示,该排序装置设置在上一节点和下一节点之间,优选地,上述排序装置为现场可编程逻辑门阵列(Field ProgrammableGate Array,FPGA),FPGA器件属于专用集成电路中的一种半定制电路,是可编程的逻辑门阵列,能够有效的解决原有的器件门电路数较少的问题。FPGA的基本结构包括可编程输入输出单元、可配置逻辑块、数字时钟管理模块、嵌入式块RAM等。FPGA具有布线资源丰富、可重复编程和集成度高、投资较低等优点。
下面介绍由排序装置执行乱序报文的重排方法的情况,该乱序报文的重排方法应用于排序装置。参阅图3所示,本公开实施例中,排序装置执行乱序报文的重排方法的具体流程如下:
步骤201:接收上一节点发送的报文段中的多个报文,并分别获取多个报文中每个报文对应的序列号。
在现有技术中,报文段从上一节点传输到下一节点的过程中,会因为等待超时、内部/外部序列号超窗位置异常等情况导致报文顺序错乱,严重时到达下一节点的多个报文无法使用。
本申请实施例中,额外设置排序装置,该排序装置的输入端与上一节点的输出端相连接,这样,由排序装置接收上一节点发送的报文段中的多个报文。鉴于每个报文中都携带有表征其在报文段中排列顺序的序列号,排序装置在接收到报文段中的一个报文之后,即获取该报文的序列号,以便排序窗口基于序列号进行报文筛选及后续存储、排序。
在此需要进行说明的是,由于网络丢包等因素的影响,报文在传输过程中可能会出现内容丢失的情况,因此,排序装置在接收到报文段中的一个报文之后,即获取该报文的序列号之后,参阅图4所示,还包括:
步骤100:分别判断接收到的报文段中的每个报文是否有效。
实施过程中,排序装置在接收到每个报文后,逐一判断每个报文是否有效,具体判断方式包括但不限于以下几种方式:(1)判断每个报文的序列号是否属于原有序列号的范畴,如果该序列号属于原有序列号的范畴,则判定该序列号对应的报文为有效报文;如果该序列号不属于原有序列号的范畴,则判定该序列号对应的报文为无效报文。(2)判断每个报文的内容是否真实有效,如果该报文的内容真实有效,则该报文为有效报文;如果该报文的内容不真实(例如,其内容为空),则该报文为无效报文。
优选地,当在步骤100中确定报文为有效报文后,将该报文对应的序列号记录为期望序列号,即将该序列号对应的报文列为后续排序窗口进行筛选的报文,通过筛选后将该序列号对应的报文发送给下一节点。
步骤101:丢弃无效的报文。
当在步骤100中确定报文为无效报文后,丢弃该无效的报文,省去了后续排序窗口进行筛选以及将该报文继续发送给下一节点的过程。
需要补充说明的是,在实施过程中,上述接收的过程仅表示多个报文到达排序装置,并未涉及报文经排序窗口筛选、存储并排序的过程。即在排序装置的处理流程中,先对报文进行接收,然后利用排序窗口筛选报文,通过筛选后的报文再进行存储并排序输出。
另外,通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中之前,还包括:
若当前序列号对应的报文到达排序窗口的时限超过预设阈值,则确定报文已丢失,并更新期望序列号。具体实施过程中,当前序列号对应的报文的到达排序窗口的时限超过预设阈值(例如,5秒),则丢弃报文,即超时则判定报文无效,并将期望序列号进行更新,即将期望序列号进行加一操作,以使排序窗口继续接收下一个期望序列号对应的报文。这里预设阈值可根据不同的使用场景进行灵活设置。下面继续介绍由排序窗口对报文进行筛选的过程。
步骤202:根据序列号确定期望序列号和排序窗口。
由于,上述序列号是整个报文段中所有报文的序列号,而传输过程中,考虑到网络拥塞等的情况,在对各个报文进行存储排序的过程中,使用排序窗口来控制每次筛选的报文的数量,这里的排序窗口实质为在排序装置的输入端与输出端之间设置的一个滑动窗口。
排序窗口在一次传输过程中所能接收到的序列号称之为期望序列号,实施过程中,根据序列号来确定排序窗口的期望序列号,即限定当前排序窗口所能筛选的序列号,通常,该期望序列号是按照序列号从小到大的顺序进行设定的,随着排序窗口的滑动,相应的期望序列号也有所更新。
步骤203:通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,其中,缓存地址按照对应期望序列号的先后顺序进行排序。
在此,首先需要进行说明的是,排序窗口的窗口区间大小固定,且等于数据存储区的大小,排序窗口的内部最后N位设置为内部跟随区,且紧随排序窗口设置外部跟随区,这里的N为大于1的整数。
这里的数据存储区为排序装置的输出端的存储空间,由于接收到的报文要对应存储到数据存储区中,因此,排序窗口的窗口区间等于数据存储区的大小。
另外,上述内部跟随区和外部跟随区为在排序装置中额外设置的与排序窗口相连接的区域,排序窗口的内部最后N位设置为内部跟随区,且紧随排序窗口设置外部跟随区,内部跟随区和外部跟随区的移动会触发整个排序窗口移动,内部跟随区的设置是为了在当前期望序列号未经过筛选时,有其他可接受范围内的期望序列号到达排序窗口可允许其优先进行筛选;外部跟随区的设置是当出现不可接受范围内的期望序列号到达排序窗口时,通过外部跟随区直接将该不可接受范围内的期望序列号对应的报文传输给下一节点(即不参与排序),同时,为了避免更多的报文不排序直接丢掉的情况出现,排序窗口在外部跟随区的移动下进行移动,即快速更新可接受的期望序列号,以便接收到当前的报文。
由于,内部跟随区设置在排序窗口内部,相应的,内部跟随区所能接收并进行存储的序列号为排序窗口所能接收并进行存储的序列号的一部分,实施过程中,内部跟随区所能接收并进行存储的序列号为排序窗口所能接收并进行存储的序列号的最后N位。例如,当排序窗口所能接收并进行存储的序列号为1、2、3和4时,内部跟随区所能接收并进行存储的序列号为3和4。
由于,外部跟随区设置在排序窗口外部,相应的,外部跟随区所能接收并进行存储的序列号不属于排序窗口所能接收并进行存储的序列号的一部分,但为与当前排序窗口所能接收并进行存储的序列号连续的下一部分。例如,当排序窗口所能接收并进行存储的序列号为1、2、3和4时,外部跟随区所能接收并进行存储的序列号为5、6、7和8。
上述通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中的过程,参阅图5所示,具体包括:
步骤2031:若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口内,且不在内部跟随区内,则将报文存储到序列号对应的期望序列号的缓存地址中。
在实施过程中,当通过排序窗口确定当前进入排序窗口进行筛选的当前接收到的序列号属于排序窗口对应的当前期望序列号,并且,该序列号不是内部跟随区所能接收的期望序列号的情况下,则将序列号相对应的报文存储到数据存储区内对应的缓存地址中。需要进一步说明的是,上述缓存地址为序列号对应的期望序列号的缓存地址,即在按照期望序列号的先后顺序设置了缓存地址后,当前接收到的报文的序列号在通过排序窗口的筛选后,存储到该序列号对应的缓存地址中。
以当排序窗口所能接收并进行存储的当前期望序列号为1、2、3和4时,内部跟随区所能接收并进行存储的期望序列号为3和4为例进行说明,在当前接收到的序列号1对应的报文到达时,显然,序列号1落在当前期望序列号1、2、3和4对应的排序窗口内,且不在内部跟随区(即3和4)内,将序列号1相对应的报文存储到数据存储区内对应的缓存地址1中。
步骤2032:若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口的内部跟随区,则确认当前期望序列号对应的报文已丢失,将当前接收到的报文存储到序列号对应的期望序列号的缓存地址中。
在实施过程中,参阅图6所示,当通过排序窗口确定当前进入排序窗口进行筛选的当前接收到的序列号属于排序窗口对应的当前期望序列号,并且,该序列号是内部跟随区所能接收的期望序列号的情况下,则确认当前期望序列号对应的报文已丢失,将当前接收到的报文存储到序列号对应的期望序列号的缓存地址中。需要进一步说明的是,上述缓存地址为序列号对应的期望序列号的缓存地址,即在按照期望序列号的先后顺序设置了缓存地址后,当前接收到的报文的序列号在通过排序窗口的筛选后,存储到该序列号对应的缓存地址中。
仍以当排序窗口所能接收并进行存储的当前期望序列号为1、2、3和4时,内部跟随区所能接收并进行存储的期望序列号为3和4为例进行说明,在等待的当前期望序列号为2时,假设,当前接收到序列号为3的报文,即序列号为3的报文是内部跟随区所能接收的期望序列号时,则确认当前期望序列号对应的报文2已丢失,将序列号3相对应的报文存储到数据存储区内对应的缓存地址3中。
步骤2033:若当前报文的序列号落在当前期望序列号对应的排序窗口的外部跟随区,则确认当前期望序列号对应的报文已丢失,并将当前报文直接发送至下一节点。
在实施过程中,若通过排序窗口确定当前接收到的报文的序列号落在当前期望序列号对应的排序窗口的外部跟随区,即当前报文的序列号不是排序窗口所能接收并进行存储的当前期望序列号时,则确认当前期望序列号对应的报文已丢失。
仍以当排序窗口所能接收并进行存储的当前期望序列号为1、2、3和4时,外部跟随区所能接收并进行存储的期望序列号为8、9和10为例进行说明,在当前期望序列号为5的情况下,序列号10对应的报文到达时落入了当前期望序列号对应的排序窗口的外部跟随区,则确认当前期望序列号对应的报文5已丢失。
并在移动过程中将接收到的报文直接发送至下一节点,即将未进行持续更新之前的当前期望序列号5与接收到的序列号8之间的多个报文(报文5、6、7、8和9)发送给下一节点,即不再将期望序列号与序列号之间的多个报文列入排序的范围,直接在本次排序过程中丢弃上述多个报文。
在此还需要说明的是,上述缓存地址按照对应期望序列号的先后顺序进行排序,即在数据存储区内预先划分出多个缓存地址,每个缓存地址都可用于存储一个报文,各个缓存地址预先按照期望序列号的先后顺序进行排序。这种并行存储的方式,解决了现有技术中只有在接收到全部报文以及相应的结束标识后才能进行存储的问题。
例如,当要接收的当前期望序列号为1、2、3和4时,各个缓存地址分别为缓存地址1、缓存地址2、缓存地址3和缓存地址4,相应的,接收到的序列号为1的报文存储到缓存地址1中,序列号为2的报文存储到缓存地址2中,序列号为3的报文存储到缓存地址3中,序列号为4的报文存储到缓存地址4中。
步骤204:判断满足预设条件之后,更新期望序列号和排序窗口,其中预设条件包括:期望序列号对应的报文已存入对应的缓存地址,或期望序列号对应的报文已丢失。
对应于上述步骤2031的情况:当前接收到的报文的序列号落在当前期望序列号对应的排序窗口内,且不在内部跟随区内,则将报文存储到序列号对应的期望序列号的缓存地址中,更新当前期望序列号并移动排序窗口和外部跟随区,即判断满足预设条件之后,更新期望序列号和排序窗口,其中预设条件包括:期望序列号对应的报文已存入对应的缓存地址。实施过程中,排序窗口和外部跟随区是一起移动的,移动排序窗口和外部跟随区的实质是将排序窗口和外部跟随区所对应的期望序列号都进行加一操作。
以上述当排序窗口所能接收并进行存储的当前期望序列号为1、2、3和4时,内部跟随区所能接收并进行存储的期望序列号为3和4,外部跟随区所能接收并进行存储的期望序列号为5和6,为例进行说明,当前接收到的序列号1对应的报文到达时,将序列号1相对应的报文存储到数据存储区内对应的缓存地址1中后,更新排序窗口所能接收并进行存储的当前期望序列号为2、3、4和5,内部跟随区所能接收并进行存储的期望序列号为4和5,外部跟随区所能接收并进行存储的期望序列号为6和7。
对应于上述步骤2032的情况:若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口的内部跟随区,则确认当前期望序列号对应的报文已丢失,将当前接收到的报文存储到序列号对应的期望序列号的缓存地址中,更新当前期望序列号并移动排序窗口和外部跟随区,即判断满足预设条件之后,更新期望序列号和排序窗口,其中预设条件包括:期望序列号对应的报文已丢失。实施过程中,排序窗口和外部跟随区是一起移动的,移动排序窗口和外部跟随区的实质是将排序窗口和外部跟随区所对应的期望序列号都进行加一操作。
仍以当排序窗口所能接收并进行存储的当前期望序列号为1、2、3和4时,内部跟随区所能接收并进行存储的期望序列号为3和4,外部跟随区所能接收并进行存储的期望序列号为5和6,为例进行说明,在当前期望序列号为2的情况下,序列号3对应的报文到达时,则确认当前期望序列号对应的报文2已丢失,更新排序窗口所能接收并进行存储的当前期望序列号为3、4、5和6,内部跟随区所能接收并进行存储的期望序列号为5和6,外部跟随区所能接收并进行存储的期望序列号为7和8。
对应于上述步骤2033的情况:若当前报文的序列号落在当前期望序列号对应的排序窗口的外部跟随区,则确认当前期望序列号对应的报文已丢失,并将当前报文直接发送至下一节点。
实施过程中,当前报文不属于排序窗口可筛选的报文范围,持续更新当前期望序列号,即对当前期望序列号进行连续加一操作,并移动排序窗口和外部跟随区,直至接收到更新后的当前期望序列号对应的报文为止,从而避免丢失更多的报文。
仍以当排序窗口所能接收并进行存储的当前期望序列号为1、2、3和4时,内部跟随区所能接收并进行存储的期望序列号为3和4,外部跟随区所能接收并进行存储的期望序列号为5和6,为例进行说明,在当前期望序列号为4的情况下,序列号6对应的报文到达时,则确认当前报文不属于排序窗口可筛选的报文范围,持续更新当前期望序列号4,得到当前期望序列号7,即移动排序窗口和外部跟随区,直至接收到更新后的当前期望序列号7对应的报文为止,在上述过程中,序列号为4、5、6的报文均直接发送给了下一节点,并不在缓存地址中进行存储。
步骤205:判定缓存地址中存储有报文后,从缓存地址中读取报文,以及,按照各个缓存地址的先后顺序将读取到的各个报文发送给下一节点,其中,各个缓存地址预先按照序列号的先后顺序进行排序。
实施过程中,将与各个期望序列号相对应的各个报文存储到数据存储区内各自对应的缓存地址中之后,判定缓存地址中存储有报文之前,还包括:
参阅图7所示,为每一个在缓存地址中已存储的报文设置状态标识,将存入缓存地址的各个报文各自对应的存储状态设置为已存储,例如,将已存储的报文对应的存储状态设置为1,将没有存储的报文对应的存储状态设置为0。
进一步的,将各个存储状态分别存储到状态存储区内各个期望序列号对应的状态地址中,即为每一个报文配置一个对应的状态地址,在该状态地址中存储有上述存储状态。例如,序列号为1的报文存储到缓存地址1中后,其存储状态1设置为已存储,相应的在状态地址1中存储“存储状态1为已存储”。这样,实现了报文和其存储状态的分别存储,通过该存储状态即可直观的获取到对应报文的存储情况。
实施过程中,上述判定缓存地址中存储有报文,包括:判断各个期望序列号对应的状态地址中各个存储状态是否为已存储,若是,则判定缓存地址中存储有报文。在确定缓存地址中存储有报文的基础上,按照各个缓存地址的先后顺序将读取到的各个报文发送给下一节点,从而实现对各个报文的重新排序,这里需要说明的是,上述各个缓存地址预先按照序列号的先后顺序进行排序。
基于同一发明构思,参阅图8a和图8b所示,本申请实施例中提供一种乱序报文的重排装置,重排装置设置在报文传输的上一节点和下一节点之间,该重排装置包括:
接收单元810,用于接收上一节点发送的报文段中的多个报文,并分别获取多个报文中每个报文对应的序列号;
确定单元820,用于根据序列号确定期望序列号和排序窗口;
存储单元830,用于通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,其中,缓存地址按照对应期望序列号的先后顺序进行排序;
更新单元840,用于判断满足预设条件之后,更新期望序列号和排序窗口,其中预设条件包括:期望序列号对应的报文已存入对应的缓存地址,或期望序列号对应的报文已丢失;
读取单元850,用于判定缓存地址中存储有对应的报文后,从缓存地址中读取报文;以及,按照各个缓存地址的先后顺序将读取到的各个报文发送给下一节点。
可选地,接收上一节点发送的报文段中的多个报文之后,还包括判断单元810’,判断单元810’,用于:
分别判断接收到的报文段中的每个报文是否有效;
丢弃报文段中无效的报文。
可选地,排序窗口的窗口区间大小等于数据存储区的大小,排序窗口的内部最后N位设置为内部跟随区,且紧随排序窗口设置外部跟随区;
通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,存储单元830,用于:
若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口内,且不在内部跟随区内,则将报文存储到序列号对应的期望序列号的缓存地址中;
若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口的内部跟随区,则确认当前期望序列号对应的报文已丢失,将当前接收到的报文存储到序列号对应的期望序列号的缓存地址中;
相应地,更新期望序列号和排序窗口,更新单元840,用于:
更新当前期望序列号并移动排序窗口和外部跟随区;
若当前报文的序列号落在当前期望序列号对应的排序窗口的外部跟随区,则确认当前期望序列号对应的报文已丢失,并将当前报文直接发送至下一节点;
相应地,更新期望序列号和排序窗口,更新单元840,用于:
持续更新当前期望序列号并移动排序窗口和外部跟随区,直至接收到更新后的当前期望序列号对应的报文为止,并在移动过程中将接收到的报文直接发送至下一节点。
可选地,通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中之前,还包括超时确定单元820’,超时确定单元820’,用于:
若当前序列号对应的报文到达排序窗口的时限超过预设阈值,则确定报文已丢失,并更新期望序列号。
可选地,判定缓存地址中存储有对应的报文后,从缓存地址中读取报文之前,还包括状态判定单元,状态判定单元,用于:
将存入缓存地址的各个报文各自对应的存储状态设置为已存储,并将各个存储状态分别存储到状态存储区内各个当前期望序列号对应的状态地址中;
判定缓存地址中存储有报文,读取单元850,用于:
判断各个期望序列号对应的状态地址中各个存储状态是否为已存储,若是,则判定缓存地址中存储有报文。
基于同一发明构思,参阅图9所示,本公开实施例提供一种终端,包括:
存储器901,用于存储可执行指令;
处理器902,用于读取并执行存储器中存储的可执行指令,以实现如第一方面任一项的方法。
其中,在图9中,总线架构可以包括任意数量的互联的总线和桥,具体由处理器902代表的一个或多个处理器和存储器901代表的存储器的各种电路链接在一起。总线架构还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口提供接口。收发机可以是多个元件,即包括发送机和收发机,提供用于在传输介质上与各种其他装置通信的单元。处理器902负责管理总线架构和通常的处理,存储器901可以存储处理器902在执行操作时所使用的数据。
处理器902负责管理总线架构和通常的处理,存储器901可以存储处理器900在执行操作时所使用的数据。
上述存储器901和处理器902相互配合,以实现上述实施例中步骤201-步骤203中排序装置所执行的任意一种方法,此处不再赘述。
基于同一发明构思,本申请实施例提供一种计算机可读存储介质,当所述存储介质中的指令由处理器执行时,使得所述处理器能够执行上述第一方面任一项所述的方法。
综上所述,本申请实施例中,公开了一种乱序报文的重排方法、装置及存储介质,该方法应用于排序装置,排序装置设置在报文传输的上一节点和下一节点之间,该方法包括:接收上一节点发送的报文段中的多个报文,以及获取接收到的每个报文对应的序列号,根据序列号确定期望序列号和排序窗口,通过排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,在满足预设条件即期望序列号对应的报文已存入对应的缓存地址,或期望序列号对应的报文已丢失后,更新期望序列号和排序窗口,以在判定缓存地址中存储有对应的报文后,从缓存地址中读取报文,按各个缓存地址的先后顺序将读取到的各个报文发给下一节点,从而使得排序装置输出的报文是遵循序列号的先后顺序的,上述利用排序装置进行基于序列号的报文存储与读出的方式,提高了对乱序报文重新排序的效率,保障了报文排序后的稳定性和可靠性。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品系统。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品系统的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品系统的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (12)

1.一种乱序报文的重排方法,其特征在于,应用于排序装置,所述排序装置设置在报文传输的上一节点和下一节点之间,该方法包括:
接收上一节点发送的报文段中的多个报文,并分别获取多个报文中每个报文对应的序列号;
根据所述序列号确定期望序列号和排序窗口;
通过所述排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,其中,所述缓存地址按照对应期望序列号的先后顺序进行排序;
判断满足预设条件之后,更新所述期望序列号和排序窗口,其中,所述预设条件包括:所述期望序列号对应的报文已存入对应的缓存地址,或所述期望序列号对应的报文已丢失;
判定所述缓存地址中存储有对应的报文后,从所述缓存地址中读取所述报文;以及,按照所述各个缓存地址的先后顺序将读取到的各个报文发送给下一节点。
2.如权利要求1所述的方法,其特征在于,所述接收上一节点发送的报文段中的多个报文之后,还包括:
分别判断接收到的报文段中的每个报文是否有效;
丢弃所述报文段中无效的报文。
3.如权利要求1所述的方法,其特征在于,所述排序窗口的窗口区间大小等于数据存储区的大小,所述排序窗口的内部最后N位设置为内部跟随区,且紧随所述排序窗口设置外部跟随区;
所述通过所述排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,包括:
若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口内,且不在所述内部跟随区内,则将所述报文存储到所述序列号对应的期望序列号的缓存地址中;
若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口的内部跟随区,则确认当前期望序列号对应的报文已丢失,将所述当前接收到的报文存储到所述序列号对应的期望序列号的缓存地址中;
相应地,所述更新所述期望序列号和排序窗口,包括:
更新所述当前期望序列号并移动排序窗口和外部跟随区;
若当前报文的序列号落在当前期望序列号对应的排序窗口的外部跟随区,则确认所述当前期望序列号对应的报文已丢失,并将所述当前报文直接发送至下一节点;
相应地,所述更新所述期望序列号和排序窗口,包括:
持续更新当前期望序列号并移动所述排序窗口和外部跟随区,直至接收到更新后的当前期望序列号对应的报文为止,并在移动过程中将接收到的报文直接发送至下一节点。
4.如权利要求3所述的方法,其特征在于,所述通过所述排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中之前,还包括:
若当前序列号对应的报文到达所述排序窗口的时限超过预设阈值,则确定所述报文已丢失,并更新所述期望序列号。
5.如权利要求1-4任一项所述的方法,其特征在于,所述判定所述缓存地址中存储有对应的报文后,从所述缓存地址中读取所述报文之前,还包括:
将存入所述缓存地址的所述各个报文各自对应的存储状态设置为已存储,并将所述各个存储状态分别存储到状态存储区内各个当前期望序列号对应的状态地址中;
所述判定所述缓存地址中存储有所述报文,包括:
判断所述各个期望序列号对应的所述状态地址中所述各个存储状态是否为已存储,若是,则判定所述缓存地址中存储有所述报文。
6.一种乱序报文的重排装置,其特征在于,所述重排装置设置在报文传输的上一节点和下一节点之间,该重排装置包括:
接收单元,用于接收上一节点发送的报文段中的多个报文,并分别获取多个报文中每个报文对应的序列号;
确定单元,用于根据所述序列号确定期望序列号和排序窗口;
存储单元,用于通过所述排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,其中,所述缓存地址按照对应期望序列号的先后顺序进行排序;
更新单元,用于判断满足预设条件之后,更新所述期望序列号和排序窗口,其中所述预设条件包括:所述期望序列号对应的报文已存入对应的缓存地址,或所述期望序列号对应的报文已丢失;
读取单元,用于判定所述缓存地址中存储有对应的报文后,从所述缓存地址中读取所述报文;以及,按照所述各个缓存地址的先后顺序将读取到的各个报文发送给下一节点。
7.如权利要求6所述的装置,其特征在于,所述接收上一节点发送的报文段中的多个报文之后,还包括判断单元,所述判断单元,用于:
分别判断接收到的报文段中的每个报文是否有效;
丢弃所述报文段中无效的报文。
8.如权利要求6所述的装置,其特征在于,所述排序窗口的窗口区间大小等于数据存储区的大小,所述排序窗口的内部最后N位设置为内部跟随区,且紧随所述排序窗口设置外部跟随区;
所述通过所述排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中,所述存储单元,用于:
若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口内,且不在所述内部跟随区内,则将所述报文存储到所述序列号对应的期望序列号的缓存地址中;
若当前接收到的报文的序列号落在当前期望序列号对应的排序窗口的内部跟随区,则确认当前期望序列号对应的报文已丢失,将所述当前接收到的报文存储到所述序列号对应的期望序列号的缓存地址中;
相应地,所述更新所述期望序列号和排序窗口,所述更新单元,用于:
更新所述当前期望序列号并移动排序窗口和外部跟随区;
若当前报文的序列号落在当前期望序列号对应的排序窗口的外部跟随区,则确认所述当前期望序列号对应的报文已丢失,并将所述当前报文直接发送至下一节点;
相应地,所述更新所述期望序列号和排序窗口,所述更新单元,用于:
持续更新当前期望序列号并移动所述排序窗口和外部跟随区,直至接收到更新后的当前期望序列号对应的报文为止,并在移动过程中将接收到的报文直接发送至下一节点。
9.如权利要求8所述的装置,其特征在于,所述通过所述排序窗口筛选各个期望序列号对应的报文,并将筛选出的各个报文分别存储在各自对应的缓存地址中之前,还包括超时确定单元,所述超时确定单元,用于:
若当前序列号对应的报文到达所述排序窗口的时限超过预设阈值,则确定所述报文已丢失,并更新所述期望序列号。
10.如权利要求6-9任一项所述的装置,其特征在于,所述判定所述缓存地址中存储有对应的报文后,从所述缓存地址中读取所述报文之前,还包括状态判定单元,所述状态判定单元,用于:
将存入所述缓存地址的所述各个报文各自对应的存储状态设置为已存储,并将所述各个存储状态分别存储到状态存储区内各个当前期望序列号对应的状态地址中;
所述判定所述缓存地址中存储有所述报文,所述读取单元,用于:
判断所述各个期望序列号对应的所述状态地址中所述各个存储状态是否为已存储,若是,则判定所述缓存地址中存储有所述报文。
11.一种终端,其特征在于,包括:
存储器,用于存储可执行指令;
处理器,用于读取并执行所述存储器中存储的可执行指令,以实现如权利要求1-5任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,当所述存储介质中的指令由处理器执行时,使得所述处理器能够执行如权利要求1-5任一项所述的方法。
CN202110987126.2A 2021-08-26 一种乱序报文的重排方法、装置及存储介质 Active CN113676413B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110987126.2A CN113676413B (zh) 2021-08-26 一种乱序报文的重排方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110987126.2A CN113676413B (zh) 2021-08-26 一种乱序报文的重排方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN113676413A true CN113676413A (zh) 2021-11-19
CN113676413B CN113676413B (zh) 2024-05-17

Family

ID=

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114338559A (zh) * 2021-12-15 2022-04-12 杭州迪普信息技术有限公司 一种报文保序的方法及装置

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030033407A (ko) * 2001-10-22 2003-05-01 삼성전자주식회사 패킷 재 정렬 방법
WO2010022653A1 (zh) * 2008-08-26 2010-03-04 华为技术有限公司 一种传输文件的检测方法及终端
US20120284373A1 (en) * 2011-05-06 2012-11-08 Ortiva Wireless, Inc. Data path processing
CN103069757A (zh) * 2011-08-17 2013-04-24 华为技术有限公司 一种报文重组重排序方法、装置和系统
CN103532965A (zh) * 2013-10-22 2014-01-22 迈普通信技术股份有限公司 一种报文回调方法及装置
CN103825841A (zh) * 2014-03-19 2014-05-28 北京众合德信技术有限公司 一种以太网报文排序方法及装置
WO2015058613A1 (zh) * 2013-10-21 2015-04-30 腾讯科技(深圳)有限公司 一种检测数据包的方法、装置及存储介质
CN110943808A (zh) * 2018-09-21 2020-03-31 北京松果电子有限公司 数据传输方法、装置、电子设备和存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030033407A (ko) * 2001-10-22 2003-05-01 삼성전자주식회사 패킷 재 정렬 방법
WO2010022653A1 (zh) * 2008-08-26 2010-03-04 华为技术有限公司 一种传输文件的检测方法及终端
US20120284373A1 (en) * 2011-05-06 2012-11-08 Ortiva Wireless, Inc. Data path processing
CN103069757A (zh) * 2011-08-17 2013-04-24 华为技术有限公司 一种报文重组重排序方法、装置和系统
WO2015058613A1 (zh) * 2013-10-21 2015-04-30 腾讯科技(深圳)有限公司 一种检测数据包的方法、装置及存储介质
CN103532965A (zh) * 2013-10-22 2014-01-22 迈普通信技术股份有限公司 一种报文回调方法及装置
CN103825841A (zh) * 2014-03-19 2014-05-28 北京众合德信技术有限公司 一种以太网报文排序方法及装置
CN110943808A (zh) * 2018-09-21 2020-03-31 北京松果电子有限公司 数据传输方法、装置、电子设备和存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114338559A (zh) * 2021-12-15 2022-04-12 杭州迪普信息技术有限公司 一种报文保序的方法及装置
CN114338559B (zh) * 2021-12-15 2024-03-22 杭州迪普信息技术有限公司 一种报文保序的方法及装置

Similar Documents

Publication Publication Date Title
JP3734704B2 (ja) パケット分類エンジン
US20220286402A1 (en) Method and apparatus for controlling data packet sending, model training method and apparatus, and system
US7916695B2 (en) Smart buffering for policy enforcement
CN111669732B (zh) 一种用于在蓝牙Mesh网络中的节点处过滤冗余数据包的方法
CN107204924B (zh) 链路发现方法及装置
CN110996268B (zh) 基于SIG mesh的广播承载层报文过滤策略的方法
EP1791305A1 (en) Storing and processing a data unit in a network device
CN109640345A (zh) 网络拨号方法、装置及电子设备
CN113438169A (zh) 一种数据调度方法、电子设备及存储介质
CN116074247B (zh) 硬件流表老化方法、软件流表老化方法、装置及电子设备
CN113676413A (zh) 一种乱序报文的重排方法、装置及存储介质
CN113676413B (zh) 一种乱序报文的重排方法、装置及存储介质
CN115955447B (zh) 一种数据传输方法、交换机及交换机系统
EP3672171A1 (en) Message transmission method and device
CN108028785B (zh) 缓冲器控制装置、通信节点以及中继装置
CN105406989A (zh) 处理报文的方法、网卡及系统、更新信息的方法及主机
CN112866208B (zh) 表项配置方法、报文处理方法、装置、设备及存储介质
CN112187568B (zh) 一种报文传输方法、设备及系统
CN113923270B (zh) 一种报文的处理方法、装置、设备及可读存储介质
CN111147198B (zh) 数据重传方法和装置
CN110198312B (zh) 消息处理方法和装置
RU2781916C1 (ru) Способ модификации данных при сетевой пакетной коммутации
CN112688985B (zh) 通信方法及装置
CN115002020B (zh) 基于ospf的数据处理方法及装置
CN112671616B (zh) 流监控方法、装置、可编程芯片、存储介质及电子装置

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