APP下载

一种基于单向网络通信场景的气象数据文件快速分发软件设计与实现

2024-03-20吴奋强刘志强

无线互联科技 2024年2期
关键词:数据文件客户端组件

赵 凯,吴奋强,刘志强

(华风气象传媒集团有限责任公司,北京 100081)

0 引言

随着网络安全管理要求的不断加强,企业的业务网络通常被划分为内网区(LAN Area)、非军事区(DMZ)与互联网区(Internet Area)[1]。这种通过在网络防火墙上添加网络报文进出方向限制策略来实现网络分区管理的方式形成了一种单向网络通信场景[2]:只能从内网区主动向DMZ区发起网络请求,反之则被拒绝。在这种场景下,内网区存储的数据文件需要被“二次传输”到DMZ区后才可以向用户提供数据服务,这便带来了2个问题:一是数据文件重复存储造成存储空间浪费问题;二是数据文件传输过程导致的时延问题。本文基于文件传输协议(File Transfer Protocol,FTP)[3]设计并实现了一种无需“二次传输”便可支持DMZ区访问内网区数据文件的数据文件分发软件,对于解决单向网络通信场景下的数据文件快速分发问题有重要实践意义。

1 研究背景

华风气象传媒集团有限责任公司(以下简称“华风”)采用上述策略对业务网络进行安全管理,将网络划分为业务内网区、DMZ区、互联网区,网络分区如图1所示。内网区存储了大量气象数据文件,DMZ区与互联网区均禁止主动发起网络请求访问该区域。DMZ区部署了供用户实时访问数据文件的FTP服务器,可以接收来自互联网的网络请求。互联网区部署了供用户访问的Web服务与数据API服务。在这种场景下,为了满足用户通过FTP客户端软件及时获取气象数据文件的需求,需要定时将内网区的气象数据文件传输到DMZ区FTP服务器上进行存储。这种“二次传输”给实时数据服务造成了大量存储空间的浪费,增加了数据传输延迟,降低了客户体验。

2 数据流程分析

现有数据流程如图2所示,当前华风的业务网络与数据传输流程如下。

图2 现有数据流程

(1)从上游数据源接收数据,并将其存储在内网数据存储中。

(2)利用Linux系统上的软件工具Crontab[4]设置定时器,定时调用RSYNC[5]软件工具将气象数据文件二次传输到DMZ区部署的FTP服务器磁盘中。

(3)用户通过标准的FTP客户端软件工具访问DMZ区部署的FTP服务器获取数据。

显然,为了能够让用户及时访问气象数据文件,需要将内网数据存储中的气象数据文件“二次传输”到DMZ区部署的FTP服务器上。要想解决数据重复存储与数据传输延迟大的问题,就需要消除数据“二次传输”环节。

3 软件总体构想

要消除数据文件“二次传输”环节,就需要本方案设计一些策略与机制将DMZ区FTP服务器接收到的对本地磁盘数据文件的读取操作“转化”为对内网数据存储中数据文件的读取操作,并遵守仅支持从内网主动建立到DMZ区的网络连接管控策略。

软件总体构想如图3所示,本文计划基于FTP文件传输协议,研发具备“接力传输”能力的气象数据文件传输软件(以下简称“FTP-CMD”),以与标准FTP服务器软件相区别。软件将采用客户端-服务器(Client-Server,C/S)软件架构,客户端模块FTP-CMD-Agent部署在内网区,服务器模块FTP-CMD-Server部署在DMZ区,详细作用如下。

图3 软件总体构想

FTP-CMD-Agent模块定时地获取FTP-CMD-Server队列中存储的从用户标准FTP客户端软件发送过来的操作命令,并转化为本地存储的读取操作,最后按照约定规范将操作结果推送给FTP-CMD-Server,再由FTP-CMD-Server交付给用户标准FTP客户端软件。

FTP-CMD-Server模块在标准FTP服务器软件的基础上增加了异步操作命令队列的FTP服务。它支持现有的标准FTP客户端软件,用于接收用户标准FTP客户端软件的数据操作命令,并将FTP-CMD-Agent模块返回的数据内容交付给用户标准FTP客户端软件。

通过将标准FTP服务器软件对本机磁盘文件的同步读取操作转化为异步读取内网区数据文件的操作,实现了数据文件的“接力传输”,避免了内网数据文件到DMZ区的“二次传输”,解决了数据重复存储与数据传输延迟大的问题。

