高速可靠的单向传输系统的研究与设计∗
2020-05-15崔文超何张鑫吴克河张宪康崔阿军
崔文超 何张鑫 吴克河 李 为 张宪康 崔阿军
(1.华北电力大学控制与计算机工程学院 北京 102206)(2.国家电网甘肃省电力公司 兰州 730050)
1 引言
计算机网络不断快速发展,对我们生活和工作产生了重大的影响,推动着社会进步。互联网平台衍生出的诸如文档上传下载数据传输、即时通信等服务应用,为人们的信息交换和共享提供了极大的便利。但是对于军政企事业机关单位、银行金融等特殊的行业来说,其业务数据往往涉及到国家政策方针战略、国家军事发展、经济发展等核心机密内容,因此这些重要部门网络的信息安全尤为重要[1]。
单向传输系统采用“2+1”的架构,由两个完全独立的主机系统和单向传输通道组成,两个主机网络之间切断所有通用的网络协议,通过用户制定的私有协议,在两个主机之间进行数据交换。而且单向传输系统信息单向传输,可以完全保证不同安全等级间网络的信息安全[2~3]。
由于单向传输系统只有单向传输的通路,没有交互的控制协议,数据的容错控制就是一个大问题。而且,在高速传输过程中面临着传输误差,拥塞连续丢包的问题[4]。基于单向传输系统的这种特性,需要制定一些策略来提高传输的可靠性,如此才能在实际应用中不会影响各个企业单位的工作业务。
本文研究了一些传统的可靠性控制策略,然后主要介绍对单向传输系统的设计。通过实验证明,相比一般的单向传输系统,本文设计的系统能够在高速复杂的网络环境下具有更高的传输可靠性,而且保持较高的效率。
2 传统控制策略
1)人工方式
一般制定传输的私有协议,在目的主站接收到消息后,按照协议解析报文得到数据。此时若数据无法解析成功或者部分数据不匹配,说明传输错误,直接将错误报告上层,即接收方工作人员。该工作人员再通过其他方式通知发送方重新发送消息。
这种人工方式虽然实现简单,一定程度上保证了传输的可靠性,但极大耗费人力物力,同时效率较低。
2)冗余校验方式[5]
发送方为了保证数据的正确,在降低效率的前提下,增加数据的冗余度。比如定间隔地把一份数据重复地再发送两次,接收方比较收到的三个副本,取其两个是相同的。“三取二”是重要系统中常用的控制方式,还可以采用五取三等方式。也可以在数据中增加块校验码,如CRC校验等。
这种方式提高了单向传输系统的容错性,但冗余度较高,效率比较低,在数据规模比较大的时候,对企业单位工作会有较大的影响。
3)双机冗余方式
通过硬件冗余方式,即搭建两套一模一样的单向传输系统。在两套系统中都记录完善的发送和接收日志,通过定期比对两套系统内网的接收日志和外网发送日志判断丢包情况,及时反馈重新发送[6]。
这种方式减小了人力资源,但大大增大了硬件成本,对硬件资源紧缺的项目是不适用的。
3 系统设计
根据第1节可以发现传统的单向传输可靠性策略往往会有资源或者效率方面的限制,而且可靠性程度不高。相比一般的单向传输系统,本文设计的系统主要有两点改进:一是在系统中添加了编码、解码模块,提高了传输可靠性;二是采用PF_RING设计数据转发模块,提高传输效率。为了充分利用系统资源,本文设计基于PF_RING的多线程并发的数据包处理框架,如图1所示。
图1 基于PF_RING的数据包处理框架
3.1 编码、解码模块设计
如图2所示,本文设计分别在外网和内网主机添加编码和解码模块。
图2 CRS编码、解码设计
CRS编码是对基于范德蒙矩阵的RS码的改进,RS编码算法复杂度较高,其解码算法复杂度为O(n3)。而CRS编码方式相对于RS编码降低了矩阵求逆的复杂度,并且将GF(2w)域中的元素转换成二进制矩阵,简化了乘法运算,其解码算法复杂度为O(n(n+m))[7~8]。
在外网主机,编码模块从数据包队列中接收到n个原始数据包,对n个原始数据包编码后得到m个冗余数据包。将n+m个数据包用私有协议封装,得到一个数据包数量为n+m的传输组[9]。假设n个源数据包矩阵为D=(D1,D2,…,Dn),编码后的矩阵为((D1,D2,…,Dn,C1,C2,…,Cn),用二进制矩阵表示的CRS编码过程如图3所示。
图3 CRS编码过程
在内网主机,解码模块接收到一组数据后,根据私有协议得到data字段中的数据,将传输组数据进行CRS解码操作,得到原始数据包。假设图3编码后的数据包传输组在传输过程中丢失部分数据包,得到矩阵S,其中包含数据包((D1,D3,D4,C1,C2)。根据其在矩阵B中的位置提取对应的行,得到矩阵B′,接下来通过矩阵变换(B′)-1*S=D得到原始矩阵[10]。只要每个传输组丢失数据包数量小于m个,CRS编码都能够还原出传输组数据包。此时传输过程中的冗余度为m/(n+m),传输效率为n/(n+m),相比传统的冗余传输策略大大减小了冗余度,提高了传输效率。
3.2 数据转发模块设计
本文设计基于PF_RING设计数据转发模块。其一是因为应用CRS编码的编码、解码模块通过冗余传输会产生大量的冗余数据。冗余数据会占用大量带宽和系统资源,影响系统效率;其二是因为传统的libpcap机制捕获数据包需要在内核与用户空间多次拷贝,在高速复杂的环境下性能不足,数据传输速率下降,还会发生丢包现象[11]。
系统使用PF_RING接口开发数据转发模块进行捕获和转发数据包。PF_RING机制实现“零拷贝”,数据不经过Linux内核,数据包存储和处理都在用户态下进行。这样极大地提高了数据包的传输速率,减小CPU的消耗,减小冗余数据对带宽的影响[12~13]。
PF_RING在高速捕包时可以把数据包分发到多个缓冲区,实现多线程处理,提高系统对数据包的并处理能力[14]。本文使用多线程来提高主机编码、解码的速率,外网主机的数据处理过程如图4所示。PF_RING循环抓包,同时根据分配策略将数据包分发到不同线程,当整个传输组都被接收后CRS解码模块进行解码。针对主机CPU多核的情况,为了充分利用CPU性能,将每一个线程绑定到一个 CPU 核[15]。
图4 外网数据处理过程
4 实验与总结
4.1 单向传输系统的测试拓扑图和环境配置
本文搭建“2+1”的单向传输系统,外部终端通过单向传输系统向内部主站发送消息,数据包经过外部主站的CRS编码后由转发模块发往内部主机,内部主机接收到数据包经过解码发送到内部主站测试拓扑如图5所示。
图5 测试拓扑图
本文在实际环境中进行实验和分析,具体的实验测试环境如表1所示。
表1 环境配置
4.2 Libpcap和PF_RING对比
为了证明PF_RING相比libpcap能够提高系统的传输效率和降低传输的丢包率,本文在不同的发包速率下,测试分别用libpcap和PF_RING设计数据转发模块的丢包情况和实际传输速率。
设置数据包大小为1000bytes,测试从20Mb/s~700Mb/s的发包速率情况下的丢包率,实验结果如图6所示。
图6 libpcap和PF_RING不同发包速率下的丢包率
设置数据包大小为1000bytes,测试从20Mb/s到700Mb/s不同发包速率情况下的实际网络数据包传输速率,实验结果如图7所示。
图7 libpcap和PF_RING不同发包速率下的实际传输速率
根据以上实验可以发现,采用libpcap捕获机制的网卡在高速网络情况下,数据的实际传输速率会有影响,还有明显的丢包现象;而采用PF_RING捕获机制的网卡在高速网络环境下受到的影响较小,依然能保持高效的传输效率,也极大改善libp⁃cap的丢包情况。
由此可以证明利用PF_RING技术能够减小CRS编码传输过程中造成的带宽的损失,同时降低丢包率。由此证明本文设计的单向传输系统相比一般的系统具有更高的传输效率和可靠性。
4.3 有无编码、解码模块的单向传输系统的可靠性实验
在PF_RING数据转发模块下进行实验,在高速环境下来测试传输系统的丢包情况。根据上一个实验结果,设计数据包大小为1000bytes,在发送速率分别为400Mb/s、500Mb/s、600Mb/s、700Mb/s的情况下,分别实验有无编码、解码模块下的丢包情况,设置此时源数据包为5,冗余数据包为3。通过设置数据包大小和每秒数据包数量控制发包速率,实验次数100,每次发送数据大小超过2GB,结果取平均值。实验结果如图8所示。
图8 有无编码、解码模块的丢包率
由图8的实验可以发现在加入编码、解码模块后,极大降低了系统高速网络环境下的丢包情况。所以可以证明通过CRS编码能很大程度上提高传输系统在高速网络中的传输可靠性。由此证明本文设计的单向传输系统具有较高的传输可靠性。
4.4 总结
经过以上两个实验可以得出结论,在高速网络环境下,本文设计的单向传输系统能够有效降低丢包率,提高传输可靠性,相比其他系统传输效率和运行效率都有很大程度的提高。
5 结语
本文研究单向传输系统的可靠性机制,设计在系统中加入编码、解码模块,提高传输可靠性;基于PF_RING设计的数据转发模块有效减小了冗余数据对系统的影响,大大提高系统效率,也一定程度提高了可靠性。
该系统在高速的网络中提高传输的可靠性,同时尽量减小对业务效率的影响,对单向传输系统的研究有一定的价值。本文没有对CRS编码在不同冗余度下的传输可靠性进行研究,而冗余度的大小对系统资源和传输效率都有影响,在以后的研究中需要进一步讨论。