CN101132376A - 控制iSCSI报文发送、接收的方法和装置及相应系统 - Google Patents

控制iSCSI报文发送、接收的方法和装置及相应系统 Download PDF

Info

Publication number
CN101132376A
CN101132376A CNA2007101753126A CN200710175312A CN101132376A CN 101132376 A CN101132376 A CN 101132376A CN A2007101753126 A CNA2007101753126 A CN A2007101753126A CN 200710175312 A CN200710175312 A CN 200710175312A CN 101132376 A CN101132376 A CN 101132376A
Authority
CN
China
Prior art keywords
protocol data
data unit
sequence number
module
hint instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2007101753126A
Other languages
English (en)
Other versions
CN101132376B (zh
Inventor
景冬生
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Technologies Co Ltd
Original Assignee
Hangzhou H3C Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou H3C Technologies Co Ltd filed Critical Hangzhou H3C Technologies Co Ltd
Priority to CN2007101753126A priority Critical patent/CN101132376B/zh
Publication of CN101132376A publication Critical patent/CN101132376A/zh
Application granted granted Critical
Publication of CN101132376B publication Critical patent/CN101132376B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Communication Control (AREA)

Abstract

本发明公开了一种控制iSCSI报文发送、接收的方法和装置,应用于IP存储系统中互为对端的发起设备或目标设备中。该发送方法包括:发送端依次赋予PDU一全局序列号并向接收端发送;从接收端接收到的发送提示指令提取可处理的PDU最大序列号;不大于等于发送端下一待发送的PDU全局序列号,停止发送直至下一发送提示指令。该接收方法包括:提取接收的PDU的全局序列号;大于接收端可处理的PDU最大序列号时,向发送端发送一发送提示指令并拒绝接收。本发明还公开了一种控制iSCSI报文交互的系统。从而,将流控细化到每个PDU,实现了双向流控,减少设备的内存占用并降低了由于内存溢出的风险。

Description

控制iSCSI报文发送、接收的方法和装置及相应系统
技术领域
本发明涉及网络存储领域,尤其涉及一种控制iSCSI(互联网小型计算机系统接口,Internet Small Computer System Interface)报文发送的方法及装置,一种控制iSCSI报文接收的方法及装置,以及一种控制iSCSI报文交互的系统。
背景技术
SCSI(小型计算机系统接口,Small Computer System Interface)是一种广泛使用的连接硬盘和计算机的技术标准。在该标准体系中,发送一个SCSI命令的设备称为Initiator(发起设备),通常为服务器端或者应用主机;接收并响应要求的一方为Target(目标设备),通常为存储设备端,包括磁盘、磁带、光盘、打印机、扫描仪等。具体的,发起设备和目标设备之间的读写操作过程为:发起设备将SCSI命令描述块(Command Data Block,简称CDB)发送给目标设备,该CDB中包括由目标设备执行的SCSI命令和/或数据;目标设备将执行该CDB之后的响应或者数据以CDB的形式发送给发起设备。
发起设备和目标设备之间可以通过不同的物理连接方式来通信,比如光纤连接或者基于IP网络连接。iSCSI是一种基于TCP/IP的SCSI传输协议,通过IP网络在发起设备和目标设备之间完成CDB的封装和可靠转送等处理。目前,基于iSCSI协议进行数据传输的典型应用环境如图1所示,其具体读写操作过程为:发起设备100的SCSI层生成一个适当的SCSI命令和数据请求;iSCSI层封装该命令,并生成多个协议数据单元(protocol dataunit,简称PDU)来承载;为每一个PDU加上TCP/IP协议的包头,然后发送并通过IP网络传输;目标设备200收到这些PDU后,其iSCSI层按照相反的方向进行解封装后,发送给SCSI层进行SCSI命令和数据请求的解析获得CDB,并进行后续的存储处理;将执行该CDB之后的响应或者数据沿相反的路线发送给发起设备。
其中,iSCSI层所添加的TCP/IP协议的包头也称为基本头段(BHS)。为了对传输的iSCSI数据流进行控制,该BHS中设有三个字段CmdSN(命令序列号)、ExpCmdSN(扩展命令序列号)和MaxCmdSN(最大命令序列号),通过对发送的iSCSI命令进行流控,比如控制同时发送的iSCSI命令数等实现对数据流的控制。
可以看出,现有技术中iSCSI流控是一种基于命令的单向流控机制。同时,由于每个iSCSI命令所需要的空间和网络传输时间不同,如一个写命令可能携带大量的数据,而一个查询命令则不携带数据,因此这种单纯针对命令的流控粒度很粗;假设一种情况:根据命令流控的要求,最多同时发出32个命令,则当这32个命令都是写命令,且每个写命令有8MB数据的时候,如果目标设备的SCSI层这个时候忙,那么目标设备的协议栈就需要缓冲至少32×8=256MB的数据。显然,如果每个命令携带的数据量更大,或者对于采用iSCSI协议来做数据的存储和访问的小型设备来说,很可能出现缓存的数据量大于当前可以使用的内存的情况,从而导致设备不可用。总而言之,现有技术中,基于iSCSI的数据传输所采取的是粗粒度的单向流控,并由此导致设备内存占用大,甚至设备不可用的问题。
发明内容
本发明为了克服上述现有技术的缺陷,提供了一种控制iSCSI报文发送、接收和交互的技术方案,旨在实现细化流控粒度,减少设备的内存占用问题。
为实现上述目的,本发明的实施例提供了一种控制iSCSI报文发送的方法,应用于IP存储系统中互为对端的发起设备或目标设备中,其中,该iSCSI报文的/PDU封装有SCSI命令参数;包括以下步骤:
A1、发送端依次赋予PDU一全局序列号并记录在相应的PDU中,以及向接收端发送;
A2、从接收端接收到携带有可处理的PDU最大序列号的发送提示指令时,提取该PDU最大序列号;其中,接收端可处理的PDU最大序列号为接收端已组装为SCSI命令的PDUSN与接收端缓冲队列之和;
A3、检测该PDU序列号是否大于等于发送端下一待发送的PDU全局序列号;是则,从下一PDU开始,重新执行步骤A1;否则,执行步骤A4;
A4、发送端停止发送直至接收到下一次发送提示指令。。
本发明的实施例还提供了一种控制iSCSI报文接收的方法,应用于IP存储系统中互为对端的发起设备或目标设备中,其中,/该iSCSI报文的PDU封装有SCSI命令参数;包括以下步骤:
B1、当接收到一携带有全局序列号的PDU时,提取其全局序列号;
B2、检测该全局序列号是否小于或者等于接收端可处理的PDU最大序列号;其中,接收端可处理的PDU最大序列号为接收端已组装为SCSI命令的PDUSN与接收端缓冲队列之和;
B3、是则,继续接收后续的PDU,并对其执行步骤B1;
B4、否则,向发送端发送一携带接收端可处理的PDU最大序列号的发送提示指令,并丢弃该PDU及后续的PDU。
本发明的实施例还提供了一种控制iSCSI报文发送的装置,应用于IP存储系统中互为对端的发起设备或目标设备中,该发起设备或目标设备包括依次从设备SCSI层连接出来的用于将SCSI命令参数封装为PDU的iSCSI报文封装模块以及用于发送PDU的iSCSI报文发送模块;该装置包括:
序列号赋值模块,与iSCSI报文发送模块连接,用于依次给发送的PDU赋予一全局序列号,并将该全局序列号记录在相应的PDU中;
序列号记录模块,与序列号赋值模块连接,用于记录所发送PDU的全局序列号;
最大序列号提取模块,用于从接收到的发送提示指令中提取对端可处理的PDU最大序列号;其中,对端可处理的PDU最大序列号为对端已组装为SCSI命令的PDUSN与对端缓冲队列之和;
发送序列号比较模块,分别与序列号记录模块和最大序列号提取模块连接,用于检测对端可处理的PDU最大序列号是否大于等于本地下一待发送的PDU全局序列号,并输出比较结果;
发送控制模块,与发送序列号比较模块连接,用于在比较结果为是的情况下,控制所述iSCSI报文发送模块继续发送PDU,以及,在比较结果为否的情况下,阻止iSCSI报文发送模块继续发送直至接收到下一次发送提示指令。
本发明的实施例还提供了一种控制iSCSI报文接收的装置,应用于IP存储系统中互为对端的发起设备或目标设备中,该发起设备或目标设备包括依次连接到设备SCSI层的用于接收对端发送的PDU的iSCSI报文接收模块以及用于将接收到的PDU解封装为SCSI命令的iSCSI报文解封装模块;该装置包括:
全局序列号提取模块,用于从接收到的PDU中提取其全局序列号;
第一PDU记录模块,与设备SCSI层连接,用于记录本地可处理的PDU最大序列号,其中,本地可处理的PDU最大序列号为本地已组装为SCSI命令的PDUSN与本地缓冲队列之和;
接收序列号比较模块,分别与第一PDU记录模块和全局序列号提取模块连接,用于检测该全局序列号是否小于或者等于本地可处理的PDU最大序列号;
接收控制模块,与接收序列号比较模块连接,用于在比较结果为是的情况下,控制所述iSCSI报文接收模块继续接收PDU,以及,在比较结果为否的情况下,控制所述iSCSI报文接收模块丢弃该PDU及后续的PDU,并触发发送提示指令模块;
发送提示指令模块,与接收控制模块和第一PDU记录模块连接,用于通过iSCSI报文发送模块向对端发送一发送提示指令,所述发送提示指令携带有可处理的PDU最大序列号。
本发明的实施例还提供了一种控制iSCSI报文交互的系统,包括上述控制iSCSI报文发送的装置,以及,包括上述控制iSCSI报文接收的装置。
由上述技术方案可知,本发明通过为每一个PDU赋予全局序列号,具有以下有益效果:
1、将流控细化到每个PDU;
2、实现了双向流控;
3、减少设备的内存占用,降低了由于内存溢出而导致设备不可用的风险。
附图说明
图1为现有技术中基于iSCSI协议进行数据传输的典型应用环境示意图;
图2为本发明提供的控制iSCSI报文发送的方法一实施例的流程图;
图3为本发明提供的控制iSCSI报文发送的方法另一实施例的流程图;
图4为本发明提供的控制iSCSI报文接收的方法一实施例的流程图;
图5为进行MaxPDUSN变化检测的一实施例流程图;
图6为进行MaxPDUSN变化检测的另一实施例流程图;
图7为本发明提供的控制iSCSI报文发送的装置一实施例的框图;
图8为本发明提供的控制iSCSI报文发送的装置另一实施例的框图;
图9为本发明提供的控制iSCSI报文接收的装置一实施例的框图;
图10为本发明提供的控制iSCSI报文接收的装置另一实施例的框图;
图11为本发明提供的控制iSCSI报文交互的系统一实施例的框图。
具体实施方式
为了克服现有技术中针对命令的流控过于粗糙,以及由此导致的内存占用高甚至内存溢出,本发明提供的技术方案通过细化流控的粒度,将流控控制在一个较小粒度级别上,从而降低内存占用问题。下面结合附图和实施例,对本发明的技术方案做进一步的详细描述。
本发明的实施例提供了一种控制iSCSI报文发送的方法,应用于IP存储系统中互为对端的发起设备和目标设备中。由于发起设备需要将PDU发送给目标设备,而目标设备需要将执行的响应或者数据发送给发起设备,因此无论对于发起设备还是目标设备来说,都需要作为发送端对iSCSI报文发送进行控制,因此都适用于本发明所提供的控制iSCSI报文发送的方法。
相应的,本发明的实施例还提供了一种控制iSCSI报文接收的方法,应用于IP存储系统中互为对端的发起设备和目标设备中。具体的,当发起设备进行发送时,目标设备相应进行接收;当目标设备进行发送时,发起设备相应进行接收;所接收的iSCSI报文的PDU封装有SCSI命令参数。可以看出,无论对于发起设备还是目标设备来说,同样都需要作为接收端对iSCSI报文接收进行控制,因此都适用于本发明所提供的控制iSCSI报文接收的方法。
其中,对于同一设备而言,其作为发送端和接收端所处理的报文是不同的,其发送的是本地报文,所处理的是对端发送的报文;为了说明方便,也可以认为一设备发送第一PDU并处理对端发送的第二PDU,该第一/第二PDU都封装有SCSI命令参数;需要指出,该第一/第二仅为描述清楚之用,并非限制。比如,当将发起设备视为发送端时,可以认为发起设备发送第一PDU并处理目标设备发送的第二PDU,相应的,目标设备发送第二PDU,以及,处理第一PDU;当将目标设备视为发送端时,可以认为目标设备发送第一PDU并处理发送设备发送的第二PDU,相应的,发送设备发送第二PDU,以及,处理第一PDU。以下控制iSCSI报文发送的方法实施例所讨论的PDU都是发送端所发送的PDU,控制iSCSI报文接收的方法实施例所讨论的PDU都是发送端所发送的PDU。
请参考图2,一控制iSCSI报文发送的方法实施例包括以下步骤:
A1、发送端依次赋予PDU一全局序列号(PDUSN)并记录在相应的PDU中,以及向接收端发送;
一般来说,此处所指的PDUSN为发送端的全局序列号,也就是发送端和对端之间的PDUSN不致发生混淆。
同时,将PDUSN记录在PDU中的操作可以通过在PDU中添加字段实现。
A2、从接收端接收到携带有可处理的PDU最大序列号(MaxPDUSN)的发送提示指令时,提取该MaxPDUSN;其中,接收端可处理的MaxPDUSN为接收端已组装为SCSI命令的PDUSN与接收端缓冲队列之和;
其中,当接收端接收到PDU时将其置于缓冲队列中;此时该PDU为iSCSI报文,由iSCSI层对该PDU进行解封装;解封装后的PDU由SCSI层进行SCSI命令的组装。每当一个PDU完成SCSI命令组装后,其PDUSN失效,该PDU从缓冲队列中移除,则此时可处理的PDU就会相应增加一个,即MaxPDUSN+1。可以看出,MaxPDUSN为接收端当前所能够处理的最大PDUSN。
举例来说,当一次性收到5个全局序列号依次为3、4、5、6、7的PDU时,这5个PDU被送入缓冲队列中,其中PDUSN为3和4的PDU能够组成一个SCSI命令,PDUSN为5~7的PDU能够组成一个SCSI命令;假设此前的缓冲队列为空且其长度为7;则实际处理过程如下:
从PDUSN最低的PDU开始处理,先将PDUSN为3的PDU解封装,并进行SCSI的重组;由于该PDU自身无法组成一个SCSI命令,因此继续进行后一个PDU的解封装;此时,PDUSN为3的PDU并未组装为SCSI命令,因此还停留在缓冲队列中,MaxPDUSN为2(接收端已组装为SCSI命令的PDUSN)+队列长度7=9,即缓冲队列当前最多能容纳至PDUSN为9的PDU;
将PDUSN为4的PDU解封装并对于前两个PDU进行SCSI的重组成功后,则PDUSN为3、4的PDU同时从缓冲队列中移出,MaxPDUSN为4(接收端已组装为SCSI命令的PDUSN)+队列长度7=11,即缓冲队列当前最多能容纳至PDUSN为11的PDU;
之后,当解封装到PDUSN为7的PDU时,由于一直不能组装SCSI命令,因此MaxPDUSN保持11不变;当将PDUSN为7的PDU解封装并对于前三个PDU进行SCSI的重组成功后,MaxPDUSN为7(接收端已组装为SCSI命令的PDUSN)+队列长度7=14,即缓冲队列当前最多能容纳至PDUSN为14的PDU。
因此,通过检测接收到的MaxPDUSN是否大于等于本地下一待发送的PDUSN,就可以了解发送端是否可以继续进行PDU的发送,如下述步骤A3所描述。显然,在本步骤A2接收到发送提示指令之前,步骤A1中的发送PDU操作将保持进行。
至于该携带有MaxPDUSN的发送提示指令的发送时机,则由接收端具体掌握,可以在其检测到接收的PDU超出了处理范围时发出,也可以每接收到一个PDU就相应发出一个发送提示指令,具体如何选择不是本实施例所关注的问题。
A3、检测MaxPDUSN是否大于等于发送端下一待发送的PDUSN;是则,对下一PDU重新执行步骤A1;否则,执行步骤A4;
当接收到的MaxPDUSN大于等于发送端下一待发送的PDUSN,就说明接收端的缓冲队列还有能力继续接收PDU,因此可以继续发送。
A4、发送端停止发送直至接收到下一次发送提示指令。
可以看出,本实施例提供的控制iSCSI报文发送的方法通过对每个PDU进行编号,细化了流控的粒度;以本地一次发送32个报文为例,所需要的缓冲仅需要32*64KB=2MB,就目前而言,包括小型设备在内的内存都可以满足该空间要求,降低了内存溢出而导致系统不可用的风险。
此外,本实施例所提供的流控不再是单纯的根据发送方的预设进行发送,而是同时根据接收端的反馈(即发送提示指令)进行控制,是一种双向的流控机制,避免了现有技术中的丢包现象。
上述实施例中还存在一个问题,即发送端在接收到该发送提示指令之前,可能已经发送了一个或者多个超出接收端处理能力的PDU。由于该超出处理能力的PDU往往被丢弃,则为了保证发送信息的完整性,步骤A4中停止发送之后还包括:根据MaxPDUSN,定位MaxPDUSN+1的PDU作为下一待发送PDU,从而使接收端能够继续处理时,从该PDU开始执行发送,不致产生丢包现象。
一般情况下,当接收端检测到MaxPDUSN变化时将主动向发送端发送发送提示指令。但较佳的,为了保证发送/接收的有效进行,所述步骤A4还包括:当等待到达预设时间仍未接收到下一次发送提示指令时,向接收端发送接收提示指令,用于请求对方的发送提示指令。
之所以要进行以上操作,是因为一个SCSI命令往往由多个PDU构成,这就导致了如果构成一个SCSI命令的PDU数目超出了缓冲队列的总长度,接收端将由于缺少必要信息而无法重新组装出SCSI命令,显然,MaxPDUSN将一直保持不变,接收端也就不会主动发送新的发送提示指令。由于这种情况下继续等待不会有任何结果,因此必须由发送端主动进行发送提示指令的请求。
进一步的,请结合附图3,接收到下一次提示指令后还可包括:
A51、检测是否两次接收到的发送提示指令中MaxPDUSN相同;
如果相同,那么说明两次发送提示指令之间,接收端都没有办法继续向下处理,则需要进行命令的重新发送;如果不相同,则说明接收端仍在继续处理。如下述步骤A52所述。
A52、是则,对全局序列号为MaxPDUSN减去接收端缓冲队列值的PDU及其后续的PDU对应的SCSI命令,重新组装为多个新的SCSI命令,并对重新组装后每一SCSI命令的协议数据单元执行步骤A1;否则,重新执行步骤A3。
可以理解,在MaxPDUSN相同的情况下,将一个大命令分解为多个小命令,从而减少了携带每一个命令的PDU数目,能够保证接收端的正确解析;在MaxPDUSN不相同的情况下,对步骤A3的重新执行意味着对下一PDU重新执行步骤A1,特别是在定位了PDUSN为前一次发送提示指令中MaxPDUSN加1的PDU情况下,重新比较和发送的,就是该PDUSN,从而保证了数据的完整性。
此外,本领域技术人员可以理解,在实际应用中,发起设备和目标设备是互为对端的,也就是一方是发送端时,另一方是接收端,而且角色可以互换;这也就意味着同一个设备中一般都同时负有发送端和接收端两种功能,也就是其在发送本地PDU时,同时也在进行着从对端接收到的PDU的处理。
因此,更佳的技术方案为,所发送的PDU中还记录有发送端所在设备当前处理的从对端接收到的PDU序列号(CurrentPDUSN)和可处理的从对端接收到的MaxPDUSN;其中,发送端CurrentPDUSN为发送端所在设备已解封装的PDU序列号,即发送端iSCSI层解封装完成后的PDU序列号;发送端MaxPDUSN为发送端所在设备已组装为SCSI命令的PDUSN与发送端缓冲队列之和。表1显示了以字段形式添加PDUSN、CurrentPDUSN和MaxPDUSN后,一个PDU报文的构成:
  Byte     0     1     2     3
  Bit  01234567  01234567  01234567  01234567
  0-3  操作码(Opcode)  属性(Flag)
  4-7  附加头段长度(AHSLength)  数据段长度(DataSegmentLength)
  8-11  逻辑单元数或者保留(LUN or Reserved)
  12-15
  16-19  初始任务标签或者保留(ITT or Reserved)
  20-23  传输数据长度或者保留(TTT or Reserved)
24-27        状态序列号/命令序列号(StatSN/CmdSN)
28-32        扩展命令序列号/扩展状态序列号(ExpCmdSN/ExpStatSn)
33-35        最大命令序列号/保留(MaxCmdSN/Reserved)
36-39        数据序列号或者其他(DataSN or Others)
40-43        缓冲偏移量或者其他(Buffer Offset or Others)
44-47        剩余计数或者其他(Residual Count or Others)
48-51        PDUSN
 52-55        CurrentPDUSN
 56-59        MaxPDUSN
 60-63        头摘要(如果有)(Header Digest(if any))
 64-n+1    命令数据(DataSegment)
 n-n+4    数据摘要(如果有)(Data Digest(if any))
表1
显然,当设备之间交互的PDU报文具有表1所示的特性时,发送端设置可以不单纯依赖于发送提示指令,而通过直接提取从对端接收到的PDU报文中的信息进行流控。这种方案与上述实施例提供的通过发送提示指令获取信息的方案类似,在此不再赘述。进一步的,当PDU报文具有表1所示的特性时,可以不局限于比较MaxPDUSN是否变化,也可以通过比较CurrentPDUSN确定是否SCSI命令过大无法解析。
请参考图4,本发明提供的控制iSCSI报文接收的方法实施例包括以下步骤:
B1、当接收到一携带有PDUSN的PDU时,提取其PDUSN;
具体的PDU结构,可以参见上述表1所示。
B2、检测该PDUSN是否小于或者等于接收端MaxPDUSN;
其中,接收端MaxPDUSN为接收端已组装为SCSI命令的PDUSN与接收端缓冲队列之和;
可以看出,当PDUSN小于等于MaxPDUSN时,说明当前接收的PDU可以获得处理,因此执行步骤B3,否则说明接收到的PDU超出了接收端的处理能力,执行步骤B4。
B3、是则,继续接收后续的PDU,并对其执行步骤B1;
需要指出,在PDUSN等于MaxPDUSN的情况下,能够被接收成功的仅为当前PDU,但对下一个PDU来说,有可能其到来时,MaxPDUSN已经发生变化,即使未发生变化,也通过对其的重新比较确定是否丢弃,无需在本步骤中加以考虑。
B4、否则,向发送端发送一携带接收端MaxPDUSN的发送提示指令,并丢弃该PDU及后续的PDU。
在本步骤B4中,向发送端发送一携带接收端MaxPDUSN的发送提示指令意在告知发送端不要进一步进行发送,实现流控。
同时,丢弃超出处理范围的PDU,避免内存溢出,保证系统的安全性。
可以看出,将本发明的控制iSCSI报文发送和接收方法结合起来,能够有效地实现对于iSCSI报文的细粒度双向流控,同时保证报文的完整性。
由于正常情况下,SCSI层在不断的处理重组SCSI命令,每当一个PDU被重组后,MaxPDUSN就可以允许下一个PDU的接收,因此较佳的,请参见图5,步骤B4之后还包括:
B51、监测接收端MaxPDUSN是否发生变化;
B52、是则,向发送端发送一携带接收端MaxPDUSN的发送提示指令,并重新开始接收发送端发送的PDU,执行步骤B1;
可以看出,向发送端发送一携带接收端MaxPDUSN的发送提示指令之后,发送端根据该发送提示指令,就能够识别出可以进一步发送PDU;此时,接收端将继续接收,直到下一次发现MaxPDUSN小于PDUSN。
B53、否则,保持丢弃后续的PDU。
由于当上述两次发送提示指令中MaxPDUSN未发生变化时,很可能意味着接收端无法将解封装后的报文组装成SCSI命令,导致了正在处理的PDUSN始终无法失效。显然,在这种情况下简单的保持丢弃并继续等待不会有任何结果,因此较佳的技术方案时进行该命令的重新接收,具体实现方案为步骤B53包括:删除PDUSN为MaxPDUSN减去接收端缓冲队列值的PDU及其后续的PDU,并重新开始接收发送端发送的PDU,该PDU的PDUSN从被删除的PDUSN开始,而该PDUSN之前的PDU仍然被保持丢弃。
可以看出,通过上述步骤B51~B53,接收端能够自动发现MaxPDUSN的变化,并通过通知发送端继续进行PDU的接收。这就可能存在以下问题:接收端对于MaxPDUSN的监控不一定是实时的,以避免浪费大量资源,因此,有可能接受端对于MaxPDUSN进行周期性监控;此时,不一定能够及时发现MaxPDUSN的变化。
因此,对于非实时监控情况下,较佳的技术方案是发送端在预定时间内没有接收到发送提示指令时,主动向接收端发送接收提示指令,由接收端被动进行MaxPDUSN的变化的检测;则接收端接收到该接收提示指令时,向发送端发送一携带接收端可处理的MaxPDUSN的发送提示指令,以及,请结合图6,在步骤B4之后还包括:
B51′、接收端接收到发送端发送的接收提示指令时,向发送端发送一携带接收端MaxPDUSN的发送提示指令;
B52′、检测该MaxPDUSN与上一次发送的MaxPDUSN相比是否发生变化;
B53′、是则,重新开始接收发送端发送的PDU,执行步骤B1;
B54′、丢弃后续的PDU。
与自动发现MaxPDUSN的变化类似,由于当上述两次发送提示指令中MaxPDUSN未发生变化时,简单的保持丢弃并继续等待不会有任何结果,因此较佳的技术方案时进行该命令的重新接收,具体实现方案为步骤B54′为:删除PDUSN为MaxPDUSN减去接收端缓冲队列值的PDU及其后续的PDU,并重新开始接收发送端发送的PDU,该PDU的PDUSN从被删除的PDUSN开始,而该PDUSN之前的PDU仍然被保持丢弃。
将上述提供的控制iSCSI报文发送的方法实施例与控制iSCSI报文接收的方法实施例结合起来,就可以实现对iSCSI报文交互的控制。
举例来说,当发起设备作为发送端,目标设备作为接收端时,交互过程如下:当目标设备发现待处理的PDU数目达到一个限制值,就主动发送NOPIN(No PDU In)作为发送提示指令通知发起设备,这个时候发起设备在一个时间段内不会给目标设备发送报文PDU;当发起设备接收到目标设备新的NOPIN命令,发现可以继续发送PDU,那么发起设备继续向目标设备发送报文;如果过了这个时间段发起设备仍然没有收到目标设备来的任何报文,发起设备将主动发送NOPOUT(No PDU Out)作为接收提示指令询问目标设备是否可以继续接收报文,这是一个循环往复的过程。
其中,在本实施例中,超过时间段发起设备所检测的并非单纯的NOPOUT命令,而是任何报文。这是因为,如果在普通的PDU报文中添加MaxPDUSN/CurrentPDUSN字段,发起设备一样可以检测到是否可以继续发送报文。
再比如,当目标设备作为发送端,发起设备作为接收端时,交互过程如下:当发起设备发现待处理的PDU数目达到一个限制值,就主动发送NOPOUT(No PDU Out)作为发送提示指令通知发起设备,这个时候目标设备在一个时间段内不会给发起设备发送报文PDU;当目标设备接收到发起设备新的NOPOUT命令,发现可以继续发送PDU,那么目标设备继续向发起设备发送报文;如果过了这个时间段目标设备仍然没有收到发起设备来的任何报文,目标设备将主动发送NOPIN(No PDU In)作为接收提示指令询问发起设备是否可以继续接收报文,这是一个循环往复的过程。
在上述两个过程中,如果两次NOPI N/NOPOUT携带的MaxPDUSN没有发生变化,则说明可能是一个命令携带有大量的数据,而这些数据量已经超过我们允许数目的PDU能够携带的数据量时,接收端自动取消该命令,发送端重新组装成多个命令来完成这次数据传输。
本领域普通技术人员可以理解:实现上述控制iSCSI报文发送的方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,应用于IP存储系统中互为对端的发起设备或目标设备中,其中,所述/iSCSI报文的协议数据单元封装有SCSI命令参数;包括如下步骤:
A1、发送端依次赋予协议数据单元一全局序列号并记录在相应的协议数据单元中,以及向接收端发送;
A2、从接收端接收到携带有可处理的协议数据单元最大序列号的发送提示指令时,提取所述协议数据单元最大序列号;其中,接收端可处理的协议数据单元最大序列号为接收端已组装为SCSI命令的协议数据单元全局序列号与接收端缓冲队列之和;
A3、检测所述协议数据单元最大序列号是否大于等于发送端下一待发送的协议数据单元全局序列号;是则,从下一协议数据单元开始,重新执行步骤A1;否则,执行步骤A4;
A4、发送端停止发送直至接收到下一次发送提示指令。
所述的存储介质包括:ROM/RAM、磁碟或者光盘等。
以及,本领域普通技术人员可以理解:实现上述控制iSCSI报文接收的方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,应用于IP存储系统中互为对端的发起设备或目标设备中,所述/iSCSI报文的协议数据单元封装有SCSI命令参数;包括如下步骤:
B1、当接收到一携带有全局序列号的协议数据单元时,提取其全局序列号;
B2、检测该全局序列号是否小于或者等于接收端可处理的协议数据单元最大序列号;其中,接收端可处理的协议数据单元最大序列号为接收端已组装为SCSI命令的协议数据单元全局序列号与接收端缓冲队列之和;
B3、是则,继续接收后续的协议数据单元,并对其执行步骤B1;
B4、否则,向发送端发送一携带接收端可处理的协议数据单元最大序列号的发送提示指令,并丢弃所述协议数据单元及后续的协议数据单元。
所述的存储介质包括:ROM/RAM、磁碟或者光盘等。
本发明还提供了控制iSCSI报文发送的装置和控制iSCSI报文接收的装置。
在IP存储系统中,互为对端的发起设备100或目标设备200中,包括依次从设备SCSI层101、201连接出来的用于将SCSI命令参数封装为PDU的iSCSI报文封装模块105、205以及用于发送PDU的iSCSI报文发送模块103、203。其中,报文封装模块105、205将SCSI命令和/或数据封装在iSCSI报文中,经由iSCSI报文发送模块103、203通过IP网络发送给对端。
该控制iSCSI报文发送的装置300应用于发起设备100或目标设备200中,以设在发起设备100为例,请参见图7,包括:
序列号赋值模块301,与iSCSI报文发送模块103连接,用于依次给发送的PDU赋予一PDUSN,并将该PDUSN记录在相应的PDU中,并通过iSCSI报文发送模块103发送;具体的记录方式可如表1所示,通过在PDU报文的头部添加字段进行。
序列号记录模块302,与序列号赋值模块301连接,用于记录所发送PDU的PDUSN;
最大序列号提取模块303,用于从接收到的发送提示指令中提取对端MaxPDUSN;其中,对端MaxPDUSN为对端已组装为SCSI命令的PDUSN与对端缓冲队列之和;
发送序列号比较模块304,分别与序列号记录模块302和最大序列号提取模块303连接,用于检测对端MaxPDUSN是否大于等于本地下一待发送的PDUSN,并输出比较结果;
发送控制模块305,与发送序列号比较模块304连接,用于在比较结果为是的情况下,控制iSCSI报文发送模块103继续发送PDU,以及,在比较结果为否的情况下,阻止iSCSI报文发送模块103继续发送直至接收到下一次发送提示指令。
通过上述描述的装置,可以看出,通过序列号赋值模块301细化流控粒度,通过最大序列号提取模块303实现双向流控,并通过发送控制模块306实现对iSCSI报文发送的控制。
同时可以理解,该控制iSCSI报文发送的装置300设在目标设备200中时,其连接关系相同,在此不再赘述。
较佳的,请参见图8,该控制iSCSI报文发送的装置300还包括:
协议数据单元定位模块306,分别与序列号记录模块302与iSCSI报文发送模块103连接,用于定位PDUSN为MaxPDUSN加1的PDU,并将其作为下一待发送PDU。通过该模块306,可以保证发送报文的完整性。
接收提示指令模块307,用于在预设时间内未接收到发送提示指令时,通过iSCSI报文发送模块103向对端发送一接收提示指令,进行发送提示指令的请求。通过该模块307,可以避免过长时间的等待,特别是在接收端由于无法组装SCSI数据而处理停滞的情况下。
进一步的,还可以包括:
第一发送提示指令统计模块308,用于统计连续两次接收到的发送提示指令中MaxPDUSN是否相同,并输出统计结果;
重组模块309,用于接收第一发送提示指令统计模块308输出的统计结果,并在统计结果为相同的情况下,触发iSCSI报文封装模块105,将PDUSN为MaxPDUSN减去对端缓冲队列值的PDU及其后续的PDU对应的SCSI命令重新组装为多个SCSI命令并发送;或者,在统计结果为不同的情况下,触发发送序列号比较模块304。
可以看出,通过第一发送提示指令统计模块308和重组模块309,能够将携带数据过多的命令进行重组,以避免因为命令过大的原因导致处理停滞。
在IP存储系统中,互为对端的发起设备100或目标设备200中,包括依次连接到设备SCSI层101、201的用于接收对端发送的PDU的iSCSI报文接收模块102、202,以及用于将接收到的PDU解封装为SCSI命令的iSCSI报文解封装模块104、204。其中,设备通过报文接收模块102、202接收iSCSI报文,并由报文解封装模块104、204进行解封装处理;解封装处理后的报文被送到SCSI层101进行SCSI命令的重组,取出其中的数据并写入到存储介质(如磁盘)中。
该控制iSCSI报文接收的装置400应用于发起设备100或目标设备200中,以设在发起设备100为例,请参见图9,包括:
全局序列号提取模块401,用于从接收到的PDU中提取其PDUSN;
协议数据单元记录模块402,与设备SCSI层101连接,用于记录本地MaxPDUSN,其中,本地MaxPDUSN为本地已组装为SCSI命令的PDUSN与本地缓冲队列之和;进一步的,该协议数据单元记录模块402还可用于记录本地当前处理的协议数据单元序列号CurrentPDUSN,该CurrentPDUSN为本地已解封装的PDUSN;
接收序列号比较模块403,分别与协议数据单元记录模块402和全局序列号提取模块401连接,用于检测该PDUSN是否小于或者等于本地MaxPDUSN;
接收控制模块404,与接收序列号比较模块403连接,用于在比较结果为是的情况下,控制iSCSI报文接收模块102继续接收PDU,以及,在比较结果为否的情况下,控制iSCSI报文接收模块102丢弃该PDU及后续的PDU,并触发发送提示指令模块405;
发送提示指令模块405,与接收控制模块404和协议数据单元记录模块402连接,用于通过iSCSI报文发送模块102向对端发送一发送提示指令,所述发送提示指令携带有可处理的MaxPDUSN。
通过上述描述的装置,可以看出,通过发送提示指令模块405实现流控,通过全局序列号提取模块401和接收序列号比较模块403实现流控的细粒化,通过接收控制模块404实现对iSCSI报文接收的控制。
同时可以理解,该控制iSCSI报文接收的装置400设在目标设备200中时,其连接关系相同,在此不再赘述。
较佳的,请参见图10,该控制iSCSI报文接收的装置400还包括:
协议数据单元监控模块406,与协议数据单元记录模块402连接,用于监测本地MaxPDUSN是否发生变化,并在结果为是的情况下,触发发送提示指令模块405,以及,触发接收控制模块404,以控制iSCSI报文接收模块102继续接收PDU。通过模块406,可以根据处理的进度,主动监控报文接收状态的变化。
进一步的,还可以包括接收提示指令监控模块407,用于在接收到接收提示指令时,触发发送提示指令模块405,以向发送端发送一携带接收端MaxPDUSN的发送提示指令,以及,触发协议数据单元监控模块406,以检测其与上一次发送的MaxPDUSN相比是否发生变化,并阻止协议数据单元监控模块406对发送提示指令模块405的触发功能。通过模块407,可以根据发送端接收提示指令,被动监控报文接收状态的变化。
更佳的,还包括:
第二发送提示指令统计模块408,与发送提示指令模块405连接,用于统计连续两次发送的发送提示指令中MaxPDUSN是否变化,并输出统计结果;
删除模块409,用于接收第二发送提示指令统计模块408输出的统计结果,并在统计结果为不变的情况下,删除PDUSN为MaxPDUSN减去本地缓冲队列值的PDU及其后续的PDU,并触发接收控制模块404,以控制iSCSI报文接收模块102继续接收PDU。
可以看出,第二发送提示指令统计模块408和删除模块409,能够将携带数据过多的命令进行抛弃,以避免因为命令过大的原因导致处理停滞。
上述实施例已经分别从控制iSCSI报文的发送和接收两个角度提供了相应的装置。显然,当这两个装置分别装设在发起设备100和目标设备200中时,就构成了控制iSCSI报文交互的系统;
以将控制iSCSI报文发送的装置300设在发起设备100,将控制iSCSI报文接收的装置400设在目标设备200为例,请参见图11,两个装置300和400分别通过iSCSI报文发送模块103和iSCSI报文接收模块202连接。其处理流程如下:
(11)目标设备200接收到一个发起设备100发送过来的PDU报文,发现该报文的PDUSN等于当前目标设备200上的MaxPDUSN,目标设备200给发起设备100发送NOPIN指令,该指令携带目标设备200上发送PDU报文的PDUSN和目标设备200的CurrentPDUSN和MaxPDUSN;
(12)接下来目标设备200接收到的大于MaxPDUSN的PDU都直接丢弃;
(13)发起设备100接收到目标设备200发送过来的NOPIN指令,发现自己发送出去的PDUSN大于等于该指令中的MaxPDUSN,停止发送PDU,将下一个要发送的PDU的计数置为MaxPDUSN+1,等待一个预订的超时值,转(14)或(15);
(14)没有过超时值就接收到目标设备200发送的NOPIN指令,且发现指令中的MaxPDUSN比下一个要发送的PDU的计数值大,继续向目标设备200发送报文,否则继续等待转(15);
(15)等待时间过了一个超时值,发起设备100向目标设备200发送NOPOUT指令,请求目标设备200响应NOPIN指令,对比NOPIN指令中的MaxPDUSN是否大于下一个要发送给目标设备200的PDUSN,是则继续向目标设备200发送报文,否则就继续等待。
其中,如果两次NOPIN报文中目标设备200响应的MaxPDUSN相同,说明命令可能由于PDU携带的数据不够无法处理,发起设备100向自己的SCSI层发送任务管理功能(Task Management Function,简称TMF)命令来取消该SCSI命令,重新组装成多个SCSI命令来完成这次数据传输;目标设备200丢弃这个命令数据等待发起设备100重发。
类似的,将控制iSCSI报文发送的装置300设在目标设备200,将控制iSCSI报文接收的装置400设在发起设备100时,其实现方式相似,只不过两个装置300和400分别通过iSCSI报文发送模块203和iSCSI报文接收模块102连接。其处理流程如下:
(21)发起设备100接收到一个目标设备200发送过来的PDU报文,发现该报文的PDUSN等于当前发起设备100的MaxPDUSN,发起设备100给目标设备200发送NOPOUT指令,该指令携带发起设备100上发送PDU报文的PDUSN和发起设备100上CurrentPDUSN和MaxPDUSN;
(22)接下来发起设备100接收到的大于MaxPDUSN的PDU都直接丢弃;
(23)目标设备200接收到发起设备100发送过来的NOPOUT指令,发现自己发送出去的PDUSN大于等于该指令中的MaxPDUSN,停止发送PDU,将下一个要发送的PDU的计数置为MaxPDUSN+1,等待一个预订的超时值,转(24)或(25);
(24)没有过超时值就接收到发起设备100发送的NOPOUT指令,且发现指令中的MaxPDUSN比下一个要发送的PDU的计数值大,继续向发起设备100发送报文,否则继续等待转(25)。
(25)等待时间过了一个超时值,目标设备200向发起设备100发送NOPIN指令,请求发起设备100响应NOPOUT指令,对比NOPOUT指令中的MaxPDUSN是否大于下一个要发送给发起设备100的PDUSN,是则继续向发起设备100发送报文,否则继续等待。
其中,如果两次NOPOUT报文中发起设备100响应的MaxPDUSN相同,说明命令可能由于PDU携带的数据不够无法处理,则发起设备100丢弃这个命令数据等待目标设备200重发,目标设备200向自己的SCSI层发送任务管理功能(Task Management Function,简称TMF)命令来取消该SCSI命令,重新组装成多个SCSI命令来完成这次数据传输。
进一步的,由于发起设备100和目标设备200往往同时具有iSCSI报文发送和接收的功能,因此本发明还提供了相应的发起设备和目标设备。
本发明的实施例还提供了一种发起设备100,包括依次从设备SCSI层101连接出来的用于将SCSI命令参数封装为PDU的iSCSI报文封装模块105以及用于发送PDU的iSCSI报文发送模块103,还包括依次连接到设备SCSI层101的用于接收对端发送的PDU的iSCSI报文接收模块102以及用于将接收到的PDU解封装为SCSI命令的iSCSI报文解封装模块104。此外,还设有如上述实施例所述的控制iSCSI报文发送的装置300以及控制iSCSI报文接收的装置400;其中,设置在同一设备中的控制iSCSI报文发送的装置300和控制iSCSI报文接收的装置400分别对不同的报文进行处理,比如,当控制iSCSI报文发送的装置300用于发送第一PDU时,控制iSCSI报文接收的装置400就用于接收第二PDU。
本发明的实施例还提供了一种目标设备200,包括依次从设备SCSI层201连接出来的用于将SCSI命令参数封装为PDU的iSCSI报文封装模块205以及用于发送PDU的iSCSI报文发送模块203,还包括依次连接到设备SCSI层201的用于接收对端发送的PDU的iSCSI报文接收模块202以及用于将接收到的PDU解封装为SCSI命令的iSCSI报文解封装模块204。此外,还设有如上述实施例所述的控制iSCSI报文发送的装置300以及控制iSCSI报文接收的装置400,不再赘述。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。

Claims (18)

1.一种控制iSCSI报文发送的方法,应用于IP存储系统中互为对端的发起设备或目标设备中,其中,所述iSCSI报文的协议数据单元封装有SCSI命令参数;其特征在于,包括以下步骤:
A1、发送端依次赋予协议数据单元一全局序列号并记录在相应的协议数据单元中,以及向接收端发送;
A2、从接收端接收到携带有可处理的协议数据单元最大序列号的发送提示指令时,提取所述协议数据单元最大序列号;其中,接收端可处理的协议数据单元最大序列号为接收端已组装为SCSI命令的协议数据单元全局序列号与接收端缓冲队列之和;
A3、检测所述协议数据单元最大序列号是否大于等于发送端下一待发送的协议数据单元全局序列号;是则,从下一协议数据单元开始,重新执行步骤A1;否则,执行步骤A4;
A4、发送端停止发送直至接收到下一次发送提示指令。
2.根据权利要求1所述的控制iSCSI报文发送的方法,其特征在于,所述步骤A4中停止发送之后还包括:定位全局序列号为所述协议数据单元最大序列号加1的协议数据单元,并将其作为下一待发送协议数据单元。
3.根据权利要求1所述的控制iSCSI报文发送的方法,其特征在于,所述步骤A4还包括:当等待到达预设时间仍未接收到下一次发送提示指令时,向接收端发送接收提示指令,用于请求对方的发送提示指令。
4.根据权利要求1-3任一所述的控制iSCSI报文发送的方法,其特征在于,接收到下一次发送提示指令后还包括:
A51、检测是否两次接收到的发送提示指令中,接收端当前可处理的协议数据单元最大序列号相同;
A52、是则,对全局序列号为所述协议数据单元最大序列号减去接收端缓冲队列值的协议数据单元及其后续的协议数据单元对应的SCSI命令,重新组装为多个SCSI命令,并对重新组装后每一SCSI命令的协议数据单元执行步骤A1;否则,重新执行步骤A3。
5.根据权利要求1-3任一所述的控制iSCSI报文发送的方法,其特征在于,步骤A1中所述协议数据单元中还记录有发送端所在设备当前处理的协议数据单元序列号和可处理的协议数据单元最大序列号;其中,发送端所在设备当前处理的协议数据单元序列号为发送端所在设备正在解封装的协议数据单元序列号,发送端所在设备可处理的协议数据单元最大序列号为发送端所在设备已组装为SCSI命令的协议数据单元全局序列号与发送端缓冲队列之和。
6.一种控制iSCSI报文接收的方法,应用于IP存储系统中互为对端的发起设备或目标设备中,其中,所述/iSCSI报文的协议数据单元封装有SCSI命令参数;其特征在于,包括以下步骤:
B1、当接收到一携带有全局序列号的协议数据单元时,提取其全局序列号;
B2、检测该全局序列号是否小于或者等于接收端可处理的协议数据单元最大序列号;其中,接收端可处理的协议数据单元最大序列号为接收端已组装为SCSI命令的协议数据单元全局序列号与接收端缓冲队列之和;
B3、是则,继续接收后续的协议数据单元,并对其执行步骤B1;
B4、否则,向发送端发送一携带接收端可处理的协议数据单元最大序列号的发送提示指令,并丢弃所述协议数据单元及后续的协议数据单元。
7.根据权利要求6所述的控制iSCSI报文接收的方法,其特征在于,步骤B4之后还包括:
B51、监测接收端可处理的协议数据单元最大序列号是否发生变化;
B52、是则,向发送端发送一携带接收端可处理的协议数据单元最大序列号的发送提示指令,并重新开始接收发送端发送的协议数据单元,执行步骤B1;
B53、否则,丢弃后续的协议数据单元。
8.根据权利要求6所述的控制iSCSI报文接收的方法,其特征在于,步骤B4之后还包括:
B51′、接收端接收到发送端发送的接收提示指令时,向发送端发送一携带接收端可处理的协议数据单元最大序列号的发送提示指令;
B52′、检测其与上一次发送的协议数据单元最大序列号相比是否发生变化;
B53′、是则,重新开始接收发送端发送的协议数据单元,执行步骤B1;
B54′、否则,丢弃后续的协议数据单元。
9.根据权利要求7或8所述的控制iSCSI报文接收的方法,其特征在于,所述步骤B53或步骤B54′还包括:删除全局序列号为所述协议数据单元最大序列号减去接收端缓冲队列值的协议数据单元及其后续的协议数据单元,并重新开始接收发送端发送的协议数据单元。
10.一种控制iSCSI报文发送的装置,应用于IP存储系统中互为对端的发起设备或目标设备中,所述发起设备或目标设备包括依次从设备SCSI层连接出来的用于将SCSI命令参数封装为协议数据单元的iSCSI报文封装模块以及用于发送协议数据单元的iSCSI报文发送模块;其特征在于,所述装置包括:
序列号赋值模块,与所述iSCSI报文发送模块连接,用于依次给发送的协议数据单元赋予一全局序列号,并将所述全局序列号记录在相应的协议数据单元中;
序列号记录模块,与所述序列号赋值模块连接,用于记录所发送协议数据单元的全局序列号;
最大序列号提取模块,用于从接收到的发送提示指令中提取对端可处理的协议数据单元最大序列号;其中,对端可处理的协议数据单元最大序列号为对端已组装为SCSI命令的协议数据单元全局序列号与对端缓冲队列之和;
发送序列号比较模块,分别与所述序列号记录模块和最大序列号提取模块连接,用于检测对端可处理的协议数据单元最大序列号是否大于等于本地下一待发送的协议数据单元全局序列号,并输出比较结果;
发送控制模块,与所述发送序列号比较模块连接,用于在比较结果为是的情况下,控制所述iSCSI报文发送模块继续发送协议数据单元,以及,在比较结果为否的情况下,阻止所述iSCSI报文发送模块继续发送直至接收到下一次发送提示指令。
11.根据权利要求10所述的控制iSCSI报文发送的装置,其特征在于,还包括协议数据单元定位模块,分别与所述序列号记录模块与所述iSCSI报文发送模块连接,用于定位全局序列号为所述协议数据单元最大序列号加1的协议数据单元,并将其作为下一待发送协议数据单元。
12.根据权利要求10所述的控制iSCSI报文发送的装置,其特征在于,还包括接收提示指令模块,用于在预设时间内未接收到发送提示指令时,通过iSCSI报文发送模块向对端发送一接收提示指令,进行发送提示指令的请求。
13.根据权利要求10-12任一所述的控制iSCSI报文发送的装置,其特征在于,还包括:
第一发送提示指令统计模块,用于统计连续两次接收到的发送提示指令中协议数据单元最大序列号是否相同,并输出统计结果;
重组模块,用于接收所述第一发送提示指令统计模块输出的统计结果,并在统计结果为相同的情况下,触发所述iSCSI报文封装模块,将全局序列号为所述协议数据单元最大序列号减去对端缓冲队列值的协议数据单元及其后续的协议数据单元对应的SCSI命令重新组装为多个SCSI命令并发送;或者,在统计结果为不同的情况下,触发发送序列号比较模块。
14.一种控制iSCSI报文接收的装置,应用于IP存储系统中互为对端的发起设备或目标设备中,所述发起设备或目标设备包括依次连接到设备SCSI层的用于接收对端发送的协议数据单元的iSCSI报文接收模块以及用于将接收到的协议数据单元解封装为SCSI命令的iSCSI报文解封装模块;其特征在于,所述装置包括:
全局序列号提取模块,用于从接收到的协议数据单元中提取其全局序列号;
协议数据单元记录模块,与设备SCSI层连接,用于记录本地可处理的协议数据单元最大序列号,其中,本地可处理的协议数据单元最大序列号为本地已组装为SCSI命令的协议数据单元全局序列号与本地缓冲队列之和;
接收序列号比较模块,分别与所述协议数据单元记录模块和全局序列号提取模块连接,用于检测该全局序列号是否小于或者等于本地可处理的协议数据单元最大序列号;
接收控制模块,与所述接收序列号比较模块连接,用于在比较结果为是的情况下,控制所述iSCSI报文接收模块继续接收协议数据单元,以及,在比较结果为否的情况下,控制所述iSCSI报文接收模块丢弃所述协议数据单元及后续的协议数据单元,并触发发送提示指令模块;
发送提示指令模块,与所述接收控制模块和协议数据单元记录模块连接,用于通过iSCSI报文发送模块向对端发送一发送提示指令,所述发送提示指令携带有可处理的协议数据单元最大序列号。
15.根据权利要求14所述的控制iSCSI报文接收的装置,其特征在于,还包括协议数据单元监控模块,与所述协议数据单元记录模块连接,用于监测本地可处理的协议数据单元最大序列号是否发生变化,并在结果为是的情况下,触发所述发送提示指令模块,以及,触发所述接收控制模块,以控制所述iSCSI报文接收模块继续接收协议数据单元。
16.根据权利要求15所述的控制iSCSI报文接收的装置,其特征在于,还包括接收提示指令监控模块,用于在接收到接收提示指令时,触发所述发送提示指令模块及协议数据单元监控模块,并阻止所述协议数据单元监控模块对发送提示指令模块的触发功能。
17.根据权利要求14-16任一所述的控制iSCSI报文接收的装置,其特征在于,还包括:
第二发送提示指令统计模块,与所述发送提示指令模块连接,用于统计连续两次发送的发送提示指令中协议数据单元最大序列号是否变化,并输出统计结果;
删除模块,用于接收所述第二发送提示指令统计模块输出的统计结果,并在统计结果为不变的情况下,删除全局序列号为所述协议数据单元最大序列号减去本地缓冲队列值的协议数据单元及其后续的协议数据单元,并触发所述接收控制模块,以控制所述iSCSI报文接收模块继续接收协议数据单元。
18.一种控制iSCSI报文交互的系统,其特征在于,包括如权利要求10-13任一所述的控制iSCSI报文发送的装置,以及,包括如权利要求14-17任一所述的控制iSCSI报文接收的装置。
CN2007101753126A 2007-09-28 2007-09-28 控制iSCSI报文发送、接收的方法和装置及相应系统 Active CN101132376B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2007101753126A CN101132376B (zh) 2007-09-28 2007-09-28 控制iSCSI报文发送、接收的方法和装置及相应系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2007101753126A CN101132376B (zh) 2007-09-28 2007-09-28 控制iSCSI报文发送、接收的方法和装置及相应系统

Publications (2)

Publication Number Publication Date
CN101132376A true CN101132376A (zh) 2008-02-27
CN101132376B CN101132376B (zh) 2011-06-15

Family

ID=39129503

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2007101753126A Active CN101132376B (zh) 2007-09-28 2007-09-28 控制iSCSI报文发送、接收的方法和装置及相应系统

Country Status (1)

Country Link
CN (1) CN101132376B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102438012A (zh) * 2011-11-15 2012-05-02 航天科工深圳(集团)有限公司 一种协议通讯方法和系统
CN101448022B (zh) * 2008-09-09 2012-05-30 创新科存储技术(深圳)有限公司 互联网小型计算机系统接口接收端窗口控制方法及装置
CN101729197B (zh) * 2008-10-14 2014-04-16 华为技术有限公司 一种丢包率检测方法、装置及系统
CN110691094A (zh) * 2019-10-10 2020-01-14 山东超越数控电子股份有限公司 一种基于iscsi协议传输数据的方法、设备及介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE0103506D0 (sv) * 2001-10-19 2001-10-19 Ericsson Telefon Ab L M HARQ stall avoidance
CN100452795C (zh) * 2004-01-16 2009-01-14 英业达股份有限公司 利用iSCSI协议访问逻辑设备的方法
CN101030839A (zh) * 2007-02-13 2007-09-05 华为技术有限公司 一种数据重传的方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101448022B (zh) * 2008-09-09 2012-05-30 创新科存储技术(深圳)有限公司 互联网小型计算机系统接口接收端窗口控制方法及装置
CN101729197B (zh) * 2008-10-14 2014-04-16 华为技术有限公司 一种丢包率检测方法、装置及系统
CN102438012A (zh) * 2011-11-15 2012-05-02 航天科工深圳(集团)有限公司 一种协议通讯方法和系统
CN110691094A (zh) * 2019-10-10 2020-01-14 山东超越数控电子股份有限公司 一种基于iscsi协议传输数据的方法、设备及介质

Also Published As

Publication number Publication date
CN101132376B (zh) 2011-06-15

Similar Documents

Publication Publication Date Title
JP4961481B2 (ja) シリアルアドバンストテクノロジーアタッチメント(sata)およびシリアルアタッチトスモールコンピュータシステムインターフェース(scsi)(sas)のブリッジング
US20040267982A1 (en) Read/write command buffer pool resource management using read-path prediction of future resources
US8364853B2 (en) Fibre channel input/output data routing system and method
JP6336988B2 (ja) 使用要求の小バッチ処理のためのシステムおよび方法
US20120311199A1 (en) Fibre channel input/output data routing including discarding of data transfer requests in response to error detection
CN103218310A (zh) 缓存装置、通信设备以及计算机程序产品
WO2012092267A2 (en) Non-disruptive failover of rdma connection
US20080225877A1 (en) Switching apparatus and frame exchanging method
CN106533872A (zh) 用于提高fc‑ae‑1553总线传输效率的系统
CN101132376B (zh) 控制iSCSI报文发送、接收的方法和装置及相应系统
CN102959911A (zh) 一种设备和方法
CN103825830A (zh) 基于tuxedo中间件的系统实现流量管控的方法和装置
US7962676B2 (en) Debugging multi-port bridge system conforming to serial advanced technology attachment (SATA) or serial attached small computer system interface (SCSI) (SAS) standards using idle/scrambled dwords
US7761650B2 (en) Processing wrong side I/O commands
CN113259268A (zh) 一种支持冗余架构的网口与串口数据转发网关及方法
US20090006732A1 (en) Storage system with synchronized processing elements
CN106648851A (zh) 一种多控存储中io管理的方法和装置
CN102843435A (zh) 一种在集群系统中存储介质的访问、响应方法和系统
RU2383067C2 (ru) Способ сохранения пакетов данных с использованием технологии указателя
WO2007099584A1 (ja) エラー検出装置
CN109729101B (zh) 多层次低耦合的通信系统
US8683083B2 (en) Fibre channel input/output data routing system and method
US8433952B2 (en) Memory access control device, memory access control method and memory access control program
CN1425227A (zh) 对光纤信道网络中的流设备进行多启动器支持的方法和系统
WO2002044917A2 (en) Method and system for communicating control information

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP03 Change of name, title or address

Address after: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No.

Patentee after: Xinhua three Technology Co., Ltd.

Address before: 310053 Hangzhou hi tech Industrial Development Zone, Zhejiang province science and Technology Industrial Park, No. 310 and No. six road, HUAWEI, Hangzhou production base

Patentee before: Huasan Communication Technology Co., Ltd.

CP03 Change of name, title or address