CN117336262A - 一种单向报文传输方法、装置、存储介质及设备 - Google Patents

一种单向报文传输方法、装置、存储介质及设备 Download PDF

Info

Publication number
CN117336262A
CN117336262A CN202311465164.7A CN202311465164A CN117336262A CN 117336262 A CN117336262 A CN 117336262A CN 202311465164 A CN202311465164 A CN 202311465164A CN 117336262 A CN117336262 A CN 117336262A
Authority
CN
China
Prior art keywords
unidirectional
message
application
messages
protocol
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.)
Pending
Application number
CN202311465164.7A
Other languages
English (en)
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.)
Beijing Topsec Technology Co Ltd
Beijing Topsec Network Security Technology Co Ltd
Beijing Topsec Software Co Ltd
Original Assignee
Beijing Topsec Technology Co Ltd
Beijing Topsec Network Security Technology Co Ltd
Beijing Topsec Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Topsec Technology Co Ltd, Beijing Topsec Network Security Technology Co Ltd, Beijing Topsec Software Co Ltd filed Critical Beijing Topsec Technology Co Ltd
Priority to CN202311465164.7A priority Critical patent/CN117336262A/zh
Publication of CN117336262A publication Critical patent/CN117336262A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9015Buffering arrangements for supporting a linked list
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/12Protocol engines
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
    • H04L69/162Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请提供一种单向报文传输方法、装置、存储介质及设备,该方法中,在发送端主机中设计一个单向报文引擎,该单向报文引擎与应用代理建立网络连接并通过共享内存实现通信,该单向报文引擎与内核中的报文检查模块建立XSK连接,即AF_XDP套接字连接。这样,该单向报文引擎将从共享内存中读取到的应用数据封装成单向报文并缓存到目标队列中,之后批量读取该目标队列中的单向报文,并通过XSK连接发送至报文检查模块,由报文检查模块检查后发送至接收端主机。如此,采用单向报文引擎、共享内存、AF_XDP、报文检查模块相结合的设计,减少单向报文在用户进程、内核及驱动之间的内存拷贝,即便在低端硬件配置条件下也能保证单向报文的可靠传输。

Description

