【原创分享】聊一聊存储协议中的孪生兄弟SCSI和iSCSI
  

不懂就问 89128人觉得有帮助

{{ttag.title}}
本帖最后由 不懂就问 于 2020-3-11 10:05 编辑


一、前言

说到存储协议,大家脑海里会冒出很多专业名词,SCSI、iSCSI、FC、FCOE等等,本帖将对两个看起来很像的协议做一个介绍,方便大家学习。

二、什么是SCSI
SCSI即小型计算机接口(Small Computer System Interface),指的是一个庞大协议体系,到目前为止经历了SCSI-1/SCSI-2/SCSI-3变迁。
SCSI协议定义了一套不同设备(磁盘,磁带,处理器,光设备,网络设备等)利用该框架进行信息交互的模型和必要指令集。
SCSI协议本质上同传输介质无关,SCSI可以在多种介质上实现,甚至是虚拟介质。例如基于光纤的FCP链路协议,基于SAS的链路协议,基于虚拟IP链路的ISCSI协议。

三、SCSI逻辑拓扑
863325e342bba57a19.png
逻辑单元(LUN):LUN是SCSI目标器中所描述的名字空间资源,一个目标器可以包括多个LUN,而且每个LUN的属性可以有所区别,比如LUN#0可以是磁盘,LUN#1可以是其他设备。
启动器(Initiator):本质上,SCSI是一个C/S架构,其中客户端成为启动器,负责向SCSI目标器发送请求指令,一般主机系统都充当了启动器的角色。
目标器(Target):处理SCSI指令的服务端称为目标器,它接收来自主机的指令并解析处理,比如磁盘阵列的角色就是目标器。
SCSI的Initiator与Target共同构成了一个典型的C/S模型,每个指令都是“请求/应答”这样的模型来实现。
Initiator主要任务:发出SCSI请求。
Target主要任务:回答SCSI请求,通过LUN提供业务,并通过任务管理器提供任务管理功能。

四、SCSI启动器模型
819755e342c742b1bd.png
主机的SCSI系统一般工作中“启动器”模式下面,由于SCSI的体系结构来说,分为了“架构层(中间层)”,“设备层”,“传输层”,故此一般的操作系统,都将SCSI分为三个层次,包括Windows, Linux, AIX, Solaris ,BSD。
Windows下的启动器架构:Windows将SCSI启动器分为三个逻辑层次,其中ScsiPort负责实现SCSI的基本框架性处理流程,比如设备发现,名字空间扫描等。若需要了解Windows驱动的详细细节可以参考DDK的文档或者WDM相关资料。
Linux下的启动器架构:Linux将SCSI启动器分为三个逻辑层次,其中scsi_mod中间层复杂处理SCSI设备无关和适配器无关的流程处理,比如一些异常,名字空间维护等。HBA驱动提供SCSI指令的打包解包传输等链路实现细节,设备驱动实现特定的SCSI设备驱动,比如著名的sd(SCSI磁盘)驱动,st(SCSI磁带)驱动,sr(SCSI光盘设备)驱动等。
Solaris下的启动器架构:Solaris的结构和Linux/Windows很类似,这里不再多说。
AIX下的启动器架构:AIX的结构也是分为三层,即:SCSI设备驱动,SCSI中间层,SCSI适配驱动。

五、SCSI目标器模型
38795e342ccc97f0d.png
Target一般依据SCSI体系结构,分为三个层次,分别是链路端口层(Port Layer),中间层( Middle Layer),目标设备层(Device Layer)。其中最重要的是中间层,在中间层中将以SAM/SPC为规范,对LUN命名空间,链路端口,目标设备,任务,任务集,会话等进行管理维护。端口层的驱动都以注册的形式动态载入,设备层的驱动也是动态载入。
目标器中PORT模型:PORT驱动将动态载入,PORT主要完成的任务是对链路上携带的SCSI指令的解包和封包,比如将指令打包为FPC或者ISCSI或者SAS等,或者将指令从FCP/ISCSI/SAS中解开。iSCSI/FCP/SAS等硬件的目标器模式驱动都属于PORT范畴,PORT需要提供的方法函数可能包括,传输报文(xmit_response),准备好接受数据(xfer_data),管理指令处理完毕回调(mgmt_task_done),任务处理结束(cmd_done),端口控制(复位等control)等。
目标器中间层:中间层维护了“LUN空间”,“任务集”,“任务(命令)”等模型,对于LUN空间维护有两种截然不同的实现方法,一种是所有的PORT都看见的是一个全局的LUN,并外一种是为每个PORT维护一个LUN空间,其中第一种方法实现较为简单,这里的讨论以第一种展开。
目标器中的Device模型:本质上Device是一个SCSI指令“分析器”,通过处理INQUIRY告诉Initiator当前LUN是什么设备,通过READ/WRITE处理IO。

