帮你梳理一下各种存储协议及接口 本文属于快文一篇,今早晨在群聊中发现不少人对协议、接口完全混为一谈,思路极为混乱。冬瓜哥觉得有必要为大家简要梳理一下目前这些存储协议、接口。 在存储系统中,上层协议可以泛指“指令”,也就是比如“读出从某某开始的多少长度的扇区”,指令包含三大关键信息: 1. 操作码,Operation Code,或者成为OP。比如Write,Read,Control(Inquery,Standby等等)。 2. 起始地址:从哪开始读。如果是文件的话,精确到字节。如果是硬盘的话,精确到LBA(扇区)。 3. 长度:从起始地址往后多长的一段字节或者扇区。 那么,指令如果传递给对端的设备?你可以自己将上述指令的二进制码再编码一下,用手电筒的量灭传递给对方,传对方收到之后闪一下手电筒表示已经收到。此时,手电筒编码、收到后怎么表示收到,这也是一种协议,属于传输层协议。而手电筒就是物理层的接口,最终通过物理层,也就是光在真空中传播来将信息发送到对方。 同理,SCSI指令/协议和NVMe指令/协议,是存储系统面向机械盘和固态介质分别开发的两种上层协议。它们可以被over到传输层协议+网络层/链路层/物理层接口上传输到对方,比如scsi over fc,scsi over sas、[(scsi over tcp)over ip] over ethernet, scsi over RDMA over IB, scsi over tcp over ip over ib。 底层接口,同样是手电筒,有人用灯丝灯泡的,有人用led的,有人用袖珍的,有人用手提的,有人用头戴的。这就是接口不同,但是它们传递的信息编码、物理层,都是一样的。比如,PCIE可以用标准插槽,也可以用自定义的插槽,但是里面的信号针脚数量都是一样的。 同理,存储系统中的硬件物理接口,包括: 1. SCSI接口、FC接口、SAS接口;这三个都是承载SCSI上层协议的。有人可能蒙掉了,SCSI不是上层协议的名字么,为何底层物理接口也叫SCSI?因为SCSI这个标准最早的时候把上层协议一直到底层传输协议、物理层、网络层全给定义了。自己去搜一下SCSI接口长什么样。 2. SATA接口,仅用于承载ATA协议。其前身IDE接口,也承载ATA协议。 3. PCIE标准接口,承载PCIE传输协议,NVMe over PCIE。也就SCSI over PCIE但是没有普及。 4. M.2接口,可承载PCIE协议 5. U.2接口,其中包含SAS、SATA和PCIE x4三套接口,充分利用空间,将三套金手指信号做到接口上,各干各的。意味着可以插入一块SAS或SATA或PCIE盘。U.2实质上是一种combo组合接口。 6. m.2接口广泛用于平板电脑里的固态存储介质。其底层可承载PCIE传输协议,然后可以SCSI over PCIE,NVMe over PCIE。其也可以直接跑SATA信号,相当于新型的SATA接口。 7. emmc接口,没有连接器,直接从flash颗粒管脚以贴片的方式与emmc控制器的管脚相连。承载onfi/toogle协议。属于并行总线。 8. ufs接口,没有连接器,直接从flash颗粒管脚以贴片的方式与ufs控制器的管脚相连。属于串行总线。 本文来源:https://www.wddqw.com/doc/a7a6928a88d63186bceb19e8b8f67c1cfad6eee2.html