持久内存 - 🧩 图 432:TLS 安全通道建立示例分析(Figure 432) (第384页)
我们现在继续深入讲解 NVMe Base Specification 2.0b 第 8.13 节:NVMe over Fabrics 的安全机制,本页聚焦于 图 432:TLS 安全通道建立流程 和 NVMe In-band Authentication(带内认证)细节。
🧩 图 432:TLS 安全通道建立示例分析(Figure 432)
该图简化展示了主机与控制器之间使用 TLS 安全通道 建立连接并设置 NVMe 传输队列 的流程:
🔁 流程步骤解析:
| 步骤 | 操作 | 主体 | 说明 |
|---|---|---|---|
| 1 | TCP/TLS 会话协商 | 主机与控制器 | 双方通过 TLS 完成认证、加密参数协商,建立“结构安全通道”(Secure Channel) |
| 2 | Connect 命令交换 | 主机发起 → 控制器响应 | 设置 NVMe queue 并将主机与控制器关联起来 |
| 3 | 队列建立完成 | 双方 | 安全通道 + NVMe 传输队列均已准备完毕,可开始数据交换 |
🔐 NVMe 带内认证机制解析(In-band Authentication)
建立安全通道和队列之后,下一步就可能进入协议内部的“身份认证流程”,即所谓的 NVMe In-band Authentication。
🎯 认证的触发条件:Connect 响应中的 AUTHREQ 字段
- AUTHREQ 位字段(位于 Connect 响应 Capsule 中)决定了是否需要认证。
| AUTHREQ 状态 | 控制器行为 | 说明 |
|---|---|---|
全部为 0 |
无需认证 | 主机可立即发送所有命令 |
任意位为 1 |
需认证 | 控制器要求主机通过带内认证后,才允许执行 Fabrics / Admin / I/O 命令 |
📌 认证成功前的命令限制:
若认证未完成,控制器将拒绝除下列命令外的所有命令:
ConnectAuthentication SendAuthentication Receive
若主机提前发送其他命令,控制器将返回:
Authentication Required(需要认证)状态码。
✅ 认证成功后:
- 主机可使用与该队列类型相匹配的所有命令(如 Fabrics Admin 命令、I/O 命令等)
🔄 重新认证(Re-authentication)
主机可以随时重新发起认证事务(例如:更换凭据、刷新会话)。
- 若控制器返回
AUTH_Failure1: - 控制器应终止所有命令并断开连接,状态码为
Operation Denied - 若主机返回
AUTH_Failure2: - 主机应主动断开连接
🕓 超时处理机制(Authentication Transaction Timeout)
如果认证过程中由于长时间无响应,发生“认证事务超时”,控制器应终止该事务。
⏳ 判断依据:
| 条件 | 判断方式 |
|---|---|
| Keep Alive Timer 启用 | 使用 Keep Alive Timeout 字段设定的时间(参见 Figure 380) |
| Keep Alive Timer 未启用 | 默认超时为 2 分钟 |
🧱 不同超时场景的处理方式:
| 场景 | 控制器行为 |
|---|---|
| 初次认证时超时 | 视为认证失败,终止 NVMe Fabrics 连接 |
| 重新认证时超时 | 不视为认证失败,但主机若继续发送认证命令,控制器应返回 Command Sequence Error |
📝 小结:Connect 后的认证行为总览
| 动作 | 是否允许 | 说明 |
|---|---|---|
| Connect 成功后立即发命令 | ❌(若 AUTHREQ ≠ 0) |
需完成认证才能继续 |
| Authentication Send/Receive | ✅ | 用于交换身份验证协议报文 |
| Fabrics / Admin / I/O 命令 | ❌(若未认证) | 会被控制器拒绝 |
| 认证成功后 | ✅ | 所有支持的命令均可使用 |
| 重新认证失败(由控制器通知) | ❌ | 控制器断开连接 |
| 认证事务超时 | ⚠️ | 初次视为失败;再次则不判失败但命令失败 |
如果你需要我继续解释: - 图 433 开始的 Authentication Send/Receive 命令结构 - 或者具体的状态码、错误处理策略 - 亦或想以中文案例场景方式理解认证机制
都可以继续告诉我,我可以继续带你深入解读第 8.13 节剩余部分!