一种基于UDP协议的网络存储系统及方法与流程

文档序号:20488315发布日期:2020-04-21 21:50阅读:226来源:国知局
一种基于UDP协议的网络存储系统及方法与流程

本公开涉及数据的读取/写入技术领域,特别是涉及一种基于udp协议的网络存储系统及方法。



背景技术:

本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。

移动网盘(网络存储系统或者nas)是一种专业的文件存储工具,它除了具备传统移动硬盘功能外,借助于互联网具有类似云盘的功能。用户不需要把储存资料的实体磁盘带在身上,通过借助互联网(lan或者wan),通过专用app进行远程访问,上传、下载所存储的数据。

网络数据传输过程中难免会出现丢包、错误、乱序等。为克服这些影响,保证文件数据的完整到达,相比udp,tcp更适合传输,另外为了保证公网访问时的传输速率,厂商往往会采用p2p技术;而目前的公网环境下,udp更利于p2p实现。所以为兼顾二者,网盘实现时,内网传输中可以使用tcp,而公网传输中可以使用udp。但对开发者而言,需要同时维护两套代码逻辑分别处理tcp和udp传输,导致结构不清晰,也不利于维护。

为简化上层应用复杂度,目前大部分的网盘在内网中使用tcp传输,外网使用tcp+udp隧道的方式,从上层开发者角度看,只有tcp一种传输方式。但是外网使用tcp+udp隧道的方式会导致传输效率的降低,因为首先数据在发送/接收时都要进行两次组包/拆包过程,对于cpu性能相对较慢的嵌入式系统来讲,对性能影响会非常大;再者因为增加了隧道头会导致数据包中的有效数据占比降低。相对于使用cpu资源富裕的嵌入式系统实现nas而言,原有实现仅仅是现有技术的堆叠,而并没有对传输流程进行效率优化,性价比不高。

另外,在文件读/写方面,一般操作系统提供同步read()/write()接口,而接口内部若直接读/写读存储介质,速度非常慢,所以操作系统住往会在read()/write()与存储介质之间建立读/写缓存区。但是在很多资源受限的操作系统中往往没有缓存区,导致文件的存取速度非常慢。



技术实现要素:

为了解决上述问题,本公开提出了一种基于udp协议的网络存储系统及方法,基于udp通信及异步文件读/写的方式实现了移动网盘的基本功能,使用配套app通过lan或者wan,往移动网盘上传或者下载文件。基于udp协议进行可靠传输的实现方法,即降低了开发人员任务复杂度,又提升了系统传输效率,增加了产品的性价比;异步读/写的实现方法,有效提升了文件读写速度。

为了实现上述目的,本公开采用如下技术方案:

第一方面,本公开提供一种基于udp协议的网络存储系统,包括:访问控制模块、命令处理模块、传输控制模块和数据存取模块;

所述访问控制模块,用于接收认证请求,建立会话连接;

所述命令处理模块,获取操作请求,解析操作类型并执行该操作,返回执行结果;

所述传输控制模块,根据操作请求发送待读取的文件数据包,对待读取的文件数据包添加hup协议头,经由udp发送该文件数据包;根据操作请求接收待写入的文件数据包,并提取文件数据包的hup协议头,根据hup协议头中的序列号和校验码对数据进行校验;

所述数据存取模块,用于采用异步读/写接口完成对文件数据包的读取与写入。

作为可能的一些实现方式,所述建立会话连接包括:

接收认证请求,提取认证请求中的访问密码,并将其与本地密码对比,若一致,返回会话id,建立会话连接。

作为可能的一些实现方式,所述会话连接还包括,

采用周期性发送心跳数据的方式,监测会话连接状态,若在预定的周期内没有监测到心跳应答数据,则会话连接断开。

作为可能的一些实现方式,所述传输控制模块还包括发送命令数据包,命令数据包直接调用udp接口发送,所述命令数据包中的命令包括增加、删除、更改和查询。

