CN112511536A - 一种通信方法及通信系统 - Google Patents
一种通信方法及通信系统 Download PDFInfo
- Publication number
- CN112511536A CN112511536A CN202011367624.9A CN202011367624A CN112511536A CN 112511536 A CN112511536 A CN 112511536A CN 202011367624 A CN202011367624 A CN 202011367624A CN 112511536 A CN112511536 A CN 112511536A
- Authority
- CN
- China
- Prior art keywords
- node
- message
- data
- data packet
- sequence number
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- 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
- H04L1/1642—Formats specially adapted for sequence numbers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/06—Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Communication Control (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开一种通信方法及通信系统。基于本申请公开的方案,数据接收方能够确定是否正确接收数据发送方发送的目标数据,数据发送方也能够确定数据接收方是否正确接收本方发送的目标数据,在确定数据接收方正确接收本方发送的目标数据后,数据发送方才会继续向数据接收方发送后续的目标数据,能够提高点对点通信过程中数据传输的可靠性。
Description
技术领域
本申请属于通信技术领域,尤其涉及一种通信方法及通信系统。
背景技术
点对点通信是一种常见的通信方式,电子设备中的多个器件之间可以采用点对点通信,例如通过总线进行点对点通信,或者通过串口进行点对点通信。以嵌入式设备为例,嵌入式设备中的各种模组和MCU(Microcontroller Unit,微控制单元)或者SOC(System onChip,系统级芯片或片上系统)之间采用点对点通信。
在点对点通信过程中,发送方以预设周期向接收方发送数据,但是发送方无法确定接收方是否正确接收数据,这会出现以下情况:当接收方未正常接收数据时,发送方继续向接收方发送后续的数据,数据传输的可靠性较低。
发明内容
有鉴于此,本申请的目的在于提供一种通信方法及通信系统,以提高点对点通信过程中数据传输的可靠性。
为实现上述目的,本申请提供如下技术方案:
本申请提供一种通信方法,应用于第一节点,所述第一节点与第二节点点对点连接,所述通信方法包括:
在建立与所述第二节点的数据连接后,获取目标数据;
对所述目标数据进行封装,得到第一数据包,所述第一数据包包括头部和所述目标数据,其中,所述头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息;
对所述第一数据包进行封装,得到第一报文,所述第一报文包括前导、帧头和所述第一数据包,其中,所述帧头包括校验码和数据包长度信息;
向所述第二节点发送所述第一报文;
接收所述第二节点发送的第二报文;
对所述第二报文进行解封装,得到所述第二报文中的帧头和第二数据包;
对所述第二数据包进行解封装,得到所述第二数据包中的头部和目标数据;
根据所述第二报文的帧头中的校验码、所述第二数据包的头部中的确认序号、以及本地存储的已确认序号和已发送序号,确定所述第二节点是否正确接收所述目标数据,其中,所述第二节点基于所述第一报文的帧头中的校验码、所述第一数据包的头部中的传输序号、以及本地存储的已确认序号确定是否正确接收所述目标数据,并在确定正确接收所述目标数据时,向所述第一节点发送所述第二报文。
可选的,在上述通信方法的基础上,还包括:
在向所述第二节点发送所述第一报文后,缓存所述第一报文;
相应的,在确定所述第二节点正确接收所述目标数据后,将所述第一报文从缓存中移除。
可选的,在上述通信方法中,建立与所述第二节点的数据连接,包括:
申请客户端接口,向所述第二节点发送连接请求报文;
接收所述第二节点发送的连接响应报文,将连接状态修改为已连接,向所述第二节点发送确认响应报文。
可选的,在上述通信方法的基础上,还包括:
如果距离最近一次向所述第二节点发送报文的时长达到第一时长阈值,则向所述第二节点发送空报文,以维持与所述第二节点之间的数据连接。
可选的,在上述通信方法的基础上,还包括:
如果距离最近一次接收到所述第二节点发送报文的时长达到第二时长阈值,则断开与所述第二节点之间的数据连接。
本申请还提供一种通信方法,应用于第二节点,所述第二节点与第一节点点对点连接,所述通信方法包括:
在建立与所述第一节点的数据连接后,接收第一节点发送的第一报文;
对所述第一报文进行解封装,得到所述第一报文中的帧头和第一数据包;
对所述第一数据包进行解封装,得到所述第一数据包中的头部和目标数据;
根据所述第一报文的帧头中的校验码、所述第一数据包的头部中的传输序号、以及本地存储的已确认序号,确定是否正确接收目标数据;
在确定正确接收目标数据的情况下,生成第二数据包,所述第二数据包包括头部和目标数据,所述第二数据包的头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息;
对所述第二数据包进行封装,得到第二报文,所述第二报文包括前导、帧头和所述第二数据包,所述第二报文的帧头包括校验码和数据包长度信息;
向所述第一节点发送所述第二报文。
可选的,在上述通信方法中,建立与所述第一节点的数据连接,包括:
打开监听端口;
接收第一节点发送的连接请求报文,申请服务端端口,向所述第一节点发送连接响应报文;
接收所述第一节点发送的确认响应报文,将连接状态修改为已连接。
可选的,在上述通信方法的基础上,还包括:
如果距离最近一次向所述第一节点发送报文的时长达到第一时长阈值,则向所述第一节点发送空报文,以维持与所述第一节点之间的数据连接。
可选的,在上述通信方法的基础上,还包括:
如果距离最近一次接收到所述第一节点发送报文的时长达到第二时长阈值,则断开与所述第一节点之间的数据连接。
本申请还提供一种通信系统,包括第一节点和第二节点,所述第一节点和所述第二节点点对点连接;
所述第一节点用于:在建立与所述第二节点的数据连接后,获取目标数据;对所述目标数据进行封装,得到第一数据包,所述第一数据包包括头部和所述目标数据,其中,所述头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息;对所述第一数据包进行封装,得到第一报文,所述第一报文包括前导、帧头和所述第一数据包,其中,所述帧头包括校验码和数据包长度信息;向所述第二节点发送所述第一报文;接收所述第二节点发送的第二报文;对所述第二报文进行解封装,得到所述第二报文中的帧头和第二数据包;对所述第二数据包进行解封装,得到所述第二数据包中的头部和目标数据;根据所述第二报文的帧头中的校验码、所述第二数据包的头部中的确认序号、以及本地存储的已确认序号和已发送序号,确定所述第二节点是否正确接收所述目标数据;
所述第二节点用于:接收所述第一节点发送的第一报文;对所述第一报文进行解封装,得到所述第一报文中的帧头和第一数据包;对所述第一数据包进行解封装,得到所述第一数据包中的头部和目标数据;根据所述第一报文的帧头中的校验码、所述第一数据包的头部中的传输序号、以及本地存储的已确认序号,确定是否正确接收目标数据;在确定正确接收目标数据的情况下,生成第二数据包,所述第二数据包包括头部和目标数据,所述第二数据包的头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息;对所述第二数据包进行封装,得到第二报文,所述第二报文包括前导、帧头和所述第二数据包,所述第二报文的帧头包括校验码和数据包长度信息;向所述第一节点发送所述第二报文。
由此可见,本申请的有益效果为:
可以看到,本申请公开的通信方法及通信系统,第一节点需要向第二节点发送目标数据时,向第二节点发送的报文除携带目标数据和校验码之外,还携带有传输序号和确认序号,第二节点根据该报文携带的校验码、该报文携带的传输序号、以及本地存储的已确认序号确定是否正确接收目标数据,第二节点在确定正确接收目标数据的情况下,向第一节点发送的报文除携带校验码之外,还携带有传输序号和确认序号,以便第一节点根据该报文携带的校验码、该报文携带的确认序号、以及本地存储的已确认序号和已发送序号,确定第二节点是否正确接收目标数据,在确定第二节点正确接收目标数据的情况下,第一节点继续向第二节点发送后续的目标数据。基于本申请公开的通信方法,数据接收方能够确定是否正确接收数据发送方发送的目标数据,数据发送方也能够确定数据接收方是否正确接收本方发送的目标数据,在确定数据接收方正确接收本方发送的目标数据后,数据发送方才会继续向数据接收方发送后续的目标数据,能够提高点对点通信过程中数据传输的可靠性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请公开的一种通信方法的流程图;
图2为本申请公开的另一种通信方法的流程图;
图3为本申请公开的建立第一节点和第二节点之间的数据连接的方法的信令图;
图4为本申请公开的一种通信系统的结构示意图。
具体实施方式
本申请公开一种通信方法及通信系统,使得发送方向接收方发送数据后,发送方能够获知接收方是否正确接收数据,在确定接收方正确接收数据后,向接收方发送后续的数据,从而提高点对点通信过程中数据传输的可靠性。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在下文中,将分别从第一节点和第二节点的角度,对本申请公开的通信方法进行说明。其中,第一节点和第二节点为电子设备中的两个器件,第一节点和第二节点之间点对点连接,例如,第一节点和第二节点通过总线连接或者通过串口连接。
首先从第一节点的角度,对本申请公开的通信方法进行说明。
参见图1,图1为本申请公开的一种通信方法的流程图。该通信方法应用于第一节点,具体包括:
S101:第一节点建立与第二节点的数据连接。
S102:第一节点获取目标数据。
S103:第一节点对目标数据进行封装,得到第一数据包。
第一节点和第二节点建立数据连接后,第一节点获取目标数据,目标数据是第一节点需要向第二节点传输的数据。第一节点对目标数据进行封装得到数据包,为了便于描述,将该数据包记为第一数据包。其中,第一数据包包括头部和目标数据。头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息,数据长度信息用于描述第一数据包中目标数据的数据长度。
源端口号为第一节点所使用端口的端口号,目的端口号为第二节点所使用端口的端口号,传输序号表示第一数据包中目标数据的编号,消息类型用于描述消息的用途,数据长度信息用于描述目标数据的数据长度。
在一种可能的实现方式中,第一数据包中按照从前到后的顺序依次为:源端口号、目的端口号、传输序号、确认序号、消息类型、数据长度信息和目标数据。
S104:第一节点对第一数据包进行封装,得到第一报文。
第一节点对第一数据包进行封装得到报文,为了便于描述,将该报文记为第一报文。其中,第一报文包括前导、帧头和第一数据包,帧头包括校验码和数据包长度信息,该校验码是按照预设校验算法对第一数据包进行校验得到的,数据包长度信息用于描述第一数据包的数据长度。
上述对目标数据进行封装得到第一数据包的操作可以由第一节点的传输层执行,上述对第一数据包进行封装得到第一报文的操作可以由第一节点的链路层执行。也就是说,第一节点中的应用层生成目标数据,由第一节点中的传输层对目标数据进行封装得到第一数据包,再由第一节点中的链路层对第一数据包进行封装得到第一报文。
S105:第一节点向第二节点发送第一报文。
S106:第一节点接收第二节点发送的第二报文。
S107:第一节点对第二报文进行解封装,得到第二报文中的帧头和第二数据包。
为了便于描述,将第一节点接收到的、由第二节点发送的报文记为第二报文。可以理解的是,第一节点和第二节点生成的数据包具有相同的结构,第一节点和第二节点生成的报文具有相同的结构。
也就是说,第二报文包括前导、帧头和数据包。为了便于描述,将第二报文中的数据包记为第二数据包。第二报文中的帧头包括校验码和数据包长度信息,该校验码是第二节点按照预设校验算法对第二数据包进行校验得到的,该数据包长度信息用于描述第二数据包的数据长度。第二数据包包括头部和目标数据,其中,第二数据包的头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息。需要说明的是,第二数据包中的目标数据可能为空,此时,第二数据包中的目标数据的长度为0。
S108:第一节点对第二数据包进行解封装,得到第二数据包中的头部和目标数据。
S109:第一节点根据第二报文的帧头中的校验码、第二数据包的头部中的确认序号、以及本地存储的已确认序号和已发送序号,确定第二节点是否正确接收目标数据。
第一节点对第二报文进行解封装,得到第二报文中的帧头和第二数据包。之后,第一节点对第二数据包进行校验得到校验码,如果该校验码与第一节点对第二报文解封装得到的帧头中的校验码相同,那么对第二数据包进行解封装,得到第二数据包中的头部和目标数据。第一节点根据第二数据包的头部中的确认序号、以及本地存储的已确认序号和已发送序号,确定第二节点是否正确接收目标数据。具体的,如果第二数据包的头部中的确认序号大于本地存储的已确认序号,且小于或等于本地存储的已发送序号,则确定第二节点正确接收目标数据,否则,确定第二节点未正确接收目标数据。
如果确定第二节点正确接收目标数据,那么第一节点获取下一目标数据,并针对该下一目标数据执行如步骤S103至步骤S108所示的操作。
需要说明的是,第二节点根据第一报文的帧头中的校验码、第一数据包的头部中的传输序号、以及本地存储的已确认序号确定是否正确接收目标数据,并在确定正确接收目标数据时,向第一节点发送第二报文。
可选的,第一节点在向第二节点发送第一报文后,缓存第一报文。相应的,第一节点在确定第二节点正确接收目标数据后,将第一报文从缓存中移除。
另外,第一节点在确定第二节点未正确接收目标数据时,直接从缓存获取第一报文,并向第二节点发送第一报文。
下面从第二节点的角度,对本申请公开的通信方法进行说明。
参见图2,图2为本申请公开的另一种通信方法的流程图。该通信方法应用于第二节点,具体包括:
S201:第二节点接收第一节点发送的第一报文。
S202:第二节点对第一报文进行解封装,得到第一报文中的帧头和第一数据包。
S203:第二节点对第一数据包进行解封装,得到第一数据包中的头部和目标数据。
S204:第二节点根据第一报文的帧头中的校验码、第一数据包的头部中的传输序号、以及本地存储的已确认序号,确定是否正确接收目标数据。
第二节点对第一报文进行解封装,得到第一报文中的帧头和第一数据包。之后,第二节点对第一数据包进行校验得到校验码,如果该校验码与第二节点对第一报文解封装得到的帧头中的校验码相同,那么对第一数据包进行解封装,得到第一数据包中的头部和目标数据。第二节点根据第一数据包的头部中的传输序号和本地存储的已确认序号,确定是否正确接收目标数据。具体的,如果第一数据包的头部中的传输序号减去第二节点存储的已确认序号的差值为预设数据,则确定正确接收目标数据。
需要说明的是,如果第二节点对第一数据包进行校验得到的校验码与对第一报文解封装得到的校验码不同,则确定未正确接收目标数据,结束本次流程。
需要说明的是,第一节点和第二节点需要采用相同的校验算法对数据包进行校验,以保证第一节点和第二节点对相同的数据包进行校验得到的校验码是相同的。例如,第一节点和第二节点采用CRC(Cyclic Redundancy Check,循环冗余校验)校验算法计算数据包的校验码。
S205:第二节点在确定正确接收目标数据的情况下,生成第二数据包。
其中,第二数据包包括头部和目标数据。头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息。
源端口号为第二节点所使用端口的端口号,目的端口号为第一节点所使用端口的端口号,传输序号表示第二数据包中目标数据的编号,消息类型用于描述消息的用途,数据长度信息用于描述目标数据的数据长度。需要说明的是,第二数据包中的目标数据可能为空,此时,第二数据包中的目标数据的数据长度为0。
S206:第二节点对第二数据包进行封装,得到第二报文。
其中,第二报文包括前导、帧头和第二数据包,帧头包括校验码和数据包长度信息,该校验码是按照预设校验算法对第二数据包进行校验得到的,该数据包长度信息用于指示第二数据包的数据长度。
S207:第二节点向第一节点发送第二报文。
这里结合一个实例进行说明。
第一节点和第二节点建立连接后,第一节点和第二节点存储的已发送序号和已确认序号均为0。第一节点首次向第二节点发送目标数据时,生成的第一数据包中的传输序号为1,确认序号为0,对第一数据包进行封装得到第一报文,并向第二节点发送第一报文。
第二节点接收第一节点发送的报文,对接收到的报文进行解封装,得到该报文中的帧头和数据包,帧头包括校验码和数据包长度信息。第二节点对该数据包进行校验得到检验码,如果该校验码与对该报文进行解封装得到的校验码相同,那么对该数据包进行解封装。之后第二节点根据该数据包中的传输序号、以及本地存储的已确认序号确定是否正确接收目标数据。具体的,如果该数据包中的传输序号为1,该传输序号减去第二节点在本地存储的已确认序号(当前为0)的差值为1,那么第二节点确定正确接收目标数据。需要说明的是,第二节点确定正确接收目标数据后,将本地存储的已确认序号加1作为新的已确认序号。
之后,第二节点生成第二数据包,对第二数据包进行封装,得到第二报文,并向第一节点发送第二报文。其中,如果第二数据包中的目标数据为空,那么第二数据包中的传输序号为0,确认序号为1,如果第二数据包中的目标数据不为空,那么第二数据包中的传输序号为1,确认序号为1。需要说明的是,第二节点向第一节点发送的第二报文中的确认序号为当前存储的已确认序号。
第一节点接收第二节点发送的报文,对接收到的报文进行解封装,得到该报文中的帧头和数据包,帧头包括校验码和数据包长度信息。第一节点对该数据包进行校验得到校验码,如果该校验码与对该报文进行解封装得到的校验相同,那么对该数据包进行解封装。之后,第一节点根据该数据包中的确认序号、以及本地存储的已确认序号和已发送序号,确定第二节点是否正确接收第一数据包中的目标数据。具体的,如果该数据包中的确认序号大于本地存储的已确认序号,且小于或等于本地存储的已发送序号,则第一节点确定第二节点正确接收目标数据。也就是说,如果该数据包中的确认序号位于本地存储的已确认序号和已发送序号之间,也可以与本地存储的已发送序号相同,则第一节点确定第二节点正确接收目标数据。
需要说明的是,在第一节点和第二节点建立连接后,第一节点和第二节点存储的已确认序号和已发送序号均为0。当第一节点向第二节点发送第一报文后,第一节点存储的已发送序号为:第一节点最近一次向第二节点发送的第一报文中的传输序号。当第一节点确定第二节点正确接收目标数据后,第一节点存储的已确认序号被修改为第二节点发送的第二报文中的确认序号。
在第一节点首次向第二节点发送第一报文后,第一节点存储的已确认序号为0,已发送序号为1。如果第一节点解封装得到的数据包中的确认序号为1,那么第一节点确定第二节点正确接收目标数据,并且,第一节点将本地存储的已确认序号修改为1;如果第一节点解封装得到的数据包中的确认序号为0,那么第一节点确定第二节点未正确接收目标数据。
可以理解的是,第一节点确定第二节点正确接收目标数据后,后续向第二节点发送的另一第一报文中,传输序号为前一次发送的第一报文中的传输序号加1,确认序号为当前存储的已确认序号。
本申请公开的通信方法,第一节点获取需要向第二节点发送的目标数据,对目标数据进行封装得到第一数据包,该第一数据包的头部包括传输序号和确认序号,之后对第一数据包进行封装得到第一报文,向第二节点发送第一报文;第二节点接收第一节点发送的报文,对该报文进行解封装得到数据包,进一步对该数据包进行解封装,得到该数据包中的头部和目标数据,并根据该报文中的校验码、该数据包的头部中的传输序号、以及本地存储的已确认序号确定是否正确接收目标数据,在确定正确接收目标数据的情况下,生成第二数据包,该第二数据包的头部包括传输序号和确认序号,对第二数据包进行封装得到第二报文,向第一节点发送第二报文;第一节点接收第二节点发送的第二报文,对第二报文进行解封装得到第二数据包,根据该报文中的校验码、第二数据包的头部中的确认序号、以及本地存储的已确认序号和已发送序号确定第二节点是否正确接收目标数据。
可以看到,本申请公开的通信方法,第一节点需要向第二节点发送目标数据时,向第二节点发送的报文除携带目标数据和校验码之外,还携带有传输序号和确认序号,第二节点根据该报文携带的校验码、该报文携带的传输序号、以及本地存储的已确认序号确定是否正确接收目标数据,第二节点在确定正确接收目标数据的情况下,向第一节点发送的报文除携带校验码之外,还携带有传输序号和确认序号,以便第一节点根据该报文携带的校验码、该报文携带的确认序号、以及本地存储的已确认序号和已发送序号确定第二节点是否正确接收目标数据,在确定第二节点正确接收目标数据的情况下,第一节点继续向第二节点发送后续的目标数据。基于本申请公开的通信方法,数据接收方能够确定是否正确接收数据发送方发送的目标数据,数据发送方也能够确定数据接收方是否正确接收本方发送的目标数据,在确定数据接收方正确接收本方发送的目标数据后,数据发送方才会继续向数据接收方发送后续的目标数据,能够提高点对点通信过程中数据传输的可靠性。
在本申请上述公开的通信方法中,第一节点和第二节点生成的报文均包括前导、帧头和数据包。其中,前导是预先配置的长度为多个字节(两个或两个以上字节)的数据。
在具体应用中,可能会出现以下情况:报文中的帧头和数据包存在与该报文的前导相同的数据,那么报文的接收方可能将报文的帧头和数据包中存在的与前导相同的数据作为前导,从而导致报文界限判断错误。
实施中,为了降低接收方将报文的帧头和数据包中存在的与前导相同的数据作为前导,导致报文界限判断失误的可能性,可以采用增加前导的数据长度的方案,但这会导致报文的长度较大。
针对上述问题,本申请还提供另外一种方案。其中,报文的前导为N个字节,N为大于或等于2的整数,且N个字节均相同。
第一节点和第二节点生成报文后,判断该报文的帧头和数据包是否存在与前导的前N-1个字节相同的数据,如果该报文的帧头和数据包中存在与前导的前N-1个字节相同的数据,那么在该数据之后添加预设的识别码,识别码为一个或多个字节的数据,例如识别码为0x0(共一字节)。第一节点和第二节点接收到数据后,根据预设的前导进行分帧处理,得到初始报文,确定该初始报文中位于前导之后的数据中是否存在待处理数据,其中待处理数据为由前导的前N-1个字节和识别码构成的数据,如果存在待处理数据,则将该待处理数据中的识别码移除。
具体的:
第一节点生成第一报文后,判断第一报文的帧头和数据包中是否存在与前导的前N-1个字节相同的数据,如果第一报文的帧头和数据包中存在与前导的前N-1个字节相同的数据,那么在该数据之后添加预设的识别码。相应的,第二节点接收到第一节点发送的数据后,根据预设的前导进行分帧处理,得到初始报文,确定该初始报文中位于前导之后的数据中是否存在待处理数据,如果存在待处理数据,则将该待处理数据中的识别码移除。
第二节点生成第二报文后,判断第二报文的帧头和数据包中是否存在与前导的前N-1个字节相同的数据,如果第二报文的帧头和数据包中存在与前导的前N-1个字节相同的数据,那么在该数据之后添加预设的识别码。相应的,第一节点接收到第二节点发送的数据后,根据预设的前导进行分帧处理,得到初始报文,确定该初始报文中位于前导之后的数据中是否存在待处理数据,如果存在待处理数据,则将该待处理数据中的识别码移除。
这里举例进行说明:
报文的前导设置为0x7e 0x7e(共两个字节)。
第一节点生成的第一数据包为:0x12 0x34 0x56 0x7e 0x78。第一节点对第一数据包进行封装得到的第一报文为:0x7e 0x7e 0xxx 0xxx 0x00 0x05 0x120x34 0x56 0x7e0x78。其中,“0x7e 0x7e”为前导,“0xxx 0xxx”为校验码,“0x00”为帧头中的保留字段,“0x05”为第一数据包的长度,“0x12 0x34 0x56 0x7e0x78”为第一数据包。第一报文的数据包中存在“0x7e”,在该数据之后添加预设的识别码“0x00”,得到处理后的报文“0x7e 0x7e0xxx 0xxx 0x00 0x05 0x120x34 0x56 0x7e 0x00 0x78”。
第二节点接收第一节点发送的数据,按照预设的前导进行分帧处理,得到初始报文“0x7e 0x7e 0xxx 0xxx 0x00 0x05 0x12 0x34 0x56 0x7e 0x00 0x78”,确定该初始报文中位于前导之后的数据中是否存在待处理数据,也就是确定该初始报文中位于前导之后的数据中是否存在“0x7e 0x00”,如果存在待处理数据,那么将该待处理数据中的标识码“0x00”移除。
基于上述方案,如果报文的帧头和数据包中存在数据“0x7e 0x7e”,那么这两字节的数据被处理为“0x7e 0x00 0x7e 0x00”,这使得报文的帧头和数据包中不会出现与前导相同的数据,接收方接收到处理后的报文,不会出现报文界限判断错误。
下面对建立第一节点和第二节点之间的数据连接的过程进行说明。
参见图3,图3为本申请公开的建立第一节点和第二节点之间的数据连接的方法的信令图。具体包括:
S301:服务端打开监听端口。
S302:客户端申请客户端端口。
S303:客户端向服务端发送连接请求报文。
其中,连接请求报文包括前导、帧头和数据包。该帧头包括校验码和数据包长度信息。该数据包包括头部和目标数据。其中,头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息。源端口号为客户端申请的客户端端口的端口号,目标端口号为服务端打开的监听端口的端口号,传输序号为0,确认序号为0,消息类型为连接请求,数据长度信息为0。
S304:服务端接收客户端发送的连接请求报文后,申请服务端端口。
S305:服务端向客户端发送连接响应报文。
其中,连接响应报文包括前导、帧头和数据包。该帧头包括校验码和数据包长度信息。该数据包包括头部和目标数据。其中,头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息。源端口号是服务端申请的服务端端口的端口号,目标端口号为连接请求报文携带的源端口号,传输序号为0,确认序号为0,消息类型为连接响应,数据长度信息为0。
S306:客户端接收连接响应报文后,将本端的连接状态修改为已连接。
S307:客户端向服务端发送确认响应报文。
其中,确认响应报文包括前导、帧头和数据包。该帧头包括校验码和数据包长度信息。该数据包包括头部和目标数据。其中,头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息。源端口号为客户端使用的客户端端口的端口号,目标端口号为连接响应报文携带的源端口号,传输序号为0,确认序号为0,消息类型为确认响应,数据长度信息为0。
S308:服务端接收确认响应报文后,将本端的连接状态修改为已连接。
需要说明的是,上述的服务端为第一节点或者第二节点,相应的,客户端为第二节点或者第一节点。也就是说,当第一节点为服务端时,第二节点为客户端,当第二节点为服务端时,第一节点为客户端。
另外,服务端和客户端接收到对端发送的报文后,对报文进行解封装,得到报文中的帧头和数据包,进一步对数据包进行解封装,得到数据包中的头部,根据头部中的消息类型执行后续操作。
在一个实施例中,在第一节点和第二节点建立数据连接后,如果距离最近一次向对端发送报文的时长达到第一时长阈值,那么向对端发送空报文,以维持第一节点和第二节点之间的数据。
例如,如果距离最近一次向第二节点发送报文的时长达到第一时长阈值,那么第一节点向第二节点发送空报文,以维持第一节点和第二节点之间的数据连接;或者,如果距离最近一次向第一节点发送报文的时长达到第一时长阈值,那么第二节点向第一节点发送空报文,以维持第一节点和第二节点之间的数据连接。
在一个实施例中,如果第一节点和第二节点距离最近一次接收到对端发送的报文的时长达到第二时长阈值,那么断开第一节点和第二节点之间的数据连接。
可以理解的是,第一节点和第二节点会向对端发送空报文以维持两者之间的连接。当第一节点无法向第二节点发送报文时,如果第二节点距离最近一次接收到第一节点发送的报文的时长达到第二时长阈值,那么第二节点断开与第一节点之间的数据连接。当第二节点无法向第一节点发送报文时,如果第一节点距离最近一次接收到第二节点发送的报文的时长达到第二时长阈值,那么第一节点断开与第二节点之间的数据连接。其中,第一节点或者第二节点无法向对端发送报文,可能是由本端故障或者通信异常导致。
在一个实施例中,当第一节点和第二节点之间的数据连接断开后,客户端按照预设周期向服务端发送连接请求报文,以便在故障消除后自动建立与服务端之间的数据连接。也就是说,客户端具备重连功能。
在一个实施例中,建立第一节点和第二节点之间的数据连接后,第一节点获取待同步数据,基于待同步数据生成目标数据,采用如图1所示的方法向第二节点发送目标数据。
实施中,提供可供用户设置的缓冲区,用户将待同步数据写入缓冲区,在第一节点和第二节点建立数据连接后,第一节点采用如图1所示的方法,自动将缓冲区中的数据发送至第二节点,而用户无需关注数据的发送过程。也就是说,本申请提供的通信方法具备自动同步数据的功能。
本申请还公开一种通信系统。参见图4,该通信系统包括第一节点10和第二节点20,第一节点10和第二节点20点对点连接。
第一节点10用于:在建立与第二节点20的数据连接后,获取目标数据;对目标数据进行封装,得到第一数据包,第一数据包包括头部和所述目标数据,其中,头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息;对第一数据包进行封装,得到第一报文,第一报文包括前导、帧头和第一数据包,其中,帧头包括校验码和数据包长度信息;向第二节点20发送第一报文;接收第二节点20发送的第二报文;对第二报文进行解封装,得到第二报文中的帧头和第二数据包;对第二数据包进行解封装,得到第二数据包中的头部和目标数据;根据第二报文的帧头中的校验码、第二数据包的头部中的确认序号、以及本地存储的已确认序号和已发送序号,确定第二节点是否正确接收目标数据。
第二节点20用于:接收第一节点10发送的第一报文;对第一报文进行解封装,得到第一报文中的帧头和第一数据包;对第一数据包进行解封装,得到第一数据包中的头部和目标数据;根据第一报文的帧头中的校验码、第一数据包的头部中的传输序号、以及本地存储的已确认序号,确定是否正确接收目标数据;在确定正确接收目标数据的情况下,生成第二数据包,第二数据包包括头部和目标数据,第二数据包的头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息;对第二数据包进行封装,得到第二报文,第二报文包括前导、帧头和所述第二数据包,第二报文的帧头包括校验码和数据包长度信息;向第一节点10发送第二报文。
可选的,第一节点10和第二节点20建立数据连接的方案,包括:第二节点20打开监听端口;第一节点10申请客户端接口,向第二节点20发送连接请求报文;第二节点20接收第一节点发送的连接请求报文,申请服务端端口,向第一节点10发送连接响应报文;第一节点10接收第二节点20发送的连接响应报文,将连接状态修改为已连接,向第二节点20发送确认响应报文;第二节点20接收第一节点10发送的确认响应报文,将连接状态修改为已连接。
可选的,第一节点10还用于:在向第二节点20发送第一报文后,缓存第一报文;相应的,第一节点10在确定第二节点20正确接收目标数据后,将第一报文从缓存中移除。
可选的,第一节点10还用于:如果距离最近一次向第二节点20发送报文的时长达到第一时长阈值,则向第二节点20发送空报文,以维持与第二节点20之间的数据连接。
可选的,第一节点10还用于:如果距离最近一次接收到第二节点20发送报文的时长达到第二时长阈值,则断开与第二节点20之间的数据连接。
可选的,第二节点20还用于:如果距离最近一次向第一节点发送报文的时长达到第一时长阈值,则向第一节点10发送空报文,以维持与第一节点10之间的数据连接。
可选的,第二节点20还用于:如果距离最近一次接收到第一节点10发送报文的时长达到第二时长阈值,则断开与第一节点10之间的数据连接。
可选的,报文的前导为N个字节,N为大于或等于2的整数,且N个字节均相同。
第一节点10生成第一报文后,判断第一报文的帧头和数据包中是否存在与前导的前N-1个字节相同的数据,如果第一报文的帧头和数据包中存在与前导的前N-1个字节相同的数据,那么在该数据之后添加预设的识别码,向第二节点20发送处理后的报文。相应的,第二节点20接收到第一节点10发送的数据后,根据预设的前导进行分帧处理,得到初始报文,确定该初始报文中位于前导之后的数据中是否存在待处理数据,如果存在待处理数据,则将该待处理数据中的识别码移除,得到第一报文。
第二节点20生成第二报文后,判断第二报文的帧头和数据包中是否存在与前导的前N-1个字节相同的数据,如果第二报文的帧头和数据包中存在与前导的前N-1个字节相同的数据,那么在该数据之后添加预设的识别码,向第一节点10发送处理后的报文。相应的,第一节点10接收到第二节点20发送的数据后,根据预设的前导进行分帧处理,得到初始报文,确定该初始报文中位于前导之后的数据中是否存在待处理数据,如果存在待处理数据,则将该待处理数据中的识别码移除,得到第二报文。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的通信系统而言,由于其与实施例公开的通信方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种通信方法,其特征在于,应用于第一节点,所述第一节点与第二节点点对点连接,所述通信方法包括:
在建立与所述第二节点的数据连接后,获取目标数据;
对所述目标数据进行封装,得到第一数据包,所述第一数据包包括头部和所述目标数据,其中,所述头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息;
对所述第一数据包进行封装,得到第一报文,所述第一报文包括前导、帧头和所述第一数据包,其中,所述帧头包括校验码和数据包长度信息;
向所述第二节点发送所述第一报文;
接收所述第二节点发送的第二报文;
对所述第二报文进行解封装,得到所述第二报文中的帧头和第二数据包;
对所述第二数据包进行解封装,得到所述第二数据包中的头部和目标数据;
根据所述第二报文的帧头中的校验码、所述第二数据包的头部中的确认序号、以及本地存储的已确认序号和已发送序号,确定所述第二节点是否正确接收所述目标数据,其中,所述第二节点基于所述第一报文的帧头中的校验码、所述第一数据包的头部中的传输序号、以及本地存储的已确认序号确定是否正确接收所述目标数据,并在确定正确接收所述目标数据时,向所述第一节点发送所述第二报文。
2.根据权利要求1所述的通信方法,其特征在于,还包括:
在向所述第二节点发送所述第一报文后,缓存所述第一报文;
相应的,在确定所述第二节点正确接收所述目标数据后,将所述第一报文从缓存中移除。
3.根据权利要求1或2所述的通信方法,其特征在于,建立与所述第二节点的数据连接,包括:
申请客户端接口,向所述第二节点发送连接请求报文;
接收所述第二节点发送的连接响应报文,将连接状态修改为已连接,向所述第二节点发送确认响应报文。
4.根据权利要求3所述的通信方法,其特征在于,还包括:
如果距离最近一次向所述第二节点发送报文的时长达到第一时长阈值,则向所述第二节点发送空报文,以维持与所述第二节点之间的数据连接。
5.根据权利要求4所述的通信方法,其特征在于,还包括:
如果距离最近一次接收到所述第二节点发送报文的时长达到第二时长阈值,则断开与所述第二节点之间的数据连接。
6.一种通信方法,其特征在于,应用于第二节点,所述第二节点与第一节点点对点连接,所述通信方法包括:
在建立与所述第一节点的数据连接后,接收第一节点发送的第一报文;
对所述第一报文进行解封装,得到所述第一报文中的帧头和第一数据包;
对所述第一数据包进行解封装,得到所述第一数据包中的头部和目标数据;
根据所述第一报文的帧头中的校验码、所述第一数据包的头部中的传输序号、以及本地存储的已确认序号,确定是否正确接收目标数据;
在确定正确接收目标数据的情况下,生成第二数据包,所述第二数据包包括头部和目标数据,所述第二数据包的头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息;
对所述第二数据包进行封装,得到第二报文,所述第二报文包括前导、帧头和所述第二数据包,所述第二报文的帧头包括校验码和数据包长度信息;
向所述第一节点发送所述第二报文。
7.根据权利要求6所述的通信方法,其特征在于,建立与所述第一节点的数据连接,包括:
打开监听端口;
接收所述第一节点发送的连接请求报文,申请服务端端口,向所述第一节点发送连接响应报文;
接收所述第一节点发送的确认响应报文,将连接状态修改为已连接。
8.根据权利要求7所述的通信方法,其特征在于,还包括:
如果距离最近一次向所述第一节点发送报文的时长达到第一时长阈值,则向所述第一节点发送空报文,以维持与所述第一节点之间的数据连接。
9.根据权利要求8所述的通信方法,其特征在于,还包括:
如果距离最近一次接收到所述第一节点发送报文的时长达到第二时长阈值,则断开与所述第一节点之间的数据连接。
10.一种通信系统,其特征在于,包括第一节点和第二节点,所述第一节点和所述第二节点点对点连接;
所述第一节点用于:在建立与所述第二节点的数据连接后,获取目标数据;对所述目标数据进行封装,得到第一数据包,所述第一数据包包括头部和所述目标数据,其中,所述头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息;对所述第一数据包进行封装,得到第一报文,所述第一报文包括前导、帧头和所述第一数据包,其中,所述帧头包括校验码和数据包长度信息;向所述第二节点发送所述第一报文;接收所述第二节点发送的第二报文;对所述第二报文进行解封装,得到所述第二报文中的帧头和第二数据包;对所述第二数据包进行解封装,得到所述第二数据包中的头部和目标数据;根据所述第二报文的帧头中的校验码、所述第二数据包的头部中的确认序号、以及本地存储的已确认序号和已发送序号,确定所述第二节点是否正确接收所述目标数据;
所述第二节点用于:接收所述第一节点发送的第一报文;对所述第一报文进行解封装,得到所述第一报文中的帧头和第一数据包;对所述第一数据包进行解封装,得到所述第一数据包中的头部和目标数据;根据所述第一报文的帧头中的校验码、所述第一数据包的头部中的传输序号、以及本地存储的已确认序号,确定是否正确接收目标数据;在确定正确接收目标数据的情况下,生成第二数据包,所述第二数据包包括头部和目标数据,所述第二数据包的头部包括源端口号、目的端口号、传输序号、确认序号、消息类型和数据长度信息;对所述第二数据包进行封装,得到第二报文,所述第二报文包括前导、帧头和所述第二数据包,所述第二报文的帧头包括校验码和数据包长度信息;向所述第一节点发送所述第二报文。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011367624.9A CN112511536B (zh) | 2020-11-27 | 2020-11-27 | 一种通信方法及通信系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011367624.9A CN112511536B (zh) | 2020-11-27 | 2020-11-27 | 一种通信方法及通信系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112511536A true CN112511536A (zh) | 2021-03-16 |
CN112511536B CN112511536B (zh) | 2022-10-21 |
Family
ID=74967710
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011367624.9A Active CN112511536B (zh) | 2020-11-27 | 2020-11-27 | 一种通信方法及通信系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112511536B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115296900A (zh) * | 2022-08-03 | 2022-11-04 | 北京天融信网络安全技术有限公司 | 一种网络报文修正方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101645883A (zh) * | 2008-08-08 | 2010-02-10 | 比亚迪股份有限公司 | 数据传输方法、数据发送方法及数据接收方法 |
CN103036661A (zh) * | 2013-01-08 | 2013-04-10 | 西安电子科技大学 | 具有自愈功能的自动请求重传方法 |
CN103079285A (zh) * | 2013-01-14 | 2013-05-01 | 东莞宇龙通信科技有限公司 | 移动终端和点对点连接保持方法 |
CN103532668A (zh) * | 2013-10-12 | 2014-01-22 | 成都阜特科技股份有限公司 | 一种确保tcp通信数据完整及正确的方法 |
WO2019148884A1 (zh) * | 2018-01-31 | 2019-08-08 | 深圳市民泰科电子有限公司 | 报文传输方法、存储介质及计算机设备 |
CN110855686A (zh) * | 2019-11-18 | 2020-02-28 | 深圳开立生物医疗科技股份有限公司 | 一种spi协议通信方法、系统、设备及计算机存储介质 |
-
2020
- 2020-11-27 CN CN202011367624.9A patent/CN112511536B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101645883A (zh) * | 2008-08-08 | 2010-02-10 | 比亚迪股份有限公司 | 数据传输方法、数据发送方法及数据接收方法 |
CN103036661A (zh) * | 2013-01-08 | 2013-04-10 | 西安电子科技大学 | 具有自愈功能的自动请求重传方法 |
CN103079285A (zh) * | 2013-01-14 | 2013-05-01 | 东莞宇龙通信科技有限公司 | 移动终端和点对点连接保持方法 |
CN103532668A (zh) * | 2013-10-12 | 2014-01-22 | 成都阜特科技股份有限公司 | 一种确保tcp通信数据完整及正确的方法 |
WO2019148884A1 (zh) * | 2018-01-31 | 2019-08-08 | 深圳市民泰科电子有限公司 | 报文传输方法、存储介质及计算机设备 |
CN110855686A (zh) * | 2019-11-18 | 2020-02-28 | 深圳开立生物医疗科技股份有限公司 | 一种spi协议通信方法、系统、设备及计算机存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115296900A (zh) * | 2022-08-03 | 2022-11-04 | 北京天融信网络安全技术有限公司 | 一种网络报文修正方法、装置、电子设备及存储介质 |
CN115296900B (zh) * | 2022-08-03 | 2024-01-23 | 北京天融信网络安全技术有限公司 | 一种网络报文修正方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112511536B (zh) | 2022-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3148154B1 (en) | Controller area network (can) device and method for controlling can traffic | |
KR101224591B1 (ko) | 네트워크 중계 장치 및 그 방법 | |
JP6858749B2 (ja) | 負荷平衡システムにおいて接続を確立するデバイス及び方法 | |
CN106330414B (zh) | 一种报文传输方法及装置 | |
CA2362961C (en) | Bridge for can to tcp/ip connection | |
US7512061B2 (en) | Recovery of state information of a first tunnel end-point | |
CN107836095B (zh) | 用于在网络中产生秘密或密钥的方法 | |
CN101494585B (zh) | 一种实现通用路由封装隧道可靠传输的方法及设备 | |
WO2013020437A1 (zh) | 一种双向转发检测会话的验证方法及节点 | |
JP6121563B2 (ja) | プロトコル例外状態を用いたデータ伝送プロトコル | |
US10311005B2 (en) | Message translator | |
CN106911428B (zh) | 信息的传输方法和装置 | |
CN111866113A (zh) | 基于rssp铁路信号安全通信协议的通信系统及方法 | |
JP2008259078A (ja) | 再送要求送信方法、送信側装置及び受信側装置 | |
CN109688555B (zh) | 一种信号数据的实时采集与通信系统及方法 | |
CN112347023A (zh) | 用于can节点的安全模块 | |
US6452946B1 (en) | Apparatus and method for improving performance in master and slave communications systems | |
CN111769915B (zh) | 数据传输方法及相关设备 | |
CN112511536B (zh) | 一种通信方法及通信系统 | |
JP5328250B2 (ja) | 通信装置および電子装置 | |
CN111541776A (zh) | 一种基于物联网设备的安全通信装置及系统 | |
CN109756475A (zh) | 一种单向网络中数据传输方法及装置 | |
CN101207432A (zh) | 一种实现时间自动同步的方法和系统 | |
CN107948217B (zh) | 交换机系统和通信方法 | |
CN103391226A (zh) | 一种ppp链路检测维护方法及系统 |
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 |