CN111970092A - 一种支持可靠性调节的多协议冗余网络异步通信方法 - Google Patents
一种支持可靠性调节的多协议冗余网络异步通信方法 Download PDFInfo
- Publication number
- CN111970092A CN111970092A CN202010809935.XA CN202010809935A CN111970092A CN 111970092 A CN111970092 A CN 111970092A CN 202010809935 A CN202010809935 A CN 202010809935A CN 111970092 A CN111970092 A CN 111970092A
- Authority
- CN
- China
- Prior art keywords
- message
- receiving
- sending
- sequence number
- packet
- 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
- 230000006854 communication Effects 0.000 title claims abstract description 90
- 238000004891 communication Methods 0.000 title claims abstract description 86
- 238000000034 method Methods 0.000 title claims abstract description 56
- 230000005540 biological transmission Effects 0.000 claims abstract description 52
- 230000004044 response Effects 0.000 claims abstract description 52
- 230000006870 function Effects 0.000 claims abstract description 10
- 238000012545 processing Methods 0.000 claims description 22
- 238000013507 mapping Methods 0.000 claims description 18
- 101100465000 Mus musculus Prag1 gene Proteins 0.000 claims description 15
- 230000008569 process Effects 0.000 claims description 15
- 230000007246 mechanism Effects 0.000 claims description 6
- 230000008859 change Effects 0.000 claims description 2
- 238000004806 packaging method and process Methods 0.000 claims description 2
- 238000012423 maintenance Methods 0.000 claims 2
- 238000013461 design Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 239000000872 buffer Substances 0.000 description 6
- 230000006399 behavior Effects 0.000 description 5
- 241000566146 Asio Species 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000009776 industrial production Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/1607—Details of the supervisory signal
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1812—Hybrid protocols; Hybrid automatic repeat request [HARQ]
- H04L1/1819—Hybrid protocols; Hybrid automatic repeat request [HARQ] with retransmission of additional or different redundancy
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1829—Arrangements specially adapted for the receiver end
- H04L1/1848—Time-out mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1829—Arrangements specially adapted for the receiver end
- H04L1/1858—Transmission or retransmission of more than one copy of acknowledgement message
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W76/00—Connection management
- H04W76/10—Connection setup
- H04W76/15—Setup of multiple wireless link connections
- H04W76/16—Involving different core network technologies, e.g. a packet-switched [PS] bearer in combination with a circuit-switched [CS] bearer
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W76/00—Connection management
- H04W76/10—Connection setup
- H04W76/19—Connection re-establishment
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Communication Control (AREA)
Abstract
本发明涉及一种支持可靠性调节的多协议冗余网络异步通信方法。该通信方法(1)支持两种通信模式:request‑response模式;data‑ack模式,用户可以根据接收端性能的强弱选择不同模式;(2)支持单网/多网通信,支持group级、message级通信可靠性与高效性的配置,用户可以利用这些配置来实现网络连接的鲁棒、消息内容的可靠、消息前后顺序的可靠;(3)支持多种网络通信协议,为用户提供更好的通用性;(4)支持对网络连接状态的管理,为用户保持网络连接的可用性。为了实现上述的功能,本发明划分了4个模块来作为支撑:(1)TransportBehavior通信行为管理模块;(2)TransportChannel传输通道状态管理模块;(3)TransportConnection连接模块;(4)TransportQueue发送接收队列模块。
Description
技术领域
本发明属于软件领域,涉及一种基于异步通信的网络传输方法,支持调节可靠性、支持多协议、支持冗余多网。
背景技术
随着嵌入式技术及物联网技术的蓬勃发展,万物联网成为了趋势。小到我们日常生活中的智能家电,大到工业生产,甚至是军事领域,处处能够看到物联网的影子。
在工业生产领域,例如工厂中的自动化无人车间,通常一个数控服务器或者计算机需要连接许多的外部设备,例如传感器、物理机械设备等,来完成信息的获取或者设备的控制。一方面,这些设备可能因为生产厂家不同、设备批次不同等情况,存在着使用不同的通信协议的问题。另一方面,因为嵌入式设备的数据处理能力与数控计算机的数据处理能力有着明显的差异,所以需要一种通信手段来协调二者的性能差距,让它们以兼容的方式工作,防止因为数据处理能力不足,导致网络拥塞等问题。
在军事设备领域,例如第四代隐身战斗机,它通过数据链,能够为其他的第三代战斗机、轰炸机提供敌我位置信息、联动作战指令等战场信息。如果想要让不同的飞机之间建立通信,且能够在电磁干扰的情况下,保证“敌我位置信息”传输的尽可能快,同时保证“联动作战指令”信息传输的尽可能准确,我们需要一种通信手段,能够支持不同通信内容的传输可靠性要求。在需要消息内容高可靠时,采用高可靠传输;在需要消息内容尽快发送时,采用高效率传输。
发明内容
为了解决上述应用中存在的问题,设计了本通信方法:
本发明包含以下创新点:
1、支持多种通信模式,来应对不同的使用场景:分别是:request-response模式;data- ack模式。request-response模式适用于接收端消息处理能力较弱的使用场景;data-ack模式适用于接收端消息处理能力较强的使用场景。
2、支持多网通信、支持通信可靠性与高效性的调节,主要包括:(1)可以将网络通信设置为single-channel(单网通信)或multi-channel(多网通信);(2)可以设置消息的处理的可靠性级别,包括message可靠性级别、group可靠性级别。
当用户对网络传输的可靠性或者效率要求比较高时,可以采用multi-channel与远端建立多条网络连接,这些网络连接的协议类型可以不同;否则,可以采用single-channel来降低资源占用。本发明设计了group(网络连接组)的概念,代表了通向某个远端对象所有网络连接的组合。一个group内可以只有一个网络连接,也可以有多个网络连接。只有一个网络连接相当于就是single-channel;有多个网络连接就相对于是multi-channel。
为了防止携带了有效数据的消息包发生丢失或者错乱,本通信方法对有效数据进行了编号。
message级可靠传输下,消息要序号连续才可取用(保证接收端处理的消息的顺序与发送端产生消息的顺序一致)。message级高效传输之下,任何一条网络连接收到消息之后,只要该消息还没有被处理过,就可用被取用,无需关注序号是否连续。
group级可靠传输之下,同一group内的不同网络连接收到的消息要进行比对,所有网络连接内同序号的消息内容相同,该消息才能被取用;group级高效传输之下,无需对不同网络连接间收到的消息内容进行比对,所有网络连接中的消息可以直接被取用。
3、支持多种通信协议。(1)以channel id来指代某个网络连接,屏蔽了不同网络连接类型的差异;(2)设计了通用的网络连接接口,支持增加新的网络连接类型;(3)设计了基于环形内存的消息完整性检查机制,来应对一些流式网络传输协议粘包的问题。能够以低内存占用的方式检查网络二级制流中消息的完整性与正确性。
4、支持对网络连接状态的管理。利用状态机模式为一个网络连接的发送方向和接收方向进行状态跟踪记录,在网络连接处于故障的情况时,重新建立网络连接。
功能模块划分概述
如图1所示,整个通信方法由以下功能模块来承担不同部分的工作:
(1)TransportBehavior通信行为管理模块,对消息进行收发管理。
(2)TransportChannel传输通道状态管理模块,负责管理一个网络连接,维护连接状态。
(3)TransportConnection连接模块,实质是一个网络连接,利用接口对各种通信协议的连接进行了封装。
(4)TransportQueue发送接收队列模块,是一个消息内容的缓存模块,它负责缓存用户要发出的消息以及从远端收到的消息。
TransportBehavior通信行为管理模块
该模块是整个异步通信方法的核心调度模块,其他模块均直接或者间接被它调用。
该模块管理了所有的网络连接。并利用这些网络连接,完成消息的发送或是消息的接收的工作。这些网络连接由TransportChannel进行维护。
该模块管理了消息的发送和接收。可被配置为发送端或者接收端。它支持两种通信模式,request-response与data-ack模式。在request-response模式下,接收端定时发出request 消息,发送端发出response消息进行回应;在data-ack模式下,发送端每次有消息时主动发出data消息,接收端发出ack消息进行回应。
该模块管理消息可靠性检查行为。为了防止携带了有效数据的消息包发生丢失或者错误, TransportBehavior模块对有效数据进行了编号。每当收到消息包(该消息包中携带了有效数据),就根据可靠性的配置,尝试对<1>消息序号是否连续(保证接收端处理的消息的顺序与发送端产生消息的顺序一致)<2>不同网络连接间收到的消息内容是否一致,进行检查。检查通过之后的消息内容才能被取用。TransportQueue模块记录了消息发送、消息接收的历史信息,为TransportBehavior的消息可靠性检查提供数据支持。
通信模式
TransportBehavior模块中设计了两种通信模式,分别是:request-response模式;data- ack模式。设计这两种模式的原因,主要是考虑到嵌入式通信过程中,有这两种使用场景:
一种情况是消息的接收端是嵌入式的设备,资源总量和消息处理能力都十分不足,而发送端是一台高性能计算机。为了防止过量的消息导致接收端消息拥塞,可以利用request- response模式,接收端会按照一定的周期发出request请求,发送端收到请求之后才会发出 response,这样一来,接收端就能限制从发送端发来的消息的流入速度。
另一种情况是消息的发送端是嵌入式设备,接收端是一台高性能计算机。此时,接收端有足够的资源快速处理消息内容。为了提高消息的处理速度,同时减少消息内容在发送端的堆积。可以利用data-ack模式,发送端有消息就向接收端发送,然后接收端根据接消息接收的情况回复ack进行反馈。
TransportBehavior可以被配置为发送端或者接收端、可以被配置为request-response模式或data-ack模式。TransportBehavior将利用它所管理的所有网络连接,以发送或接收端的中的一种角色、以request-response模式或data-ack模式中的一种模式,对外通信。下文中提到的发送端或者接收端,可以抽象理解为TransportBehavior在操作某一个网络连接在完成消息收发的工作。
所有的消息包都设计了一个消息头(固定长度的特殊字符字段,通过消息头能够知道消息包的类型,例如可用确定是ack消息还是request消息),以及一个消息包长度值(该值也是一个固定长度的数值字段)。下文中,用“消息包基础信息”一词来指代这两个字段。
(1)request-response模式
request-response模式下,接收端能通过request的发送频率限制从发送端发来的消息的流入速度。request-response模式适用于发送端消息处理能力较强,但是接收端消息处理能力较弱的使用场景。
一个request消息包中包含消息包基础信息及消息序号。
一个response消息包中包含消息包基础信息、消息的种类(包含三种,分别是data, initial和heartbeat)、消息消息序号及消息内容。
如图2所示,接收端会按照一定的周期,向发送端发出request请求。发送端接收到来自接收端的request信息之后,尽早发送response进行回复。
接收端与发送端建立上连接时,发出的第一个request的序号为0,表达的含义是请求当前发送端的最新消息序号。在此之后的通信中,request中携带的消息序号则是一个大于 0的消息序号,表达请求消息内容。如果接收端发出request之后,在最小发送间隔周期没有收到发送端发来的response应答,那么将进行重发上一次发出的request序号。也就是, (1)在刚建立好连接,发出的第一个request没有得到应答时,接收端会以一定周期发送序号为0的request;(2)如果对某个消息的序号发出后没有收到应答,接收端则会以一定周期重新发送该消息的序号。
对于发送端而言,收到序号为0的request之后,会立刻向接收端发送一个response消息包,该消息包的种类为initial,序号为最新的消息序号,消息内容为空。来告知接收端当前最新的消息序号。接收端根据消息包中的消息类型为initial,确定是用于更新序号的信息,然后利用消息包中的序号更新本地的消息序号记录。并在一定周期之后,发出request消息包,消息包中的序号为刚刚获知的最新序号。
如果消息包携带的序号大于0,且发送端有该序号对应的消息,则回复一个种类为data,消息序号为请求的消息序号,消息内容带有数据内容的response包。用来向接收端提供消息内容。如果接收端下一次在request消息包中携带的消息序号增大了一位,就代表接收端收到了上一次发送的消息内容。
如果消息包携带的序号大于0,但是发送端已经删除该序号对应的消息,则回复一个种类为data,消息序号为请求的消息序号,消息内容为空的response包。这种情况及其罕见,一般在出现故障的情况下才会出现。此时接收端会跳过该消息,请求下一个序号对应的消息内容。该序号对应的消息内容当作“空”消息处理(取数时,取到的将是一个null值)。
如果消息包携带的序号大于0,且该序号对应的消息还没有产生,则回复一个种类为 heartbeat,消息序号为请求的消息序号,消息内容为空的response包。表达了当前没有可以发送的数据内容,这是一个心跳包,为了防止连接超时。接收端收到该response包之后,不改变消息序号记录。下个周期发送request消息包时,还采用该消息序号。
(2)data-ack模式
data-ack模式下,发送端有消息就向接收端发送,因此,当发送端产生的消息量比较大时,可能有很多的新产生的消息以及重发的消息发送给接收端。接收端需要较好的消息处理能力才能应对大量的消息,更适用于接收端能力较强的使用场景。
一个data消息包中包含消息包基础信息、消息的序号及消息的内容。
一个ack或nack消息包中包含消息包基础信息以及消息的序号。
为了在长时间没有消息内容时,保持连接不中断,data-ack模式下还有一种heartbeat 消息包。一个heartbeat消息报中包含消息包基础信息以及最新的消息序号。
如图3所示,发送端每次产生新的消息,就会为该消息分配一个消息序号,然后立刻将消息内容打包到data消息包中,向接收端发送出去。消息发送出去的同时,发送端会为消息启动应答计时,当接收端超过最大等待周期,仍未对消息进行应答时,发送端就会对该条消息进行重发,重发时该条消息的序号保持不变。收到ack消息包之后,如果消息包中携带的消息序号与之前发出的data消息包中消息序号一致,认为该消息接收成功。收到nack消息包之后,表达发送到接收端的内容有误,发送端通过nack消息包提供的消息序号,找到对应的消息内容,打包成data消息包重新发送。
接收端收到data消息之后,如果消息内容不存在问题,会根据data消息中的类型和序号,构建好ack消息包发给发送端,无论该序号对应的消息之前是否收到过。当接收端收到的消息存在错误(和其他channel收到的相同序号的消息内容相比,有差异),则会根据data 消息中的类型和序号,构建好nack消息包并向发送端发送,让发送端从新发送该序号的消息。
当发送端长时间没有产生新消息时,为了维持网络连接不会中断,会利用当前最新的消息序号构建heartbeat消息包,并给接收端。接收端在收到heartbeat消息后,获取消息内的序号信息,然后构建一个ack消息包发给发送端,以此来维持网络连接不会中断。
single-channel(单网通信)与multi-channel(多网通信)
一个TransportBehavior模块可以根据配置情况,构造出若干个网络连接。这些网络连接一方面连接的远端地址可能存在差异;另外一方面,这些网络连接的类型可能有所不同。为了将这些网络连接统一管理起来,同时又能区分出不同的网络连接,TransportBehavior模块设计了channel id的概念。在构建好网络连接时,会为每个网络连接分配一个channel id。当需要通过某个网络发送消息内容时,通过channel id到该网络连接的映射,即可找到该网络连接。当通过某个网络连接收到消息时,也能通过channel id区分出是哪个网络连接发来的消息。
TransportBehavior模块中还设计了group(通信组)的概念,group内可以包含一个网络连接(这就形成了single-channel),也可以包含多个网络连接(也就是multi-channel)。这些网络连接的类型不限,可以由不同类型的网络类型组建成一个group。一个group内所有的连接都通往同一个远端的通信对象。TransportBehavior会为每个group分配一个group 号(一个数字值),用于方便查找group。在TransportBehavior内可以构建若干个group。 TransportBehavior会记录好网络连接的channel id与group的关系。
每个网络连接可以根据配置,自由加入任何一个group。这就为单网通信和多网通信提供了极好的灵活性。在网络状况良好的情况下,可以采用任意通信协议的单网通信;在网络状况较差的情况下,可以配置多网通信,保证连接的健壮性。
可靠性级别调节
TransportBehavior模块管理了若干个group(通信连接组),会根据可靠性级别的配置,对来自group的消息进行消息可靠性检查。
此处预先提出两个概念,(1)因为在消息传输的过程中,网络状态变化很快且是不可预知的,所以网络连接会被TransportChannel模块所管理,维护网络连接的持续可用,且减少 TransportBehavior模块的处理逻辑复杂度。(2)网络通信过程中,不同网络连接收到消息内容的时机是不确定的。所以,如果需要达成消息校验等功能,就需要将消息内容缓存下来。因此,TransportQueue应运而生。TransportQueue为TransportBehavior记录消息内容和消息的接收情况,在TransportBehavior进行可靠性检查时提供数据支持。
为了防止携带了有效数据的消息包发生丢失或者错乱,本通信方法对有效数据进行了编号,编号从1开始计算。为了保证接收端处理的消息的顺序与发送端产生消息的顺序一致,就有了消息序号连续的概念设计。这个连续是相对的,例如第一次收到了序号1、2、3,第二次收到了4、5、6。对于第一次收到消息计算连续,从最小序号(值为1)开始计算,那么1、2、3是连续的。但是如果第二次收到消息计算连续的时候,也从最小序号(也就是1) 开始计算,那么4、5、6虽然是正常顺序到来的消息,但是也会被误判为不连续的。所以第一次接收端收到序号为1、2、3的消息并处理之后,下一次收到消息计算序号就将会从3开始计算。
对于消息接收而言:
message级可靠传输对于消息整体接收过程产生影响,消息要序号连续才可取用。也就是,消息可以是从一个group内的不同网络连接接收到的,这些消息能够组成序号连续的一串消息,就可以被取用。
message级高效传输之下,任何网络连接收到消息之后,只要该消息还没有被处理过,就可用被取用,TransportBehavior无需关注序号是否连续。
group级可靠传输之下,同一group内的不同网络连接收到的消息要进行比对,所有网络连接内同序号的消息内容相同,该消息才能被取用。
group级高效传输之下,无需对不同网络连接间收到的消息内容进行比对,所有网络连接中的消息可以直接被取用。
这样就有四种可能的组合配置,我们一一对它们进行列举说明:
message级可靠传输、group级可靠传输组合下,TransportBehavior会在收到一个消息之后,把不同TransportChannel中相同序号的消息内容进行比对,如果发现消息的内容不一致,则删除这些存在“歧义”的消息缓存(所有TransportChannel收到的内容都进行清理),然后让发送端重发序号对应的消息内容(发送request消息或者发送nack消息,使发送端重发消息内容)。当所有的TransportChannel中相同序号的消息内容都一致时(所有的TransportChannel都收到该序号的消息,且这些消息的内容都是一致的),group级可靠传输检查才算通过。当有序号完成group级可靠传输检查,TransportBehavior会对该序号的连续性进行检查,如果能够满足序号连续,TransportBehavior将这些序号对应的消息内容从 TransportQueue中取出,进行处理(此处的处理,一般为上传给上层应用)。本组合的接收速率会比较慢,但是带来了极高的消息可靠性(基本排除了消息内容因为网络传输发生错误的可能,且发送端消息产生与接收端消息处理的顺序是一致的)。
message级高效传输、group级可靠传输组合下,TransportBehavior不会对消息序号是否连续进行检查。TransportBehavior会在收到一个消息之后,把不同TransportChannel中相同序号的消息内容进行比对,如果发现消息的内容不一致,则删除这些存在“歧义”的消息缓存(所有TransportChannel收到的内容都进行清理),然后让发送端重发序号对应的消息内容(发送request消息或者发送nack消息,使发送端重发消息内容)。当所有的 TransportChannel中相同序号的消息内容都一致时(所有的TransportChannel都收到该序号的消息,且这些消息的内容都是一致的),就将该消息从TransportQueue中取出,进行处理。从消息接收层面上看,整个消息上报的过程是乱序的。但是上报的过程中会有些许的“卡顿”(在等待所有的TransportChannel都收到相同序号的消息)。
message级可靠传输、group级高效传输组合下,TransportBehavior不会对来自不同的 TransportChannel的消息内容进行一致性检查。TransportBehavior能够从不同的TransportChannel中选择消息内容,尽快构成序号连续的消息,并将这些消息从TransportQueue中取出,进行处理。从message接收层面上看,消息是以序号连续的方式上报的。该组合在group内有多个TransportChannel的情况下,会让消息序号凑齐的速度大大加快。
message级高效传输、group级高效传输组合下,该组合追求的是最快的消息上报速度。TransportBehavior不会对消息的序号是否连续、消息是否一致进行检查。因此,当任何一个 TransportChannel收到了一个之前未处理过的序号的消息(已经被TransportBehavior处理过的数据会被忽略),TransportBehavior就立刻将消息从TransportQueue中取出并处理。从消息接收层面上看,消息是以序号乱序且快速的方式被处理的。
TransportChannel传输通道状态管理模块
TransportChannel内部管理了一个网络连接,主要的任务是维持网络连接的可用。为 TransportBehavior提供发送与接收的功能,并利用网络连接完成物理上的发送和接收。因为在消息传输的过程中,网络状态变化很快且是不可预知的,为了精确维护网络连接的状态, TransportChannel运用状态机机制对网络连接状态进行管理。同时,TransportChannel还在接收方向设计了基于环形内存的消息完整性检查,用于高效利用内存解析收到的内容。
网络连接的构建
TransportBehavior在创建TransportChannel之后,一方面会为TransportChannel提供 channel id,作为channel的唯一标识符。另外一方面,会将连接信息字段交给 TransportChannel来处理。TransportChannel根据连接信息字段中提供的client/server端信息、类型信息、地址信息、端口信息等内容,创建对应类型的TransportConnection(下文中会详细讲述TransportConnection的概念,它是对网络连接的封装)。TransportConnection提供了异步建立连接、异步发送、异步接收等操作。
基于状态机模式的状态管理
为了精确掌握网络连接发送方向和接收方向的状态,TransportChannel利用状态机模式记录了发送与接收的状态,对于发送方向,有unavailable、sending和idle三个状态;对于接收方向,有unavailable、receiving和idle三个状态。
刚开始建立TransportChannel时,它的发送方向与接收方向均处于unavailable状态。此时,TransportChannel通过TransportConnection的异步建立连接功能,开始建立连接。如果在此状态下有任何的发送或者接收操作,都是无效的,TransportChannel不会让TransportConnection执行任何操作。
TransportConnection通知TransportChannel连接建立成功时,TransportChannel一方面通知TransportBehavior发送和接收可用,一方面将发送和接收方向转变到idle状态。 TransportBehavior获知可用之后,会启动异步读操作,同时尝试从TransportBehavior的消息缓存中选出一条消息,进行发送。如果此时没有任何可以发送的内容,TransportBehavior 则会记录此时TransportChannel处于可用状态。在idle状态下TransportBehavior调用 TransportChannel的发送和接收操作时,TransportChannel才会执行。
在执行异步发送时,TransportChannel会将发送方向状态机的状态由idle变为sending;在异步接收时,TransportChannel会将接收方向状态机的状态由idle变为receiving。当发送方向处于sending或者接收方向处于receiving时,任何的发送或接收操作也将不再进行响应。直到发送或者接收操作完成,状态由sending或者receiving变为idle时,才能继续响应新的发送或者接收操作。
当连接发生中断时(异步发送、异步接收失败,或者长时间没有收到任何消息内容,都被认为是连接发生了中断),发送或者接收方向处于什么状态,都将回归至unavailable状态, TransportChannel会像刚建立时一样,通过TransportConnection的异步建立连接,并重复上述的过程。
基于环形内存的消息完整性检查
因为TransportConnection是基于异步操作实现的,所以TransportChannel还为TransportConnection提供了发送和接收的缓存,用于在异步发送完成之前,缓存要通过网卡发送的内容;或是在异步读的过程中,缓存从网卡中拷贝消息内容。
对于消息发送来说,一个消息包的大小是确定的。但是,对于接收来说,因为接收到的消息是二进制的内容,对于一些流式的传输协议,例如TCP,消息包与消息包之间没有明确的边界,需要使用者自行裁切。因此,TransportChannel提供了基于环形内存的消息完整性检查机制。
该环形的缓存。有两个指针,一个指向环形的起始位置,一个指向环形的当前已经写入内容的末尾。起始指针与末尾指针之间的区域,就是接收到消息内容。环形队列为空的情况下,末尾指针与起始指针指向相同的位置。每次异步读操作完成,成功读取到数据之后,末尾指针将发生后移。TransportChannel通过读取消息包中的特殊字段(一般是消息包的开头标志位及消息包长度),查看是否有消息格式正确的消息(1)如果消息格式错误,直接将消息内容丢弃,将缓存置为空,尾指针从新回到起始指针的位置,然后,立刻执行异步读,重新接收数据;(2)如果消息格式正确,则检查收到的二级制流长度与消息长度是否满足(消息长度是从二级制内容中直接获取到的)。如果满足(等于或者大于),则直接从本次接收到的二级制内容中截取长度满足的部分,上报给TransportBehavior。截取完成后,起始指针将发生后移,移动的长度为截取的长度。有可能后面还有部分残留的缓存,那是属于后面一条消息的内容,在下一次异步读完成之后,会与这次残留的内容进行拼接;(3)如果消息格式正确,二进制内容的长度低于消息包中指出的长度,TransportChannel则再次进行异步读,并将异步读取到的数据追加到缓存的末尾(也就是从末尾指针之后的位置开始写),然后再次检查长度是否符合预期,重复前面的动作,直到长度符合预期之后,进行上报。
TransportConnection连接模块
一个TransportConnection其实就对应了一个网络连接。它通过统一的接口设计,屏蔽了不同传输协议之间的差异,让连接建立、消息收发等功能变得统一。为支持多种的通信协议提供了基础。
一个TransportChannel与一个TransportConnection唯一对应。TransportChannel本身并不具备任何发送、接收的功能。所有物理上的建立连接、发送接收的工作均由 TransportConnection完成。TransportChannel只是TransportConnection状态的维护者,负责让TransportConnection保持可用,以及防止对TransportConnection的错误操作。
TransportConnection主要提供了异步发送、异步接收、异步建立连接等异步功能,在这些异步功能的入参中需要提供handler,以便于在操作完成之后,通知调用者。异步的好处在于,功能的调用者无需等待处理结果,可用在异步发送的间隙完成其他的工作,提高通信工作的效率。
在不同的实现语言中,可用采用不同的实现框架来实现TransportConnection。例如,在C++实现下,可用采用asio异步框架。该框架提供了对TCP、UDP、串口、Unix等网络通信协议的支持。TransportConnection可以提供多种基于asio异步框架的不同类型网络连接的实现,在asio完成异步建立连接、异步发送、异步接收等工作之后,asio框架会自动调用异步操作入参中提供的handler,执行对异步操作结果的处理。
TransportQueue消息内容缓存模块
一个TransportBehavior有一个与之唯一对应的TransportQueue。
在网络传输过程中,往往会存在消息丢包、消息内容错误等问题。为了保证消息的可靠传输,当TransportBehavior作为发送端时,就需要将每次发送的消息内容保存下来,在对出现错误或丢失的消息内容进行重发时,能够找回之前消息的内容;当TransportBehavior作为接收端时,需要将每次收到的内容保存下来,用于保证消息序号连续之后再取用、以及不同网络连接之间收到的消息内容的校验。
TransportBehavior包含三个子模块:SendMessageQueue、ReceiveMessageQueue及 SendCacheList。SendMessageQueue存储着发送端产生的消息内容,以及每个TransportChannel的消息成功发送记录;ReceiveMessageQueue存储着从网络连接接收到的消息已经每个TransportChannel成功接收的记录、SendCacheList存储着准备交给网络连接发送出去的消息包。这些子模块采用了内存复用和自动清理等机制,减少对内存的占用。
SendMessageQueue
总体来看,SendMessageQueue主要记录和管理了两个主要元素,一个是发送端产生的待发送出去的消息历史,一个是每个TransportChannel对每个消息发送情况的记录。前者用于在重发时,找到对应的消息内容,后者用于定时检查还有每个TransportChannel还有哪些消息内容没有发送成功(也就是没有收到接收端的应答)。
SendMessageQueue中,如图4所示,存储了(1)消息序号与消息内容的映射(2)起始序号(3)最新序号(4)group的消息发送情况。
“消息序号与消息内容的映射”顾名思义,存储了消息序号与消息内容的对应关系。当 TransportBehavior需要进行内容重发时,就可以通过序号找到对应的消息内容。
“起始序号”记录了当前最小序号是多少。当一些序号对应的消息已经成功被所有接收端收到,且这些序号是连续的(从起始序号开始计算,是连续的),这些序号对应的消息内容就可以被清理了。“起始序号”会更新为被清理掉的消息序号中的最大值。
“最新序号”记录了当前最新的消息的序号是多少。每当TransportBehavior作为发送端有新的消息产生,“最新序号”就会自增一次,同时将自增之后的序号作为该新产生的消息的序号。
每个“group的消息发送情况”记录了远端对象还有哪些消息没有收到。每个“group的消息发送情况”中,包含(1)成功发送序号(也就是group内所有的TransportChannel,都已经成功发送的最大可连续序号)、(2)每个TransportChannel发送情况。
将“group的消息发送情况”中记录的“成功发送序号”与SendMessageQueue中存储“最新序号”做对比,就能快速找到消息还完全未发送成功的group。同时,取所有group中成功发送序号的最小值,就能获知已经被所有group发送成功消息序号。进而,就能对这些陈旧的内容进行清理(这些数据不再有重发的需求)。
每个TransportChannel发送情况包含(1)成功发送序号(成功发送的最大可连续序号,例如,成功发送了1、2、3、5,此时成功发送序号的值为3),以及(2)未发送成功的消息序号列表。每当收到ack应答了某个序号,TransportBehavior就可以将该序号从“未发送成功消息序号列表”中删除;每当收到request,request中携带的序号之前的消息序号就可以从“未发送成功消息序号列表”中删除。当“未发送成功的消息序号列表”中,有序号被删除时, (1)就可以尝试更新TransportChannel中的“成功发送序号”。进而,(2)可以尝试更新“group 的消息发送情况”中的“成功发送序号”、(3)尝试取不同group的“成功发送序号”的最小值,清理陈旧消息。
ReceiveMessageQueue
总体来看,ReceiveMessageQueue主要记录和管理了两个主要元素,一个是接收端接收到的消息内容的历史,一个是每个TransportChannel对每个消息接收情况的记录。前者用于构成序号连续的消息、不同TransportChannel收到的消息内容校验时,提供消息历史记录;后者用于定时检查每个TransportChannel还有哪些消息内容没有接收成功。
ReceiveMessageQueue中,如图5所示,为每个group存储了(1)消息序号与消息内容的映射(2)起始序号(3)被取用的序号列表(4)TransportChannel的消息接收情况。
“消息序号与消息内容的映射”,存储了消息序号与消息内容的对应关系。与发送端有所不同,发送端发给不同远端对象的消息都是相同的,因此发送端可以整体只存储一份要发送出去的消息。但是,接收端有可能连接了多个不同的发送端,这些发送端产生的消息往往是不同的,所以ReceiveMessageQueue需要为每个group(一个group对应一个发送端对象) 提供一个消息缓存。为了节约内存资源,group内的所有TransportChannel共用一个”消息序号与消息内容的映射“。因为一个group内的所有TransportChannel对应着同一个发送端,每个TransportChannel收到的内容理论上应该是相同的,所以存储一份即可。当TransportBehavior需要对消息内容校验时,让新收到的消息内容与已经存储好的消息内容进行对比即可。
“起始序号”代表了计算序号连续时的起始序号,在该消息序号之前的消息内容已经被取走并清理。当收到小于该序号的消息内容时,不再存入“消息序号与消息内容的映射”中。
“被取用的序号列表”用于记录已经被TransportBehavior读取的消息序号。防止向 TransportBehavior报告重复的消息内容。“被取用的序号列表”有序号连续时,就可以更新“起始序号“至这些连续序号的最大值,同时将这些序号从列表中清理。例如,”起始序号“为5,序号为6、7、8的序号被读取了,那么此时就可以(1)将”起始序号“更新为8,(2)清理“消息序号与消息内容的映射”中的6、7、8序号对应的消息内容,(3)将6、7、8三个序号从“被取用的序号列表”中删除(因为起始序号已经为8,因此序号8之前的消息内容一定被取走了,无需单独记录序号内容)。
每个“TransportChannel的消息接收情况”存储了成功接收的消息序号。通过这些成功接收的序号能够帮忙确定TransportChannel是否将消息收齐。也为TransportBehavior请求丢失的消息内容提供了序号依据。
SendCacheList
如图6所示,SendCacheList是一个消息缓存队列,它是以TransportChannel为划分,存储要通过某个TransportChannel发送出去的内容。它符合先进先出的原则。
在发送端,它缓存了发送端要发出的response、data;在接收端,它缓存了发送端要发出的ack、nack或者是request消息。每当TransportChannel可以发数了,TransportBehavior 就从队列头部取出一个消息发出。如果某一时刻TransportChannel可用,但是队列中待发送的消息为空,TransportBehavior则会将TransportChannel可用的状态记录下来,等到队列中有内容时,立刻发出。当一条消息被TransportBehavior取走交给TransportChannel之后,SendCacheList就会对该条消息进行清理。
有益效果
本发明所设计的通信方法,有着极好的多场景适用性。用户可以根据接收与发送端硬件设备的性能情况,选择request-response模式或者data-ack模式;用户还可以根据通信稳定性的需要,选择single-channel单网通信、multi-channel多网通信,来保证端与端的消息传输能力;还能为消息收发选择高可靠到高效率及其之间的任意一种可靠性级别:message 级可靠性、group级可靠性的自由组合,为用户提供了很多的选择。
本发明所设计的通信方法,有着极好的性能,设计充分考虑了资源复用、内存高效利用与线程资源的高效利用,使得其在运行性能表现上也十分优异。
附图说明
图1 整体功能模块结构图
图2 request-response模式通信过程示意图
图3 data-ack模式通信过程示意图
图4 SendMessageQueue设计示意图
图5 ReceiveMessageQueue设计示意图
图6 SendCacheList设计示意图
图7 发送端、接收端初始化示意图
图8 发送端消息发送与消息重发示意图
图9 接收端消息接收与处理示意图
具体实施方式
本发明所设计的通信方法不受限于任何的代码实现语言。如果用户追求高性能,那么可以采用C++语言来完成实现;如果用户追求跨平台运行,那么可以采用Java语言来完成实现。
以发送端、接收端为data-ack模式、message级可靠、group级可靠传输为例:
发送端、接收端初始化,如图7:
(1)TransportBehavior在初始化过程中,根据网络连接配置的条数,创建对应数量个数的TransportChannel,构造TransportChannel时将网络连接信息传入。TransportChannel 根据网络连接信息中提供的client/server端信息、类型信息、地址信息、端口信息等内容,创建对应类型的TransportConnection。并随即启动TransportConnection的异步建立连接操作。
(2)每创建一个TransportChannel,TransportBehavior就会为它分配一个channel id。同时根据TransportChannel所属的group(通信组),将这些TransportChannel分组记录。
(3)TransportBehavior将与之唯一对应的TransportQueue构造好。并将channelid和 group信息(提供的相当于是映射关系,告知有哪些channel id,所属的group是谁。用group号来区分不同的group,group号也就是一个数字值)通过set方法交给TransportQueue用于ReceiveMessageQueue中每个group的“TransportChannel的消息接收情况”记录表、或是SendMessageQueue中“group的消息发送情况”记录表的初始化。
(4)等到连接异步建立完成之后,由TransportConnection异步通知TransportChannel, TransportChannel将发送方向和接收方向的状态机变idle状态,再由TransportChannel通知TransportBehavior。然后TransportBehavior开始发送和接收消息。
发送端,如图8:
(1)每当TransportBehavior要发送新的消息内容时,会先通过方法调用将消息内容存入SendMessageQueue,并通过方法返回的结果获取到该消息对应的序号。
(2)在SendMessageQueue内部,由SendMessageQueue将消息内容缓存至“消息序号与消息内容的映射”中,为该消息分配消息序号,同时在所有TransportChannel的“未发送成功的消息序号列表“中添加该序号。
(3)紧接着,TransportBehavior把消息序号和消息内容打包成data消息包,存入SendCacheList中的每一个TransportChannel的发送队列中。当某个TransportChannel发送方向可用时,TransportBehavior从SendCacheList对应的TransportChannel的发送队列中取出队首的消息内容,立刻将消息内容通过TransportChannel发送出去。否则,需要等待TransportChannel通知可以发送时,在进行发送。
(4)为了节约性能,TransportBehavior并不会真的为每个消息都启动一个计时器(为每个启动属于理想状态),而是全局启动了一个计时器。每当计时器到时,TransportBehavior 会通过调用SendMessageQueue提供的方法,获取SendMessageQueue中各个 TransportChannel的“未发送成功的消息序号列表“中有哪些消息序号,并将这些序号对应的消息内容打包成data消息包,存入SendCacheList对应的TransportChannel的发送队列中。如果某个TransportChannel所有的消息都已经被应答(SendMessageQueue中,该TransportChannel的“未发送成功的消息序号列表”为空),且SendCacheList内该TransportChannel的发送队列为空,TransportBehavior就从TransportQueue中获取最新的消息序号,然后打包成heartbeat消息,存入SendCacheList内该TransportChannel的发送队列中。
(5)每当TransportBehavior从TransportChannel收到消息,会先对字节流内容进行解析。如果是ack,根据channel id找到对应的group号,然后将group号、channel id及ack 的序号交给SendMessageQueue尝试对消息内容缓存进行清理。如果是nack,则根据序号从SendMessageQueue获取消息内容,打包成data消息包,存入SendCacheList对应的TransportChannel发送队列中(根据channel id信息可以找到对应的TransportChannel发送队列)。
(6)最后,启动下一次异步读操作,准备接收新的数据。
接收端,如图9:
(1)每当TransportBehavior从TransportChannel收到消息,会获取TransportChannel 的channel id以及消息的字节流。TransportBehavior首先通过channel id从记录中找到其对应的group号(一个数字值)。然后TransportBehavior对字节流内容进行解析,判断消息包的类型。如果是data类型数据包,则获取数据包中的消息序号和消息内容。
(2)因为配置中设置了group级可靠传输,所以收到数据之后,TransportBehavior先要对数据内容一致性进行校验。TransportBehavior调用TransportQueue中相关方法,提供 group号、消息序号和消息内容,让TransportQueue检查与其他TransportChannel收到的内容是否一致。
(3)TransportQueue根据group号找到对应group下存储的“消息序号与消息内容的映射“,然后根据消息序号,尝试找到对应的消息内容。如果“消息序号与消息内容的映射”中没有该条消息内容,则直接返回校验通过。如果有该条消息内容,则与TransportBehavior传入的消息内容进行比较。
(4)内容进行比较结果如果不一致,TransportQueue会清理该group下所有“TransportChannel的消息接收情况“中,该条消息的消息序号。并且清理“消息序号与消息内容的映射“中,序号对应的消息内容缓存。TransportBehavior通过方法调用结果获知不一致之后,会针对该消息序号构建nack。然后TransportBehavior通过group号从记录中获取到 group下所有的TransportChannel,将构建好的nack消息包,存入SendCacheList内对应 TransportChannel的发送队列中。
(5)内容进行比较结果如果一致,TransportBehavior通过方法调用结果获知一致之后,根据消息序号构造ack消息包,存入SendCacheList内channel id对应的TransportChannel 发送队列中。
(6)在内容比较结果一致的情况下,TransportBehavior将group号、channel id、消息包中的序号、消息内容通过方法调用交给ReceiveMessageQueue来更新消息接收情况。ReceiveMessageQueue通过group号找到group,如果group的“消息序号与消息内容的映射“已经存在该条消息内容,则ReceiveMessageQueue只更新channel id对应“TransportChannel的消息接收情况“,在其内部新增消息序号。如果该消息内容还未收到,ReceiveMessageQueue则将消息内容缓存至“消息序号与消息内容的映射“中。
(7)完成更新消息接收情况之后,TransportBehavior会查看TransportQueue中是否有可用的消息。TransportBehavior首先调用TransportQueue的方法,获取group号对应的记录中有没有序号连续的内容(查看group对应的“消息序号与消息内容的映射”中是否有连续序号)。如果没有,则结束从TransportQueue中获取内容。如果有连续的序号,则获取到这些序号。然后从这些序号中最小的一个开始,让TransportQueue检查group内所有的TransportChannel是否都收到了这个序号。如果都收到了该序号,那么该序号对应的内容就可以从TransportQueue取出并处理。
(8)通过以上的检查之后,TransportBehavior就能将符合条件的消息内容取出。同时在TransportBehavior取走这些消息内容之后,TransportQueue更新其内部的“起始序号“、从“消息序号与消息内容的映射”清理这些消息序号对应的消息内容,同时清理“TransportChannel的消息接收情况“中的序号内容。
(9)完成以上接收过程之后,启动下一次的异步读操作。
Claims (4)
1.一种支持可靠性调节的多协议冗余网络异步通信方法,其特征在于包括下面4个模块:(1)TransportBehavior通信行为管理模块;(2)TransportChannel传输通道状态管理模块;(3)TransportConnection连接模块;(4)TransportQueue发送接收队列模块;
其中:
(1)TransportBehavior通信行为管理模块,用于对消息进行收发管理;
该模块是整个异步通信方法的核心调度模块,其他模块均直接或者间接被它调用;
该模块管理了所有的网络连接,并利用这些网络连接,完成消息的发送或是消息的接收的工作,这些网络连接由TransportChannel进行维护;
该模块支持request-response通信模式和data-ack通信模式,可以被设置为发送端或者接收端;该模块所管理的每个网络连接,都以TransportBehavior所设置的request-response模式和data-ack模式进行消息收发;
(2)TransportChannel传输通道状态管理模块,用于负责管理网络连接,维护连接状态,所谓维护就是在网络连接发生断开时,重建网络连接,保持网络连接一直处于可用状态,同时避免并发调用异步发送或者异步接收产生错误;
TransportChannel利用状态机模式记录发送与接收的状态,对于发送方向,有unavailable、sending和idle三个状态;对于接收方向,有unavailable、receiving和idle三个状态;
TransportChannel管理及维护网络连接的过程如下:
建立TransportChannel时,它的发送方向与接收方向均处于unavailable状态,此时,TransportChannel开始异步建立网络连接,如果在此状态下有任何的发送或者接收操作,都是无效的,TransportChannel不会执行任何操作;
网络连接建立成功时,TransportChannel一方面通知TransportBehavior发送和接收可用,一方面将发送和接收方向转变到idle状态;TransportBehavior获知可用之后,会启动异步读操作,同时尝试进行消息发送。如果此时没有任何可以发送的内容,则会记录此时TransportChannel处于可用状态;在idle状态下TransportBehavior调用TransportChannel的发送和接收操作时,TransportChannel才会执行;
在执行异步发送、接收时,TransportChannel将发送方向的状态由idle变为sending、将接收方向的状态由idle变为receiving;当发送方向处于sending、接收方向处于receiving时,将不再响应发送、接收操作,直到发送、接收操作完成,发送方向状态由sending变为idle、接收方向状态由receiving变为idle时,才能继续响应新的发送、接收操作;
当连接发生中断时,发送或者接收方向处于什么状态,都将回归至unavailable状态,TransportChannel重新异步建立网络连接,并重复上述的过程,所述中断指异步发送、异步接收失败,或者长时间没有收到任何消息内容;
(3)TransportConnection连接模块,是对各种通信协议的连接的封装与实现,提供异步功能,TransportConnection模块通过统一的功能接口以及通信库,屏蔽了不同通信协议在连接建立、消息收发时的差异,为支持多种的通信协议提供了基础;
创建过程为:所述的TransportBehavior模块根据配置情况构造出若干个网络连接,即通过若干TransportChannel模块构建若干TransportConnection模块,其中,所述的每个网络连接的远端通信对象可以相同也可以不同;网络连接的类型可以相同也可以不同;
为了将这些网络连接统一管理起来,同时又能区分出不同的网络连接,每个网络连接对应唯一一个channelid,在构建好网络连接时,会为每个网络连接分配一个channel id;当需要通过某个网络发送消息内容时,通过channel id与网络连接的映射表,即可找到该网络连接;当通过某个网络连接收到消息时,也能通过channel id区分出是哪个网络连接发来的消息,channel id由TransportBehavior模块创建并交给TransportChannel管理;
(4)TransportQueue发送接收队列模块,即消息内容的缓存模块,用于负责缓存要发出的消息以及从远端收到的消息;
一个TransportBehavior有一个与之唯一对应的TransportQueue,TransportQueue用于为TransportBehavior重发消息、TransportBehavior可靠性检查提供数据支持;
TransportBehavior包含三个子模块:SendMessageQueue、ReceiveMessageQueue及SendCacheList,其中,SendMessageQueue存储着已经发送出去但是还没有被接收端确认收到的消息序号以及消息内容;ReceiveMessageQueue存储着从网络连接接收到的消息序号以及消息内容;SendCacheList存储着准备交给网络连接发送出去的消息包。
2.根据权利要求书1所述的一种支持可靠性调节的多协议冗余网络异步通信方法,其特征在于:所述的TransportBehavior通信行为管理模块支持两种网络组合方式,即single-channel单网通信和multi-channel多网通信,具体的:
TransportBehavior模块中设计了group通信组的概念,
仅包含一个网络连接的group即为single-channel单网通信,single-channel单网通信用于节约通讯资源;
包含多个网络连接的group即为multi-channel多网通信,multi-channel多网通信用于提高网络传输效率,或者提高消息传输准确性,其中一个group内所有的连接都通往同一个远端的通信对象;
TransportBehavior每次发送消息或者接收消息都是以group为单位:发送过程,同一group内所有的网络连接都收到了消息接收成功的应答,该消息才被视为接收成功;接收过程中,接收端如果设置了对消息内容正确性的保证,同一group内的所有网络连接收到的消息内容都一致时,该消息才被视为正确的;
每个网络连接可以根据配置,自由加入任何一个group,这就为单网通信和多网通信提供了极好的灵活性;在网络状况良好的情况下,可以采用任意通信协议的单网通信;在网络状况较差的情况下,可以配置多网通信,保证连接的健壮性。
3.根据权利要求书1所述的一种支持可靠性调节的多协议冗余网络异步通信方法,其特征在于:所述的request-response模式适用于发送端消息处理能力强,但是接收端消息处理能力弱的使用场景,具体通过request的发送频率限制从发送端发来的消息的流入速度;
data-ack模式适用于发送端消息处理能力弱,但是接收端能力强的使用场景,发送端有消息就向接收端发送;
所有的消息包都设计了一个固定长度的消息头head以及一个消息包长度值,其中,消息头用于确定消息包的类型是data、ack消息、request消息、还是response消息,消息包长度值是一个固定长度的字段;下文中,用“消息包基础信息”一词来指代这两个字段;
对于request-response模式,总共包含两种消息包:
第一种request消息包,用于接收端以设定的最小发送间隔周期向发送端发出request请求,具体包含消息包基础信息及消息序号,其中,当request消息包中带的消息序号为0,表达希望获取最新的消息序号,当request消息包中带的消息序号大于0,表达希望获取该序号对应的消息内容;
第二种response消息包,用于发送端回复接收端的request请求,具体包含消息包基础信息、消息的种类、消息序号及消息内容,其中,消息的种类包含三种,分别是data,initial和heartbeat;
request-response模式下的应答机制分为以下情况:
(1)接收端与发送端建立上连接时,接收端发出序号为0的request消息包,用于请求当前发送端的最新消息序号;发送端回复一个种类为initial,消息序号为发送端最新序号,消息内容为空的response包,用于初始化接收端的请求序号;
如果接收端发出request之后,在最小发送间隔周期没有收到发送端发来的response应答,则重发上一次发出的request消息包,直到接收到发送端的response包;
(2)接收端发送序号大于0的request消息包,且发送端有该序号对应的消息,发送端回复一个种类为data,消息序号为请求的消息序号,消息内容带有内容的response包,用于向接收端提供消息内容;接收端下一次发送request消息包时,其中的消息序号增大一位;
如果接收端没有收到发送端的response包,则重新发送request消息包,直到收到发送端的response包;
(3)接收端发送序号大于0的request消息包,但是发送端已经删除该序号对应的消息,则发送端回复一个种类为data,消息序号为请求的消息序号,消息内容为空的response包,用于表示出现故障;接收端会跳过该消息,请求下一个序号对应的消息内容;
(4)接收端发送序号大于0的request消息包,但是发送端没有产生该序号对应的消息,则发送端回复一个种类为heartbeat,消息序号为请求的消息序号,消息内容为空的response包,用于表示当前没有可发内容并维持通信连接;接收端收到该response包之后,不改变消息序号记录,下个周期发送request消息包时,还采用该消息序号;
对于data-ack模式,总共包含三种消息包:
第一种,data消息包:包含消息包基础信息、消息的序号及消息的内容;
第二种,ack或nack消息包:包含消息包基础信息,以及消息的序号;
第三种,heartbeat消息包:包含消息包基础信息,以及最新的消息序号;
data-ack模式应答机制如下:
发送端每次产生新的消息,就构建一个data消息包发送给接收端,同时,发送端会为消息启动应答计时,当接收端超过最大等待周期,仍未对消息进行应答时,发送端就会对该条消息进行重发,重发时该条消息的序号保持不变;
接收端收到data消息包之后,会对消息内容进行校验,如果消息内容正确,接收端则构建一个ack消息包发送给发送端表达确认,其中,序号为data消息对应的消息序号;接收端收到data消息包之后,如果消息内容错误,接收端则构建一个nack消息包发送给发送端让其重发消息,其中,序号为data消息对应的消息序号;
发送端收到ack消息包之后,如果消息包中携带的消息序号与之前发出的data消息包中消息序号一致,认为该消息接收成功;否则发送端重新发送data消息包;
发送端收到nack消息包之后,表示发送到接收端的内容有误,发送端通过nack消息包提供的消息序号,找到对应的消息内容,打包成data消息包重新发送;
当发送端长时间没有产生新消息时,为了维持网络连接不会中断,则利用当前最新的消息序号构建heartbeat消息包发送给接收端;接收端在收到heartbeat消息后,获取消息内的序号信息,然后构建一个ack消息包发给发送端,以此来维持网络连接不会中断。
4.根据权利要求书1所述的一种支持可靠性调节的多协议冗余网络异步通信方法,其特征在于:所述TransportBehavior通信行为管理模块,支持多种可靠性传输组合模式,其中,在接收缓存接收数据阶段,设有group可靠性级别和group高效级别,用来设置是否需要确认通过网络传输收到的内容的正确性;在接收缓存向接收方发送数据阶段,设有message可靠性级别和message高效级别,用来设置是否需要保证消息的接收的顺序与发送端产生的顺序一致;不同的message级和不同的group级形成多种不同的组合,满足各种通信可靠性需求;其中,
所述的group可靠性级别指:一个group中的所有网络连接,只有相同序号的消息内容在不同网络连接之间异同校验一致,该序号的消息内容才能被存储在接收缓存中,以保证消息内容正确为核心目标,主要用于对消息内容安全要求较高的应用;
所述的group高效级别指:对于一个group中的所有网络连接,无需进行消息内容异同的检查,可以通过不同网络连接中,抓取并存储某一序号的第一次到达的消息内容,以快速收齐消息内容为核心目标,主要用于对消息传输速度要求较高的应用;
所述的message可靠性级别指:按照消息序号的顺序,由接收缓存向接收端发送消息内容,以保证消息的前后顺序为核心目标,主要用于消息内容前后逻辑顺序对结果有重大影响的应用;
所述的message高效级别指:按照每个消息内容首次到达的顺序,由接收缓存向接收端发送消息内容,其中消息内容不重复,以消息尽快送达接收端为核心目标,主要用于消息内容前后逻辑顺序对结果没有影响的应用;
所述TransportQueue模块(4)发送接收队列模块,其在接收端记录了收到的消息内容以及每个网络连接收到的消息序号,TransportBehavior收到数据后,进行可靠性检查时,从TransportQueue中获取这些记录,来查看是否有消息能够被取用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010809935.XA CN111970092B (zh) | 2020-08-12 | 2020-08-12 | 一种支持可靠性调节的多协议冗余网络异步通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010809935.XA CN111970092B (zh) | 2020-08-12 | 2020-08-12 | 一种支持可靠性调节的多协议冗余网络异步通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111970092A true CN111970092A (zh) | 2020-11-20 |
CN111970092B CN111970092B (zh) | 2023-01-31 |
Family
ID=73364316
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010809935.XA Active CN111970092B (zh) | 2020-08-12 | 2020-08-12 | 一种支持可靠性调节的多协议冗余网络异步通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111970092B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190481A (zh) * | 2021-07-02 | 2021-07-30 | 深圳华云信息系统有限公司 | 数据传输方法、装置、电子设备及计算机可读存储介质 |
CN113645291A (zh) * | 2021-08-04 | 2021-11-12 | 百度在线网络技术(北京)有限公司 | 数据通信方法及装置、电子设备和存储介质 |
CN114244822A (zh) * | 2021-12-17 | 2022-03-25 | 八维通科技有限公司 | 一种基于通信协议的消息传输系统及传输方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9912744D0 (en) * | 1998-05-29 | 1999-08-04 | Sun Microsystems Inc | System and method for message transmission between network nodes connected by parallel links |
CN1691666A (zh) * | 2004-04-21 | 2005-11-02 | 华为技术有限公司 | 多协议通用线路传输方法及其装置 |
CN110809020A (zh) * | 2019-09-17 | 2020-02-18 | 北京工业大学 | 一种基于冗余网络异步通信的高可靠数据传输方法 |
-
2020
- 2020-08-12 CN CN202010809935.XA patent/CN111970092B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9912744D0 (en) * | 1998-05-29 | 1999-08-04 | Sun Microsystems Inc | System and method for message transmission between network nodes connected by parallel links |
CN1691666A (zh) * | 2004-04-21 | 2005-11-02 | 华为技术有限公司 | 多协议通用线路传输方法及其装置 |
CN110809020A (zh) * | 2019-09-17 | 2020-02-18 | 北京工业大学 | 一种基于冗余网络异步通信的高可靠数据传输方法 |
Non-Patent Citations (2)
Title |
---|
R. R. STEWART等: "Aggregate Server Access Protocol (ASAP) amp;amp;lt;draft-xie-rserpool-asap-01.txt amp;amp;gt;", 《IETF 》 * |
刘路等: "基于动态连接的RDMA可靠传输协议设计", 《计算机工程与科学》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190481A (zh) * | 2021-07-02 | 2021-07-30 | 深圳华云信息系统有限公司 | 数据传输方法、装置、电子设备及计算机可读存储介质 |
CN113190481B (zh) * | 2021-07-02 | 2021-10-29 | 深圳华云信息系统有限公司 | 数据传输方法、装置、电子设备及计算机可读存储介质 |
CN113645291A (zh) * | 2021-08-04 | 2021-11-12 | 百度在线网络技术(北京)有限公司 | 数据通信方法及装置、电子设备和存储介质 |
CN114244822A (zh) * | 2021-12-17 | 2022-03-25 | 八维通科技有限公司 | 一种基于通信协议的消息传输系统及传输方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111970092B (zh) | 2023-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111970092B (zh) | 一种支持可靠性调节的多协议冗余网络异步通信方法 | |
CA2547880C (en) | Improved distributed kernel operating system | |
US6816471B1 (en) | Data unit sending means and control method | |
Cerf et al. | Specification of internet transmission control program | |
EP1323264B1 (en) | Mechanism for completing messages in memory | |
US8667184B2 (en) | Distributed kernel operating system | |
EP1206062A2 (en) | Data communication system, data communication method, and recording medium with data communication program recorded thereon | |
CN101997661B (zh) | 数据包发送方法、数据包获取方法及装置 | |
US20030140149A1 (en) | Communication protocol for use in controlling communications in a monitoring service system | |
EP1002408B1 (en) | Communication method and system | |
CN103986647A (zh) | 报文传输方法及设备 | |
US20110078313A1 (en) | Method and system for managing a connection in a connection oriented in-order delivery environment | |
CN102857354A (zh) | 告警信息上报方法、装置及系统 | |
CN113572582B (zh) | 数据发送、重传控制方法及系统、存储介质及电子设备 | |
EP3672189B1 (en) | Data transmission method, device and system | |
Cerf et al. | RFC0675: Specification of Internet Transmission Control Program | |
CN107623645B (zh) | 一种基于数据流转发的电力系统实时数据交换系统 | |
CN113992740B (zh) | 一种基于自主可控的中间件及数据传输方法 | |
CN111385069A (zh) | 数据传输方法及计算机设备 | |
CN114584575A (zh) | 船舶管理体系中的船岸通信方法及系统 | |
CN110809020B (zh) | 一种基于冗余网络异步通信的高可靠数据传输方法 | |
Postel | RFC0761: DoD standard Transmission Control Protocol | |
US20110078255A1 (en) | Method and system for managing a connection in a connection oriented in-order delivery environment | |
US20240333437A1 (en) | Direct Access To Storage Device Via Switch Data Plane | |
KR100333730B1 (ko) | 이더넷에 분산된 망정합 장치간의 데이터 재전송 요구 방법 |
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 |