作为可能的一些实现方式,所述hup协议头实现过程包括:

为不同的会话连接分配不同的会话id;

接收方对接收的数据进行应答,应答信息中包括当前可用于接收的窗口大小;发送方接收应答信息,实时更新窗口,采用滑动窗口的方式保证发送的数据量大小满足接收的窗口大小;

发送方发送数据时,填充ts值为当前的时间值;接收方接收带有时间戳的数据时,将ts值填充到应答信息中;发送方接收到应答信息后根据接收到的时间与ts值估算出往返时间rtt;

若发送方在发送数据后的预定时间段内未收到应答信息,则认为数据丢失,对数据重发。

作为可能的一些实现方式,读文件包括:

分配n+1字节的内存段,并将最后一字节flag置0,n为要读取文件的字节数;

调用异步读接口,并提供要读取文件的字节数、读取位置在文件中的偏移、存放读取结果的内存位置,所述内存位置为内存段的地址;

异步读接口生成一次读请求,并放入全局读/写队列;

顺序执行全局读/写队列中的读请求,并将执行完成的读请求的内存段中最后一字节flag置1,读文件完成。

作为可能的一些实现方式,写文件包括:

将写文件的数据暂放在临时内存段中;

当临时内存段的数据达到指定容量时,将该内存段的最后一字节flag置0,调用异步写接口;

异步写接口生成一次写请求,并放入全局读/写队列;

顺序执行全局读/写队列中的写请求,并将执行完成的写请求的内存段中最后一字节flag置1,写文件完成。

第二方面,本公开提供一种基于udp协议的网络存储方法,包括:

接收认证请求,建立会话连接;

获取操作请求,解析操作类型并执行该操作;

采用异步读/写接口对文件数据包的进行读取,根据操作请求发送待读取的文件数据包,对待读取的文件数据包添加hup协议头,经由udp发送该文件数据包;

采用异步读/写接口完成对文件数据包进行写入,根据操作请求接收待写入的文件数据包,并提取文件数据包的hup协议头,并根据hup协议头中的序列号和校验码对数据进行校验,返回执行结果。

与现有技术相比,本公开的有益效果为:

1、本公开基于udp协议进行可靠传输的实现方法,极大降低了开发、维护的复杂度,有效缩短了系统开发周期。

2、公网环境下,特别是对于cpu性能较弱的嵌入式系统,显著提升了文件传输效率。

3、相对于没有存储介质读/写缓存的操作系统实现,本公开基于异步读/写的实现方法提升文件读/写速率。

附图说明

构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。

图1为本公开系统结构示意图;

图2为本实施例中传输控制模块的传输帧格式示意图;

图3为本实施例中数据读/写示意图。

具体实施方式:

下面结合附图与实施例对本公开做进一步说明。

应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。

需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。

实施例1

移动网盘是一种特殊的专用数据存储服务器,包括存储器件(例如磁盘阵列、或可移动的存储介质等)和内嵌系统软件,可提供网络文件共享功能,通常在一个lan上占有自己的节点,用户可通过专用app,通过公网或者私网往网盘存取数据。

如图1所示,本实施例提供一种基于udp协议的网络存储系统,包括:

1、访问控制模块,主要包含:

(1)负责app与网盘之间身份的认证,用以建立会话连接;

(2)连接建立后,采用周期性发送“心跳“数据的方式,维持双方的连接;

(3)监控双方数据通信状态,若在约定的周期内监测不到对方数据,即认为连接断开。

具体实现过程为:

(1)建立会话连接:

用户app往网盘disk发送认证请求,请求中包含disk的访问密码;disk收到请求后提取命令中的密码与本地密码比对,若一致,则分配给用户app一个会话id(sessionid),建立会话连接;用户app发往disk的请求中都带有此会话id,作为身份的标识。

(2)连接状态检测

