一种基于数据链路层协议的高速网络存储方法
技术领域
本发明涉及一种高速网络存储实现方法,特别涉及一种基于数据链路层协议的高速网络存储方法。
背景技术
传统网络区域存储SAN采用ISCSI方式如图1所示,数据传输处理封包层级有应用层、虚拟存储层物理层、ISCSI层、网络层、数据链路层和物理层。传统网络存储数据包,是基于TCP/IP协议为基础的,在以太网环境下,TCP/IP协议是建立在数据链路层协议之上的二层封装。数据链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值,TCP/IP也不例外,以太网的MTU是1500字节。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1472字节。如果数据部分大于1472字节,就会出现数据包分片现象,IP数据报最大长度可达65535字节。但是只要IP数据大于链路层MTU的1500字节就会把IP数据报分成多个分片传输。ISCSI以及其他基于网络层协议为基础的虚拟存储其传输过程中经常都是分片传输的,其封装格式如图2所示。ISCSI和其他基于IP SAN的网络存储,在传输时候,一个IP数据报内的有效数据长度一般都大于MTU限定的范围,数据链路层都会进行分片,分片后的每个IP数据报分片数据链路层再添加上以太封装RFC894后,分包在链路层进行实际的数据传输。在ISCSI和其他基于IP SAN的网络存储中,数据都是IP数据报的方式输入,数据区域大小按块设备最小要求最少是512个字节,最大65536字节。经常的IP数据报的长度都会大于1472字节的数据链路层数据的净荷(payload),这样IP数据报就会首先分片成多个IP数据报分片的方式,然再加入以太封装RFC894,在链路层传输,其传输封装流程图如图3所示。ISCSI和其他基于IP SAN的网络存储,一个IP数据报内的有效数据长度一般都大于MTU限定的范围,数据链路层都会对他进行分片,分片后的每个IP数据报分片链路层再添加上以太封装RFC894后,分包在链路层进行实际的数据传输,因为有IP数据报和IP数据报分片,增加了计算机处理数据压力,降低了数据的传输速度。
综上所述,有必要提供一种高速网络存储方法来降低计算机处理数据压力,提高数据传输速度。
发明内容
有鉴于此,本发明要解决的技术问题在于提供一种基于数据链路层协议的高速网络存储方法,用以降低计算机处理数据压力,提高数据传输速度,解决数据链路层协议传输无连接、数据不可靠的问题。
本发明通过以下技术手段解决上述技术问题:
本发明提供了一种基于数据链路层协议的高速网络存储方法,包括以下步骤:
用户在客户端应用层发起读写命令;
所述读写命令被传输到虚拟存储层;
虚拟存储层将所述读写命令传输到高速存储内核层,所述高速存储内核层将所述读写命令进行分片并处理,得到高速网络数据报,并将高速网络数据报下传到数据链路层处理,所述高速网络数据报由目的MAC地址、源MAC地址、协议类型、数据区和CRC组成,且采用MAC寻址;
数据链路层将接收到所述高速网络数据报发送给物理层;
物理层接收到所述数据链路层发送的高速网络数据报,进行客户端网络传输。
进一步,所述高速存储内核层将读写命令分成1500个字节的分片;
进一步,将所述读写命令分片并处理得到高速网络数据报,包括以下步骤:
把源地址和目的地址设置为客户端和服务端网卡的地址;
根据所述读写命令的不同设置不同的自定义协议类型;
将所述分片处理的数据封装到链路层数据包里;
计算数据区的校验和,存储到CRC中;
进一步,所述数据链路层通过源MAC地址和目的MAC地址实现寻址的步骤包括:
客户端高速存储内核层对接收到的虚拟存储层发送的数据进行分片和数据链路层封包,所述据链路层封包类型为自定义0x4337(read)、0x8337(write),区别其他标准封包类型;
客户端数据链路层根据前一步骤所述封包的目的MAC地址为目标,将含有虚拟存储数据的链路层数据包发送给服务端;
服务端接收客户端发送的所述含有虚拟存储数据的数据链路层封包;
服务端解包所述含有虚拟存储数据的链路层数据包,服务端进行数据读取操作或写入操作;
服务端高速存储内核层对所述读取操作或写入操作返回状态指示,进行数据链路层封包,所述据链路层封包类型为自定义0x4337(read)、0x8337(write),区别其他标准封包类型;
数据链路层根据前一步骤所述封包的目的MAC地址为目标,将含有虚拟存储数据的链路层数据包发送给客户端;
客户端收到服务端的应答,完成一个封包处理;
进一步,所述高速网络数据报采用数据链路层封包类型来区分读操作和写操作。
本发明的有益效果:本发明的数据传输封包层级用高速存储内核层代替传统的网络存储SAN的网络层和ISCSI层,高速网络数据报由类型和数据区组成,相比于传统IP数据报省去了IP首部和UDP首部,就多出了28字节,使每个高速网络数据报所携带的最大数据区长度为1500字节,基于数据链路层协议的高速网络存储的携载荷能力与传统基于IP的网络存储比较,在理论上提高了1.867%。存储区域网络服务器大量计算资源用于网络数据传输处理,高速网络数据报的传输处理精简了判断分片和数据报分片步骤以及载荷能力的提高,降低了服务器处理网络数据的CPU损耗。
附图说明
下面结合附图和实施例对本发明作进一步描述。
图1为传统网络存储堆栈示意图;
图2为基于数据链路层协议的高速网络存储堆栈示意图;
图3为基于网络层协议的虚拟存储传输封装格式示意图;
图4为IP数据报在数据链路层传输封装流程图;
图5为本发明高速网络读数据报格式示意图;
图6为本发明高速网络写数据包格式示意图;
图7为本发明高速网络数据报在数据链路层传输封装流程图;
图8为本发明数据链路层实现数据寻址流程图。
具体实施方式
以下将结合附图对本发明进行详细说明:
基于数据链路层协议的高速网络存储方式如图4所示,数据传输处理封包层级为应用层、虚拟存储层、高速存储内核层、数据链路层和物理层。用户在客户端应用层发起读写命令;该读写命令被传输到虚拟存储层;虚拟存储层将所述读写命令传输到高速存储内核层,所述高速存储内核层将所述读写命令进行分片处理,并将所述分片处理得到的数据封装成数据链路层数据包,得到高速网络数据报,并标注读写状态标志,再将标注有读写状态标志的高速网络数据报下传到数据链路层处理;数据链路层将接收到所述标注有读写状态标志的高速网络数据报发送给物理层;物理层接收到所述数据链路层发送的标注有读写状态标志的高速网络数据报,进行客户端网络传输。
作为上述技术方案的进一步改进,如图5、图6所示,数据链路层传输的高速网络数据报,高速网络数据报由目的MAC地址、源MAC地址、协议类型、数据区和CRC组成,相比于传统IP数据报省去了IP首部和UDP首部,因此就多了IP首部的20字节和UDP首部的8字节。
作为上述技术方案的进一步改进,每个高速网络数据报所携带的最大数据区长度为1500字节,基于数据链路层协议的高速网络存储的携载荷能力在理论上提高了1.867%。
作为上述技术方案的进一步改进,将分片的数据封装成链路层数据包,得到高速网络数据报的步骤如下:
把源地址和目的地址设置为客户端和服务端网卡的地址;
根据所述读写命令的不同设置不同的自定义协议类型;
将所述分片处理的数据封装到链路层数据包里;
计算数据区的校验和,存储到CRC中。
高速网络数据报在数据链路层上传输,采用0x4337类型表示网络存储读请求;采用0x8337类型表示网络存储写请求。数据传输完全采用以太封装RFC894为基础,每次传输的数据区永远不超过MTU限制的1500字节,当传输大量数据时,高速存储内核层结合数据链路层驱动会自动将数据分片成MTU限制大小的多个数据帧格式。完全避免了IP数据报封包、IP数据报分片这两个过程,其传输封装流程图如图7所示,高速网络数据报直接将数据传到以太封装RFC894,与传统网络存储数据包传输封装相比,判断分片和数据报分片的步骤被精简了。对于频繁使用的网络存储,精简数据包传输封装步骤以及分片步骤,提高了传输效率,降低了CPU损耗。
传统的IP数据报在1472字节数据区中,用一个标志来表示读写,会占用数据区空间。高速网络数据报采用数据链路层封包类型来区分读操作和写操作,减少了数据占用,同时直接在数据链路层就区分了是读数据包,还是写数据包。
如图8所示,数据链路层通过源MAC地址和目的MAC地址实现数据寻址处理步骤为:
步骤一,客户端高速存储内核层对接收到的虚拟存储层发送的数据进行分片和数据链路层封包,数据链路层封包类型为自定义0x4337(read)、0x8337(write)类型,区别其他标准封包类型。
步骤二,数据链路层根据步骤一所述数据链路层封包的MAC地址为目标,发送上述自定义0x4337(read)、0x8337(write)链路层封包类型的含有虚拟存储数据的数据链路层数据包给服务端。
步骤三,在服务端,程序接收到客户端自定义0x4337(read)、0x8337(write)链路层封包类型,对其进行缓冲。
步骤四,对接收到的含有虚拟存储数据的数据链路层数据包进行解包,服务端按需进行数据读取或写入操作。
步骤五,服务端高速存储内核层对含有虚拟存储数据的数据链路层数据包进行读取操作或写入操作返回状态指示,进行数据链路层封包,数据链路层封包类型为自定义0x4337(read)、0x8337(write)链路层封包类型,区别其他标准封包类型。
步骤六,数据链路层根据步骤五封包的目的MAC地址为目标,发送自定义0x4337(read)、0x8337(write)链路层封包类型的含有虚拟存储数据的链路层数据包的客户端。
步骤七,客户端收到服务端的应答,完成第一个封包处理,返回到步骤一重复执行步骤一至步骤七。
最后说明的是以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。