CN113609518B - 一种基于关联容器map的报文协议超时重发方法及系统 - Google Patents
一种基于关联容器map的报文协议超时重发方法及系统 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 238000012790 confirmation Methods 0.000 claims abstract description 41
- 230000005540 biological transmission Effects 0.000 claims abstract description 39
- 238000012545 processing Methods 0.000 claims abstract description 16
- 230000006854 communication Effects 0.000 claims abstract description 4
- 238000004891 communication Methods 0.000 claims abstract description 3
- 230000006870 function Effects 0.000 claims description 17
- 230000004044 response Effects 0.000 claims description 15
- 238000013461 design Methods 0.000 claims description 4
- 238000012966 insertion method Methods 0.000 claims description 4
- 102000001327 Chemokine CCL5 Human genes 0.000 claims description 3
- 108010055166 Chemokine CCL5 Proteins 0.000 claims description 3
- 238000007639 printing Methods 0.000 claims description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting 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/6227—Protecting 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network 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的报文协议超时重发方法,步骤如下:
(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元素进行管理;每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重发次数达到需要重发的次数时,将该键值对从关联容器中移除。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115941127B (zh) * | 2022-11-07 | 2024-05-14 | 天津津航计算技术研究所 | 一种基于哈希表的报文协议超时重发管理方法 |
CN115941128A (zh) * | 2022-11-07 | 2023-04-07 | 天津津航计算技术研究所 | 一种基于QCache的报文协议超时重发管理方法 |
Citations (8)
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 | 天津津航计算技术研究所 | 一种适用于多种总线的协议解析方法 |
-
2021
- 2021-06-18 CN CN202110677521.0A patent/CN113609518B/zh active Active
Patent Citations (8)
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)
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) | 并行计算机系统中基于接收方滑动窗口的数据传输方法 | |
CN102890631B (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 | |
CN112165457A (zh) | 一种文件重排的方法、系统、设备及可读存储介质 | |
CN107241378B (zh) | 跨异构网络的统一数据建网的设备和方法以及存储介质 | |
CN111147196A (zh) | 数据传输方法、数据发送设备及数据接收设备 | |
CN111130690A (zh) | 一种ir46智能电表的多通讯协议的处理方法及装置 | |
US8320251B2 (en) | Method and device for transmitting data packets | |
CN115941127B (zh) | 一种基于哈希表的报文协议超时重发管理方法 | |
CN113645008B (zh) | 一种基于链表的报文协议超时重发方法及系统 | |
EP3672189A1 (en) | Data transmission method, device and system | |
CN109067503B (zh) | 一种数据重传方法和装置 | |
CN113794622B (zh) | 消息处理方法、装置、电子设备及存储介质 | |
CN114598651B (zh) | 数据传输方法以及装置 | |
KR101611663B1 (ko) | 비연결 지향형 프로토콜을 이용한 데이터 통신 | |
US6563826B1 (en) | Method of controlling errors in a packets transmission link | |
CN112328593B (zh) | 一种对地址学习表进行批量配置的方法、设备及系统 | |
CN115941128A (zh) | 一种基于QCache的报文协议超时重发管理方法 | |
JPH0730543A (ja) | フレーム再送方法 | |
CN113452759B (zh) | websocket通信报文的发送方法、接收方法及装置 | |
CN113141300B (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 | ||
GR01 | Patent grant |