iscsi协议及实现
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的工作 进入等待
iSCSI & NAS
在NAS上部署iSCSI协议很简单,因为不需要任 何硬件上的改动,只是驱动软件的安装
iSCSI & SAN
The end
iSCSI协议的实现
iSCSI代码来源
iscsi-Apr6.tgz:
Intel ()
kernel_emulator_10.tgz:
IOL(InterOperability Lab) of UNH(University of New Hampshire) () iSCSI research team of UML(University of Massachusetts Lowell) (/~mbrown/iscsi)
将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()
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会话(session)
启动设备和目标设备之间的TCP连接构成 一次会话
一个会话包含一个或多个TCP连接 会话由会话号区分,会话号包括启动设备部 分和目标设备部分 会话中包含的TCP连接可以增加也可以删除, 这些连接由连接号(CID)区分
命令编号
从启动设备到目标设备SCSI层的命令由 iSCSI编号,该号码由iSCSI协议数据单元 中的命令序列号(CmdSN)携带 目标设备的iSCSI层必须按命令序列号的 顺序把命令传递给SCSI层 目标设备的SCSI层接收到命令后该命令 序列号即失效。命令序列号也能被用来 进行命令的流量控制
FETD的初始化
向STML注册,STML将其加入设备队列 创建线程iscsi_server_thread监听端口 4002 进入等待
FETD向STML的注册过程
FETD向STML注销过程
FETD对请求的响应
当在4002端口监听的线程接收请求后
创建线程iscsi_rx_thread接收SCSI命令 创建线程iscsi_tx_thread传送应答和状态
客户端:
程序的结构(目标设备)
1.STML(SCSI Target mid-level)
处理SCSI命令 将STML发来的命令数据封装成底层通讯协 议数据包的格式发送到网络上或者将从网络 接受到的数据包解包传递给STML
2.FETD(front-end Target driver)
读 类 型 命 令 的 处 理
iSCSI 的应用
采用iSCSI的设备的特点
采用了iSCSI协议的硬件设备是NAS和 SAN的中间产品,它能简单连接到企业内 部网,做到即插即用。而每一个远程用 户端对该存储设备的访问效果接近于在 本地直接访问SCSI盘。 为无法承担光纤通道SAN环境基础结构高 成本的中间市场客户提供利用SAN所带来 的好处
iSCSI地址格式
iSCSI的发现机制
启动设备可以通过下列方法发现目标设备:
在启动设备上设置目标设备的地址 在启动设备上设置默认目标设备地址,启动设备 可通过“SendTargets”命令从默认目标设备上获 取iSCSI名字列表 发出服务定位协议(SLP)广播请求,等待目标设 备回应 查询存储设备名字服务器获取可访问的目标设备 列表
iSCSI登录和协商
iSCSI登录是用来在启动设备和目标设备之间建 立TCP连接的机制 登录的作用包括鉴别通讯双方、协商会话参数、 打开相关安全协议并且给属于该会话的连接作 标记 登录过程完成后,iSCSI会话进入全功能相 (full feature phase),这时启动设备就能通 过iSCSI协议访问目标设备里的各逻辑单元了
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(多个目标设备)
iSCSI协议及实现
iSCSI协议简介
涉及到的SCSI的概念
启动设备和目标设备
启动设备(initiator):发起I/O请求的设备 目标设备(target):响应请求执行实际I/O操作 的设备 在启动设备和目标设备建立连接后,目标设 备在操作中作为主设备控制整个工作过程 一般情况下主机适配器HBA作为启动设备, 磁盘/磁带作为目标设备
涉及到的SCSI的概念
CDB:命令描述块。SCSI的命令及参数是填充 在一定长度的数据块内传输的
SCSI read(6) CDB
典型的SCSI系统
SCSI的缺点
SCSI是点对点的、直接相连的计算机到 存储器的设备接口,不适用于主机到存 储器的存储网络通讯 SCSI总线的长度被限制在25米以内,对 于Ultra SCSI长度限制为12米,不适于构 造各种网络拓扑结构 SCSI总线上设备数限制为15,不适用于 多服务器对多存储设备的网络结构
FETD创建一个Target_Scsi_Cmnd类型的 数据接收SCSI命令,将其加入命令队列, 唤醒STML的线程STT处理收到的SCSI命 令
STML对FETD的响应
调用handle_cmd处理命令队列 调用hand_to_front_end返回处理结果 处理结果加入FETD的发送队列 xmit_queue等待发送 在结果发送完成后调用 scsi_target_dones释放资源
响应/状态编号
从目标设备到启动设备的响应由iSCSI编 号,在iSCSI协议数据单元中用状态序列 号(StatSN)表示 启动设备提供期望状态序列号ExpStatSN 来确认状态 如果状态序列号和期望状态序列号不同 则意味着连接出现了错误
协议数据单元格式
iSCSI启动设备命令基本首部(BHS)
FETD提供给STML的API
detect() release() xmit_response() rdy_to_xfer() task_mgmt_fn_done() report_aen()
重要的数据结构
struct struct struct struct struct struct struct struct
iSCSI的命名和编址
iSCSI使用类似URL的iSCSI名字来唯一鉴 别启动设备和目标设备。 地址会随着启动设备和目标设备的移动 而改变,但名字始终是不变的
iSCSI的命名和编址
一个iSCSI名字由三部分组成:类型定义 符、名字认证机构、由该认证机构分配 的名字
.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.错误处理和恢复
SCSI 传 输 协 议
iSCSI的概念
iSCSI是关于SCSI的命令 、数据和状态到TCP/IP 网络的映射的 协议 对TCP层的改造和增加较 低功能层(对TCP层透明) 是为了适应大批量存储数 据传输的需要
iSCSI协议现状