🔍 数据包完整内容
0000 1b 00 10 09 22 8b 8b 9b ff ff 00 00 00 00 09 00
0010 00 02 00 02 00 02 03 1f 00 00 00 55 53 42 43 10
0020 09 22 8b 00 02 00 00 80 00 0a 28 00 00 00 00 00
0030 00 00 01 00 00 00 00 00 00 00
⚙️ 一、READ(10) 命令结构解析
READ(10) 是 SCSI 协议中的标准读命令,用于请求存储设备(如 U 盘)返回指定扇区的数据。其结构如下:
字段 | 偏移 | 值 (十六进制) | 含义 |
---|---|---|---|
操作码 (Opcode) | 0x2A | 28 | READ(10) 命令标识符 9 |
LBA 地址 | 0x2B-0x2E | 00 00 00 00 | 起始扇区号(LBA 0,即 MBR) |
传输长度 | 0x2F-0x30 | 00 01 | 读取 1 个扇区(512 字节) |
控制码 | 0x31 | 00 | 保留字段 |
✅ 关键点:
-
0x28
是 READ(10) 的固定操作码,明确标识此命令为读取请求 。- LBA 地址
00 00 00 00
表示从磁盘的第一个扇区(MBR 位置)读取数据 。- 传输长度
00 01
表示读取 1 个扇区(即 512 字节的 MBR 数据)。
🔧 二、数据包上下文分析
此数据包是 USB Bulk-Only Transport (BOT) 协议中的 CBW(Command Block Wrapper)结构,用于封装 SCSI 命令:
- CBW 签名:
- 偏移
0x1C-0x1F
:55 53 42 43
(ASCII "USBC"),标识 CBW 结构 。
- 偏移
- 数据方向:
- 偏移
0x24
:80
表示数据从设备传输到主机(即读操作)。
- 偏移
- SCSI 命令长度:
- 偏移
0x28
:0A
表示后续 SCSI 命令长度为 10 字节(即 READ(10))9
。
- 偏移
📂 三、MBR 读取机制
- MBR 位置:
存储设备的第一个扇区(LBA 0),包含引导代码和分区表 。 - 主机请求流程:
- 主机通过 Bulk-OUT 端点发送此 CBW 包,内含 READ(10) 命令。
- 设备通过 Bulk-IN 端点返回 MBR 的 512 字节数据 。
- MBR 结构:
- 前 446 字节:引导代码。
- 中间 64 字节:分区表(4 个分区条目)。
- 最后 2 字节:结束标志
0x55AA
。
💎 总结
- 数据包性质:
✅ 此包是 READ(10) 命令的 CBW 封装,用于请求读取 U 盘的 MBR 数据。 - 核心字段验证:
- 操作码
0x28
、LBA=0、长度=1 扇区,符合 MBR 读取标准 。
- 操作码
- 后续响应:
设备需返回 512 字节的 MBR 数据,包含引导代码、分区表及结束标志0x55AA
。
SCSI命令分类与功能表
命令类型 | 操作码 (Hex) | 命令名称 | 功能描述 | 适用标准 |
---|---|---|---|---|
读写命令 | 0x08 | READ(6) | 读取指定逻辑块地址(LBA)的6字节寻址数据块 | SBC-3 |
0x28 | READ(10) | 读取10字节寻址数据块(支持更大容量设备) | SBC-3 | |
0x88 | READ(16) | 扩展至16字节寻址,适用于超大容量存储设备 | SBC-4 | |
0x0A | WRITE(6) | 写入6字节寻址数据块 | SBC-3 | |
0x2A | WRITE(10) | 写入10字节寻址数据块 | SBC-3 | |
控制命令 | 0x1B | START/STOP UNIT | 启动或停止设备(如光驱托盘弹出/关闭) | SPC-4 |
0x35 | SYNCHRONIZE CACHE | 将缓存数据强制写入物理介质,确保数据持久化 | SBC-3 | |
0x04 | FORMAT UNIT | 低级格式化设备(清除所有数据并重置参数) | SBC-3 | |
查询命令 | 0x12 | INQUIRY | 获取设备基本信息(厂商、型号、固件版本等) | SPC-4 |
0x25 | READ CAPACITY(10) | 查询设备容量(总块数和块大小) | SBC-3 | |
0x9E | READ CAPACITY(16) | 扩展容量查询,支持超过2TB的设备 | SBC-4 | |
诊断与测试 | 0x00 | TEST UNIT READY | 检测设备是否就绪(常用于设备状态检查) | SPC-4 |
0x1D | SEND DIAGNOSTIC | 执行设备自检或返回诊断信息 | SPC-4 | |
模式管理 | 0x1A | MODE SENSE(6) | 读取设备工作模式参数(如缓存设置、错误恢复策略) | SPC-4 |
0x5A | MODE SELECT(6) | 设置设备工作模式参数 | SPC-4 | |
扩展功能 | 0x9F | REPORT LUNS | 报告逻辑单元号(LUN)列表(用于多LUN设备管理) | SPC-4 |
0x85 | PERSISTENT RESERVE | 管理设备访问权限(如集群环境中的共享存储控制) | SPC-4 | |
流媒体设备 | 0x0B | ERASE(6) | 擦除磁带设备上的数据 | SSC-3 |
0x8B | ERASE(16) | 扩展擦除命令,支持长磁带设备 | SSC-3 | |
光存储设备 | 0xA3 | READ CD | 读取光盘内容(如CD/DVD/蓝光) | MMC-6 |
0x2B | SEEK(10) | 定位光驱读写头到指定位置 | MMC-6 |
关键说明
-
命令版本差异
- READ/WRITE命令的变体(如6/10/16字节)主要区别在寻址范围。例如,READ(6)仅支持32位LBA,而READ(16)支持128位LBA。
- 模式管理命令(MODE SENSE/SELECT)用于调整设备缓存策略、错误恢复机制等高级参数,直接影响性能与可靠性。
-
专用设备命令
- MMC标准(MultiMedia Commands)定义了光存储设备的操作,如
READ CD
和SEEK
。 - SSC标准(SCSI Stream Commands)用于磁带驱动器,提供流式数据读写与擦除功能。
- MMC标准(MultiMedia Commands)定义了光存储设备的操作,如
-
扩展应用场景
PERSISTENT RESERVE
用于集群存储环境,防止多主机同时写入导致数据损坏。REPORT LUNS
支持多路径存储设备(如SAN)的逻辑单元管理。
完整命令参考
由于SCSI命令集包含数百条指令(涵盖SPC、SBC、MMC、SSC等子协议),上述表格仅列出核心命令。若需完整列表,可参考以下资源:
- SCSI Primary Commands (SPC-5):定义通用控制与查询命令。
- SCSI Block Commands (SBC-4):块设备(如硬盘、SSD)的读写与格式化操作。
- SCSI Stream Commands (SSC-3):磁带驱动器的流式数据管理。