会话建立之后,此会话的app和disk端,分别记录最后一次收到对方数据的时间,后台检测线程,定时检测当前时间与最后一次接收的时间差,当时间差超过阈值,即10秒时,认为连接丢失;

另外,为保证双方在没有数据传输任务时仍能保持时间更新,双方维护周期为1s的心跳命令,app会每隔1秒钟往disk发送心跳命令,disk收到命令后便更新会话时间,并发送心跳应答给app。

2、命令处理模块:命令处理模块作为app与网盘间的操作接口,获取用户操作请求,解析出操作类型,执行该操作,最后将执行结果应答回对方。

3、传输控制模块:以udp为通信基础,即可以发送数据,也可以发送命令。

对于命令的发送直接调用udp接口发送;

对于数据的发送其工作流程如下:

(1)对于传送的数据,首先经过私有协议(huphigh-performanceudp)处理,对数据加上hup协议头部;hup协议头部中包含会话id、数据包序列号、校验码等,实现流控、重传等,保证传输的可靠性;

(2)带有hup头的数据包,经由udp发送;

(3)对方收到数据后经协议栈处理,提取出带有hup头的数据包;

(4)根据hup头中的序列号、校验码等判断数据是否出错或者重复等;并向发送方应答。

如图2所示为文件数据帧和命令帧格式,命令包括增、删、改、查;数据包括实际要读取或写入的数据包;

对于接收端,根据udp包载荷的第一字节区分是数据包还是命令包。若第一字节为”{“则表示命令包;否则为数据包。

所述hup协议基本原理实现包括:

(1)不同的会话连接并没有基于底层udp端口区分,而是以会话id区分,所以不同的会话连接分配使用相同的udp端口,分配不同的会话id;

(2)以滑动窗口的方式实现数据流量控制,接收方收到发送方发来的数据后,要对数据应答,应答中包含了当前可用于接收的窗口大小;发送方据接收方的应答信息,实时更新对方的窗口,每次发送的数据量不能超出对方接收窗口;

(3)发送方发送数据时,填充ts字段为当前的时间值;接收方每次收到有时间戳的数据包时,将包中携带的ts值填充到应答包中;发送方在收到应答后,根据收到的时间减去应答包中携带的ts值,估算出往返时间rtt;

(4)若发送方在发送数据包后的n*rtt时间内未收到应答,则认为数据丢失,对数据重发。

4、数据存取模块:数据存取模块根据用户上传或者下载的需求,使用异步读/写接口完成对文件数据的读取与写入,如图3所示,

假设用户要读取n*1000字节的文件,读文件过程如下:

(1)用户分配1000+1字节的内存段,最后一字节用于存放读取完成flag,并将第1001字节置0;

(2)用户调用异步读接口,并提供要读取的字节数、读取位置在文件中的偏移、存放读取结果的内存位置,即上步中的内存段地址;

(3)异步接口会生成一次读请求,并放入全局读/写队列;

(4)重复第(1)(2)步操作;

(5)文件系统底层驱动顺序执行全局读/写队列中读请求,每执行完一次读请求,就将该请求的内存段中最后一字节flag置1;

(6)用户在合适的时机检查(1)中内存段的flag是否为1;若为1,则表示读取成功,段中数据可用。

写文件过程如下:

(1)用户每次从网络上收到一段数据,先将其暂放在一段临时的内存段中;

(2)当内存段中的接收数据达到一定数量时,用户先将内存段的最后一字节flag置0,调用异步写接口;

(3)异步接口会生成一次写请求,并放入全局读/写队列;

(4)重复第(1)(2)步操作;

(5)文件系统底层驱动顺序执行全局读/写队列中写请求,每执行完一次写请求,就将该请求的内存段中最后一字节flag置1;

(6)用户在合适的时机检查内存段中的flag值;若为1,则表示写成功。

以上仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

上述虽然结合附图对本公开的具体实施方式进行了描述,但并非对本公开保护范围的限制,所属领域技术人员应该明白,在本公开的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本公开的保护范围以内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1