Internet 小型计算机系统接口(iSCSI)是一种基于 TCP/IP 的协议,用来建立和管理 IP 存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。SAN 使得 SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。
SCSI 结构基于客户/服务器模式,其通常应用环境是:设备互相靠近,并且这些设备由 SCSI 总线连接。iSCSI 的主要功能是在 TCP/IP 网络上的主机系统(启动器 initiator)和存储设备(目标器 target)之间进行大量数据的封装和可靠传输过程。此外,iSCSI 提供了在 IP 网络封装 SCSI 命令,且运行在 TCP 上。
如今我们所涉及的 SAN (Storage Area Network),其实现数据通信的主要要求是:1. 数据存储系统的合并;2. 数据备份;3. 服务器群集;4. 复制;5. 紧急情况下的数据恢复。另外,SAN 可能分布在不同地理位置的多个 LANs 和 WANs 中。必须确保所有 SAN 操作安全进行并符合服务质量(QoS)要求,而 iSCSI 则被设计来在 TCP/IP 网络上实现以上这些要求。
iSCSI 包含四个组成部分:
- iSCSI 地址和命名规则:在网络实体中,iSCSI 节点是 SCSI 设备在网络中可用的标识符,每个 iSCSI 节点都有一个独一无二的名称(其长度最多可以达 255 个字节),这种名称是根据 Internet 节点的命名规则进行命名的。
- iSCSI 会话管理:iSCSI 会话由登录阶段(Login Phase)和工作阶段(Full Feature Phase)两部分构成,由特殊命令完成。
- iSCSI 差错处理:由于在 IP 网络,特别是在 WAN 中实施 iSCSI 会经常出现数据传输错误现象,iSCSI 协议可以提供错误处理方法。
- iSCSI 安全性:由于 iSCSI 工作在数据可能被非法访问的网络,该协议允许使用不同安全性途径。
协议结构
iSCSI PDU 结构:
| 8 | 16 | 24 | 32bit |
| Basic Header Structure (BHS) | |||
| Additional Header Structure 1 (AHS) (optional) | |||
| … | |||
| Additional Header Structure n (AHS) (optional) | |||
| Header Digest (optional) | |||
| Data Segment (optional) | |||
| Data Digest (optional) | |||
iSCSI BHS 格式:
| 8 | 16 | 24 | 32bit | |||
| . | I | Opcode | F | Opcode-specific fields | ||
| Total AHS Length | Data Segment length | |||||
| Opcode-specific fields or Logic Unit Number (LUN) (8 bytes) | ||||||
| Initiator Task Tag (4 bytes) | ||||||
| Opcode-specific fields (28 bytes) | ||||||
- I ― 请求 PDU,I位设置为1,是一个立即传送标记。
- Opcode ― Opcode 表示头封装采用的 iSCSI PDU 类型。Opcode 被分为两类 Initiator Opcode 和 Target Opcode。Initiator Opcode 位于 PDU 中,由 Initiator(请求 PDU)发送。Target Opcode 位于 PDU,由 Target(响应 PDU)发送。
- Final (F) Bit ― 设置为1时,表示序列中的最后一个(或唯一一个) PDU。
- Opcode-Specific Fields ― 对于不同的 Opcode 类型,这些字段具有不同的含义。
- TotalAHSLength ― 表示4字节字单元(包括间隙)中所有 AHS 头分段的总长。
- DataSegmentLength ― 指数据段有效载荷字节长(不包括间隙)。只要 PDU 没有数据段,DataSegmentLength 值必须为0。
- LUN ― 有些 Opcode 运行在特定逻辑单元上。逻辑单元号(LUN)字段用于识别逻辑单元。如果 Opcode 与逻辑单元无关,那么该字段可以被忽略或用于 Opcode 特定方式下。
- Initiator Task Tag ― Initiator 为每个 iSCSI 任务分配一个 Task Tag。该标签用于唯一识别任务会话
相关协议:SCSI、iFCP、FCP、FCIP、mFCP、TCP
组织来源:ISCSI 由 IETF (http://www.ietf.org/)定义。
相关链接:
http://www.javvin.com/protocol/rfc3347.pdf: Small Computer Systems Interface protocol over the Internet (iSCSI) Requirements and Design Considerations
http://www.javvin.com/protocol/draft-ietf-ips-iscsi-20.pdf: iSCSI (iSCSI protocol specification draft)


