iscsi协议及实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
iSCSI & NAS
在NAS上部署iSCSI协议很简单,因为不需要任 何硬件上的改动,只是驱动软件的安装
iSCSI & SAN
The end
涉及到的SCSI的概念
CDB:命令描述块。SCSI的命令及参数是填充 在一定长度的数据块内传输的
SCSI read(6) CDB
典型的SCSI系统
SCSI的缺点
SCSI是点对点的、直接相连的计算机到 存储器的设备接口,不适用于主机到存 储器的存储网络通讯 SCSI总线的长度被限制在25米以内,对 于Ultra SCSI长度限制为12米,不适于构 造各种网络拓扑结构 SCSI总线上设备数限制为15,不适用于 多服务器对多存储设备的网络结构
Target_Emulator Scsi_Target_Template Scsi_Target_Device Target_Scsi_Cmnd scsi_request Target_Scsi_Message scsi_cmnd sg_io_hdr_t
STML的初始化
初始化一个struct Target_Emulator类型 的全局变量 创建线程scsi_target_process_thread处 理大多数的STML的工作 进入等待
FETD提供给STML的API
detect() release() xmit_response() rdy_to_xfer() task_mgmt_fn_done() report_aen()
重要的Байду номын сангаас据结构
struct struct struct struct struct struct struct struct
将STML和FETD分开的原因
增强程序的可重用性
STML是通用的 FETD是和底层采用的通讯协议(TCP/IP、 Fibre channel)相关的
程 序 功 能 模 块 图
STML提供给FETD的API
register_target_template() deregister_target_template() register_target_front_end() deregister_target_front_end() rx_cmnd() scsi_rx_data() scsi_target_done() scsi_release() rx_task_mgmt_fn()
iSCSI登录和协商
iSCSI登录是用来在启动设备和目标设备之间建 立TCP连接的机制 登录的作用包括鉴别通讯双方、协商会话参数、 打开相关安全协议并且给属于该会话的连接作 标记 登录过程完成后,iSCSI会话进入全功能相 (full feature phase),这时启动设备就能通 过iSCSI协议访问目标设备里的各逻辑单元了
iSCSI地址格式
iSCSI的发现机制
启动设备可以通过下列方法发现目标设备:
在启动设备上设置目标设备的地址 在启动设备上设置默认目标设备地址,启动设备 可通过“SendTargets”命令从默认目标设备上获 取iSCSI名字列表 发出服务定位协议(SLP)广播请求,等待目标设 备回应 查询存储设备名字服务器获取可访问的目标设备 列表
Iscsi-0.1.tar.gz:
程序的运行
启动设备端:
insmod scsi_target.o insmod iscsi_target.o insmod iscsi.o insmod iscsi_client.o fdisk /dev/sda mke2fs /dev/sda1 mount –t ext2 /dev/sda1 /mnt/iscsi raiddev /dev/md0(多个目标设备)
Byte 0 4 8 12 16 20 24 28 + 44 CmdSN ExpStatSN or EndDataSN SCSI Command Descriptor Block (CDB) 0 Opcode 1 2 3 Reserved Opcode—specific fields Logical Unit Number (LUN) Initiator Task Tag Expected Data Transfer Length
iSCSI协议的实现
iSCSI代码来源
iscsi-Apr6.tgz:
Intel (http://sourceforge.net)
kernel_emulator_10.tgz:
IOL(InterOperability Lab) of UNH(University of New Hampshire) (http://www.iol.unh.edu) iSCSI research team of UML(University of Massachusetts Lowell) (http://www.cs.uml.edu/~mbrown/iscsi)
响应/状态编号
从目标设备到启动设备的响应由iSCSI编 号,在iSCSI协议数据单元中用状态序列 号(StatSN)表示 启动设备提供期望状态序列号ExpStatSN 来确认状态 如果状态序列号和期望状态序列号不同 则意味着连接出现了错误
协议数据单元格式
iSCSI启动设备命令基本首部(BHS)
FETD创建一个Target_Scsi_Cmnd类型的 数据接收SCSI命令,将其加入命令队列, 唤醒STML的线程STT处理收到的SCSI命 令
STML对FETD的响应
调用handle_cmd处理命令队列 调用hand_to_front_end返回处理结果 处理结果加入FETD的发送队列 xmit_queue等待发送 在结果发送完成后调用 scsi_target_dones释放资源
iSCSI会话(session)
启动设备和目标设备之间的TCP连接构成 一次会话
一个会话包含一个或多个TCP连接 会话由会话号区分,会话号包括启动设备部 分和目标设备部分 会话中包含的TCP连接可以增加也可以删除, 这些连接由连接号(CID)区分
命令编号
从启动设备到目标设备SCSI层的命令由 iSCSI编号,该号码由iSCSI协议数据单元 中的命令序列号(CmdSN)携带 目标设备的iSCSI层必须按命令序列号的 顺序把命令传递给SCSI层 目标设备的SCSI层接收到命令后该命令 序列号即失效。命令序列号也能被用来 进行命令的流量控制
iSCSI协议及实现
iSCSI协议简介
涉及到的SCSI的概念
启动设备和目标设备
启动设备(initiator):发起I/O请求的设备 目标设备(target):响应请求执行实际I/O操作 的设备 在启动设备和目标设备建立连接后,目标设 备在操作中作为主设备控制整个工作过程 一般情况下主机适配器HBA作为启动设备, 磁盘/磁带作为目标设备
读 类 型 命 令 的 处 理
iSCSI 的应用
采用iSCSI的设备的特点
采用了iSCSI协议的硬件设备是NAS和 SAN的中间产品,它能简单连接到企业内 部网,做到即插即用。而每一个远程用 户端对该存储设备的访问效果接近于在 本地直接访问SCSI盘。 为无法承担光纤通道SAN环境基础结构高 成本的中间市场客户提供利用SAN所带来 的好处
iSCSI的命名和编址
iSCSI使用类似URL的iSCSI名字来唯一鉴 别启动设备和目标设备。 地址会随着启动设备和目标设备的移动 而改变,但名字始终是不变的
iSCSI的命名和编址
一个iSCSI名字由三部分组成:类型定义 符、名字认证机构、由该认证机构分配 的名字
iscsi.com.acme.sn.8675309 <domain-name>[:<port>]/<iSCSI Name>
iSCSI产品
Cisco SN 5420 Storage Router
IBM TotalStorage IP Storage 200i
用Cisco SN 5420构造的存储系统
iSCSI协议结构
1.概述 2.协议数据单元格式 3.用于iSCSI协议的SCSI模式参数 4.登录相 5.登录相之外的工作参数协商 6.错误处理和恢复
客户端:
程序的结构(目标设备)
1.STML(SCSI Target mid-level)
处理SCSI命令 将STML发来的命令数据封装成底层通讯协 议数据包的格式发送到网络上或者将从网络 接受到的数据包解包传递给STML
2.FETD(front-end Target driver)
SCSI 传 输 协 议
iSCSI的概念
iSCSI是关于SCSI的命令 、数据和状态到TCP/IP 网络的映射的 协议 对TCP层的改造和增加较 低功能层(对TCP层透明) 是为了适应大批量存储数 据传输的需要
iSCSI协议现状
IETF正在制定iSCSI协议标准,最新草案 是draft-ietf-ips-iSCSI-06 IETF:http://www.ietf.org/ IPS工作组: http://www.ece.cmu.edu/~ips/
FETD的初始化
向STML注册,STML将其加入设备队列 创建线程iscsi_server_thread监听端口 4002 进入等待
FETD向STML的注册过程
FETD向STML注销过程
FETD对请求的响应
当在4002端口监听的线程接收请求后
创建线程iscsi_rx_thread接收SCSI命令 创建线程iscsi_tx_thread传送应答和状态