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

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

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

A、基本包信息分析

让我们先从读流程开始分析一下USB包的包结构,如下是一个典型的读流程的抓包结果U盘写流程USB协议抓包分析_第1张图片

  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大文件进行抓包。
U盘写流程USB协议抓包分析_第2张图片

传输一个1字节的小文件

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

传输一个9MB的文件

这里我对抓到的包截了首尾两张图,可以看到也是执行了多笔写操作,且因为传输了大文件,单个SCSI请求的最大length是1024,1024*512 = 524288,512KB左右大小的数据。且最大的数据都是512KB大小,且通过LBA可以看到,逻辑地址都是连续的,逻辑地址也是以512字节的sector为单位。
U盘写流程USB协议抓包分析_第5张图片
U盘写流程USB协议抓包分析_第6张图片

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

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

1、格式化为NTFS格式

将U盘格式化为NTFS格式,分配单元大小选择默认的4096字节,传输大文件得到结果如下,最大的length也是1024,同样逻辑地址LBA是连续的
U盘写流程USB协议抓包分析_第7张图片

2、 使用其他厂家的U盘

使用同样基于exFAT的128KB单元大小的其他厂商的U盘进行大文件的传输,也发现了同样的限制。
U盘写流程USB协议抓包分析_第8张图片
综上,可以猜测单次传输最大1024个sector的限制可能是协议层面的限制。

参考文档

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

你可能感兴趣的:(存储技术,usb,scsi)