CN113609518B - 一种基于关联容器map的报文协议超时重发方法及*** - Google Patents

一种基于关联容器map的报文协议超时重发方法及*** Download PDF

Info

Publication number
CN113609518B
CN113609518B CN202110677521.0A CN202110677521A CN113609518B CN 113609518 B CN113609518 B CN 113609518B CN 202110677521 A CN202110677521 A CN 202110677521A CN 113609518 B CN113609518 B CN 113609518B
Authority
CN
China
Prior art keywords
retransmission
message
frame
variable
management structure
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
Application number
CN202110677521.0A
Other languages
English (en)
Other versions
CN113609518A (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.)
Tianjin Jinhang Computing Technology Research Institute
Original Assignee
Tianjin Jinhang Computing Technology Research Institute
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 Tianjin Jinhang Computing Technology Research Institute filed Critical Tianjin Jinhang Computing Technology Research Institute
Priority to CN202110677521.0A priority Critical patent/CN113609518B/zh
Publication of CN113609518A publication Critical patent/CN113609518A/zh
Application granted granted Critical
Publication of CN113609518B publication Critical patent/CN113609518B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • G06F21/6227Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Bioethics (AREA)
  • Health & Medical Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Communication Control (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)

Abstract

本发明涉及一种基于关联容器map的报文协议超时重发方法,包括设计***间报文协议;使用所设计的***间报文协议进行通信,使用关联容器MAP对发送报文进行管理;在报文发送线程使用重发管理结构体对发送报文进行管理并将帧序号和重发管理结构体存储到关联容器MAP中;在报文接收线程,处理接收确认报文;设置重发管理定时器,在重发管理定时器中周期对关联容器MAP变量中键进行遍历,对不需进行管理的键值对进行删除;对所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理;每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重发次数达到需要重发的次数时,将该键值对从关联容器中移除。

Description

