- 论坛徽章:
- 0
|
iSCSI协议一致性测试
ITC
2009-12-15
Table of Contents
SCSI和iSCSI协议
iSCSI一致性测试
iSCSI一致性测试的常见类型
iSCSI一致性测试工具的要求
现有的iSCSI一致性测试工具
iSCSI是流行的SAN(Storage area network)协议。本文简单介绍了iSCSI协议一致 性测试,以及相关的测试工具。
SCSI和iSCSI协议
SCSI(Small Computer System Interface)是用于与I/O设备,尤其是存储设备进行交互的协议簇。SCSI客户端,即“initiator”,向服务器端(即“target”)的逻辑单元发送 SCSI命令以请求服务。“SCSI transport”将SCSI协议的客户端-服务器端映射到特定的互联系统。Initiator是SCSI transport的一端,target是另一端。
iSCSI(Internet Small Computer System Interface)协议使用TCP/IP作为SCSI transport。通过在TCP/IP上传输SCSI数据包,iSCSI提供了一种可互操作的解决方案,它利用了现有的Internet基础设施和管理工具,并且突破了距离限制。与需要专用线缆的传统光纤不同,iSCI可以在现有的网络系统上运行。由于其可扩展性和经济效益,iSCSI已经成为流行的 SAN(Storage area network)协议。iSCSI在IETF RFC 3720 iSCSI中定义,并在IETF RFC 5048 iSCSI Corrections and Clarifications RFC中更新。
iSCSI一致性测试
在iSCSI协议中,SCSI的传输层从传统的可靠总线移到了不可靠的TCP/IP网络。这一变化同时也导致相当程度的复杂性被引入了iSCSI协议:
- 需要Login/Logout过程。
- 在Login过程中需要协商Security/Operational参数。
- Login过程可能使用CHAP或其它认证方法。
- 可能需要多session/connection。
- 可以实现多个错误恢复级别。
- ...
由此可见,尽管iSCSI的经济效益优于传统协议,其协议本身仍比较复杂。
从协议批准时起,iSCSI逐渐获得了终端用户和存储厂商的接受。现在市场上已经有了众多的iSCSI initiator/target实现,这些实现在功能上和协议一致性上都有所区别。
一致性测试可以帮助我们衡量一个系统是否符合特定的标准。它通常由第三方组织(有时是标准化组织自身)执行,从而保证更大程度的兼容性。通过测试的产品则可以宣称自己符合特定的标准,并得到了第三方组织的认证。对于iSCSI协议(或者其他数据网络和存储协议),新罕布什尔大学互操作实验室(The University of New Hampshire InterOperability Laboratory,UNH-IOL)是一个主要的中立第三方实验室,它提供iSCSI一致性测试的测试套件。
以下摘自UNH-IOL的iSCSI一致性测试套件:
这些测试是用来衡量一个iSCSI产品是否符合IETF RFC 3720 iSCSI和IETF RFC 5048 iSCSI Corrections and Clarifications RFC的规定。通过套件中的所有测试并不保证被测设备能够与其它iSCSI产品成功地互操作。但是有了IOL的测试基础,这些测试在一定程度上保证了被测设备在很多iSCSI环境中可以正常运转。
iSCSI一致性测试主要包含以下方面:
- Login Phase一致性
- 测试协商的key-value对
- 测试各种标志:CSG, NSG, C bit, T bit
- ...
- Full Feature Phase一致性
- 测试序号(CmdSN, DataSN, R2TSN)
- 测试SCSI Command/Response, Task Management Function Request/Response, Text Request/Response, NOP-In/NOP-Out, SNACK Request
- ...
- CHAP一致性
- 测试CHAP字段: CHAP_A, CHAP_C, CHAP_I, CHAP_N, CHAP_R
- 多连接一致性
- 测试连接建立、断开、参数协商、序号和任务管理的多连接支持
- 错误恢复一致性
- 测试Initiator/Target的错误恢复支持
iSCSI一致性测试的常见类型
为了衡量被测设备是否遵循iSCSI协议,我们主要做以下两种测试:
- 做正确的事情,观察被测设备的行为是否正常。 这时的主要任务是向被测设备发送一系列正确的iSCSI PDU,并验证被测设备回应了正确的PDU及字段。
- 做错误的事情,观察被测设备是否能检测到错误并做相应处理。 这时,我们必须修改发送给被测设备的PDU序列(如修改命令的CmdSN、设置错误的data digest...),并验证被测设备是否能根据协议作出反应(如发送Reject PDU、断开连接...)。
iSCSI一致性测试中常见的几个方面如下:
- iSCSI功能测试 测试一个iSCSI任务是否能正确执行(Task Management Function, NOP-In/NOP-Out Ping, multiple connections management...)。
- PDU格式错误 例如,如果iSCSI Command PDU中的W位和F位同时被置位就是一个错误。
- PDU session/stage错误 例如,在login stage或discovery session中出现了一个SCSI Command PDU就是一个错误。
- Header/Data digest错误 Digest错误会导致Target/Initiator发送Reject/SNACK PDU。
- 序号错误 CmdSN/StatSN/DataSN/R2T,这些序号都有不同的作用范围和规则。
- 协商错误 Text参数的格式为key=value,后接一个空(“0x00”)结束符。每个text参数都有自己的有效阶段和协商规则。例如,FirstBurstLength不能超过MaxBurstLength,SendTargets只能在Full Feature Phase出现,等等。
- 数据长度错误 发送的数据长度太大或太小。
- PDU丢失 丢掉一个incoming PDU然后发送SNACK请求,或者丢掉一个outgoing PDU然后重发。
上述的大部分情况可以通过修改外发PDU的内容来实现。例如,要模拟一个data digest错误,我们只需修改PDU的DataDigest字段。
iSCSI一致性测试工具的要求
iSCSI一致性测试工具可以看成是iSCSI Initiator模拟器(用来测试iSCSI Target),或是iSCSI Target模拟器(用来测试iSCSI Initiator)。好的iSCSI一致性测试工具应当符合以下要求:
- 可执行的测试脚本
每个测试用例需要一个可执行的测试脚本。它应当根据测试用例描述编写,测试用例描述定义了PDU序列和检查点。 - iSCSI Engine核心
iSCSI Engine核心负责与被测设备间iSCSI PDU的发送与接收。一方面,它从测试脚本接受输入,发送PDU或验证检查点;另一方面,它应当在一定程度上理解iSCSI协议,从而实现必要的自动化。例如iSCSI PDU(协商阶段的Login/Text Request、Nop-Out ping response)及字段(ITT、TTT、CmdSN、data、digest...)的自动生成。 - PDU格式合法性验证
对于接收到的PDU,iSCSI Engine核心应当进行合法性验证以发现格式错误的PDU。 - 可以修改PDU的内容
我们一般通过向被测设备发送修改过的PDU来模拟PDU格式错误。 - 可以丢弃PDU
可以通过丢弃PDU来模拟传输中丢失的PDU。 - 可以维护多session/connection。
与错误恢复相似,多sesion/connection是iSCSI协议的高级部分。 - 测试结果与日志
测试用例执行成功或失败应当有明确的指示。分析执行过程需要详细的log。如果有图形界面来分析PDU记录文件就更好了。 - 批处理系统
批处理系统用来管理测试套件和测试用例,从而大量的测试脚本可以在无人干预的情况下自动运行。
现有的iSCSI一致性测试工具
以下列出的iSCSI一致性测试工具可以在Internet上搜索到:
- UNH-IOL 测试服务
iSCSI联盟提供服务从交互性和一致性两方面测试iSCSI产品和软件。需要成为其成员以使用最新的测试设备和IOL测试工具。 - iSWAT
iSWAT测试方案是IP存储网络程序员的iSCSI协议测试和分析工具。它是市场上首款综合各种专业功能的软件,提供了单一且功能强大的测试环境。
这款商业软件的特点如下:- iSCSI数据流的生成与监控
- Initiator和Target测试模块
- 错误注入命令和报告生成
- 内置的iSCSI错误检测和自动恢复
- SCSI驱动的target以及target模拟
- 包含许多示例脚本
- 交互式与脚本驱动测试模式
- 实现了SCSI和iSCSI命令集
- iSCT
iSCT是一个强大的iSCSI Initiator模拟器,用来测试iSCSI target的一致性。该软件用Python实现,包含与UNH-IOL相似的测试套件,可以自动运行所有测试用例的批处理系统,以及模拟 WireShark界面的GUI协议分析器。该工具的优点:- 跨平台,因为用Python实现
- 图形界面内置测试模式
- 被测设备自动检测与配置
- 内置图形协议分析器
- 详尽的测试报告
- iSCSISim
iSCSISim是一个通用的开源iSCSI target测试工具。完全用Python实现,该工具的功能包括SCSI Command插入、错误注入、和恢复测试、内置的测试结果验证。该工具还支持命令序列和任务管理,并可以通过代理方法模拟connection丢失。
|
|