U盘写流程USB协议抓包分析

news2024/9/24 17:08:38

U盘写流程USB协议抓包分析

因好奇于操作系统在对U盘这个块设备是如何进行读写传递数据包,笔者通过抓包测试,做了一个简单分析。安装了wireshark的usbPcap即能抓取主机USB接口上的usb包。

A、基本包信息分析

让我们先从读流程开始分析一下USB包的包结构,如下是一个典型的读流程的抓包结果在这里插入图片描述

  1. URB包

    u盘传输基于usb协议中的usb mass storage协议,根据查看的一个blog的说明,USBPcap pseudoheader 部分不属于发送内容部分,是USBPcap控制程序的部分。

    URB包中用于确定地址的字段有3个,USR bus id总线ID, Device Address设备地址, Endpoint:终端ID,区分IN/OUT方向,这个点不同的U盘实现可能存在差异,笔者查看的一个U盘请求响应都是同一个Endpoint ID,而另一个U盘请求响应则是不同的ID。

    URB Transfer Type即传输类型,有四种类型,这里抓包看到URB_BULK 为0x03 , 一共有bulk,isochronous,interrupt,control四种类型。bulk transfer用于传输大量的,非实时的数据。在设备的bulk端点上执行,其方向可以是从主机到设备,也可以是从设备到主机。常用于打印机、存储设备等需要大量数据传输的外设

  2. SCSI包

    usbms之上则是基于scsi协议。SCSI是一种计算机总线,包含多种命令。SCSI的体系结构是一种典型的client-server模型,结构中有启动器和目标器。SCSI传输层遵循统一的SCSI命令模型,完整的SCSI请求由CDB,数据和命令属性信息构成。CDB描述了SCSI命令的具体细节,有多种不同的格式,10,12,16字节等。

    SCSI的命令集文档,主要分为通用类文档和适用于特定设备类的文档,通用类文档称为SPC,SCSI Primary Commands, 特定设备类文档比如块设备类文档,称为SBC,SCSI Block Commands文档,定义了适用于块设备的命令集,如READ, WRITE, VERIFY。

    我们截图抓到的包机一个SCSI协议中10字节的CDB,其中的opcode为读,是SBC中规定的块设备的读命令,然后跟着LBA逻辑地址和要读取的长度 Transfer Length,这里是8,单位是512字节,即4096字节。

B、写流程分析

我们将U盘格式化为默认的exFAT格式,分配单元大小为128KB,分别写1KB小文件,和6MB大文件进行抓包。
在这里插入图片描述

传输一个1字节的小文件

在这里插入图片描述
可以看到虽然只传输了1字节的小文件,window执行了多笔写操作,且大小不一,有length为1,8,16,其单元为512字节,所以写的大小包含512字节,4096字节,8192字节。可以猜测除了写文件本身之外,还需要对文件系统的元数据进行修改,以及整个文件系统占用的总大小等等元信息进行修改,所以需要写多笔数据。
但重新查看文件系统的大小,可以发现确实增大了128KB,所以exFAT格式化分配单元为128KB大小,文件小于128KB也是占用128KB的大小空间。
在这里插入图片描述

传输一个9MB的文件

这里我对抓到的包截了首尾两张图,可以看到也是执行了多笔写操作,且因为传输了大文件,单个SCSI请求的最大length是1024,1024*512 = 524288,52KB左右大小的数据。且最大的数据都是52KB大小,且通过LBA可以看到,逻辑地址都是连续的,逻辑地址也是以512字节的sector为单位。
在这里插入图片描述
在这里插入图片描述

C、不同类型文件系统写流程差异分析

根据上述的抓包结果,可以初步了解到通过usb协议写U盘的基本流程,但还是会存在几个疑惑。针对这个传输包的大小1024个sector的限制,是文件系统层面的限制,还是协议层面的限制,还是U盘的限制,我简单查了下资料,没有发现说明,就再做了下实验。

