一、基本概念
SCSI,小型计算机系统接口,基于client-server模型,client(initiator)将命令发送给server(target),server处理命令后回传结果给client。由于要传送命令必然要用到相应的传输协议,iSCSI就是其中的一种传输协议,除此之外还有FC等。
iSCSI也就是SCSI over IP,使用TCP/IP协议来传递SCSI命令与响应,其借用现有的互连网来实现SCSI通讯,成本低,管理、使用方便。
iSCSI也有initiator和target,分别对应于SCSI的initiator和target,iSCSI initiator 与target使用TCP进行通信从而实现了SCSI的initiator与target之间的通信。
如何使用iSCSI来传递SCSI命令与响应呢?首先要明白SCSI target中包含许多LU(逻辑单元),每一个SCSI命令都有其目标LU,这些LU负责对针对其的SCSI命令进行处理与响应。iSCSI有自己的PDU,在iSCSI initiator端,其包含SCSI initiator下发给其的LUN(逻辑单元号码)及SCSI命令(CDB),在被作为TCP的数据部分传递到iSCSI target 端后由SCSI target根据LUN将SCSI命令投放到目标LU中,LU在处理命令后把响应结果递交给SCSI target,SCSI target再将其递交给iSCSI target,iSCSI target把结果封装成iSCSI PDU,再使用TCP回传给iSCSI initiator,iSCSI initiator再将结果递交给上层SCSI initiator,如图1所示:
图1.iSCSI协议层次
iSCSI Device: 利用iSCSI传递服务子系统进行传递的SCSI设备。
iSCSI Node: iSCSI节点表示一个iSCSI启动器或者iSCSI目标器。在一个网络实
体里,可能有一或者多个iSCSI节点。可以通过一个或者多个网络端口访问iSCSI 节点。iSCSI节点的标识是iSCSI名称。把iSCSI名称和地址分开来后,允许多个iSCSI节点使用同一个地址,或者一个iSCSI节点使用多个地址。
Network Entity: 网络实体。它表示一个可以通过IP网络访问的设备或者网关。一个网络实体必须有一或者多个网络端口,包含在该网络实体内的iSCSI节点可以用这些端口来访问IP网络。
Network Portal: 网络端口。网络实体的一个组成部分,它有一个TCP/IP地址。网络端口在initiator用IP地址标识,在target用IP地址+侦听的TCP端口标识。Session:连接initiator和target的一组TCP连接构成一个session(可以简单理解为I_T nexus)。可以向session添加TCP连接,也可以把TCP连接从session删除。通过一个session的所有连接,initiator只看到同一个target。
Connection:一个TCP连接。Initiator和target之间使用一或者多个TCP连接通信。
CID(Connection ID):一个session里的每个connection用CID进行标识,该标识在session范围内是唯一。CID由initiator产生,在login请求和使用logout关闭连接时传递给target。
Portal Groups: 网络端口组。iSCSI session支持多连接,一些实现能把通过多个端口建立的多个连接捆绑到一个session。一个iSCSI网络实体的多个网络端口被定义为一个网络端口组,把该组和一个session联系起来,该session就可以捆绑通过该组内多个端口建立的多个连接,再使它们一起协同工作以达到捆绑的目的。每一个该组的session并不需要包括该组的所有网络端口。一个iSCSI节点可能有一或者多个网络端口组,但是每一个iSCSI使用的网络端口只能属于iSCSI节点的一个组。
Portal Group Tag: 网络端口组标识。使用16比特的数标识一个网络端口组。在一个iSCSI节点里,所有具有同样组标志的端口构成一个网络端口组。
iSCSI Task: 一个iSCSI任务是指一个需要响应的iSCSI请求。
I_T nexus: I_T nexus是指一个SCSI initiator的端口和一个SCSI target端口之间的关系。对于iSCSI,这个关系对应一个session,它指session的initiator端和iSCSI target网络端口组之间的关系。I_T nexus的标识是一对端口名称(iSCSI initiator 名称+i+ISID,iSCSI target名称+t+网络端口组标识)。
PDU (Protocol Data Unit): initiator和target之间通信时把信息分割为消息。这些消息称为iSCSI PDU。
SSID (Session ID): iSCSI initiator和iSCSI target之间的session用SSID进行标识,该标识由initiator部分的ISID和target部分的TPGT构成。ISID由initiator在session建立的时候明确给出,TPGT隐含的由建立连接时选择的网络端口确定。当TargetName给定后,建立连接的过程中,target必须把TPGT关键字当作确认信息发送出去。
TSIH (Target Session Identifying Handle): Target分配给与特定名称initiator建立的session的标识。但是0被保留着用于initiator告知target这是一个新session。在为一个session添加一个connect时,TSIH已经隐含指明。
二、SCSI与iSCSI的映射关系
在SCSI中,一个Device(SCSI initiator或者SCSI target)可以包含多个ports,一个SCSI initiator port和一个SCSI target port之间的联结就是一个I_T nexus,一个SCSI initiator port和一个SCSI target port之间只允许建立一个I_T nexus。
I_T nexus对应与iSCSI中的一个session(normal),SCSI target port对应于iSCSI target中的一个portal group(具有相同tag的一组ports,iSCSI target在这些ports 上进行监听等待iSCSI initiator的连接登陆,所有这些ports一起支撑一个I_T nexus),SCSI initiator port对应于iSCSI initiator中的session(normal)的端点。