第九章 天翻地覆——FC协议的巨大 力量

第四节 SAS大革命

 

9.4.4  SAS传输层和应用层

    SAS网络内目前有3种应用协议:一是SSP(Serial SCSI Protocol),二是STP(SATA Tunneling Protocol),三是SMP(Serial Management Protocol)。说它们为应用层协议既恰当又不恰当,因为相对于SAS本身来讲,它们确实是处于应用层,但是相对于整体系统来讲,它们又都处于传输层(SSP和STP)或网络层(SMP)。这三种协议在传输数据之前都需要首先由Initiator向Target端发起连接请求,这种上层的连接请求也同时被映射到了链路层,链路层也会建立相应的连接,如前文所述。

1.SSP

    SSP是一套用于在Initiator和Target之间传输SCSI指令的传输保障协议,与FC中的FCP层充当相同的角色。我们知道SCSI3规范已经将SCSI上层指令与底层传输系统相分离,SSP在此就作为SCSI指令的传输系统,SSP会保障SCSI指令和数据以及对指令的响应成功地被传送和接收。图9-35所示为SSP的帧结构。图9-36所示为SSP的帧类型,包含COMMAND、TASK、XFER_RDY、DATA、RESPONSE五种类型。
 
图9-35  SSP的帧结构                         图9-36  SSP的帧类型
           
图9-35  SSP的帧结构                         图9-36  SSP的帧类型

图9-37所示为SSP执行TSAK管理任务时所发送的指令和返回流程步骤。图9-38所示为SSP发起SCSI指令时的步骤。
 
图9-37  SSP设备控制指令流程            图9-38  SSP发起SCSI指令时的流程
        
图9-37  SSP设备控制指令流程            图9-38  SSP发起SCSI指令时的流程

图9-39所示为SSP执行SCSI Read指令时的步骤。图9-40所示为SSP执行SCSI Write指令时的步骤。
 
图9-39  SSP执行SCSI Read指令时的步骤              图9-40  SSP执行SCSI Write指令时的步骤
       
图9-39  SSP执行SCSI Read指令时的步骤              图9-40  SSP执行SCSI Write指令时的步骤

2. STP

    STP是一套用于在Initiator和Target之间传送SATA指令的传输保障协议。由于SATA协议与SCSI协议是完全两套上层协议,不仅指令描述方式和结构不同,而且在底层传输的控制上也不同,所以STP就是将SATA协议的底层传输逻辑拿了过来,并将其承载于SAS底层(物理层+链路层+网络层)进行传输。其实这里说SATA Tunneling也具有一定的误导性,可能会误认为SCSI就不需要Tunneling。其实不管是SCSI还是SATA,它们都是以不同程度的Tunnel+Map的方式被承载于SAS网络上传递。可以参考本书后面章节来了解协议之间的相互作用问题。图9-41所示为STP执行SATA指令时的步骤。
图9-41  STP执行SATA指令时的步骤
 

图9-41  STP执行SATA指令时的步骤

3. SMP

    SMP是一种对SAS网络内所有Expander进行管理的协议,包括Expander拓扑发现和路由协议。由Initiator端建立连接后向Target端发起查询请求,Target只能响应Initiator的查询而不能主动向Initiator发送消息。这里大家可能有个疑问,即不管是SSP中的Target还是STP中的Target,它们都是有实在的物理存在的东西来对应的,比如SSP的Target就是某PHY后面的SAS磁盘,STP的Target就是某PHY后面的SATAC盘。那么SMP中的Target到底是什么呢?上文讲SAS路由表时曾经提到过一个Expander上的虚拟PHY,对应了一个SMP设备,其实SMP的Target就是整个Expander本身,Expander接收到针对这个Target的消息,就会自己做处理而不是转发到其他某个PHY。图9-42所示为SMP的请求和查询步骤。
 
 
图9-42  SMP的请求和查询步骤
 

图9-42  SMP的请求和查询步骤