1、格式化为NTFS格式

将U盘格式化为NTFS格式,分配单元大小选择默认的4096字节,传输大文件得到结果如下,最大的length也是1024,同样逻辑地址LBA是连续的
在这里插入图片描述

2、 使用其他厂家的U盘

使用同样基于exFAT的128KB单元大小的其他厂商的U盘进行大文件的传输,也发现了同样的限制。
在这里插入图片描述
综上,可以猜测单次传输最大1024个sector的限制可能是协议层面的限制。

参考文档

https://blog.csdn.net/tanmx219/article/details/104002602

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/739047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音视频技术开发周刊 | 301

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 微软、谷歌、亚马逊,打响大模型时代的云战争 过去数月,云巨头们砸下真金白银,研发大模型、战略投资、自研 AI 芯片……大模型的时代方兴…

ArcGIS Pro中的模型构建器演示

前言 ArcGIS Pro的模型构建器在功能上相较于大致没有什么改动,主要是界面上变得相对漂亮,流程中使用了一些半透明的效果,相较于arcmap中的模型构建器,可以说是颜值进化很大了。 实战 首先我们来看一下演示效果,怎么样,是不是很方便 先建立一个模型 对于模型构建器我一直…

java main 方法的理解

文章目录 理解命令行参数用法举例IDEA工具配置参数(了解) 理解 由于JVM需要调用类的main()方法,所以该方法的访问权限必须是public,又因为JVM在执行main()方法时不必创建对象,所以该方法必须是static的,该…

python爬虫_selenuim登录个人markdown博客站点

文章目录 ⭐前言⭐selelunim⭐博客站点💖 自动填充账号密码登录 ⭐结束 ⭐前言 大家好,我是yma16,本文分享python使用selenuim登录个人markdown博客站点。 该系列文章: python爬虫_基本数据类型 python爬虫_函数的使用 python爬虫…

接口中的默认方法和静态方法

接口中的默认方法和静态方法 接口中的默认方法 package cn.tedu.inter; //1.定义接口 public interface Inter1 {/*1.接口中默认方法的修饰符public可以省略*///2.定义接口中的默认方法public default void play(){System.out.println("我是接口中的默认方法,…

OSPFv2基础03_综合实验

目录 1.创建OSPF进程 2.创建OSPF区域 3.使能OSPF 4.创建虚连接(可选) 5.OSPF常用命令 6.实验配置步骤 7.实验效果 1.创建OSPF进程 OSPF是一个支持多进程的动态路由协议,OSPF多进程可以在同一台路由器上运行多个不同的OSPF进程&#x…

ES6基本知识点

目录 1.对象优化 1.1 新增API 1.2 object.assign方法的第一个参数是目标对象,后面的参数都是源对象 1.3 声明对象简写 1.4 对象的函数属性简写 1.5 对象拓展运算符 2.map和reduce 2.1 数组中新增的map和reduce方法 3 promise 3.1 promise封装异步操作 4.模…

C# PaddleInference OCR 验证码识别

说明 C# PaddleInference OCR 验证码识别 自己训练的模型,只针对测试图片类型,准确率99% 效果 项目 VS2022.net4.8OpenCvSharp4Sdcb.PaddleInference 测试图片 代码 using OpenCvSharp; using Sdcb.PaddleInference.Native; using Sdcb.PaddleInfer…

mac笔记本安装java环境以及idea设置

系列文章目录 文章目录 系列文章目录安装java环境一、安装jdk二、下载安装IntelliJ IDEA三、安装maven四、安装git五、安装tomcat六、安装appenv配置文件七、有关idea的设置1、快捷键设置2、新建类的命名3、字体的大小,有关菜单栏的大小4、框内的tab最多能有多少个窗…

【2 beego学习 - 项目导入与项目知识点】

