RFC 3720 互联网小型计算机系统接口(iSCSI)协议
工作组:网络工作组请求注解编号:3720类别:标准跟踪协议作者:J. Satran、K. Meth(IBM)、C. Sapuntzakis(思科系统)、M. Chadalapaka(惠普公司)、E. Zeidner(IBM)发布时间:2004 年 4 月
备忘录状态
本文档规定了适用于互联网社区的标准跟踪协议,同时征集社区对协议的改进意见与讨论。有关本协议的标准化状态及相关信息,可参考最新版《互联网官方协议标准》(STD 1)。本备忘录的分发不受限制。
版权声明
版权所有 © 互联网协会(2003)。保留所有权利。
摘要
本文档描述了一种运行在 TCP 协议之上的互联网小型计算机系统接口(iSCSI)传输协议。iSCSI 协议旨在完全兼容标准化的 SCSI 架构模型,实现了 SCSI 协议在 IP 网络中的传输适配。
SCSI 是一类应用广泛的协议族,可实现系统与 I/O 设备(尤其是存储设备)的通信。SCSI 协议属于请求 / 响应型应用协议,具备统一的标准化架构模型和基础命令集,同时针对磁盘、磁带、介质转换器等不同设备类型也定义了专属的标准化命令集。
随着系统互连方式从传统总线结构向网络结构演进,SCSI 协议需适配网络传输协议。当前 IP 网络已能满足高速系统互连的性能要求,是承载 SCSI 协议的理想载体。
1. 引言
小型计算机系统接口(SCSI)是一套广泛用于 I/O 设备(尤其是存储设备)通信的协议族,采用客户端 - 服务器架构。SCSI 接口的客户端被称为发起端(Initiator),发起端会向服务器端的组件(即目标端的逻辑单元)发送 SCSI “命令” 以请求服务。SCSI 传输层负责将客户端 - 服务器模式的 SCSI 协议映射到特定的互连网络,发起端和目标端分别为 SCSI 传输层的两个端点。
SCSI 协议已实现多种传输层的适配,包括并行 SCSI、IPI、IEEE-1394(火线)以及光纤通道等,但这些传输方式均为 I/O 专用,且传输距离受限。
本文档定义的 iSCSI 协议,实现了 SCSI 数据包在 TCP/IP 协议栈(详见 [RFC791]、[RFC793]、[RFC1035]、[RFC1122])上的传输,提供了可互操作的解决方案,能够充分利用现有互联网基础设施、网络管理工具,同时突破传统 SCSI 传输的距离限制。
2. 定义与缩写词
2.1 定义
- 别名(Alias):可与 iSCSI 节点关联的字符串,用于为 iSCSI 名称绑定便于组织识别的友好标识,但不能替代 iSCSI 名称的唯一性作用。
- 连接标识(CID,Connection ID):会话内连接的唯一标识,由发起端生成,在登录请求和关闭连接的注销请求阶段提交给目标端。
- 连接(Connection):即一条 TCP 连接。发起端与目标端的通信可通过一条或多条 TCP 连接完成,iSCSI 协议数据单元(PDU)会在 TCP 连接中承载控制消息、SCSI 命令、参数及数据。
- iSCSI 设备:采用 iSCSI 服务交付子系统的 SCSI 设备。根据 [SAM2] 定义,服务交付子系统是传输 SCSI 命令与响应的机制。
- iSCSI 发起端名称:用于标识发起端的全球唯一名称。
- iSCSI 发起端节点:即 “发起端”。在上下文存在歧义时,文档会将 “发起端” 明确限定为端口或设备;未作限定的 “发起端”,其含义需结合上下文判断,可指发起端端口或发起端设备。
- iSCSI 层:负责构建和接收 iSCSI PDU,并通过构成发起端 - 目标端 “会话” 的一条或多条 TCP 连接完成 PDU 的转发与接收。
- iSCSI 名称:iSCSI 发起端或目标端的唯一标识名称。
- iSCSI 节点:代表单个 iSCSI 发起端或目标端,一个网络实体中可包含一个或多个 iSCSI 节点。iSCSI 节点可通过一个或多个网络门户被访问,其标识为自身的 iSCSI 名称。iSCSI 名称与节点所用地址解耦,支持多个节点共用同一地址,也允许同一节点使用多个地址。
- iSCSI 目标端名称:用于标识目标端的全球唯一名称。
- iSCSI 目标端节点:即 “目标端”。
- iSCSI 任务:需要目标端返回响应的 iSCSI 请求。
- iSCSI 传输方向:以发起端为参照定义,出站(Outbound)或传出(Outgoing)传输指数据从发起端到目标端,入站(Inbound)或传入(Incoming)传输指数据从目标端到发起端。
- 发起端会话标识(ISID):会话标识符的发起端部分,由发起端在登录阶段明确指定。
- I_T 连接(I_T nexus):根据 [SAM2] 定义,I_T 连接是 SCSI 发起端端口与 SCSI 目标端端口之间的关联关系。在 iSCSI 中,该关系对应一个会话,即 iSCSI 发起端会话端点(SCSI 发起端端口)与 iSCSI 目标端门户组的关联。I_T 连接可通过 SCSI 端口名称组合标识,其标识符为元组(iSCSI 发起端名称 +',i,'+ISID,iSCSI 目标端名称 +',t,'+ 门户组标签)。
- 网络实体(Network Entity):可从 IP 网络访问的设备或网关,必须具备一个或多个网络门户,实体内部的 iSCSI 节点可通过这些门户接入 IP 网络。
- 网络门户(Network Portal):网络实体的组成部分,具备 TCP/IP 网络地址,实体内部的 iSCSI 节点可通过其建立 iSCSI 会话内的连接。发起端的网络门户通过 IP 地址标识,目标端的网络门户则通过 IP 地址和监听的 TCP 端口标识。
- 发起方(Originator):在协商或数据交换过程中,主动发起协商或交换的一方。
- 协议数据单元(PDU,Protocol Data Unit):发起端与目标端将通信内容拆分为消息单元,这类消息被称为 “iSCSI 协议数据单元”。
- 门户组(Portal Groups):iSCSI 支持在同一会话内建立多条连接,部分实现方案可将同一会话的连接分布到多个网络门户。门户组指 iSCSI 网络实体中,能够协同支持跨门户会话的一组网络门户。并非门户组内的所有网络门户都需参与该门户组承载的每个会话。一个 iSCSI 节点可通过一个或多个门户组被访问,且节点内每个网络门户仅隶属于一个门户组。
- 门户组标签(Portal Group Tag):16 位数值,用于标识 iSCSI 节点内的门户组,同一节点内门户组标签相同的网络门户属于同一门户组。
- 恢复型 R2T(Recovery R2T):目标端通过摘要错误、序列错误或序列接收超时等方式检测到一个或多个 Data-Out PDU 丢失后,生成的 Ready To Transfer(R2T)报文。恢复型 R2T 会携带未使用的下一个 R2T 序列号(R2TSN),但会请求此前 R2T(R2TSN 更小)已请求过的数据段的全部或部分内容。
- 响应方(Responder):在协商或数据交换过程中,对发起方的请求做出响应的一方。
- SCSI 设备:根据 SAM2 定义,SCSI 设备是包含一个或多个 SCSI 端口、接入服务交付子系统且支持 SCSI 应用协议的实体。例如,SCSI 发起端设备包含一个或多个发起端端口及零个或多个应用客户端;目标端设备包含一个或多个目标端端口及一个或多个设备服务器和关联的逻辑单元。在 iSCSI 中,SCSI 设备是 iSCSI 节点内提供 SCSI 功能的组件,一个 iSCSI 节点内最多仅能存在一个 SCSI 设备,且仅能在 iSCSI 正常业务会话中访问该设备。SCSI 设备名称等同于节点的 iSCSI 名称。
- SCSI 层:负责构建和接收 SCSI 命令描述块(CDB),并将 CDB 及其他命令执行参数(详见 [SAM2])转发至 iSCSI 层或从 iSCSI 层接收相关数据。
- 会话(Session):连接发起端与目标端的一组 TCP 连接的集合,大致等同于 SCSI 的 I_T 连接。TCP 连接可在会话中动态添加或移除,发起端在同一会话的所有连接上看到的目标端视图一致。
- SCSI 发起端端口:对应 iSCSI 正常业务会话的一个端点。iSCSI 正常业务会话由发起端节点与目标端节点通过登录流程协商建立,登录成功后,SCSI 发起端设备内会生成一个 SCSI 发起端端口。该端口的名称与标识符均由 iSCSI 发起端名称、标识其为发起端端口的标签以及会话标识符的 ISID 部分共同构成。
- SCSI 端口:根据 SAM2 定义,SCSI 端口是 SCSI 设备中用于与服务交付子系统交互、提供 SCSI 功能的实体。iSCSI 中 SCSI 发起端端口与目标端端口的定义存在差异。
- SCSI 端口名称:由 UTF-8 字符(详见 [RFC2279])构成,包含 iSCSI 名称、标识发起端 / 目标端的 'i'/'t' 字符,以及 ISID 或门户组标签。
- SCSI 目标端端口:对应 iSCSI 目标端门户组。
- SCSI 目标端端口名称与标识符:均由 iSCSI 目标端名称、标识其为目标端端口的标签以及门户组标签共同构成。
- 会话标识符(SSID,Session ID):iSCSI 发起端与目标端之间的会话由会话标识符唯一标识,该标识符为元组,包含发起端部分(ISID)和目标端部分(目标端门户组标签)。ISID 由发起端在会话建立时明确指定,目标端门户组标签则由发起端在建立连接时通过选择 TCP 端点隐式确定。当发起端提供目标端名称时,目标端需在连接建立阶段返回 TargetPortalGroupTag 参数以确认门户组标签。
- 目标端门户组标签:iSCSI 目标端门户组的 16 位数值标识符。
- 目标端会话标识句柄(TSIH,Target Session Identifying Handle):目标端为与特定名称发起端的会话分配的标签,在会话建立阶段生成。协议未定义其内部格式与内容,但保留值 0 由发起端用于标识新会话。在为同一会话建立额外连接时,发起端需向目标端提供该句柄。
2.2 缩写词
| 缩写词 | 英文全称 | 中文释义 |
|---|---|---|
| 3DES | Triple Data Encryption Standard | 三重数据加密标准 |
| ACA | Auto Contingent Allegiance | 自动关联从属 |
| AEN | Asynchronous Event Notification | 异步事件通知 |
| AES | Advanced Encryption Standard | 高级加密标准 |
| AH | Additional Header(非 IPsec 的 AH) | 附加头部(非 IPsec 认证头部) |
| AHS | Additional Header Segment | 附加头部段 |
| API | Application Programming Interface | 应用程序编程接口 |
| ASC | Additional Sense Code | 附加感知码 |
| ASCII | American Standard Code for Information Interchange | 美国信息交换标准代码 |
| ASCQ | Additional Sense Code Qualifier | 附加感知码限定符 |
| BHS | Basic Header Segment | 基础头部段 |
| CBC | Cipher Block Chaining | 密码块链接模式 |
| CD | Compact Disk | 光盘 |
| CDB | Command Descriptor Block | 命令描述块 |
| CHAP | Challenge Handshake Authentication Protocol | 挑战握手认证协议 |
| CID | Connection ID | 连接标识 |
| CO | Connection only | 仅连接 |
| CRC | Cyclic Redundancy Check | 循环冗余校验 |
| CRL | Certificate Revocation List | 证书吊销列表 |
| CSG | Current Stage | 当前阶段 |
| CSM | Connection State Machine | 连接状态机 |
| DES | Data Encryption Standard | 数据加密标准 |
| DNS | Domain Name Server | 域名服务器 |
| DOI | Domain of Interpretation | 解释域 |
| DVD | Digital Versatile Disk | 数字通用光盘 |
| ESP | Encapsulating Security Payload | 封装安全载荷 |
| EUI | Extended Unique Identifier | 扩展唯一标识符 |
| FFP | Full Feature Phase | 全功能阶段 |
| FFPO | Full Feature Phase only | 仅全功能阶段 |
| FIM | Fixed Interval Marker | 固定间隔标记 |
| Gbps | Gigabits per Second | 千兆比特每秒 |
| HBA | Host Bus Adapter | 主机总线适配器 |
| HMAC | Hashed Message Authentication Code | 哈希消息认证码 |
| I_T | Initiator-Target | 发起端 - 目标端 |
| I_T_L | Initiator-Target-LUN | 发起端 - 目标端 - 逻辑单元号 |
| IANA | Internet Assigned Numbers Authority | 互联网号码分配机构 |
| ID | Identifier | 标识符 |
| IDN | Internationalized Domain Name | 国际化域名 |
| IEEE | Institute of Electrical & Electronics Engineers | 电气和电子工程师协会 |
| IETF | Internet Engineering Task Force | 互联网工程任务组 |
| IKE | Internet Key Exchange | 互联网密钥交换 |
| I/O | Input-Output | 输入输出 |
| IO | Initialize Only | 仅初始化 |
| IP | Internet Protocol | 互联网协议 |
| IPsec | Internet Protocol Security | 互联网协议安全 |
| IPv4 | Internet Protocol Version 4 | 互联网协议第 4 版 |
| IPv6 | Internet Protocol Version 6 | 互联网协议第 6 版 |
| IQN | iSCSI Qualified Name | iSCSI 限定名称 |
| ISID | Initiator Session ID | 发起端会话标识 |
| ITN | iSCSI Target Name | iSCSI 目标端名称 |
| ITT | Initiator Task Tag | 发起端任务标签 |
| KRB5 | Kerberos V5 | Kerberos 第 5 版 |
| LFL | Lower Functional Layer | 下层功能层 |
| LTDS | Logical-Text-Data-Segment | 逻辑文本数据段 |
| LO | Leading Only | 仅主导连接 |
| LU | Logical Unit | 逻辑单元 |
| LUN | Logical Unit Number | 逻辑单元号 |
| MAC | Message Authentication Codes | 消息认证码 |
| NA | Not Applicable | 不适用 |
| NIC | Network Interface Card | 网络接口卡 |
| NOP | No Operation | 空操作 |
| NSG | Next Stage | 下一阶段 |
| OS | Operating System | 操作系统 |
| PDU | Protocol Data Unit | 协议数据单元 |
| PKI | Public Key Infrastructure | 公钥基础设施 |
| R2T | Ready To Transfer | 准备传输 |
| R2TSN | Ready To Transfer Sequence Number | 准备传输序列号 |
| RDMA | Remote Direct Memory Access | 远程直接内存访问 |
| RFC | Request For Comments | 请求注解 |
| SAM | SCSI Architecture Model | SCSI 架构模型 |
| SAM2 | SCSI Architecture Model-2 | SCSI 架构模型第 2 版 |
| SAN | Storage Area Network | 存储区域网络 |
| SCSI | Small Computer Systems Interface | 小型计算机系统接口 |
| SN | Sequence Number | 序列号 |
| SNACK | Selective Negative Acknowledgment/Sequence Number Acknowledgement for data | 选择性否定确认 / 数据序列号确认 |
| SPKM | Simple Public-Key Mechanism | 简单公钥机制 |
| SRP | Secure Remote Password | 安全远程密码 |
| SSID | Session ID | 会话标识 |
| SW | Session Wide | 会话范围 |
| TCB | Task Control Block | 任务控制块 |
| TCP | Transmission Control Protocol | 传输控制协议 |
| TPGT | Target Portal Group Tag | 目标端门户组标签 |
| TSIH | Target Session Identifying Handle | 目标端会话标识句柄 |
| TTT | Target Transfer Tag | 目标端传输标签 |
| UFL | Upper Functional Layer | 上层功能层 |
| ULP | Upper Level Protocol | 上层协议 |
| URN | Uniform Resource Names | 统一资源名称 |
| UTF | Universal Transformation Format | 通用转换格式 |
| WG | Working Group | 工作组 |
2.3 约定
在示例中,“I->” 表示发起端发送的 iSCSI PDU,“T->” 表示目标端发送的 iSCSI PDU。
本文档中 “MUST(必须)”“MUST NOT(禁止)”“REQUIRED(必需)”“SHALL(应)”“SHALL NOT(不应)”“SHOULD(建议)”“SHOULD NOT(不建议)”“RECOMMENDED(推荐)”“MAY(可)”“OPTIONAL(可选)” 等关键词的释义,遵循 BCP 14 [RFC2119] 的规定。
iSCSI 消息(PDU)的图示遵循如下示例格式:(注:原文图示格式因排版限制简化,核心为字节与比特编号的标注规则)
图示包含字节和比特编号,且遵循以下表示与排序规则:
- 字规则:一个字包含 4 个连续字节。当字存储数值时,视为基于二进制的无符号数,最低编号字节(如字节 0)的比特 0 对应 2^31,比特 1 对应 2^30,依次类推,最低编号字节 + 3(如字节 3)的比特 7 对应 2^0。字的十进制和十六进制表示均映射此二进制位权。
- 半字规则:一个半字包含 2 个连续字节。当半字存储数值时,视为基于二进制的无符号数,最低编号字节(如字节 0)的比特 0 对应 2^15,比特 1 对应 2^14,依次类推,最低编号字节 + 1(如字节 1)的比特 7 对应 2^0。半字的十进制和十六进制表示映射此二进制位权。
- 字节规则:所有 PDU 的字节按编号递增顺序发送和接收(即网络字节序)。当字节存储数值时,视为基于二进制的无符号数,比特 0 对应 2^7,比特 1 对应 2^6,依次类推,比特 7 对应 2^0。
(因文档篇幅极长,以下章节仅保留核心逻辑与关键内容的翻译,完整协议细节可参考原文 RFC 3720)
3. 概述
3.1 SCSI 核心概念
SCSI 架构模型第 2 版 [SAM2] 详细定义了 SCSI I/O 协议族的架构,本节简要介绍 SCSI 架构的核心术语,帮助读者理解协议基础。
SCSI 是一套用于向 I/O 设备(包括硬盘、磁带机、光盘驱动器、打印机、扫描仪等)请求服务的接口族,单个 I/O 设备在 SCSI 术语中被称为逻辑单元(LU)。
SCSI 采用客户端 - 服务器架构,客户端为发起端,发起端向服务器端(即目标端)的逻辑单元发送 SCSI “命令” 请求服务,逻辑单元上的设备服务器负责接收并处理 SCSI 命令。
SCSI 传输层将客户端 - 服务器模式的 SCSI 协议映射到特定互连网络,发起端和目标端分别为传输层的两个端点。一个目标端可包含多个逻辑单元,每个逻辑单元在目标端内有唯一地址,即逻辑单元号(LUN)。
一个SCSI 任务可是单个 SCSI 命令或一组关联的 SCSI 命令。部分逻辑单元支持多个待处理(排队)任务,任务队列由逻辑单元管理,目标端通过发起端提供的任务标签区分不同任务,同一任务中任一时刻仅能有一个命令处于未完成状态。
每个 SCSI 命令执行后会经历可选的数据阶段和必选的响应阶段。数据阶段中,数据可从发起端流向目标端(如写操作)、从目标端流向发起端(如读操作)或双向流动;响应阶段中,目标端返回操作的最终状态,包含可能的错误信息。
** 命令描述块(CDB)** 是发起端向目标端发送的、承载命令参数的数据结构,其内容和格式由 [SAM2] 及设备类型专属的 SCSI 标准定义。
3.2 iSCSI 核心概念与功能概述
iSCSI 协议是 SCSI 远程过程调用模型(详见 [SAM2])在 TCP 协议上的映射,SCSI 命令通过 iSCSI 请求承载,SCSI 响应和状态通过 iSCSI 响应承载,同时 iSCSI 协议机制也采用请求 - 响应模式实现。
除非另有说明,本文档中 “发起端” 和 “目标端” 分别指 “iSCSI 发起端节点” 和 “iSCSI 目标端节点”(详见 3.4.1 节 iSCSI 架构模型)。
与同类协议一致,发起端和目标端将通信内容拆分为消息单元,即iSCSI 协议数据单元(PDU)。
为提升性能,iSCSI 支持 “阶段合并”:命令及其关联数据可从发起端一次性发送至目标端,目标端也可将数据与响应合并发送。
iSCSI 传输方向以发起端为参照,出站传输为发起端到目标端,入站传输为目标端到发起端;iSCSI 任务是需要目标端返回响应的 iSCSI 请求。
本文档中 “iSCSI 请求”“iSCSI 命令”“请求”“命令(无修饰)” 含义相同;除非另有说明,“状态”“响应”“编号响应” 含义相同。
3.2.1 分层与会话
iSCSI 的概念分层模型用于规范发起端和目标端的行为,以及 PDU 的收发逻辑:
- SCSI 层:构建和接收 SCSI 命令描述块(CDB),并将 CDB 及其他命令执行参数(详见 [SAM2])传递至 iSCSI 层,或从 iSCSI 层接收相关数据;
- iSCSI 层:构建和接收 iSCSI PDU,通过一条或多条 TCP 连接完成 PDU 转发与接收,这些 TCP 连接共同构成发起端 - 目标端的会话。
发起端与目标端通过一条或多条 TCP 连接通信,TCP 连接承载 iSCSI PDU 中的控制消息、SCSI 命令、参数及数据。连接发起端与目标端的一组 TCP 连接构成会话(大致等同于 SCSI 的 I_T 连接,详见 3.4.2 节 SCSI 架构模型),会话由包含发起端部分和目标端部分的会话标识符唯一标识。会话内的每条连接由 ** 连接标识(CID)** 唯一标识,TCP 连接可在会话中动态添加或移除。
发起端在同一会话的所有连接上看到的 “目标端视图” 一致,LUN 等目标端标识元素在会话内统一;目标端在同一会话的所有连接上看到的 “发起端视图” 也一致,发起端任务标签等标识元素在会话内全局唯一。
iSCSI 发起端和目标端必须至少支持一条 TCP 连接,可支持同一会话内多条连接。出于错误恢复需求,仅支持会话内单条活跃连接的目标端和发起端,若错误恢复级别为 2 则必须支持恢复阶段的双连接,若错误恢复级别低于 2 则建议支持双连接。
3.2.2 排序与 iSCSI 编号机制
iSCSI 采用命令编号、状态编号和数据排序三种编号方案,保障协议传输的有序性和可靠性:
- 命令编号:会话级编号,用于多连接场景下的命令有序投递,同时可作为会话内命令流控的机制;
- 状态编号:连接级编号,用于在临时或永久通信错误下检测并恢复丢失的状态响应;
- 数据排序:命令级或命令分段(R2T 触发的序列)级编号,用于检测因头部摘要错误导致的数据 PDU 或 R2T PDU 丢失。
PDU 中的字段会在发起端与目标端之间传递序列号,当连接上的流量为单向时,可通过 iSCSI NOP-Out/In PDU 同步目标端和发起端的命令与状态排序计数器。
iSCSI 会话抽象等价于 SCSI 的 I_T 连接,可为 SCSI 发起端到目标端的命令提供有序投递能力。关于 iSCSI 会话模型的设计考量,以及其与 SCSI 命令排序特性的关联,详见 [CORD]。
4. iSCSI 的 SCSI 模式参数
iSCSI 无专属的 SCSI 模式页。
5. 登录与全功能阶段协商
iSCSI 参数可在会话或连接建立阶段通过登录请求 / 响应 PDU 协商,也可在全功能阶段通过文本请求 / 响应 PDU 协商,协商均采用 iSCSI 文本键值对(key=value)的形式,下文简称 “键”。
键分为声明型和协商型,键的描述会明确其类型:声明型键由声明方设定值,协商型键需双方通过提案与确认完成参数选定,多数键支持发起端和目标端作为提案方。
登录流程分为安全协商阶段和操作参数协商阶段,两个阶段均为可选,但至少需完成其中一个阶段以配置必要参数。若启用安全协商阶段,则需先完成安全协商,再进入操作参数协商阶段,阶段切换由登录 PDU 头部的 T(Transition)位控制。
文本协商用于全功能阶段的参数协商或声明,协商流程由 PDU 头部的 F(Final)位控制,发起端通过 F 位标识协商结束意愿,目标端通过 F 位确认协商终止。若键值对无法在单个 PDU 中承载,可通过 C(continuation)位标识后续 PDU 为当前键值对的延续。
6. iSCSI 错误处理与恢复
6.1 概述
iSCSI 错误恢复机制的设计源于两大需求:一是 iSCSI PDU 可能通过 TCP 层接收但摘要校验失败,需支持此类 PDU 的恢复;二是 TCP 连接可能在数据传输中任意时刻失效,需支持活跃任务在同一会话的其他 TCP 连接上继续执行。
iSCSI 定义了四类错误恢复等级,等级越高恢复能力越强,且高等级包含低等级能力:
- 0 级:仅支持会话恢复,即关闭所有连接、终止任务并重建会话;
- 1 级:在 0 级基础上增加摘要故障恢复,包含命令内恢复(如请求重传丢失数据)和连接内恢复(如重传未确认命令);
- 2 级:在 1 级基础上增加连接恢复,即连接故障时可通过任务管理命令将任务迁移至新连接;
- 各级恢复能力为递进关系,支持高等级恢复的实现需同时支持低等级能力。
6.2 重试与连接关联重分配
- 命令重试:发起端可通过重发 iSCSI 命令 PDU,填补目标端命令序列号的间隙(如因摘要错误丢弃的命令导致的间隙)。重试命令需携带原发起端任务标签、原操作属性及原命令序列号,且仅能在原连接上发送(原连接已注销的除外);
- 连接关联重分配:发起端通过 “任务重分配” 任务管理请求,为连接故障的命令重新分配连接关联。重分配前需先完成原连接的注销,目标端若支持该功能,应从命令当前状态继续执行,否则返回不支持的响应。
6.3 各类错误的处理流程
针对摘要错误、格式错误、序列错误、SCSI 超时、协商失败、协议错误、连接故障、会话错误等不同类型的错误,iSCSI 定义了专属的检测和恢复流程,如摘要错误可通过 SNACK 请求重传或 R2T 恢复,连接故障可通过连接恢复或会话恢复完成业务续跑。
7. 状态转换
iSCSI 连接和会话在生命周期内会经历多个明确的状态,文档通过状态图和状态转换表定义了连接和会话的状态机:
- 连接状态机:分为标准连接状态机和连接清理状态机,标准状态机包含空闲(FREE)、传输等待(XPT_WAIT)、传输建立(XPT_UP)、登录中(IN_LOGIN)、已登录(LOGGED_IN)、注销中(IN_LOGOUT)、注销请求中(LOGOUT_REQUESTED)、清理等待(CLEANUP_WAIT)等状态;
- 会话状态机:发起端会话状态包含空闲(FREE)、已登录(LOGGED_IN)、故障(FAILED),目标端会话状态在此基础上增加活跃(ACTIVE)、继续中(IN_CONTINUE)等状态,会话状态转换由连接状态变化和协议事件触发。
8. 安全考量
传统存储系统因部署环境封闭,安全风险较低,但 SCSI 协议在 IP 网络上的传输需解决身份认证、数据机密性和完整性等安全问题。iSCSI不应在无安全配置的环境下部署,仅在无安全风险的封闭环境可例外,完整安全机制可参考 [RFC3723]。
iSCSI 采用两层安全机制:
- 带内认证:登录阶段通过 CHAP(必选实现)、SRP、Kerberos 等方式完成发起端与目标端的身份认证,防止未授权访问;
- IPsec 保护:在 IP 层通过 ESP 协议提供数据完整性、认证和机密性保护,必须支持 HMAC-SHA1(完整性)和 3DES-CBC(机密性)算法,可结合 IKE 完成密钥协商。
9. 实现者注意事项
本文档针对多网卡部署、ISID 的保守复用、自动感知(Autosense)与自动关联从属(ACA)、iSCSI 超时、同步与导向层性能、状态相关设备与长时 SCSI 操作等场景,为 iSCSI 协议实现者提供了具体的设计和优化建议,保障协议部署的稳定性和高性能。
10. iSCSI PDU 格式
所有 iSCSI PDU 的多字节整数均采用网络字节序(大端序),未定义位和保留字段必须置零,接收端必须忽略未定义位和保留字段。
iSCSI PDU 由一个或多个头部段(基础头部段 BHS 为固定 48 字节,可附加额外头部段 AHS)、可选的数据段、可选的头部摘要和数据摘要构成,PDU 需填充至 4 字节整数倍长度。
文档详细定义了 SCSI 命令 PDU、SCSI 响应 PDU、任务管理请求 / 响应 PDU、数据 PDU(Data-Out/Data-In)、R2T PDU、异步消息 PDU、文本请求 / 响应 PDU、登录请求 / 响应 PDU、注销请求 / 响应 PDU、SNACK 请求 PDU、Reject PDU、NOP-Out/NOP-In PDU 等 10 余类 PDU 的具体格式和字段含义。
11. iSCSI 安全文本键与认证方法
登录阶段的安全协商阶段仅允许使用 SessionType、InitiatorName、TargetName、TargetAddress、InitiatorAlias、TargetAlias、TargetPortalGroupTag、AuthMethod 及认证方法专属键,其他键禁止使用。
AuthMethod 用于协商认证方法,支持的类型包括 CHAP(必选实现)、Kerberos V5、SPKM1/2、SRP 及无认证(None),文档详细定义了各类认证方法的协商流程和交互步骤。
12. 登录 / 文本操作文本键
iSCSI 定义了 HeaderDigest、DataDigest、MaxConnections、SendTargets、TargetName、InitiatorName 等 20 余类操作文本键,用于协商会话和连接的核心参数,如摘要算法、最大连接数、目标端 / 发起端名称、数据突发长度、错误恢复等级等。不同键的适用阶段(登录阶段 / 全功能阶段)、作用范围(会话级 / 连接级)和协商规则各不相同。
13. IANA 考量
IANA 为 iSCSI 分配了默认 TCP 端口 3260(系统端口为 860,不可默认使用),并维护 iSCSI 扩展键注册表、认证方法注册表和摘要算法注册表,用于协议扩展的标准化管理,文档定义了扩展项的命名规范、注册流程和技术要求。
附录
文档附录包含固定间隔标记的同步与导向方案、读写操作等协议交互示例、登录阶段协商示例、SendTargets 操作流程、错误恢复类的算法实现、各类事件对目标端对象的清理影响等内容,为协议实现提供了补充说明和参考案例。
致谢、作者地址与版权声明
(注:因篇幅限制,此部分内容保留原文核心信息,具体可参考 RFC 3720 原文)
本协议由设计团队联合开发,众多社区成员通过评审和建议为文档完善提供了支持。作者分别来自 IBM、思科、惠普等机构,文档版权归互联网协会所有,遵循 BCP 78 的相关规定,同时明确了知识产权相关声明。
537

被折叠的 条评论
为什么被折叠?