一种单向报文传输方法、装置、存储介质及设备
技术领域
本申请涉及数据传输技术领域,具体而言,涉及一种单向报文传输方法、装置、存储介质及设备。
背景技术
当前,单向光闸的发送端主机和接收端主机上均运行有应用代理,发送端主机上的应用代理与应用软件完成数据交互后,将数据转发至接收端主机上的应用代理。相关技术中,发送端主机和接收端主机一般使用数据平面开发套件(Data Plane DevelopmentKit,DPDK)来实现单向报文的传输。然而,由于DPDK占用较多硬件资源,因此在中低端产品上,如果降低硬件资源的配置规格,容易导致单向报文丢失。
发明内容
本申请的目的在于提供一种单向报文传输方法、装置、存储介质及设备,旨在解决相关技术中存在的中低端设备因降低硬件配置而引起单向报文丢失的问题。
第一方面,本申请提供了一种单向报文传输方法,所述方法应用于发送端主机中的单向报文引擎,所述方法包括:在接收到应用代理的连接申请时,与所述应用代理建立网络连接,并为所述网络连接分配一个会话;从共享内存中读取所述会话对应的应用数据,将所述应用数据封装成单向报文并缓存到目标队列中;所述目标队列是所述单向报文引擎内的缓存队列;批量从所述目标队列中读取单向报文,并将读取的单向报文通过XSK连接发送到内核中的报文检查模块,以使所述报文检查模块在对所述单向报文进行检查后,将检查通过的单向报文经单向发送卡传输至接收端主机。
在上述实现过程中,在发送端主机中设计一个单向报文引擎,该单向报文引擎与应用代理建立网络连接并通过共享内存实现通信,该单向报文引擎与内核中的报文检查模块建立XSK连接,即AF_XDP套接字连接。这样,该单向报文引擎将从共享内存中读取到的应用数据封装成单向报文并缓存到目标队列中,之后批量读取该目标队列中的单向报文,并通过XSK连接发送至报文检查模块,由报文检查模块检查后发送至接收端主机。如此,采用单向报文引擎、共享内存、AF_XDP、报文检查模块相结合的设计,减少单向报文在用户进程、内核及驱动之间的内存拷贝,即便在低端硬件配置条件下也能保证单向报文的可靠传输。
进一步地,在一些实施例中,所述从共享内存中读取所述会话对应的应用数据之前,包括:从单向链表中获取一个单向协议ID,并将所述单向协议ID绑定所述会话;所述单向链表中的单向协议ID基于以下方式获取得到:通过ID状态位图存储所有单向协议ID的状态;定时从所述ID状态位图中查找预设数量的、状态为可用的单向协议ID,并将查找到的单向协议ID存储到单向链表中。
在上述实现过程中,使用单向协议ID来作为会话的标识,并且采用位图、单向链表、定时查找可用ID的方法管理单向协议ID,实现单向新连接ID的开始查找、分配和释放。
进一步地,在一些实施例中,所述将所述应用数据封装成单向报文,包括:基于所述单向协议ID创建协议头,基于所述协议头和所述应用数据生成单向报文。
在上述实现过程中,基于以太网二层协议设计单向报文应用协议,提升单向报文的应用数据的承载量。
进一步地,在一些实施例中,所述协议头包括指示所述单向报文的标识的第一字段、指示所述单向报文引擎的ID的第二字段、指示所述应用代理的ID的第三字段、指示所述单向报文对应的事件的第四字段、指示报文数据长度的第五字段、指示所述单向协议ID的第六字段、以及指示报文序列号的第七字段;所述报文检查模块对所述单向报文的检查包括对所述协议头中各个字段的合法性校验。
在上述实现过程中,通过设置这些字段,便于后续对单向报文的安全性检查以及通信传输。
进一步地,在一些实施例中,所述方法还包括:在完成所述目标队列中的单向报文发送时,向所述应用代理发送用于指示发送完毕的通知消息。
在上述实现过程中,单向报文引擎在将目标队列中的单向报文发送完毕时,可以通知应用代理数据已发送完毕,从而保证通信的可靠性。
第二方面,本申请提供了一种单向报文传输方法,所述方法应用于接收端主机中的单向报文引擎,所述方法包括:当内核中的报文检查模块对发送端主机发送的单向报文进行检查后,通过XSK连接,从所述报文检查模块批量接收检查通过的单向报文,并将接收到的单向报文缓存到目标队列中;所述目标队列是所述单向报文引擎内的缓存队列;轮询读取并解析所述目标队列中的单向报文,得到应用数据;查找所述应用数据对应的会话,将所述应用数据写入共享内存,以使所述会话对应的应用代理从所述共享内存中获取所述应用数据并发送给目的端;所述会话是所述单向报文引擎分配给与所述应用代理之间的网络连接的。
第三方面,本申请提供了一种单向报文传输装置,应用于发送端主机,所述装置包括:分配模块,用于在接收到应用代理的连接申请时,与所述应用代理建立网络连接,并为所述网络连接分配一个会话;缓存模块,用于从共享内存中读取所述会话对应的应用数据,将所述应用数据封装成单向报文并缓存到目标队列中;所述目标队列是所述单向报文传输装置内的缓存队列;发送模块,用于批量从所述目标队列中读取单向报文,并将读取的单向报文通过XSK连接发送到内核中的报文检查模块,以使所述报文检查模块在对所述单向报文进行检查后,将检查通过的单向报文经单向发送卡传输至接收端主机。
第四方面,本申请提供了一种单向报文传输装置,应用于接收端主机,所述装置包括:接收模块,用于当内核中的报文检查模块对发送端主机发送的单向报文进行检查后,通过XSK连接,从所述报文检查模块批量接收检查通过的单向报文,并将接收到的单向报文缓存到目标队列中;所述目标队列是所述单向报文传输装置内的缓存队列;解析模块,用于轮询读取并解析所述目标队列中的单向报文,得到应用数据;写入模块,用于查找所述应用数据对应的会话,将所述应用数据写入共享内存,以使所述会话对应的应用代理从所述共享内存中获取所述应用数据并发送给目的端;所述会话是所述单向报文传输装置分配给与所述应用代理之间的网络连接的。
第五方面,本申请提供了一种电子设备,包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面任一项或第二方面所述的方法的步骤。
第六方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,使得所述计算机执行如第一方面任一项或第二方面所述的方法。
第七方面,本申请提供了一种计算机程序产品,所述计算机程序产品在计算机上运行时,使得计算机执行如第一方面任一项或第二方面所述的方法。
本申请公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本申请公开的上述技术即可得知。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种应用于发送端主机中的单向报文引擎的单向报文传输方法的流程图;
图2为本申请实施例提供的一种应用于接收端主机中的单向报文引擎的单向报文传输方法的流程图;
图3为本申请实施例提供的一种单向报文传输方案的***架构的示意图;
图4为本申请实施例提供的一种单向协议ID的管理方式的示意图;
图5为本申请实施例提供的一种应用于发送端主机的单向报文传输装置的框图;
图6为本申请实施例提供的一种应用于接收端主机的单向报文传输装置的框图;
图7为本申请实施例提供的一种电子设备的结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
如背景技术记载,相关技术中的单向报文传输方式存在着在中低端产品上容易出现单向报文丢失的问题。基于此,本申请实施例提供一种新的单向报文传输方案,以解决上述问题。
接下来对本申请实施例进行介绍:
如图1所示,图1是本申请实施例提供的一种单向报文传输方法的流程图,所述方法应用于发送端主机中的单向报文引擎。这里的发送端主机可以是单向光闸硬件架构中的一部分,单向光闸部署在不同安全等级的网络之间,通过物理逻辑隔离卡,实现数据跨网、跨域单向传输,其硬件架构通常由发送端主机、接收端主机和单向隔离部件组成。该发送端主机可以称为外端机,相应地,该接收端主机可以称为内端机,外端机和内端机之间使用单向隔离组件进行单向无反馈通信。本实施例方案在发送端主机中增设了一个单向报文引擎,由该单向报文引擎替代DPDK来实现单向报文的通信处理。在实现时,该单向报文引擎可以是以多进程方式运行,采用Nginx(一个高性能的HTTP和反向代理web服务器)作为引擎的框架。
所述方法包括:
在步骤101、在接收到应用代理的连接申请时,与所述应用代理建立网络连接,并为所述网络连接分配一个会话;
本步骤中提到的应用代理可以是指在发送端主机上运行的代理服务器软件,通常来说,发送端主机上的应用代理与应用软件完成数据交互后,需要将数据转发至接收端主机上的应用代理,由接收端主机上的应用代理转发到处于内网的应用软件。在本实施例方案中,应用代理实现单向光闸的应用协议代理功能,其与单向报文引擎建立网络连接,并基于该网络连接进行通信。这里的网络连接可以是TCP(Transmission Control Protocol,传输控制协议)连接,也可以是UDP(User Datagram Protocol,用户数据报协议)连接等。
在实现时,发送端主机上可以运行有多个单向报文引擎以及多个应用代理,单向报文引擎与多个应用代理之间可以是多对多关系,也可以是说,每个单向报文引擎可以接受应用代理多条网络连接。在本实施例方案中,单向报文引擎为每条网络连接分配一个会话,该会话可以保存该网络连接,以及后续的一条XSK连接及目标队列,形成数据的传输链路,该会话还可以记录数据中相关的IP地址、端口、报文数量等信息。
在步骤102、从共享内存中读取所述会话对应的应用数据,将所述应用数据封装成单向报文并缓存到目标队列中;所述目标队列是所述单向报文引擎内的缓存队列;
本实施例方案中,单向报文引擎与应用代理之间可以基于共享内存实现数据的传输,在实现时,单向报文引擎可以创建一个共享内存,并通过Socket(套接字)连接将共享内存的文件句柄发送给应用代理,使得应用代理也能够访问该共享内存,之后,应用代理将应用软件的待发送数据,即应用数据写入共享内存,这样,单向报文引擎可以从该共享内存中读取到该应用数据。单向报文是基于单向私有协议的报文,是允许在单向隔离组件中单向传输的报文。单向报文引擎在读取到应用数据后,调用报文封装接口,将该应用数据封装成单向报文。
在一些实施例中,本步骤之前可以包括:从单向链表中获取一个单向协议ID,并将所述单向协议ID绑定所述会话;所述单向链表中的单向协议ID基于以下方式获取得到:通过ID状态位图存储所有单向协议ID的状态;定时从所述ID状态位图中查找预设数量的、状态为可用的单向协议ID,并将查找到的单向协议ID存储到单向链表中。也就是说,单向报文引擎会采用单向协议ID作为会话的标识,该单向协议ID使用位图(bitmap)法管理。位图法是一种用每一位来存放某种状态的方法,例如,ID状态位图可以使用131072个字节来存储所有单向协议ID,每个bit对应一个ID号,即存储范围是1至1048576。每一位的值表征相应ID号的状态,0表示可用,1表示占用。在单向报文引擎内部,设置一个变量bmPos记录在ID状态位图查询的位置,每次加一查找可用ID,设置一个单向链表存储可用ID,在运行过程中,单向报文引擎定时检查单向链表总量,当检查到单向链表总量不足时,移动bmPos,查找可用ID并加入到单向链表中,这样,单向报文引擎在为新的连接分配会话时,可以从单向链表中获取单向协议ID。如此,提高设置单向协议ID的效率。
进一步地,在一些实施例中,本步骤中提到的将所述应用数据封装成单向报文可以包括:基于所述单向协议ID创建协议头,基于所述协议头和所述应用数据生成单向报文。也就是说,单向报文引擎在申请到新的单向协议ID后,可以利用该单向协议ID来封装单向报文的协议头,结合应用数据生成具体的单向报文。可选地,该协议头可以包括指示所述单向报文的标识的第一字段、指示所述单向报文引擎的ID的第二字段、指示所述应用代理的ID的第三字段、指示所述单向报文对应的事件的第四字段、指示报文数据长度的第五字段、指示所述单向协议ID的第六字段、以及指示报文序列号的第七字段。也就是说,单向报文的协议头可以由七个字段组成,这些字段依次指示单向报文的标识、单向报文引擎的ID、应用代理的ID、单向报文对应的事件(如建立连接、关闭连接、数据流开始等等)、报文数据长度、单向协议ID以及报文序列号,单向协议头后部是应用数据载荷。如此,通过设置这些字段,便于后续对单向报文的安全性检查以及通信传输。
目标队列是单向报文引擎中设置的一个缓存队列,单向报文引擎在封装好单向报文后,将其缓存到目标队列中,这样,单向报文引擎可以定时批量读取目标队列中的单向报文进行发送,以实现设备的高代理性能,降低硬件成本。
在步骤103、批量从所述目标队列中读取单向报文,并将读取的单向报文通过XSK连接发送到内核中的报文检查模块,以使所述报文检查模块在对所述单向报文进行检查后,将检查通过的单向报文经单向发送卡传输至接收端主机。
本步骤中提到的XSK连接是指AF_XDP套接字连接。XDP(eXpress Data Path,快速数据路径)是Linux网络处理流程中的一个eBPF钩子,能够挂载eBPF程序,它能够在网络数据包到达网卡驱动层时对其进行处理,具有非常优秀的数据面处理性能。而AF_XDP是XDP的一种扩展,其是一个协议族,主要用于高性能报文处理。AF_XDP套接字,即XSK可以使用通用的Socket()***调用创建,每个XSK都有两个环,即RX环和TX环。套接字可以在RX环上接收数据包,并且可以在TX环上发送数据包。RX环或TX环的描述符指向存储区域(称为UMEM)中的数据缓冲区。RX环和TX环可以共享同一UMEM,因此不必在RX环和TX环之间复制数据包。在本实施例方案中,单向报文引擎启动后,与内核中的报文检查模块建立一条XSK连接,并且定时批量从目标队列中读取单向报文,通过XSK连接发送至报文检查模块。如此,采用XDP架构、AF_XDP协议族、单向报文引擎相结合的设计,减少单向报文在用户进程、Linux内核及驱动之间的内存拷贝,提升单向报文传输速度和可靠性。
本步骤中提到的报文检查模块是运行在Linux内核中的一个进程,该报文检查模块可以集成在XDP框架内,提供独立的函数,函数内部检查单向报文的协议头中各个字段的合法性,例如,在建立XSK连接时,单向报文引擎会将该XSK连接对应的一个数值,即该单向报文引擎的ID通知给报文检查模块,这样,报文检查模块可以对单向报文的协议头中指示单向报文引擎的ID的字段的值进行校验,若与该XSK连接对应的数值一致,则判定该字段无误,否则判定该单向报文检查不通过。报文检查模块会将检查通过的单向报文经单向发送卡发送至接收端主机。
另外,在一些实施例中,上述方法还可以包括:在完成所述目标队列中的单向报文发送时,向所述应用代理发送用于指示发送完毕的通知消息。也就是说,单向报文引擎在将目标队列中的单向报文发送完毕时,可以通知应用代理数据已发送完毕,从而保证通信的可靠性。
本申请实施例,在发送端主机中设计一个单向报文引擎,该单向报文引擎与应用代理建立网络连接并通过共享内存实现通信,该单向报文引擎与内核中的报文检查模块建立XSK连接,即AF_XDP套接字连接。这样,该单向报文引擎将从共享内存中读取到的应用数据封装成单向报文并缓存到目标队列中,之后批量读取该目标队列中的单向报文,并通过XSK连接发送至报文检查模块,由报文检查模块检查后发送至接收端主机。如此,采用单向报文引擎、共享内存、AF_XDP、报文检查模块相结合的设计,减少单向报文在用户进程、内核及驱动之间的内存拷贝,即便在低端硬件配置条件下也能保证单向报文的可靠传输。
如图2所示,图2是本申请实施例提供的另一种单向报文传输方法的流程图,所述方法应用于接收端主机中的单向报文引擎,包括:
步骤201、当内核中的报文检查模块对发送端主机发送的单向报文进行检查后,通过XSK连接,从所述报文检查模块批量接收检查通过的单向报文,并将接收到的单向报文缓存到目标队列中;所述目标队列是所述单向报文引擎内的缓存队列;
步骤202、轮询读取并解析所述目标队列中的单向报文,得到应用数据;
步骤203、查找所述应用数据对应的会话,将所述应用数据写入共享内存,以使所述会话对应的应用代理从所述共享内存中获取所述应用数据并发送给目的端;所述会话是所述单向报文引擎分配给与所述应用代理之间的网络连接的。
在本实施例方案中,接收端主机中同样设计有单向报文引擎和报文检查模块,而与图1所示的实施例方案不同,接收端主机上的报文检查模块是对单向接收卡接收到的单向报文的协议格式进行检查,再将检查通过的单向报文发送给单向报文引擎,而接收端主机上的单向报文引擎通过XSK连接批量读取单向报文,缓存到目标队列中,轮询读取队列中的单向报文,解析单向报文后通过共享内存将数据发送给相应的应用代理。这一过程可以认为是图1所示的实施例方案的反向实现过程,因此,其可以具体详见图1所示的实施例中相应步骤的实现过程,在此不做赘述。
为了对本申请的方案做更为详细的说明,接下来介绍一具体实施例:
本实施例提供一种单向报文传输方案,该方案的***架构如图3所示,该***包括发送端主机31和接收端主机32,发送端主机31和接收端主机32之间使用单向发送卡33和单向接收卡34进行单向无反馈通信。这两个主机均具有网卡、应用代理、Linux内核中的协议栈和驱动,而本实施例方案在此基础上,增设了单向报文引擎和报文检查模块。图3中示出的序号①至⑨表征的是网络报文的流转路径,即发送端的网络报文经发送端主机的网卡、驱动、协议栈、应用代理进程、单向报文引擎、报文检查模块、单向发送卡发送到接收端主机,在接收端主机上,报文经单向接收卡、报文检查模块、单向报文引擎、应用代理、协议栈、驱动、网卡发向目标。以下介绍单向报文引擎和报文检查模块的具体内容:
单向报文引擎以多进程方式运行,采用Nginx作为引擎的框架,通过Socket结合共享内存方式分别与发送端或接收端的应用代理通信。发送端主机上的单向报文引擎包括会话模块、单向协议模块和报文发送模块,接收端主机上的单向报文引擎包括会话模块、单向协议模块和报文接收模块,其中:
针对会话模块,Nginx的会话保存一条网络连接和一条XSK连接及一个缓存队列,所有会话的XSK连接及缓存队列对应一个实例。发送端的队列缓存待发送的单向报文,接收端的队列缓存接收到的单向报文。会话模块使用基数树、红黑数等算法,提供基于IP地址、端口的连接增加、查找、删除等功能,同时提供基于单向协议ID的单向连接增加、查找、删除等功能。
针对单向协议模块,其提供单向报文解析接口和单向报文封装接口,同时提供单向协议ID的管理。单向报文的协议头包括Flag、PID、MID、Msg、Len、ID和Seq等字段,其中,Flag字段的长度为2字节,表征单向报文的标识符,PID字段的长度为2字节,表征为单向报文引擎分配的ID号;MID字段的长度为12位,表征应用代理的ID;Msg字段的长度为4位,表征单向报文对应的事件,如0x01是建立连接,0x02是关闭连接,0x03是数据流开始,0x04是数据流数据,0x05是数据流结束,0x06是数据报文,0x07是同步时间,0x08是同步配置,0x09是同步状态,0x0A是异常错误;Len字段的长度为12位,表征报文数据长度;ID字段的长度为20位,表征单向协议ID,取值范围是1至1048575;Seq字段的长度为36位,表征报文的序列号。协议头使用以太网14字节的头部空间,单向协议头后部是应用数据载荷;如此,基于以太网二层协议设计单向报文应用协议,提升了单向报文的应用数据的承载量;
另外,单向协议ID的管理方式如图4所示,由图4可知,单向协议ID使用位图法管理,需要131072个字节存储,每个bit对应一个ID号,bit的值表征相应ID号的状态,0表示可用,1表示占用。在进程内部,支持回绕的变量bmPos记录在ID状态位图查询的位置,每次加一查找可用ID,设置一个单向链表(节点内存空间是8字节)存储可用ID,节点数量可以设置10万个。当申请单向协议ID时,先从单向链表中获取ID,并反馈给申请者。运行过程中定时检查单向链表总量不足时,移动bmPos,查找可用ID,并加入到单向链表中;当关闭连接时,如果单向链表总量不足时,将释放的ID加入到单向链表中,并设置ID状态位图中对应的值。如此,采用位图、单向链表、定时查找可用ID的方法管理单向协议ID,实现单向新连接ID的开始查找、分配和释放。
针对报文发送模块,其作为一个独立库模块运行在发送端主机的单向报文引擎中,提供单向报文的发送管理功能,模块内部集成单向报文缓存队列,队列中传输的数据是一个数据结构指针,指针内存储发送者的数据内存地址和对应的回调函数,调用者可以通过注册的回调函数,获得发送完数据的通知。在实现时,模块在Nginx的worker进程的ngx_process_events()中定时批量从队列读取单向报文,并通过XSK连接发送到报文检查模块,发送完成后,调用数据块对应的回调函数,通知发送者数据发送完毕。
针对报文接收模块,其作为一个独立库模块运行在发送端主机的单向报文引擎中,提供单向报文的接收管理功能,模块内部集成单向报文缓存队列,在实现时,模块在Nginx的worker进程的ngx_process_events()中大批量读取XSK连接的单向报文,并缓存到队列中,然后定时或在检测到网络连接的读写事件时小批量轮询读取队列中的单向报文,调用单向协议模块解析单向报文,根据解析出的单向协议ID查找会话,最终触发会话上的事件处理函数,将数据发送给应用代理;
另外,报文接收模块在通信过程中根据单向报文中Msg字段完成以下相关连接及会话的管理:当Msg字段指示单向报文对应的事件为创建连接时,报文接收模块根据MID向应用代理建立连接;当Msg字段指示单向报文对应的事件为关闭连接时,报文接收模块查找会话、关闭网络连接、释放共享内存及释放会话;当Msg字段指示单向报文对应的事件为数据时,报文接收模块查找会话、读取单向报文、向网络连接及共享内存写数据。
报文检查模块集成在XDP框架内,提供独立的函数,函数内部检查报文的Flag等字段的合法性。报文检查模块通过多条XSK连接与多个单向报文引擎进程通信,在建立XSK连接时,单向报文引擎进程会通知报文检查模块每条XSK连接对应的一个数值(对应单向协议中的PID),形成绑定关系。接收端的报文检查模块在接收到单向报文后,会根据单向报文的PID字段选择对应的XSK连接,将单向报文发送给单向报文引擎。如此,基于XDP架构,在驱动层检查单向报文协议的标志位等字段的合法性,实现了在硬件层安全检查单向报文,并且,在驱动层将单向报文零拷到应用进程,实现了占用较少CPU资源就可以快速传输数据的效果。
本实施例方案的一个应用场景中,***的主机选用低端设备,设备上配置千兆网口,主机配置2GB内存,并在设备上部署一个单向报文引擎。在初始化阶段,单向报文引擎启动后,启动Socket侦听服务,为不同的应用代理进程提供单向传输服务,与报文检查模块建立1条XSK连接及1个队列。则该***的报文通信流程包括:
S301、发送端的网络报文通过网卡、内核及协议栈到达应用代理;
S302、应用代理向单向报文引擎申请Socket连接及共享内存,单向报文引擎接受连接,为网络连接和XSK、队列分配一个会话;其中,当该连接是新的连接时,单向报文引擎向单向协议模块申请新的单向协议ID;
S303、单向报文引擎根据网络连接的事件读取连接和共享内存中的应用数据;
S304、单向报文引擎将数据封装成单向报文,缓存到队列中;
S305、单向报文引擎定时批量从队列中读取单向报文,发送到发送端报文检查模块;
S306、发送端报文检查模块检查协议格式;
S307、报文经单向发送卡发送到接收端;
S308、接收端报文检查模块检查报文协议格式,根据协议中的PID及对应的XSK连接,将报文发送给单向报文引擎;
S309、单向报文引擎进程批量从XSK连接读取单向报文,缓存到队列中,定时小批量解析协议;其中,如果是新连接,单向报文引擎根据单向报文中的MID字段向应用代理申请建立Socket连接及共享内存,并为网络连接分配会话,以保存XSK连接、队列、网络连接;如果是应用数据,单向报文引擎通过单向协议ID查找会话,并将数据发送到网络连接及共享内存中;
S310、应用代理通过网络连接及共享内存获取数据后,向目标申请网络连接并发送数据。
S311、发送端应用代理收到应用的关闭连接信息后,关闭与单向报文引擎之间的网络连接及释放共享内存;单向报文引擎根据信息封装关闭连接单向报文,并发送到接收端,最后释放会话;接收端的单向报文引擎收到关闭连接信息,关闭与应用代理之间的连接及释放共享内存,最后释放会话。
本实施例方案在低端硬件配置条件下,采用单向报文引擎、单向协议管理等多方面的综合设计,实现设备的高代理性能,降低硬件成本,提升了产品的竞争力。
与前述方法的实施例相对应,本申请还提供单向报文传输装置及其应用的终端的实施例:
如图5所示,图5是本申请实施例提供的一种单向报文传输装置的框图,所述装置应用于发送端主机,所述装置包括:
分配模块51,用于在接收到应用代理的连接申请时,与所述应用代理建立网络连接,并为所述网络连接分配一个会话;
缓存模块52,用于从共享内存中读取所述会话对应的应用数据,将所述应用数据封装成单向报文并缓存到目标队列中;所述目标队列是所述单向报文传输装置内的缓存队列;
发送模块53,用于批量从所述目标队列中读取单向报文,并将读取的单向报文通过XSK连接发送到内核中的报文检查模块,以使所述报文检查模块在对所述单向报文进行检查后,将检查通过的单向报文经单向发送卡传输至接收端主机。
如图6所示,图6是本申请实施例提供的一种单向报文传输装置的框图,所述装置应用于接收端主机,所述装置包括:
分配模块61,用于在接收到应用代理的连接申请时,与所述应用代理建立网络连接,并为所述网络连接分配一个会话;
缓存模块62,用于从共享内存中读取所述会话对应的应用数据,将所述应用数据封装成单向报文并缓存到目标队列中;所述目标队列是所述单向报文传输装置内的缓存队列;
发送模块63,用于批量从所述目标队列中读取单向报文,并将读取的单向报文通过XSK连接发送到内核中的报文检查模块,以使所述报文检查模块在对所述单向报文进行检查后,将检查通过的单向报文经单向发送卡传输至接收端主机。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
本申请还提供一种电子设备,请参见图7,图7为本申请实施例提供的一种电子设备的结构框图。电子设备可以包括处理器710、通信接口720、存储器730和至少一个通信总线740。其中,通信总线740用于实现这些组件直接的连接通信。其中,本申请实施例中电子设备的通信接口720用于与其他节点设备进行信令或数据的通信。处理器710可以是一种集成电路芯片,具有信号的处理能力。
上述的处理器710可以是通用处理器,包括中央处理器(CPU,Central ProcessingUnit)、网络处理器(NP,Network Processor)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。上述的处理器710可以是微处理器,或者该处理器710也可以是任何常规的处理器等。
存储器730可以是,但不限于,随机存取存储器(RAM,Random Access Memory),只读存储器(ROM,Read Only Memory),可编程只读存储器(PROM,Programmable Read-OnlyMemory),可擦除只读存储器(EPROM,Erasable Programmable Read-Only Memory),电可擦除只读存储器(EEPROM,Electric Erasable Programmable Read-Only Memory)等。存储器730中存储有计算机可读取指令,当所述计算机可读取指令由所述处理器710执行时,电子设备可以执行上述图1或图2方法实施例涉及的各个步骤。
可选地,电子设备还可以包括存储控制器、输入输出单元。
所述存储器730、存储控制器、处理器710、外设接口、输入输出单元各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通信总线740实现电性连接。所述处理器710用于执行存储器730中存储的可执行模块,例如电子设备包括的软件功能模块或计算机程序。
输入输出单元用于提供给用户创建任务以及为该任务创建启动可选时段或预设执行时间以实现用户与服务器的交互。所述输入输出单元可以是,但不限于,鼠标和键盘等。
可以理解,图7所示的结构仅为示意,所述电子设备还可包括比图7中所示更多或者更少的组件,或者具有与图7所示不同的配置。图7中所示的各组件可以采用硬件、软件或其组合实现。
本申请实施例还提供一种存储介质,所述存储介质上存储有指令,当所述指令在计算机上运行时,所述计算机程序被处理器执行时实现方法实施例所述的方法,为避免重复,此处不再赘述。
本申请还提供一种计算机程序产品,所述计算机程序产品在计算机上运行时,使得计算机执行方法实施例所述的方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (10)