0 项目导入 1 在英文路径下新建一个同名的项目,拷贝其他数据到这个文件 bee new 同名项目名 cd 同名项目名 go mod tidy go get -u -v github.com/astaxie/beego go get 同名项目名/models2 拷贝部分的项目文件到新目录 bee run 运行的其他错误,按照提示安装文件 1 后端获取…

微软MFC技术中的消息队列及消息处理

我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊微软MFC技术中的消息队列及消息处理。 MFC应用程序中由Windows 系统以消息的形式发送给应用程序的窗口。窗口接收和处理消息之后,把控制返回给Windows。Windows系统在同一时间可显示多…

HashMap底层原理:数据结构+put()流程+2的n次方+死循环+数据覆盖问题

导航: 【Java笔记踩坑汇总】Java基础进阶JavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式常见面试题源码_vincewm的博客-CSDN博客 目录 一、底层 1.1 HashMap数据结构 1.2 扩容机制 1.3 put()流程 1.4 HashMap是如何计算…

电话号码的字母组合问题

解题思路: 当我第一眼看到这题的时候,我直接举出来一个列子“258”,直接套用多重for循环遍历可以罗列出来,但是根据数字组合的长度不能确定for循环的多少(除非把所有for循环个数情况都罗列一遍) 所以只能…

几种常用接口调用方式介绍

API,全称叫做Application Programming interface,也就是应用程序接口,API是一些预先定义的函数,我是学Java的,当我要使用这些函数的时候,便可以直接调用Java API,不用去访问源码,也不…

Linux设备驱动程序(四)——调试技术

文章目录 前言一、内核中的调试技术二、通过打印调试1、printk2、重定向控制台消息3、消息如何被记录4、开启及关闭消息5、速度限制6、打印设备编号 三、通过查询调试1、使用 /proc 文件系统①、在/proc中实现文件②、创建自己的 /proc 文件③、seq_file 接口 2、ioctl 方法 四…

Chatbot UI 和 ChatGLM2-6B 的集成

Chatbot UI 和 ChatGLM2-6B 的集成 0. 背景1. 部署 Chatbot UI2. 部署 ChatGLM2-6B3. 修改 ChatGLM2-6B 项目的 openai_api.py4. 修改 Chatbot UI 的配置5. 访问 Chatbot UI 0. 背景 尝试将 Chatbot UI 和 ChatGLM2-6B 的进行集成, ChatGLM2-6B 提供 API 服务&…

精确时钟同步协议ptp/IEEE-1588v2协议-------(2)主从时钟之间的消息交互与时钟同步过程

本文目录 1、主时钟和从时钟之间的消息交互流2、延时delay和偏移offset的计算2.1、延时delay的计算2.2、偏移offset的计算 主时钟和从时钟之间,通过sync, follow up, delay request, delay response这四条消息,完成时钟同步过程。PTP时钟同步系统能工作的…

word绘制横向表格

最近写小论文,表格太宽需要绘制横向表格,找了半天教程说的都不是很详细,我学习了一下决定自己写个教程。 我要在一和二之间创建一个横向表格。首先在一后面添加一个分节符号。布局->分隔符->分节负下一页。 再在二之前添加一个分节符号…

新耀东方|安全狗亮相2023第二届上海网络安全博览会

7月5日至7日,“新耀东方-2023第二届上海网络安全博览会暨高峰论坛”在上海顺利举办。此次大会由上海市信息网络安全管理协会、国家计算机网络应急技术处理协调中心上海分中心、(ISC)2上海分会、上海市普陀区科学技术委员会、上海市网络安全产业示范园共同主办。 作为…

左神算法之中级提升(2)

目录 [案例1】 【题目描述】 【思路解析1】 【思路解析2】 【代码实现】 【案例2】 【题目描述】 【思路解析】 【代码实现】 【案例3】 【题目描述】 【思路解析】 【代码实现】 【案例4】 【题目描述】今日头条2018面试题 第四题 【输入描述】 【思路解析】 【…