一种基于关联容器map的报文协议超时重发方法及***
技术领域
本发明涉及一种基于关联容器map的报文协议超时重发方法,属于计算机控制领域。
背景技术
在多个分***互联的大型***中,***间数据通过总线进行交互。在交互过程中由于干扰、故障等原因会导致错帧、乱帧、丢帧等现象,造成了***间数据交互的失败,一些重要数据交互失败容易导致整个***运行的失败。因此,***间通讯过程中重要的交互数据通常需要接收确认,传统的应答方法通常采用线性表的方式对报文重发进行管理,例如在一个数组中标记出哪些报文已经发送但还未收到应答,并通过计数器进行超时未应答计数,超时后根据全局变量记录的报文内容进行重发操作。通常采用数组标记的方式进行管理,对于不同的报文类型,报文发送后在数组中标记是否需要应答,对于不断增加需要应答的报文数量,数组的长度需要不断增加,代码框架也需要改变,同时使用一个定时器进行计数来管理若干需要应答的报文,这种管理方式容易出错。在报文重发时,需要确定重发报文的目的地址、内容、长度等信息,这些信息一般为全局共有变量,从报文第一次发送到应答期间数据的值可能被篡改,致使两次发送数据内容并非完全一致,导致最终数据出现错误。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供了一种基于关联容器map的报文协议超时重发方法。
本发明的技术解决方案是:
一种基于关联容器map的报文协议超时重发方法,步骤如下:
(1)设计***间报文协议,包括发送报文协议和接收确认报文协议,且均为变长协议,报文接收方接收到报文后回复接收确认报文,发送报文和接收确认报文以帧序号为唯一标识进行关联;
(2)使用步骤(1)所设计的***间报文协议进行通信,使用关联容器MAP对发送报文进行管理;关联容器MAP存储所发送报文的帧序号和重发管理结构体MainReSend变量信息;
(3)在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中;
(4)在报文接收线程,处理接收确认报文,根据接收确认报文的帧序号,在关联容器MAP中遍历查询该帧序号,将查找到的重发管理结构体中的是否重发标志设置为否;
(5)设置重发管理定时器,在重发处理定时器中周期对关联容器MAP变量gSndQ中键进行遍历,对不需进行管理的键值对进行删除;
(6)对步骤(5)中所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理;
(7)每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重发次数达到需要重发的次数时,将该键值对从关联容器中移除。
进一步的,所述发送报文协议包括帧头FrmHead、帧序号FrmNum、帧长度FrmLen、帧类型FrmType、目的地址FrmDst、源地址FrmSrc、应答标识FrmACKFlag、功能码FrmCode、负载内容FrmContent、和校验FrmChk、帧尾FrmTail;
帧头FrmHead长度为两个字节,帧头具有可标识性;帧序号FrmNum长度为四个字节,发送报文和接收确认报文通过帧序号FrmNum进行关联;帧长度FrmLen长度为两个字节,该长度包括从帧头到帧尾的所有字节数;帧类型FrmType长度为两个字节,表示该帧数据的类型;目的地址FrmDst长度为四个字节,该值为接收方的IP地址值;源地址FrmSrc长度为四个字节,该值为发送方的IP地址值;应答标识FrmACKFlag长度为两个字节,表示该发送帧是否需要应答,如果这两个字节为0xFF00则表示此帧需要应答,如果为0x00FF则表示此帧不需要应答;功能码FrmCode长度为两个字节,功能码表示帧所传递的有效数据内容;负载内容FrmContent所具有的字节数不固定,表示实际传输数据的内容;校验FrmChk长度为两个字节,检验方式采用和校验方式;帧结尾FrmTail为两个字节;
接收确认报文协议与发送报文协议完全一致,仅负载内容FrmContent为固定字节数。
进一步的,定义关联容器MAP变量,关联容器中的键值对分别为帧序号和重发管理结构;重发管理结构包括目的地址、所要发送的数据指针、所要发送数据的长度、是否重发标志、发送次数计数、需要重发的次数。
进一步的,所述使用关联容器MAP对发送报文进行管理,具体为:
(2.1)设计重发管理结构体MainReSend,此结构的成员变量包括①发送报文的目的地址DstAddr,类型设置为整型;②需要发送的数据地址DataAddr,类型设置为整型指针类型,该地址指向存储数据的内存;③需要发送的数据长度DataLen,类型设置为短整形;④是否重发标志IsReSnd,类型设置为布尔型,TURE表示需要重发值设置为1,FALSE表示不需要重发,值设置为0;⑤已重发次数CNT,类型设置为无符号整型;⑥需要重发次数NCNT,类型设置为整型;此值如果设置为0则表示不需要重发;⑦计数器COUNT,该变量记录重发超时次数;
(2.2)定义一个关联容器MAP变量gSndQ,其中键key的类型设置为整型,这个值记录发送帧的帧序号FrmNum,发送报文和接收确认报文通过帧序号FrmNum进行关联,值value设置为重发管理结构体MainReSend类型。
进一步的,所述步骤(3)在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中,具体为:
(3.1)在报文发送过程,报文内容填充完后,判断应答标识FrmACKFlag是否为0xFF00,如果为0xFF00则进行重发管理,如果为0x00FF,则不做处理;
(3.2)定义一个重发管理结构体MainReSend类型变量gMReSend,将帧序号FrmNum、发送报文的目的地址DstAddr、需要发送的数据地址DataAddr、需要发送的数据长度DataLen分别赋值到重发管理结构体变量中,将gMReSend中的是否重发标志IsReSnd设置为TRUE、已重发次数CNT设置为0、需要重发次数NCNT设置为TIMES_SET;
(3.3)定义关联容器变量MAP变量gSndQ,使用关联容器MAP中***方法将帧序号FrmNum以及重发管理结构体类型变量gMReSend键值对***到关联容器MAP变量gSndQ中,等待遍历查询,此时报文已发送完成。
进一步的,所述步骤(4)在报文接收线程,处理接收确认报文,具体为:
(4.1)在接收到接收确认报文后,按照步骤(1)中设计的协议将报文中的帧序号FrmNum提取出来;
(4.2)使用关联MAP中的遍历查询方法查询该帧序号FrmNum键值是否在关联容器MAP变量gSndQ的队列中,如果查找成功,则将重发管理结构体MainReSend类型变量gMReSend中的是否重发标志IsReSnd设置为FALSE,等待遍历过程中该键值对从关联容器移除。
进一步的,所述步骤(5)设置重发管理定时器,在重发处理定时器中周期对关联容器MAP变量gSndQ中键进行遍历,对不需进行管理的键值对进行删除,具体为:
(5.1)设置重发管理定时器,启动定时器,定时器设置周期时间为RATES;
(5.2)在定时器回调函数中,通过匹配帧序号FrmNum遍历重发管理结构体MainReSend类型变量gMReSend中的键;
(5.3)对于遍历到的每一个帧序号FrmNum,通过对关联容器MAP变量gSndQ进行下标索引判断重发管理结构体变量gMReSend中是否重发标志IsReSnd是否FALSE;
(5.4)若为FALSE则使用关联容器MAP中的移除方法,将该序号对应内容全部从队列中移除;如果为TRUE,则转到下一步。
进一步的,所述步骤(6)对步骤(5)中所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理,具体为:
(6.1)重发管理结构体MainReSend类型变量gMReSend中计数器COUNT进行加一操作,并将加一后的值对重发计数COUNT_BASE进行取余操作;
(6.2)当取余值为TIMES_SET-1的时候,即重发基数减一,对报文进行重发,将此重发管理结构体中的发送报文的目的地址DstAddr、需要发送的数据地址DataAddr、需要发送的数据长度DataLen传入到***底层的发送函数中进行发送;同时将重发结构体变量中的已重发次数CNT进行加一操作。
进一步的,在步骤(6)中已重发次数CNT进行加一操作后,如果此次重发查询到接收确认帧序号FrmNum匹配,则重发结束,将该键值对从关联容器MAP变量gSndQ中移除;否则再次进行重发操作,当已重发次数CNT达到需要重发次数NCNT值TIMES_SET,将该键值对从gSndQ中移除,表示重发已经达到最大次数,并对超时未应答帧进行打印提示。
进一步的,本发明还提出一种报文协议超时重发***,包括:
报文协议设计模块:设计***间报文协议,包括发送报文协议和接收确认报文协议,且均为变长协议,报文接收方接收到报文后回复接收确认报文,发送报文和接收确认报文以帧序号为唯一标识进行关联;
关联容器MAP管理模块:使用所设计的***间报文协议进行通信,使用关联容器MAP对发送报文进行管理;关联容器MAP存储所发送报文的帧序号和重发管理结构体MainReSend变量信息;
重发管理结构体管理模块:在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中;
接收确认报文处理模块:在报文接收线程,处理接收确认报文,根据接收确认报文的帧序号,在关联容器MAP中遍历查询该帧序号,将查找到的重发管理结构体中的是否重发标志设置为否;
重发管理定时器处理模块:设置重发管理定时器,在重发处理定时器中周期对关联容器MAP变量gSndQ中键进行遍历,对不需进行管理的键值对进行删除;对所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理;每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重发次数达到需要重发的次数时,将该键值对从关联容器中移除。
本发明与现有技术相比的有益效果是:
本发明通过使用关联容器MAP,设计了一个重发管理结构体,将报文帧序号和重发管理结构体以键值对记录到关联容器中,对于超时重发的管理仅需在定时器中不断查询关联容器中的报文应答状态,即可高效地完成超时应答管理,这种方法同时也提高了报文管理的可扩展性,***间通讯增加新的报文,超时应答管理部分不需要做任何改动,不需要修改和编译源码,即可将新的报文加入超时重发管理。
附图说明
图1为一种基于关联容器map的报文协议超时重发方法流程图。
具体实施方式
下面结合附图对本发明的具体实施方式进行进一步的详细描述。
传统的***间报文超时重发管理通常采用线性表的方式,通常采用数组标记的方式进行管理,对于不同的报文类型,报文发送后在数组中标记是否需要应答,对于不断增加需要应答的报文数量,数组的长度需要不断增加,代码框架也需要改变,同时使用一个定时器进行计数来管理若干需要应答的报文,这种管理方式容易出错。在报文重发时,需要确定重发报文的目的地址,内容,长度等信息,这些信息一般为全局共有变量,从报文第一次发送到应答期间数据的值可能被篡改,致使两次发送数据内容并非完全一致,导致最终数据出现错误。
如图1所示,本发明提出一种基于关联容器map的报文协议超时重发方法,包括如下步骤:
1、设计***间报文协议,包括发送报文协议和接收确认报文协议。发送报文和接收确认报文以帧序号为唯一标识进行关联。
2、定义关联容器MAP变量,关联容器中的键值对分别为帧序号和重发管理结构。重发管理结构包括目的地址,所要发送的数据指针,所要发送数据的长度,是否重发标志,发送次数计数,需要重发的次数。
3、在发送报文时,确认发送报文是否需要应答,对需要应答的报文,定义重发管理结构体变量,将目的地址,要发送的数据指针,要发送的数据长度,是否重发标志,发送次数计数,需要重发的次数填入到重发管理结构体变量中。使用关联容器中的***方法,将报文帧序号和重发管理结构体变量***到关联容器中。
4、在报文接收线程,根据接收确认帧的帧序号,在关联容器MAP中遍历查询该帧序号,将查找到的重发管理结构体中的是否重发标志设置为否。
5、设置重发管理定时器,启动定时器,在定时器回调函数中遍历关联容器中的帧序号,并通过帧序号匹配方式查询重发管理结构体中是否重发标志,将是否重发标志为否的键值对从关联容器中进行移除。
6、对上一步重发管理结构体变量中计数器进行加一操作,重发管理结构体变量计数器对重发基数进行取余操作,取余值为重发基数减一的时候,进行报文重发,将要发送的数据指针、要发送数据的长度以及目的地址,传入到***底层的发送函数中进行发送。同时将重发结构体变量中的发送次数进行加一操作。
7、每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重发次数达到需要重发的次数时,将该键值对从关联容器中移除。
本发明通过使用关联容器MAP,设计了一个重发管理结构体,将报文帧序号和重发管理结构体以键值对记录到关联容器中,对于超时重发的管理仅需在定时器中不断查询关联容器中的报文应答状态,即可高效地完成超时应答管理,这种方法同时也提高了报文管理的可扩展性,***间通讯增加新的报文,超时应答管理部分不需要做任何改动,不需要修改和编译源码,即可将新的报文加入超时重发管理。
实施例:
本实施例提出一种基于关联容器map的报文协议超时重发方法,具体步骤为:
S1:设计***间报文协议,报文协议带有超时重发特性。报文接收方接收到报文后需要回复接收确认帧。协议设计为变长协议。
(1)发送帧协议包括帧头FrmHead、帧序号FrmNum、帧长度FrmLen、帧类型FrmType、目的地址FrmDst、源地址FrmSrc、应答标识FrmACKFlag、功能码FrmCode、负载内容FrmContent、和校验FrmChk、帧尾FrmTail。
①帧头FrmHead长度为两个字节,帧头具有可标识性,例如使用0x55和0xAA进行标识。
②帧序号FrmNum长度为四个字节,发送帧和接收确认帧通过帧序号FrmNum进行关联。
③帧长度FrmLen长度为两个字节,该长度包括从帧头到帧尾的所有字节数。
④帧类型FrmType长度为两个字节,表示该帧数据的类型,如长帧,短帧,私有帧,公开帧。
⑤目的地址FrmDst长度为四个字节,该值为接收方的IP地址值。
⑥源地址FrmSrc长度为四个字节,该值为发送方的IP地址值。
⑦应答标识FrmACKFlag长度为两个字节,表示该发送帧是否需要应答,如果这两个字节为0xFF00则表示此帧需要应答,如果为0x00FF则表示此帧不需要应答。
⑧功能码FrmCode长度为两个字节,功能码表示帧所传递的有效数据内容,如遥测数据,导航数据,任务数据。
⑨负载内容FrmContent所具有的字节数不固定。表示实际传输数据的内容,
⑩校验FrmChk长度为两个字节,检验方式采用和校验方式,从上面字段①到字段⑨所有字节的和
帧结尾FrmTail为两个字节(如0xFE和0xEF)。
(2)接收确认帧协议与发送帧协议完全一致,负载内容FrmContent为固定字节数,包括四个字节的帧序号FrmNum、两个字节的功能码FrmCode。
S2:使用关联容器MAP对发送报文进行管理。***间使用S1所设计的报文协议进行通信。关联容器MAP存储所发送报文的帧序号和重发管理结构体MainReSend变量信息。
(1)设计重发管理结构体MainReSend,此结构的成员变量包括①发送报文的目的地址DstAddr,类型设置为整型。②需要发送的数据地址DataAddr,类型设置为整型指针类型,该地址指向存储数据的内存。③需要发送的数据长度DataLen,类型设置为短整形④是否重发标志IsReSnd,类型设置为布尔型(TURE表示需要重发值设置为1。FALSE表示不需要重发,值设置为0。)。⑤已重发次数CNT,类型设置为无符号整型。⑥需要重发次数NCNT,类型设置为整型。此值如果设置为0则表示不需要重发。⑦计数器COUNT,该变量记录重发超时次数(和定时器周期共同决定超时时间)。
(2)定义一个关联容器MAP变量gSndQ,其中键(key)的类型设置为整型,这个值记录发送帧的帧序号FrmNum,发送帧和接收确认帧通过帧序号FrmNum进行关联,这种关联方式可以唯一追溯应答状态),值(value)设置为重发管理结构体MainReSend类型。
S3:在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中。
(1)在报文发送过程(报文为S1所设计的报文格式),报文内容填充完后,判断应答标识FrmACKFlag是否为0xFF00,如果为
0xFF00则进行重发管理,如果为0x00FF,则不做处理。
(2)定义一个重发管理结构体MainReSend类型变量gMReSend,将帧序号FrmNum,发送报文的目的地址DstAddr(接收方的IP值),需要发送的数据地址DataAddr,需要发送的数据长度DataLen,分别赋值到重发管理结构体变量中,将gMReSend中的是否重发标志IsReSnd设置为TRUE、已重发次数CNT设置为0,需要重发次数NCNT设置为TIMES_SET。
(3)定义关联容器变量MAP变量gSndQ,使用关联容器MAP中***方法insert()将帧序号FrmNum以及重发管理结构体类型变量gMReSend键值对***到关联容器MAP变量gSndQ中,等待遍历查询,此时报文已发送完成。
S4:在报文接收线程中,处理接收确认报文。
(1)当接收到接收确认报文后,按照S1中设计的协议将报文中的帧序号FrmNum提取出来。
(2)使用关联MAP中的遍历查询方法find()查询该帧序号FrmNum键值是否在关联容器MAP变量gSndQ的队列中,如果查找成功,则将重发管理结构体MainReSend类型变量gMReSend中的是否重发标志IsReSnd设置为FALSE,等待遍历过程中该键值对从关联容器移除。
S5:在重发处理定时器中周期对关联容器MAP变量gSndQ中键进行遍历,对不需进行管理的键值对进行删除。
(1)设置重发处理定时器,启动定时器,定时器设置周期时间为RATES
(2)在定时器回调函数中,通过匹配帧序号FrmNum遍历重发管理结构体MainReSend类型变量gMReSend中的键(使用foreach遍历函数)。
(3)对于遍历到的每一个帧序号FrmNum,通过对关联容器MAP变量gSndQ进行下标索引判断其中变量gMReSend中是否重发标志IsReSnd是否FALSE
(4)若为FALSE则使用关联容器MAP中的移除remove()方法,将该序号对应内容全部从队列中移除。
(5)如果为TRUE,则转到S6。
S6:对S5中所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理。
(1)重发管理结构体MainReSend类型变量gMReSend中计数器COUNT进行加一操作,并将加一后的值对重发基数COUNT_BASE进行取余操作。
(2)当取余值为TIMES_SET-1的时候,对报文进行重发,将
此重发管理结构体中的发送报文的目的地址DstAddr(接收方的IP值),需要发送的数据地址DataAddr,需要发送的数据长度DataLen传入到***底层的发送函数中进行发送。同时将重发结构体变量中的已重发次数CNT进行加一操作。
S7:在S6中已重发次数CNT进行加一操作后,如果此次重发查询到接收确认帧序号FrmNum匹配,则重发结束,将该键值对从关联容器MAP变量gSndQ中移除。否则再次进行重发操作,当已重发次数CNT达到需要重发次数NCNT值TIMES_SET,将该键值对从gSndQ中移除,表示重发已经达到最大次数,并对超时未应答帧进行打印提示。
本发明说明书中未作详细描述的内容属于本领域的公知技术。