4 软件模块与运行流程设计

该软件包含Server与Agent 2个模块,核心流程设计如图4所示。各模块中的功能组件与交互流程设计如下。

图4 核心流程设计

4.1 模块组件

4.1.1 Server模块

该模块部署在DMZ区服务器上,核心组件包含FTP-Server、Cmd-Queue、Cmd-Server、Data-Server以及Session-Map,各组件的具体功能设计如下。

FTP-Server:该组件实现了标准FTP协议,负责解析用户标准FTP客户端软件发送到DMZ区FTP服务器上的FTP命令,并根据命令的执行结果设置响应状态与数据。

Cmd-Queue:一个由参数控制长度的内存队列,由Golang语言的Channel实现,用于存放FTP-Server已接收到但尚未处理的FTP操作命令。

Cmd-Server:一个基于TCP协议实现的Socket服务,用于接收Agent模块发来的命令获取请求,并将需要Agent模块执行的命令按JSON字符串编码后以二进制流的形式进行响应。

Data-Server:一个基于TCP协议实现的Socket服务,用于接收Agent模块发来的已执行完毕命令的操作结果数据。结果数据以二进制流的形式传输。

Session-Map:一个基于内存的哈希表,用于存放FTP-Server的会话ID、FTP-Server与用户标准FTP客户端软件建立的Socket连接映射关系。

4.1.2 Agent模块

该模块部署在内网区服务器上,核心组件包含Cmd-Pull-Timer、Task-Queue、Task-Runner,各组件的具体功能设计如下。

Cmd-Pull-Timer:一个由定时器驱动的待执行FTP命令的轮询器。它主动连接Server模块的Cmd-Server组件,并将获取到的JSON格式编码的命令投递进入Task-Queue中。

Task-Queue:该组件是一个基于内存的队列,长度可以由参数控制,基于Golang Channel实现,用于存放已经解析完毕待执行器Task-Runner执行的任务。

Task-Runner:该组件从Task-Queue实时获取待执行的命令参数,执行获取到的命令并将响应结果推送到结果数据接收地址(Server模块的Data-Server组件)。

4.2 运行流程设计

如图4所示,一次完整FTP操作从用户标准FTP客户端软件发起请求到最后获取到结果数据的流程如下。

(1)用户标准FTP客户端软件连接FTP-Server组件。

(2)用户标准FTP客户端软件发送操作命令到FTP-Server组件。

(3)FTP-Server组件解析命令及参数,将命令按照JSON格式编码后投递到Cmd-Queue,并在Session-Map登记本次会话ID,与TCP Socket连接,之后暂时挂起本次会话等待处理,并设置等待超时计时器。

(4)Cmd-Pull-Timer组件定时轮询Cmd-Server。Cmd-Server从Cmd-Queue取出1条待执行命令,回复给Cmd-Pull-Timer。Cmd-Pull-Timer解析完毕收到的JSON格式命令后生成待执行任务JSON配置,并投递到Task-Queue。

(5)Task-Runner组件实时监听Task-Queue的变化,获取到任务经JSON配置后立即执行,并将执行的结果数据推送到Data-Server。

(6)Data-Server接收到Task-Runner推送的响应结果数据后,解析其中的FTP会话ID与数据内容,从Session-Map中查到与FTP会话ID对应的TCP Socket,最后由TCP Socket将数据内容返回给用户标准FTP客户端软件。

5 安全功能设计

为了进一步加强网络安全与数据安全,避免内网区数据文件被非法访问与截取,在软件设计过程中引入了SSL/TLS协议,用于建立可信的加密传输通道。FTP协议与SSL/TLS协议相结合实现加密传输[6],以加强数据文件传输的安全性,具体设计如下。

(1)为FTP-CMD-Server配置SSL/TLS协议支持。

使用Liunx系统中的Openssl软件工具生成数字证书与密钥[7],并设置DMZ区部署的FTP-CMD-Server启用该证书,以便正确处理使用SSL/TLS协议的连接。

(2)为FTP客户端配置SSL/TLS协议支持。

用户设置标准FTP客户端软件连接FTP-CMD-Server的协议为FTPS。设置完成后,客户端软件会使用SSL/TLS协议与FTP-CMD-Server建立安全的网络连接。

6 软件技术创新

6.1 “逆转”DMZ区访问内网区的网络连接

