目录
[1. USB基础概念概览](#1. USB基础概念概览)
[1.1 USB是什么](#1.1 USB是什么)
[1.2 USB拓扑结构](#1.2 USB拓扑结构)
[2. USB层次结构详解](#2. USB层次结构详解)
[2.1 USB通信层次关系](#2.1 USB通信层次关系)
[2.2 数据传输的层次结构](#2.2 数据传输的层次结构)
[3. USB枚举过程深入分析](#3. USB枚举过程深入分析)
[3.1 枚举过程概述](#3.1 枚举过程概述)
[3.2 详细枚举步骤](#3.2 详细枚举步骤)
[4. USB描述符体系](#4. USB描述符体系)
[4.1 描述符层次结构](#4.1 描述符层次结构)
[4.2 各类描述符详解](#4.2 各类描述符详解)
配置描述符 (Configuration Descriptor)
[5. USB请求机制](#5. USB请求机制)
[5.1 标准请求类型](#5.1 标准请求类型)
[5.2 请求包格式 (Setup Packet)](#5.2 请求包格式 (Setup Packet))
[6. USB传输类型详解](#6. USB传输类型详解)
[6.1 四种传输类型](#6.1 四种传输类型)
[7. USB事务和包结构](#7. USB事务和包结构)
[7.1 事务 (Transaction) 结构](#7.1 事务 (Transaction) 结构)
[7.2 包 (Packet) 类型](#7.2 包 (Packet) 类型)
[7.3 包的域 (Field) 结构](#7.3 包的域 (Field) 结构)
[8. 接口和端点概念](#8. 接口和端点概念)
[8.1 接口 (Interface)](#8.1 接口 (Interface))
[8.2 端点 (Endpoint)](#8.2 端点 (Endpoint))
[8.3 端点地址编码](#8.3 端点地址编码)
[9. 抓包数据解析要点](#9. 抓包数据解析要点)
[9.1 分析工具](#9.1 分析工具)
[9.2 抓包解析步骤](#9.2 抓包解析步骤)
[9.3 常见抓包模式](#9.3 常见抓包模式)
1. USB基础概念概览
1.1 USB是什么
- Universal Serial Bus - 通用串行总线
- 用于连接计算机和外部设备的标准接口
- 支持热插拔、即插即用
- 主从架构:主机(Host)控制所有通信,设备(Device)响应请求
1.2 USB拓扑结构
Host Controller (主机控制器)
└── Root Hub (根集线器)
├── Device 1
├── Hub 1
│ ├── Device 2
│ └── Device 3
└── Device 4
2. USB层次结构详解
2.1 USB通信层次关系
应用层 ←→ 应用层
↕ ↕
USB驱动层 ←→ 功能层
↕ ↕
USB系统层 ←→ 设备层
↕ ↕
总线接口层 ←→ 总线接口层
(物理连接)
2.2 数据传输的层次结构
传输类型 (Transfer Type)
└── 事务 (Transaction)
└── 包 (Packet)
└── 域 (Field)
3. USB枚举过程深入分析
3.1 枚举过程概述
USB枚举是主机识别和配置新插入设备的过程,包括以下步骤:
- 设备连接检测
- 复位和地址分配
- 描述符获取
- 配置选择
- 驱动程序加载
3.2 详细枚举步骤
步骤1:设备连接检测
- 设备插入时,D+或D-线上的电平变化被Hub检测到
- Hub通过状态变化端点通知主机
- 主机查询Hub状态,确定哪个端口有设备连接
步骤2:设备复位
- 主机对新设备端口执行复位操作
- 复位后设备处于默认状态,地址为0
- 设备准备响应主机的控制传输
步骤3:获取设备描述符
主机发送: GET_DESCRIPTOR (Device)
设备响应: 设备描述符数据
步骤4:分配设备地址
主机发送: SET_ADDRESS (新地址)
设备响应: ACK确认
设备切换到新地址
步骤5:获取完整描述符信息
- 重新获取设备描述符(使用新地址)
- 获取配置描述符
- 获取字符串描述符(如果有)
步骤6:设置配置
主机发送: SET_CONFIGURATION (配置值)
设备响应: ACK确认
设备进入配置状态,可以正常工作
4. USB描述符体系
4.1 描述符层次结构
设备描述符 (Device Descriptor)
└── 配置描述符 (Configuration Descriptor)
└── 接口描述符 (Interface Descriptor)
└── 端点描述符 (Endpoint Descriptor)
4.2 各类描述符详解
设备描述符 (Device Descriptor)
- 作用:描述整个设备的基本信息
- 关键字段 :
- bcdUSB: USB版本
- bDeviceClass: 设备类
- idVendor: 厂商ID
- idProduct: 产品ID
- bNumConfigurations: 配置数量
配置描述符 (Configuration Descriptor)
- 作用:描述设备的一种工作配置
- 关键字段 :
- wTotalLength: 整个配置的总长度
- bNumInterfaces: 接口数量
- bMaxPower: 最大功耗
接口描述符 (Interface Descriptor)
- 作用:描述设备的一个功能接口
- 关键字段 :
- bInterfaceClass: 接口类
- bNumEndpoints: 端点数量
- bAlternateSetting: 备用设置
端点描述符 (Endpoint Descriptor)
- 作用:描述数据传输的端点
- 关键字段 :
- bEndpointAddress: 端点地址和方向
- bmAttributes: 传输类型
- wMaxPacketSize: 最大包大小
5. USB请求机制
5.1 标准请求类型
- GET_DESCRIPTOR: 获取描述符
- SET_ADDRESS: 设置设备地址
- SET_CONFIGURATION: 设置配置
- GET_STATUS: 获取状态
- CLEAR_FEATURE: 清除特性
- SET_FEATURE: 设置特性
5.2 请求包格式 (Setup Packet)
字节0: bmRequestType (请求类型和方向)
字节1: bRequest (具体请求)
字节2-3: wValue (请求参数)
字节4-5: wIndex (索引或偏移)
字节6-7: wLength (数据阶段长度)
6. USB传输类型详解
6.1 四种传输类型
控制传输 (Control Transfer)
- 用途:配置设备、发送命令
- 特点:可靠性高,有错误检测和重传
- 阶段:Setup阶段 → Data阶段 → Status阶段
批量传输 (Bulk Transfer)
- 用途:大量数据传输(如文件传输)
- 特点:可靠但不保证时间
- 应用:U盘、打印机等
中断传输 (Interrupt Transfer)
- 用途:小量数据的定期传输
- 特点:保证最大延迟时间
- 应用:键盘、鼠标等HID设备
同步传输 (Isochronous Transfer)
- 用途:实时数据流
- 特点:保证带宽但不纠错
- 应用:音频、视频设备
7. USB事务和包结构
7.1 事务 (Transaction) 结构
一个事务包含:
令牌包 (Token Packet)
↓
数据包 (Data Packet) [可选]
↓
握手包 (Handshake Packet)
7.2 包 (Packet) 类型
令牌包 (Token Packet)
- IN: 主机请求设备发送数据
- OUT: 主机向设备发送数据
- SETUP: 控制传输的建立阶段
数据包 (Data Packet)
- DATA0/DATA1: 数据切换,用于检测重复
握手包 (Handshake Packet)
- ACK: 确认接收成功
- NAK: 暂时无法处理
- STALL: 端点停止或不支持请求
7.3 包的域 (Field) 结构
每个包都包含以下域:
SYNC域: 同步信号 (8位)
PID域: 包标识符 (8位)
地址域: 设备地址 (7位) [令牌包]
端点域: 端点号 (4位) [令牌包]
数据域: 实际数据 [数据包]
CRC域: 循环冗余检验 (5/16位)
EOP域: 包结束标志
8. 接口和端点概念
8.1 接口 (Interface)
- 定义:设备的一个功能单元
- 特点 :
- 一个设备可以有多个接口
- 每个接口可以独立工作
- 接口有类代码标识功能类型
8.2 端点 (Endpoint)
- 定义:数据传输的源或目标
- 特点 :
- 每个端点有唯一地址(设备地址+端点号)
- 端点0是控制端点,必须存在
- 端点有方向性:IN(设备到主机)、OUT(主机到设备)
8.3 端点地址编码
位7: 方向 (0=OUT, 1=IN)
位6-4: 保留 (000)
位3-0: 端点号 (0-15)
9. 抓包数据解析要点
9.1 分析工具
- Wireshark: 通用网络协议分析器
- USB Analyzer: 专用USB协议分析器
- Bus Hound: Windows下的总线监控工具
9.2 抓包解析步骤
第一步:识别枚举过程
寻找以下关键序列:
1. Hub状态变化通知
2. Port Reset请求
3. GET_DESCRIPTOR (Device)
4. SET_ADDRESS
5. GET_DESCRIPTOR (Configuration)
6. SET_CONFIGURATION
第二步:分析描述符内容
- 提取各级描述符的关键字段
- 构建设备的逻辑结构图
- 理解设备的功能和能力
第三步:跟踪数据传输
- 识别传输类型
- 分析事务序列
- 检查错误处理机制
9.3 常见抓包模式
枚举成功模式
SETUP -> DATA0 -> AC