Claims (8)

1.一种基于关联容器map的报文协议超时重发方法,其特征在于步骤如下:
(1)设计***间报文协议,包括发送报文协议和接收确认报文协议,且均为变长协议,报文接收方接收到报文后回复接收确认报文,发送报文和接收确认报文以帧序号为唯一标识进行关联;
(2)使用步骤(1)所设计的***间报文协议进行通信,使用关联容器MAP对发送报文进行管理;关联容器MAP存储所发送报文的帧序号和重发管理结构体MainReSend变量信息;
定义关联容器MAP变量,关联容器中的键值对分别为帧序号和重发管理结构;重发管理结构包括目的地址、所要发送的数据指针、所要发送数据的长度、是否重发标志、发送次数计数以及需要重发的次数;
所述使用关联容器MAP对发送报文进行管理,具体为:
(2.1)设计重发管理结构体MainReSend,此结构的成员变量包括①发送报文的目的地址DstAddr,类型设置为整型;②需要发送的数据地址DataAddr,类型设置为整型指针类型,该地址指向存储数据的内存;③需要发送的数据长度DataLen,类型设置为短整形;④是否重发标志IsReSnd,类型设置为布尔型,TURE表示需要重发值设置为1,FALSE表示不需要重发,值设置为0;⑤已重发次数CNT,类型设置为无符号整型;⑥需要重发次数NCNT,类型设置为整型;此值如果设置为0则表示不需要重发;⑦计数器COUNT,该变量记录重发超时次数;
(2.2)定义一个关联容器MAP变量gSndQ,其中键key的类型设置为整型,这个值记录发送帧的帧序号FrmNum,发送报文和接收确认报文通过帧序号FrmNum进行关联,值value设置为重发管理结构体MainReSend类型;
(3)在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中;
(4)在报文接收线程,处理接收确认报文,根据接收确认报文的帧序号,在关联容器MAP中遍历查询该帧序号,将查找到的重发管理结构体中的是否重发标志设置为否;
(5)设置重发管理定时器,在重发管理定时器中周期对关联容器MAP变量gSndQ中键进行遍历,对不需进行管理的键值对进行删除;
(6)对步骤(5)中所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理;
(7)每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重发次数达到需要重发的次数时,将该键值对从关联容器中移除。
2.根据权利要求1所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述发送报文协议包括帧头FrmHead、帧序号FrmNum、帧长度FrmLen、帧类型FrmType、目的地址FrmDst、源地址FrmSrc、应答标识FrmACKFlag、功能码FrmCode、负载内容FrmContent、和校验FrmChk以及帧尾FrmTail;
帧头FrmHead长度为两个字节,帧头具有可标识性;帧序号FrmNum长度为四个字节,发送报文和接收确认报文通过帧序号FrmNum进行关联;帧长度FrmLen长度为两个字节,该长度包括从帧头到帧尾的所有字节数;帧类型FrmType长度为两个字节,表示该帧数据的类型;目的地址FrmDst长度为四个字节,该值为接收方的IP地址值;源地址FrmSrc长度为四个字节,该值为发送方的IP地址值;应答标识FrmACKFlag长度为两个字节,表示该发送帧是否需要应答,如果这两个字节为0xFF00则表示此帧需要应答,如果为0x00FF则表示此帧不需要应答;功能码FrmCode长度为两个字节,功能码表示帧所传递的有效数据内容;负载内容FrmContent所具有的字节数不固定,表示实际传输数据的内容;校验FrmChk长度为两个字节,检验方式采用和校验方式;帧结尾FrmTail为两个字节;
接收确认报文协议与发送报文协议完全一致,仅负载内容FrmContent为固定字节数。
3.根据权利要求1所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述步骤(3)在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中,具体为:
(3.1)在报文发送过程,报文内容填充完后,判断应答标识FrmACKFlag是否为0xFF00,如果为0xFF00则进行重发管理,如果为0x00FF,则不做处理;
(3.2)定义一个重发管理结构体MainReSend类型变量gMReSend,将帧序号FrmNum、发送报文的目的地址DstAddr、需要发送的数据地址DataAddr、需要发送的数据长度DataLen分别赋值到重发管理结构体变量中,将gMReSend中的是否重发标志IsReSnd设置为TRUE、已重发次数CNT设置为0、需要重发次数NCNT设置为TIMES_SET;
(3.3)定义关联容器变量MAP变量gSndQ,使用关联容器MAP中***方法将帧序号FrmNum以及重发管理结构体类型变量gMReSend键值对***到关联容器MAP变量gSndQ中,等待遍历查询,此时报文已发送完成。
4.根据权利要求1所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述步骤(4)在报文接收线程,处理接收确认报文,具体为:
(4.1)在接收到接收确认报文后,按照步骤(1)中设计的协议将报文中的帧序号FrmNum提取出来;
(4.2)使用关联MAP中的遍历查询方法查询该帧序号FrmNum键值是否在关联容器MAP变量gSndQ的队列中,如果查找成功,则将重发管理结构体MainReSend类型变量gMReSend中的是否重发标志IsReSnd设置为FALSE,等待遍历过程中该键值对从关联容器移除。
5.根据权利要求1所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述步骤(5)设置重发管理定时器,在重发管理定时器中周期对关联容器MAP变量gSndQ中键进行遍历,对不需进行管理的键值对进行删除,具体为:
(5.1)设置重发处理定时器,启动定时器,定时器设置周期时间为RATES;
(5.2)在定时器回调函数中,通过匹配帧序号FrmNum遍历重发管理结构体MainReSend类型变量gMReSend中的键;
(5.3)对于遍历到的每一个帧序号FrmNum,通过对关联容器MAP变量gSndQ进行下标索引判断其中变量gMReSend中是否重发标志IsReSnd是否FALSE;
(5.4)若为FALSE则使用关联容器MAP中的移除方法,将该序号对应内容全部从队列中移除;如果为TRUE,则转到下一步。
6.根据权利要求1所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述步骤(6)对步骤(5)中所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理,具体为:
(6.1)重发管理结构体MainReSend类型变量gMReSend中计数器COUNT进行加一操作,并将加一后的值对重发计数COUNT_BASE进行取余操作;
(6.2)当取余值为TIMES_SET-1的时候,即重发基数减一,对报文进行重发,将此重发管理结构体中的发送报文的目的地址DstAddr、需要发送的数据地址DataAddr、需要发送的数据长度DataLen传入到***底层的发送函数中进行发送;同时将重发结构体变量中的已重发次数CNT进行加一操作。
7.根据权利要求1所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:在步骤(6)中已重发次数CNT进行加一操作后,如果此次重发查询到接收确认帧序号FrmNum匹配,则重发结束,将该键值对从关联容器MAP变量gSndQ中移除;否则再次进行重发操作,当已重发次数CNT达到需要重发次数NCNT值TIMES_SET,将该键值对从gSndQ中移除,表示重发已经达到最大次数,并对超时未应答帧进行打印提示。
8.一种根据权利要求1~7中任一项所述的基于关联容器map的报文协议超时重发方法实现的报文协议超时重发***,其特征在于包括:
报文协议设计模块:设计***间报文协议,包括发送报文协议和接收确认报文协议,且均为变长协议,报文接收方接收到报文后回复接收确认报文,发送报文和接收确认报文以帧序号为唯一标识进行关联;
关联容器MAP管理模块:使用所设计的***间报文协议进行通信,使用关联容器MAP对发送报文进行管理;关联容器MAP存储所发送报文的帧序号和重发管理结构体MainReSend变量信息;
重发管理结构体管理模块:在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中;
接收确认报文处理模块:在报文接收线程,处理接收确认报文,根据接收确认报文的帧序号,在关联容器MAP中遍历查询该帧序号,将查找到的重发管理结构体中的是否重发标志设置为否;
重发管理定时器处理模块:设置重发管理定时器,在重发处理定时器中周期对关联容器MAP变量gSndQ中键进行遍历,对不需进行管理的键值对进行删除;对所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理;每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重发次数达到需要重发的次数时,将该键值对从关联容器中移除。
CN202110677521.0A 2021-06-18 2021-06-18 一种基于关联容器map的报文协议超时重发方法及*** Active CN113609518B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110677521.0A CN113609518B (zh) 2021-06-18 2021-06-18 一种基于关联容器map的报文协议超时重发方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110677521.0A CN113609518B (zh) 2021-06-18 2021-06-18 一种基于关联容器map的报文协议超时重发方法及***

