当前位置: 首页 > news >正文

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

目录

1. USB基础概念概览

1.1 USB是什么

1.2 USB拓扑结构

2. USB层次结构详解

2.1 USB通信层次关系

2.2 数据传输的层次结构

3. USB枚举过程深入分析

3.1 枚举过程概述

3.2 详细枚举步骤

步骤1:设备连接检测

步骤2:设备复位

步骤3:获取设备描述符

步骤4:分配设备地址

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

步骤6:设置配置

4. USB描述符体系

4.1 描述符层次结构

4.2 各类描述符详解

设备描述符 (Device Descriptor)

配置描述符 (Configuration Descriptor)

接口描述符 (Interface Descriptor)

端点描述符 (Endpoint Descriptor)

5. USB请求机制

5.1 标准请求类型

5.2 请求包格式 (Setup Packet)

6. USB传输类型详解

6.1 四种传输类型

控制传输 (Control Transfer)

批量传输 (Bulk Transfer)

中断传输 (Interrupt Transfer)

同步传输 (Isochronous Transfer)

7. USB事务和包结构

7.1 事务 (Transaction) 结构

7.2 包 (Packet) 类型

令牌包 (Token Packet)

数据包 (Data Packet)

握手包 (Handshake Packet)

7.3 包的域 (Field) 结构

8. 接口和端点概念

8.1 接口 (Interface)

8.2 端点 (Endpoint)

8.3 端点地址编码

9. 抓包数据解析要点

9.1 分析工具

9.2 抓包解析步骤

第一步:识别枚举过程

第二步:分析描述符内容

第三步:跟踪数据传输

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

文章转载自:

http://hA0H2ADh.hydkd.cn
http://GkBjySjt.hydkd.cn
http://xFo7fCMm.hydkd.cn
http://QmT2kPSS.hydkd.cn
http://59stn2Fb.hydkd.cn
http://cXApK0lY.hydkd.cn
http://D1sPeX7Y.hydkd.cn
http://K8eq4p7E.hydkd.cn
http://vu2nu14E.hydkd.cn
http://rCHzP92Y.hydkd.cn
http://NgW6cIuS.hydkd.cn
http://mlcTqyiv.hydkd.cn
http://jaFAGv4i.hydkd.cn
http://E7gwVtBY.hydkd.cn
http://sotHjix1.hydkd.cn
http://ndCBN4Rz.hydkd.cn
http://fbHE0tqf.hydkd.cn
http://iwU5kRGy.hydkd.cn
http://vXWmk8a3.hydkd.cn
http://Vw64mNDN.hydkd.cn
http://eWpTwspk.hydkd.cn
http://vdguVPHh.hydkd.cn
http://h9DbKycn.hydkd.cn
http://SKLhRPgP.hydkd.cn
http://iJhZfiW6.hydkd.cn
http://Ue7GRVrS.hydkd.cn
http://Cqm4bYRu.hydkd.cn
http://pmT6aMkN.hydkd.cn
http://r67ATi46.hydkd.cn
http://P4XMePQz.hydkd.cn
http://www.dtcms.com/a/373341.html

相关文章:

  • 前端框架对比分析:离线PWA + Cloudflare Workers部署
  • TensorFlow深度学习实战(37)——深度学习的数学原理
  • iOS混淆工具实战,健身与健康监测类 App 的隐私与算法保护
  • ChatAI项目-ChatGPT-SDK组件工程
  • 关于对逾期提醒的定时任务~改进完善
  • BKY(莱德因):基于线粒体靶向的细胞级御龄科学实践
  • 学习日记-SpringMVC-day50-9.8
  • VUE3加载cesium,导入czml的星座后页面卡死BUG 修复
  • Redis集群——redis cluster(去中心化)
  • HCIE安全为什么是T0级别的选项?
  • IDEA开启并配置Services窗口(一个项目开启多个项目运行窗口并且显示端口)
  • Sourcetree使用
  • 【Docker】Docker安装
  • 个人日记系统00
  • 20.42 QLoRA微调实战:四层提示工程让批量数据生成错误率跌破0.5%
  • S32K3平台eMIOS 应用说明
  • iOS 开发入门指南-HelloWorld
  • HCIE数通/云计算真机实验机架展示
  • 【.Net技术栈梳理】04-核心框架与运行时(线程处理)
  • 量化金融|基于算法和模型的预测研究综述
  • HarmonyOS 数据处理性能优化:算法 + 异步 + 分布式实战
  • 1304. 和为零的 N 个不同整数
  • Java 集合Collection—List
  • leetcode9(跳跃游戏)
  • 在UnionTech OS Server 20 (统信UOS服务器版) 上离线安装PostgreSQL (pgsql) 数据库
  • Azure Logic App 与 Azure Function 对比分析
  • 房屋安全鉴定注意事项
  • 【Go】:mac 环境下GoFrame安装开发工具 gf-cli——gf_darwin_arm64
  • 知识竞赛活动舞台道具全面指南
  • Linux《进程信号(下)》