USB系统学习笔记 - 从概念到抓包解析

目录

[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 详细枚举步骤)

步骤1:设备连接检测

步骤2:设备复位

步骤3:获取设备描述符

步骤4:分配设备地址

步骤5:获取完整描述符信息

步骤6:设置配置

[4. USB描述符体系](#4. USB描述符体系)

[4.1 描述符层次结构](#4.1 描述符层次结构)

[4.2 各类描述符详解](#4.2 各类描述符详解)

设备描述符 (Device Descriptor)

配置描述符 (Configuration Descriptor)

接口描述符 (Interface Descriptor)

端点描述符 (Endpoint 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 四种传输类型)

控制传输 (Control Transfer)

批量传输 (Bulk Transfer)

中断传输 (Interrupt Transfer)

同步传输 (Isochronous Transfer)

[7. USB事务和包结构](#7. USB事务和包结构)

[7.1 事务 (Transaction) 结构](#7.1 事务 (Transaction) 结构)

[7.2 包 (Packet) 类型](#7.2 包 (Packet) 类型)

令牌包 (Token Packet)

数据包 (Data Packet)

握手包 (Handshake 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枚举是主机识别和配置新插入设备的过程,包括以下步骤:

  1. 设备连接检测
  2. 复位和地址分配
  3. 描述符获取
  4. 配置选择
  5. 驱动程序加载

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
相关推荐
青草地溪水旁6 小时前
互联网接入网中PPPoE和PPP协议
网络·ppp·接入网
wanhengidc7 小时前
什么是云手机?
运维·网络·安全·游戏·智能手机
机器人梦想家8 小时前
pymodbus启动一个简单的modbus tcp server
网络·网络协议·tcp/ip
一刀到底2118 小时前
springboot3.3.5 集成elasticsearch8.12.2 ssl 通过 SSL bundle name 来实现
网络·elasticsearch·ssl·springboot3
m0_661316238 小时前
modbus_tcp和modbus_rtu对比&移植AT-socket,modbus_tcp&杂记
服务器·网络·tcp/ip
eqwaak09 小时前
Matplotlib 动态显示详解:技术深度与创新思考
网络·python·网络协议·tcp/ip·语言模型·matplotlib
不是三毛没有半9 小时前
华为USG6000v2 NAT模式下IPSEC IKE V1 实验
网络·网络安全·华为
Techer_Y9 小时前
云安全服务(参考自腾讯云工程师认证课程)
网络·云计算·腾讯云
cpsvps_net9 小时前
代理连接性能优化:提升网络效率的关键技术与实践
网络·性能优化