1.一种单向报文传输方法,其特征在于,应用于发送端主机中的单向报文引擎,所述方法包括:
在接收到应用代理的连接申请时,与所述应用代理建立网络连接,并为所述网络连接分配一个会话;
从共享内存中读取所述会话对应的应用数据,将所述应用数据封装成单向报文并缓存到目标队列中;所述目标队列是所述单向报文引擎内的缓存队列;
批量从所述目标队列中读取单向报文,并将读取的单向报文通过XSK连接发送到内核中的报文检查模块,以使所述报文检查模块在对所述单向报文进行检查后,将检查通过的单向报文经单向发送卡传输至接收端主机。
2.根据权利要求1所述的方法,其特征在于,所述从共享内存中读取所述会话对应的应用数据之前,包括:
从单向链表中获取一个单向协议ID,并将所述单向协议ID绑定所述会话;所述单向链表中的单向协议ID基于以下方式获取得到:
通过ID状态位图存储所有单向协议ID的状态;
定时从所述ID状态位图中查找预设数量的、状态为可用的单向协议ID,并将查找到的单向协议ID存储到单向链表中。
3.根据权利要求2所述的方法,其特征在于,所述将所述应用数据封装成单向报文,包括:
基于所述单向协议ID创建协议头,基于所述协议头和所述应用数据生成单向报文。
4.根据权利要求3所述的方法,其特征在于,所述协议头包括指示所述单向报文的标识的第一字段、指示所述单向报文引擎的ID的第二字段、指示所述应用代理的ID的第三字段、指示所述单向报文对应的事件的第四字段、指示报文数据长度的第五字段、指示所述单向协议ID的第六字段、以及指示报文序列号的第七字段;
所述报文检查模块对所述单向报文的检查包括对所述协议头中各个字段的合法性校验。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在完成所述目标队列中的单向报文发送时,向所述应用代理发送用于指示发送完毕的通知消息。
6.一种单向报文传输方法,其特征在于,应用于接收端主机中的单向报文引擎,所述方法包括:
当内核中的报文检查模块对发送端主机发送的单向报文进行检查后,通过XSK连接,从所述报文检查模块批量接收检查通过的单向报文,并将接收到的单向报文缓存到目标队列中;所述目标队列是所述单向报文引擎内的缓存队列;
轮询读取并解析所述目标队列中的单向报文,得到应用数据;
查找所述应用数据对应的会话,将所述应用数据写入共享内存,以使所述会话对应的应用代理从所述共享内存中获取所述应用数据并发送给目的端;所述会话是所述单向报文引擎分配给与所述应用代理之间的网络连接的。
7.一种单向报文传输装置,其特征在于,应用于发送端主机,所述装置包括:
分配模块,用于在接收到应用代理的连接申请时,与所述应用代理建立网络连接,并为所述网络连接分配一个会话;
缓存模块,用于从共享内存中读取所述会话对应的应用数据,将所述应用数据封装成单向报文并缓存到目标队列中;所述目标队列是所述单向报文传输装置内的缓存队列;
发送模块,用于批量从所述目标队列中读取单向报文,并将读取的单向报文通过XSK连接发送到内核中的报文检查模块,以使所述报文检查模块在对所述单向报文进行检查后,将检查通过的单向报文经单向发送卡传输至接收端主机。
8.一种单向报文传输装置,其特征在于,应用于接收端主机,所述装置包括:
接收模块,用于当内核中的报文检查模块对发送端主机发送的单向报文进行检查后,通过XSK连接,从所述报文检查模块批量接收检查通过的单向报文,并将接收到的单向报文缓存到目标队列中;所述目标队列是所述单向报文传输装置内的缓存队列;
解析模块,用于轮询读取并解析所述目标队列中的单向报文,得到应用数据;
写入模块,用于查找所述应用数据对应的会话,将所述应用数据写入共享内存,以使所述会话对应的应用代理从所述共享内存中获取所述应用数据并发送给目的端;所述会话是所述单向报文传输装置分配给与所述应用代理之间的网络连接的。
9.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的方法。
10.一种电子设备,其特征在于,包括处理器、存储器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述的方法。
CN202311465164.7A 2023-11-06 2023-11-06 一种单向报文传输方法、装置、存储介质及设备 Pending CN117336262A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311465164.7A CN117336262A (zh) 2023-11-06 2023-11-06 一种单向报文传输方法、装置、存储介质及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311465164.7A CN117336262A (zh) 2023-11-06 2023-11-06 一种单向报文传输方法、装置、存储介质及设备