Publications (2)

Publication Number Publication Date
CN113609518A CN113609518A (zh) 2021-11-05
CN113609518B true CN113609518B (zh) 2023-12-12

Family

ID=78336576

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110677521.0A Active CN113609518B (zh) 2021-06-18 2021-06-18 一种基于关联容器map的报文协议超时重发方法及***

Country Status (1)

Country Link
CN (1) CN113609518B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115941128A (zh) * 2022-11-07 2023-04-07 天津津航计算技术研究所 一种基于QCache的报文协议超时重发管理方法
CN115941127B (zh) * 2022-11-07 2024-05-14 天津津航计算技术研究所 一种基于哈希表的报文协议超时重发管理方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1642167A (zh) * 2004-01-08 2005-07-20 华为技术有限公司 主节点支持从节点上不同协议类型从单元设备的方法
CN102577313A (zh) * 2009-09-01 2012-07-11 信息控制公司 用于分布式资产管理的通信协议的方法和***
CN102625464A (zh) * 2011-03-31 2012-08-01 北京新岸线无线技术有限公司 用于接入无线网络的方法及装置
US8238318B1 (en) * 2011-08-17 2012-08-07 CBF Networks, Inc. Intelligent backhaul radio
CN103412739A (zh) * 2013-08-28 2013-11-27 电子科技大学 一种基于地震数据处理的数据传输方法及***
CN110519050A (zh) * 2019-08-19 2019-11-29 中国电子科技集团公司第三十研究所 基于量子真随机数交换与黑盒映射的密钥协商方法
CN111817854A (zh) * 2020-06-04 2020-10-23 中国电子科技集团公司第三十研究所 一种基于无中心标识映射同步管理的安全认证方法及***
CN112235302A (zh) * 2020-10-15 2021-01-15 天津津航计算技术研究所 一种适用于多种总线的协议解析方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1642167A (zh) * 2004-01-08 2005-07-20 华为技术有限公司 主节点支持从节点上不同协议类型从单元设备的方法
CN102577313A (zh) * 2009-09-01 2012-07-11 信息控制公司 用于分布式资产管理的通信协议的方法和***
CN102625464A (zh) * 2011-03-31 2012-08-01 北京新岸线无线技术有限公司 用于接入无线网络的方法及装置
US8238318B1 (en) * 2011-08-17 2012-08-07 CBF Networks, Inc. Intelligent backhaul radio
CN103412739A (zh) * 2013-08-28 2013-11-27 电子科技大学 一种基于地震数据处理的数据传输方法及***
CN110519050A (zh) * 2019-08-19 2019-11-29 中国电子科技集团公司第三十研究所 基于量子真随机数交换与黑盒映射的密钥协商方法
CN111817854A (zh) * 2020-06-04 2020-10-23 中国电子科技集团公司第三十研究所 一种基于无中心标识映射同步管理的安全认证方法及***
CN112235302A (zh) * 2020-10-15 2021-01-15 天津津航计算技术研究所 一种适用于多种总线的协议解析方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于UDP协议的可靠数据传输的实现;许坤等;《信息化工业》(第17期);第7-8页 *

