深度分析FC/FCOE上层协议SCSI-FCP数据传输过程

本文将介绍分析FC/FCOE上层协议SCSI-FCP数据传输过程,如下内容是本
人多年学习的总结,希望对大家学习有所帮助。

1. SCSI客户端——服务器模式

  • SCSI是客户端-服务器架构

–        在SCSI术语里,客户端叫initiator,服务器叫target
–        Initiator通过SCSI通道向target发送请求,target通过SCSI通道向initiator发送响应
–        SCSI通道连接的是SCSI Port,SCSI initiator port和SCSI target port

  • SCSI通道由Service Delivery Protocol(服务传输协议,如FCP、iSCSI等)建立和维护。

2.  FCP设备操作流程

一个FC Initiator Port 端口从起机到对网络硬盘LUN进行I/O操作的简单流程。由两个部分组成:
1.  FCP设备发现过程
检测Initiator Port 端口所连接的FC网络上所有FCP Target Port设备,并能识别到它们提供的可用的硬盘LUN。
2.  I/O操作
对指定LUN进行I/O操作。 如:数据的读写、任务管理控制,其他设备检测、控制命令等。

3.  FCP设备发现过程

3.1  Fabric 拓扑FCP设备发现过程

步骤1 :
Fabric Login。可能在 “检测拓扑类型”时完成。
步骤2 :
登陆NameServer。
步骤3 :
向NameServer注册信息:
1)FC-4 TYPEs object:
2)FC-4 Features object:
步骤4 :
向Fabric Controller 注册 State Change Notification (见FC-LS)
步骤5 :
GID_FF query格式:Domain_ID = 0,  Area_ID = 0,  FC-4 feature bit = 01h, TYPE Code field = 08h;
步骤6 :
Initiator获取到Fabric上所有Target Port的ID。 这里的Target Port指的是端口支持FCP协议和FCP Target功能。
步骤7:
端口注册。FCP没有描述该过程,也没有描述Target要回送什么报文。
步骤8-9:
进程注册,生成image pair。
PRLI ELS、PRLI ELS accept由FCP层封装,具体参数见FCP-4。
目前可以确定:image pair内容包括S_ID、D_ID、进程TYPE(如FCP)。
ELS accept包含参数必须反馈是否已经建立image pair。建立image pair的判断过程是在SCSI上层确定。
作用:只有当Initiator和Target之间建立了image pair之后,才允许相互发送FCP IU。类似于FCP报文发送开关。
步骤10-17:
通过SCSI的INQUIRY命令获取Target设备的LUN以及LUN信息(WWN)。
INQUIRY命令通过封装成IU发送,Target接收到IU以后解封装成INQUIRY命令交由上层SCSI处理,因此和FC底层关系不大。

3.2  AL 拓扑 FCP设备发现过程
步骤1:
获取LOOP上所有设备的loop ID,有两种方法:
1) 获取loop map
2.)如果获取不到loop map,则poll all possible addresses (见FC_AL)
注意:和Fabric拓扑情况下获取Target设备地址不同,LOOP获取的是所有设备的loop ID,不管该设备是不是Target或者是否支持FCP。
步骤2-4:
注册端口和进程。
步骤5-10:
通过SCSI的INQUIRY命令获取Target的所有LUN以及LUN信息(WWN)。

4. I/O操作

     1.  一次完整的SCSI(I/O)操作(数据的读写)对应FC的1个Exchange
2.  SCSI上层的命令/操作原语:对应FCP的IU
FCP将IU发送给FC栈,再由FC栈封装成seq

4.1 写操作过程

步骤1:
Initiator向Target发送 FCP_CMND IU,表示将发起一个写操作。FCP_CMND IU携带了将要写入的数据长度等信息。
步骤2:
Target收到FCP_CMND IU以后,为将要写入的数据分配磁盘空间。可能需要将数据分为若干段保存。
然后向Initiator发送 FCP_XFER_RDY IU, 要求Initiator发送一段数据。FCP_XFER_RDY IU携带的参数通告Initiator发送数据段大小、偏移量等。
步骤3:
Initiator 发送FCP_DATA,即FCP_XFER_RDY IU中要求发送的指定数据段。
重复步骤2-3 , 直到Initiator发送完所有的数据分段。
步骤6:
Target发送FCP_RSP,表示FCP_CMND IU 命令指定的I/O操作完成。并通告SCSI状态。
(如果不需要等待确认或等待连续命令,则发送完FCP_RSP表示exchange结束。如果该命令是连续命令(link cmd),则在同一个exchange内继续发送下一条I/O命令)
步骤7:
Initiator 回送FCP_CONF,表示对FCP_RSP的确认。
FCP_CONF是可选的,取决于进程注册时的参数。

4.2 读操作过程

步骤1:
Initiator向Target发送 FCP_CMND IU,表示将发起一个读操作。FCP_CMND IU携带了将要读取的数据位置、长度等信息。
步骤2:
Target发送FCP_DATA,即FCP_CMND IU中要求发送的数据。
步骤3:
Target发送FCP_RSP,表示FCP_CMND IU 命令指定的I/O操作完成。并通告SCSI状态。
(如果不需要等待确认或等待连续命令,则发送完FCP_RSP表示exchange结束。如果该命令是连续命令(link cmd),则在同一个exchange内继续发送下一条I/O命令)
步骤7:
Initiator 回送FCP_CONF,表示对FCP_RSP的确认。
FCP_CONF是可选的,取决于进程注册时的参数。
如上过程是整个FCP上层协议通过将封装SCSI指令来读写磁盘的操作过程。

weinxin
DC Farm小程序二维码
扫一扫添加博客小程序
Jim

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

    • avatar 等身抱抱 0

      看得不是很明白,还得再消化一下。。。。