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

不懂就问 140538人觉得有帮助

{{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逻辑拓扑
逻辑单元(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启动器模型
主机的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目标器模型
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协议寻址
为了对连接在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。
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启动器-目标器模型
发起端(Initiator):
SCSI层负责生成CDB(命令描述符块),将CDB传给iSCSI。
iSCSI层负责生成iSCSI  PDU(协议数据单元),并通过IP网络将PDU发给target。
目标器(Target):
iSCSI层收到PDU,将CDB传给SCSI层。
SCSI层负责解释CDB的意义,必要时发送响应。

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











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

打赏
13人已打赏

guhui 发表于 2024-4-20 07:12
  
打卡学习,感谢大佬分享!
cute8008 发表于 2024-4-15 15:14
  
写得非常详细,感谢作者。
KIKIRO 发表于 2021-11-8 13:48
  
各协议使用的端口号能说下嘛
这娘们不是好人 发表于 2021-11-7 20:38
  
学习到了                 
广州联悦李励 发表于 2020-3-11 09:29
  
写得非常详细,感谢作者。
sangfor_闪电回_小六 发表于 2020-3-2 23:28
  
这么好的帖子,倘若别人看不到,那么不是浪费楼主的心血吗? 经过痛苦的思想斗争,我终于下定决心,我要把这个帖子一直往上顶,往上顶到所有人都看到为止!
新手065561 发表于 2020-2-28 17:32
  
非常感谢,以前的困惑被一扫而空
YangZheng 发表于 2020-2-23 23:23
  
先收藏学习了
新手741261 发表于 2020-2-21 09:31
  

涨姿势了!!
发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
安全效果
每日一问
干货满满
【 社区to talk】
新版本体验
技术笔记
功能体验
产品连连看
技术咨询
GIF动图学习
标准化排查
2023技术争霸赛专题
每周精选
通用技术
信服课堂视频
秒懂零信任
自助服务平台操作指引
安装部署配置
排障笔记本
答题自测
原创分享
升级&主动服务
社区新周刊
POC测试案例
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
技术晨报
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高手请过招
高频问题集锦
全能先锋系列
云化安全能力

本版版主

189
299
979

发帖

粉丝

关注

217
288
151

发帖

粉丝

关注

25
13
5

发帖

粉丝

关注

7
11
24

发帖

粉丝

关注

5
7
7

发帖

粉丝

关注

31
34
45

发帖

粉丝

关注

本版达人

皮皮虾·真

本周建议达人

郑州网络

本周分享达人

二进制网络

本周提问达人