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