Also Published As

Publication number Publication date
CN113609518A (zh) 2021-11-05

Similar Documents

Publication Publication Date Title
CN113609518B (zh) 一种基于关联容器map的报文协议超时重发方法及***
CN100414923C (zh) 地址转换装置和地址转换规则的管理方法
CN1231029C (zh) 使用短消息业务的数据传输方法
CN104484295B (zh) 并行计算机***中基于接收方滑动窗口的数据传输方法
CN109714130B (zh) 一种基于喷泉码的文件传输方法
US20160226817A1 (en) Apparatus and method for creating block-type structure using sketch-based user interaction
US10505677B2 (en) Fast detection and retransmission of dropped last packet in a flow
CN107241378B (zh) 跨异构网络的统一数据建网的设备和方法以及存储介质
CN112165457A (zh) 一种文件重排的方法、***、设备及可读存储介质
US8320251B2 (en) Method and device for transmitting data packets
CN1268170C (zh) 分离成若干个分组的消息的传输方法
CN115941127B (zh) 一种基于哈希表的报文协议超时重发管理方法
CN111130690A (zh) 一种ir46智能电表的多通讯协议的处理方法及装置
CN113645008B (zh) 一种基于链表的报文协议超时重发方法及***
EP0834227B1 (en) Method and system for receiving data packets in a unidirectional broadcasting system
CN109067503B (zh) 一种数据重传方法和装置
CN113794622B (zh) 消息处理方法、装置、电子设备及存储介质
CN114598651B (zh) 数据传输方法以及装置
EP3672189A1 (en) Data transmission method, device and system
US6563826B1 (en) Method of controlling errors in a packets transmission link
CN106982165A (zh) 数据压缩方法及其***
CN101989896B (zh) 一种arq连接的反馈方法及装置
CN112328593B (zh) 一种对地址学习表进行批量配置的方法、设备及***
CN115941128A (zh) 一种基于QCache的报文协议超时重发管理方法
JPH0730543A (ja) フレーム再送方法

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