Publications (1)

Publication Number Publication Date
CN117336262A true CN117336262A (zh) 2024-01-02

Family

ID=89277434

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311465164.7A Pending CN117336262A (zh) 2023-11-06 2023-11-06 一种单向报文传输方法、装置、存储介质及设备

Country Status (1)

Country Link
CN (1) CN117336262A (zh)

Similar Documents

Publication Publication Date Title
JP7046974B2 (ja) サービスとしてメッセージ符号化/復号化を提供するための方法、システム、およびコンピュータ読み取り可能な媒体
US8166547B2 (en) Method, apparatus, signals, and medium for managing a transfer of data in a data network
CN113326228B (zh) 基于远程直接数据存储的报文转发方法、装置及设备
US9015822B2 (en) Automatic invocation of DTN bundle protocol
US9397901B2 (en) Methods, systems, and computer readable media for classifying application traffic received at a network traffic emulation device that emulates multiple application servers
WO2017067391A1 (zh) 虚拟机的数据共享方法及装置
CN110022264B (zh) 控制网络拥塞的方法、接入设备和计算机可读存储介质
US9356844B2 (en) Efficient application recognition in network traffic
CN108023829B (zh) 报文处理方法及装置、存储介质、电子设备
CA2635969A1 (en) Systems and methods for improved network based content inspection
CN113835902B (zh) 一种数据处理方法、装置、计算机设备及存储介质
CN112039796A (zh) 数据包传输方法和装置、存储介质和电子设备
CN105610730B (zh) Cpu与网络设备之间的消息交互方法及***
CN107154917B (zh) 数据传输方法及服务器
CN110691139B (zh) 一种数据传输方法、装置、设备及存储介质
CN110247926B (zh) 一种交互方法和***
CN108064441B (zh) 一种加速网络传输优化方法以及***
CN105991353A (zh) 故障定位的方法和装置
CN117336262A (zh) 一种单向报文传输方法、装置、存储介质及设备
WO2015154393A1 (zh) 业务节点能力处理方法、装置、业务分类器及业务控制器
CN107579949B (zh) 数据报文处理方法及装置
US8819107B2 (en) Relay apparatus, recording medium storing a relay program, and a relay method
CN111865884B (zh) 一种报文处理方法、装置及设备
CN113452663B (zh) 基于应用特征的网络业务控制
CN117615009A (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