由于存在内网区只可单向访问DMZ区而DMZ区无法主动建立到内网区的网络连接的安全管控,用户访问DMZ区服务器下载数据文件时,需要有一个机制将DMZ区访问内网区的网络请求“逆转”为内网区访问DMZ区的请求。本文通过引入异步I/O、内存队列、超时器、轮询机制,使得DMZ区的FTP-CMD-Server不再主动连接内网区,改为缓存待处理的命令进行超时等待;内网区的FTP-CMD-Agent主动抓取待执行命令,将执行结果主动推送回FTP-CMD-Server。这种协作机制解决了“逆转”问题。

6.2 数据传输“接力”机制

FTP-CMD与标准FTP服务器软件相比,一次读取数据文件的操作被拆分成了2个执行阶段,由分别部署在内网区与DMZ区的FTP-CMD-Agent与FTP-CMD-Server协作完成。这就需要设计一个“接力”机制,确保命令操作的唯一性,以便数据可以被正确、完整地传输。本文通过UUID编码生成技术为每条FTP命令生成唯一的UUID标识,并将该标识关联到该命令使用的FTP会话、TCP Socket连接上,解决了FTP-CMD-Agent与FTP-CMD-Server接力过程中相互识别的问题。

6.3 数据传输拥塞控制机制

通常,内网区与DMZ区可使用的网络带宽资源是有限的,需要设计一个避免数据带宽被耗尽的机制。本文设计了数据队列容量参数与数据传输窗口参数,通过配置以上2个参数来控制FTP-CMD-Server模块与FTP-CMD-Agent模块之间可使用的最大带宽,避免出现数据传输拥塞。

7 软件运行效果

本节对使用本文所设计的软件后华风数据流程运行时效与数据存储使用情况进行了简要分析,结论证明:本软件可消除使用Rsync将内网数据存储中的文件定时同步到DMZ区的“二次传输”环节,从而在遵循安全管控的情况下解决了数据重复存储与数据延迟大的问题。

由图5与图6可见,使用WinSCP访问部署在DMZ区的Server模块读取到的数据文件列表的文件时间与直接访问内网区数据存储获取到的数据文件列表的时间完全一致。由于本软件默认设置了Cmd-Pull-Timer组件模块的轮询间隔为100 ms,所以实际的延迟仅为0.1 s,实际使用时也可以将Cmd-Pull-Timer组件模块的轮询间隔设置为更短的间隔,几乎达到0延迟的效果。

图5 DMZ区使用WinSCP访问Server模块获取到的文件列表

图6 DMZ区使用WinSCP访问Server模块获取到的文件列表

由于无需再使用RSYNC与Crontab将数据文件按照一定频率从内网数据存储中传输到DMZ区部署的FTP服务器硬盘上,而是转为在WinSCP发起FTP操作时通过网络直接读取内网数据存储中的数据文件,避免了为存储这些数据文件副本而造成的存储空间浪费,消除了RSYNC数据同步带来的任务等待时延(Linux系统下支持的最小间隔为1 min)与文件写盘时延。

8 结语

本文以单向网络通信管控场景中内网区存储的数据文件需要被“二次传输”到DMZ区后才可以向用户提供数据服务所面临的数据重复存储与数据传输延迟大的问题为研究对象,找到了解决上述问题的关键是消除数据“二次传输”环节。基于FTP协议设计了C/S架构的FTP-CMD软件,该软件通过FTP-CMD-Server与FTP-CMD-Agent配合成功消除了内网区数据文件到DMZ区的“二次传输”环节,其有效性经过了华风数据业务的验证。

该软件可以在遵守只能从内网区主动建立到DMZ区的网络连接的单向通信管控策略的前提下实现数据文件的高效分发。该软件兼容标准FTP客户端、SSL/TLS安全协议,兼顾了易用性与安全性,对于网络安全管理要求高、数据存储只能在内网区的业务场景有重要的参考价值。

猜你喜欢

数据文件客户端组件
无人机智能巡检在光伏电站组件诊断中的应用
新型碎边剪刀盘组件
U盾外壳组件注塑模具设计
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Vanconnect的智能家居瘦客户端的设计与实现
数据文件恢复专题问答
数据文件安全管控技术的研究与实现
SQL数据文件恢复工具
风起新一代光伏组件膜层:SSG纳米自清洁膜层