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

用wireshark抓包分析学习USB协议

用 wireshark 抓包分析学习 USB 协议

1 框架

在这里插入图片描述
上图是使用USB协议通信的两个设备的实现细节。看起来比较复杂,可以看下面的示意图:
在这里插入图片描述
整个框架分为三层:Function Layer、USB Device Layer 和 USB Bus Interface Layer;黑色双向箭头代表实际数据通路,浅色箭头代表逻辑连接。

平时我们使用 USB 协议的拓扑结构可能是下面这样的:
在这里插入图片描述
也就是一台电脑,挂着几个USB直连设备,比如鼠标键盘;由于USB口不够用,又接了几个 USB HUB,HUB上又挂着其它 USB 设备,比如话筒。

单从通信关系上看,可以理解成下面这样:
在这里插入图片描述
就是每一个设备都看作 Endpoint,Host 和 Device 之间的连接视作数据的Pipes,通信数据流通过 Pipes 在 Host 和 Endpoints 之间交换。

这里需要提前说明一下,USB是完全由 Master 主导的。也就是说,无论是从电脑向设备发数据,还是从设备从电脑发数据,都是由电脑控制的。

不过比起拓扑,软件人员可能更关心的是协议的格式,更进一步还想知道,究竟USB连接电脑之后,会发生些什么,这是这篇文章要记叙的主要内容。

2 USB 设备的状态流

这是 USB 设备的状态机。
在这里插入图片描述
Attached 指的就是设备已经连接到电脑的 USB 接口上;

设备进入 Powered 状态;

然后 master 让设备 reset,使设备进入 Default 状态;这时候设备使用默认地址
在这里插入图片描述
接着 master 会给设备分配一个地址;后续用这个地址和设备通信,也可以理解为换了一个专用的 pipe

master 会读设备的描述符,然后对设备做一些配置,设备进入Configured 状态
在这里插入图片描述在这里插入图片描述

总线空闲一定时间之后设备会进入 Suspend 状态,以便省电;这和掉电不一样,设备的地址和配置不会丢失,唤醒之后不用重新分配地址和配置。
在这里插入图片描述

3 连接过程

在这里插入图片描述
这是 wireshark 工具抓 USB 数据包的界面,绿色框中的是发送数据包的源头,即发出方;红色框中的是数据包的接收方。


在这里插入图片描述

上图黄色箭头指向的那一行,是 host 向 设备 1.1.0 发送的一个 GET DESCRIPTOR Request;
在这里插入图片描述
上图右下框中绿色高亮的内容就是这个 request 的具体内容,数据格式可以对照下图中的表格:
在这里插入图片描述
第一个字节是 bmRequestType,用于描述请求的特性。 值为 0x80,意味着是标准设备,请求 device-to-host,即请求 device 向 host 发送数据
在这里插入图片描述
第二个字节是 bRequest,用于指明具体的请求,这里值是 6,对应着获取设备描述符 GET_DESCRIPTOR

在这里插入图片描述
因为协议文档是2.0的,和3.2的数据包不能完全对应,后面几个字段先不看了,等看3.2标准文档的时候再说。

在这里插入图片描述
紧接着有一个数据包,收发双方呼唤,应该就是 device 应答了 master 的请求。下面打开数据包可以看到回复了一个 device 描述符
在这里插入图片描述
避免歧义,这里说明一下,描述符有以下几种类型。Device 是其中的一种。
在这里插入图片描述
好,回到数据包的说明。这里有四个和CONFIGURATION相关的数据包。
在这里插入图片描述
先是 master 发了一个要求长度为 9 的
在这里插入图片描述
device 回了一个长度为 9 的,其中包含了一个长度信息 0x80
在这里插入图片描述
然后 master 发了一个要求长度 0x80 的
在这里插入图片描述
然后 device 回了一个长度为 0x80 的
在这里插入图片描述
最后 用 SET CONFIGURATION request 配置了 device

http://www.xdnf.cn/news/10550.html

相关文章:

  • 浅写弱口令与命令爆破
  • Cursor 编辑器介绍:专为程序员打造的 AI 编程 IDE
  • Python项目结构
  • 录屏不再难,从功能到体验深度测评
  • MPTCP 聚合吞吐
  • LRU和LFU缓存策略
  • ESP32系列AT固件快速开发——Wi-Fi MQTT
  • 【笔记】Windows系统部署suna基于 MSYS2的Poetry 虚拟环境backedn后端包编译失败处理
  • 汽车安全体系:FuSa、SOTIF、Cybersecurity 从理论到实战
  • 绿盟 IPS 设备分析操作手册
  • Nuxt3部署
  • TS 星际通信指南:从 TCP 到 UDP 的宇宙漫游
  • (Python)列表的操作(增删改查、排序)
  • 2025年ESWA SCI1区TOP,改进成吉思汗鲨鱼算法MGKSO+肝癌疾病预测,深度解析+性能实测
  • 网络攻防技术四:网络侦察技术
  • 重温经典算法——快速排序
  • 探秘集成学习:从基础概念到实战应用
  • 微软PowerBI考试 PL-300学习指南
  • DeepSeek 赋能车路协同:智能交通的破局与重构
  • 模块二:C++核心能力进阶(5篇) 篇一:《STL源码剖析:vector扩容策略与迭代器失效》
  • 核心机制:滑动窗口
  • 相机--相机标定
  • 芝麻酱工作创新点分享1——SpringBoot下使用mongo+Redis做向量搜索
  • PyTorch——卷积操作(2)
  • [网页五子棋][匹配对战]落子实现思路、发送落子请求、处理落子响应
  • Python 在金融中的应用- Part 1
  • JSP、HTML和Tomcat
  • Linux运维笔记:服务器感染 netools 病毒案例
  • Windows+VSCode搭建小智(xiaozhi)开发环境
  • 通信革新与网络安全探索与创新:开启未来之门