一、前言
ISCSI(INTERNET SCSI)是由Internet Engineering Task Force(IETF)开发的网络存储标准,目的是为了用IP协议将存储设备连接在一起。通过在IP网上传送SCSI命令和数据,ISCSI推动了数据在网际之间的传递,同时也促进了数据的远距离管理。由于其出色的数据传输能力,ISCSI协议被认为是促进存储区域网(SAN)市场快速发展的关键因素之一。因为IP网络的广泛应用, ISCSI能够在LAN,WAN甚至INTERNET上进行数据传送,使得数据的存储不再受地域的现在。
计算机行业面临严峻的考验,信息数据呈几何级别地增长,迅速地填满了系统内一切可用的存储空间。传统的解决办法就是安装一套光纤存储区域网络(FCSAN)。在SAN环境下,所有的服务器将被整合到一个存储池内,共享所有的资源,用户可根据服务器的实际需求来分配资源。而且,用户还可以扩大逻辑分区的容量大小,为应用程序分配一个临时的磁盘分区,等任务结果之后,再将这部分资源重新收回来,归还存储池。然而成本昂贵,是部署光纤存储区域网络的最大缺点。如果用户想将一台服务器接入到FCSAN当中,需要购买一个主机总线适配器(售价约在1,000美元左右),而且,光纤交换机每增加一个端口,需要花费800~4,000美元不等,具体数目视情况而定。这还不算什么,最糟糕的情况就是,当你花了一大笔钱之后,才发现你从A供应商那儿购买的主机总线适配器、B供应商那儿购买的磁盘阵列、C供应商那儿购买的交换机竟然是不兼容的,无法构筑一套光纤网络。众所周知,光纤设备的互操作性一向是不太稳定的。除非你按照厂商提供的SAN硬件兼容器件单去采购,否则,网络即使部署起来了,可能也无法正常运作。
ISCSI技术横空出世,使情况大为改观,它的价格不仅较光纤系统便宜许多,而且管理起来更加方便。ISCSI依然支持标准的TCP/IP协议,也就是说,用户可使用标准的千兆级以太网传输协议,通过Cat5线缆和任意的交换机产品,将服务器与磁盘阵列连接在一起,并且能够提供接近FC SAN的性。
二、iSCSI技术
1、ISCSI的发展史
2、ISCSI的技术细节
首先介绍一下SCSI的体系结构
SCSI-3标准的SCSI模型
该模型定义了各层的概念,实体和他们之间的相互作用,他规定了服务/客户机模型中initiator和target。
SCSI Initiatorand Target Interaction
SCSI Command Descriptor Block(CDB)
ISCSI术语
在ISCSI中使用网络实体这个概念,网络实体指的是连接IP网络的设备或网关。网络实体必须包含一个或多个网络入口,在一个网络实体中的ISCSI节点能够用其中的任意一个网络入口访问IP网络。ISCSI节点实在网络实体中用名称标识的initiator或target。一个SCSI设备就是该节点的ISCSI名称。
网络入口也是网络实体的重要组成部分。对initiator来说网络入口就是他的IP地址。对target来说,其IP地址和TCP端口就是他的网络入口
下图是ISCSI服务器和客户端的组成部分
当initiator和target通信时,他们之间通过网络端口建立连接,initiator和target之间的多个连接建立一个会话。
命名和寻址
ISCSI协议为initiator和target定义了一套命名和寻址方法。所有的ISCSI节点都是通过他的ISCSI名称被标识的。这种命名方式使得ISCSI名称不会与主机名混淆。共有两种ISCSI命名格式:iqn (iSCSIqualifier name) 和 IEEE EUI。Iqn的格式如下:iqn.1987-05.com.Cisco.00.9f9ccf185aa2508c7a168967ccf96e0c.target1.
通过ISCSI名称,可以做到:
1、 多个initiator和target共享一个IP地址。
2、多个initiator和target可以通过多个IP地址被访问。
3、 为节点通过防火墙进行访问提供了一种方式。
ISCSI协议除了对ISCSI名称进行区分大小写的比较外,对ISCSI名称不做任何处理。
ISCSI协议遵循标准的IP寻址规范 域名:端口号。域名可以使IPV4和IPV6地址,也可以是域名。对ISCSItarget,端口号可以随地址指定,如果不指定,默认为3260
ISCSI协议
ISCSI协议是将SCSI的远程过程调用(rpc)映射到IP协议的过程。ISCSI协议提供了独立于他所携带的SCSI CDB的层的概念。ISCSI请求传递SCSI命令,ISCSI响应处理SCSI响应和状态。
与SCSI协议一样,ISCSI也使用initiator和target的概念。传送的信息被称为协议数据单元(PDUs)。同样的,对initiator来说,传输方向是分别定义的。为了提高性能,ISCSI允许命令或响应及其相关数据在单独的iSCSIPDU中传输。
ISCSI会话
ISCSI initiator和target之间最高级别的通讯路径就是他们之间的会话。ISCSI定义了两种方式的会话:正常的操作会话和initiator发现target的发现会话。
会话是通过会话ID进行标识,他由initiator和target组成。在一个会话中,TCP连接可以加入,也可以移出,所有的连接都是在同一个initiator和target中。所有在一个会话中的连接都共享一个连接ID。
ISCSI会话是通过ISCSI登录建立的,该会话被用来标识到某个具体SCSI I_T连接的所有TCP连接。同一个会话里可能有一个或多个连接。当initiator通过默认端口或指定端口与target建立连接时,登录过程就开始了,initiator和target互相认证并建立安全协议。在登录阶段,ISCS Iinitiator和target会协商建立多种连接属性。
ISCSI序列
ISCSI协议使用多个寄存器来维护命令,状态和数据的顺序。每个寄存器是一个32位的无符号的整数计数器。寄存器的数量是由initiator和target在iSCSI PDU中进行交流,initiator和target还会用NOP-OUT/IN PDU去同步顺序和寄存器数量。
命令编号
在ISCSI会话中,所有的命令都用命令序列号进行编号,命令序列号用来保证命令按顺序传送,而不管它是通过那个TCP连接传送的。命令序列开始于第一个登录命令,并随后续的命令而增加。ISCSI目标层负责将命令按命令序列号的顺序送到ISCSI层。除了需要立即传送的命令除外,在这种情况下,命令序列号不会增加,ISCSI目标层会立即将他传送到ISCSI层。
状态标号
与命令序列号一样,状态响应也用状态序列号进行编号。
数据顺序
数据和传输请求PDUs通过数据序列号寄存器和传输请求寄存器进行排序,以此来保证数据的顺序传送。对于读操作,数据序列号从0开始,以后每次增加1。对于写操作,数据序列号从0开始,以后每次增加1。
iSCSI PDUs
TCP对于ISCSI包的有效载荷是PDUs。所有的iSCSI PDUs都以一个或多个报头开始,其后跟着0或数据段。
第一个段为基本报头段,48字节,其他段跟在其后,基本报头段是必须的,其他是可选的
iSCSI PDUs的类型包括ISCSI的请求和响应,文本的请求和响应,登录的请求和响应等,以下是一个ISCSI请求命令的头格式。
ISCSI的错误处理
错误恢复的重要部分时保留足够的状态信心以此来恢复数据。ISCSI用两种方式来处理错误:重做和再分派。Initiator会重复传送丢失的数据PDU。再分派指initiator和targe之间的TCP连接中断的情况下的,initiator通过一个新的连接发送再分配连接任务,使得targe能够在一个新的连接ID继续命令的传送。
ISCSI过程
登录初始化
登录是在initiator和targe之间建立会话,互相交换同意操作参数。
认证和参数协商
如果需要认证,协商将在交换操作参数前进行,当认证成功完成后,initiator就能够进行参数协商,
连接
当targe接受initiator的连接时,连接建立。
注销和关闭
注销是为了断开连接,由initiator发起,targe也可因为内部错误而产生断开信息。注销后,将不再有请求和响应产生,
安全考虑
在ISCSI中,存储信息是通过开放的IP网络进行传输,所以必须考虑安全问题,
认证
在ISCSI中,target可能需要认证initiator,而initiator也可能需要认证target,共有以下几种认证方式:
• KRB5 Kerberos V5
• SPKM1 Simple public-key genericsecurity service (GSS) application programming interface(API) mechanism
• SPKM2 Simple public-key GSS APImechanism
• SRP Secure Remote Password
• CHAP Challenge HandshakeAuthentication Protocol
• None 无认证
包保护
包保护是为了保证ISCSI节点之间通信的完整,经过认证,保密。在IP层,通过IPSec提供交换的私密性。通过用3DES对IPSec 隧道进行加密,来提供通信的机密性。