六、SCSI协议寻址
351025e342d6be0de4.png
为了对连接在SCSI总线上的设备寻址,SCSI协议引入了SCSI设备ID和逻辑单元号LUN(Logical Unit Number)。在SCSI总线上的每个设备都必须有一个唯一的设备ID,当然服务器中的主机总线适配器也拥有自己的设备ID,固定为7。每条总线,包括总线适配器,最多允许有8个或者16个设备ID。设备ID一方面用以寻址,另一个作用是标识该设备在总线使用上的优先级。此外,在同一条总线上连接的不同的设备的设备ID必须不同,否则就会引起寻址和优先级的冲突。
每一个存储设备可能包括若干个子设备,如虚拟磁盘、磁带驱动器等。 因此SCSI协议引入了逻辑单元号LUN ID,以便于对存储设备中的子设备进行寻址。
传统的SCSI控制器连接单条总线,相应的只具有一个总线号。企业级的一个服务器则可能配置了多个SCSI控制器,从而就可能有多条SCSI总线。在引入存储网络之后,每个FC HBA(Host Bus Adapter)或iSCSI(Internet SCSI)网卡也都各连接着一条总线,因此必须对每一条总线分配一个总线号,在他们之间依靠不同的总线号加以区分。我们可以使用一个三元描述标识一个SCSI目标:总线号/目标设备ID/逻辑单元号LUN ID。

七、iSCSI的诞生与定义
scsi的弊端:允许连接设备数量较少、连接设备距离非常有限;
因此,基于IP网络的scsi:iscsi,诞生了。

iSCSI协议最早由IBM、CISCO、HP发起,2004年起作为正式的IETF标准,现有的iSCSI协议依据SAM2(SCSI Architecture Model-2)。
iSCSI (Internet SCSI)把SCSI命令和块状数据封装在TCP中在IP网络中传输。
iSCSI作为SCSI的传输层协议,基本出发点是利用成熟的IP网络技术来实现和延伸SAN。
981625e342e0204821.png
iSCSI是互联网小型计算机系统接口(Internet Small Computer System Interface)的简称,是一种在TCP/IP上进行数据块传输的标准,可以理解为SCSI over IP。
iSCSI可构成基于IP的SAN,为用户提供高速、低价、长距离的存储解决方案。
iSCSI将SCSI命令封装到TCP/IP数据包中,使I/O数据块可通过IP网络传输。
iSCSI (Internet SCSI)把SCSI命令和块状数据封装在TC。P中在IP网络中传输。iSCSI作为SCSI的传输层协议,基本出发点是利用成熟的IP网络技术来实现和延伸SAN。
iSCSI协议是SCSI远程过程调用模型到TCP/IP协议的映射。SCSI协议层负责生成CDB,并将其送到iSCSI协议层,然后由 iSCSI协议层进一步封装成PDU,经IP网络进行传送。

八、iSCSI启动器-目标器模型
595465e6844f5b2ff8.png
发起端(Initiator):
SCSI层负责生成CDB(命令描述符块),将CDB传给iSCSI。
iSCSI层负责生成iSCSI  PDU(协议数据单元),并通过IP网络将PDU发给target。
目标器(Target):
iSCSI层收到PDU,将CDB传给SCSI层。
SCSI层负责解释CDB的意义,必要时发送响应。

506875e342e88be4cc.png
iSCSI节点将SCSI指令和数据封装成iSCSI包,然后该数据封装被传送给TCP/IP层,再由TCP/IP协议将iSCSI包封装成IP协议数据以适合在网络中传输。











打赏鼓励作者,期待更多好文!

打赏
13人已打赏

一个无趣的人 发表于 2020-2-1 21:52
  
干货满满,感谢楼主的分享!:加油:
Sangfor_闪电回_朱丽 发表于 2020-2-8 22:08
  
您好,感谢您参与社区原创分享计划6,您的文章已被收录到计划中,交由专家评审小组评审,文章标签在专家评审后设置,分享奖励将在活动结束后统一安排发放!分享越多,奖励越多,期待您更多的精彩分享哦!:感恩:
关于技术文章的管理流程,请参考:http://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=90279
心灵鸡汤 发表于 2020-2-11 15:53
  
不错,学习一下
flying 发表于 2020-2-13 08:49
  
谢谢分享,认真学习了
陈璨 发表于 2020-2-14 20:41
  
通读全文,发现没看懂
厌児 发表于 2020-2-15 15:00
  
厉害了,又学到了新技能!向楼主学习!
YangZheng 发表于 2020-2-15 23:36
  
学习学习!
新手031815 发表于 2020-2-16 13:31
  
不错,学习一下
司马缸砸了光 发表于 2020-2-16 13:41
  
我也来凑下热闹
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
技术笔记
每周精选
干货满满
技术咨询
信服课堂视频
秒懂零信任
自助服务平台操作指引
新版本体验
标准化排查
产品连连看
安装部署配置
功能体验
GIF动图学习
玩转零信任
2023技术争霸赛专题
安全攻防
每日一记
深信服技术支持平台
天逸直播
技术晨报
华北区交付直播
社区帮助指南
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
运维工具
云计算知识
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
通用技术
卧龙计划
华北区拉练
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV

本版版主

217
272
151

发帖

粉丝

关注

本版达人

皮皮虾·真

本周建议达人

郑州网络

本周分享达人

二进制网络

本周提问达人