具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有的其他实施例,都属于本发明保护的范围。
图1为本发明一实施例提供的对iSCSI协议报文的处理方法的流程示意图,如图1所示,本实施例的对iSCSI协议报文处理方法包括:
101、接收iSCSI协议报文;
在本实施例中,需要接收数据流中的iSCSI协议报文,首先生成校验计算模块的初始值控制信号、校验计算模块的重启信号,在确定所述iSCSI协议报文携带有数据段时,在iSCSI协议报文的数据段开始处插入一个至少包含数据段开始标识和数据段长度指示的PDU的头部。
具体的,当主机应用程序发出数据读写请求后,操作系统会生成相应的SCSI命令,该SCSI命令在iSCSI initiator层被封装成iSCSI消息包并通过TCP/IP协议传送到设备侧,设备侧的iSCSI target层会解开iSCSI消息包,得到SCSI命令的内容,然后传送给SCSI设备执行;设备执行SCSI命令后的响应消息,经过设备侧iSCSI target层时被封装成iSCSI响应PDU,通过TCP/IP网络传送给主机的iSCSI initiator层,iSCSI initiator会从ISCSI响应PDU里解析出SCSI响应并传送给操作系统,操作系统再响应给应用程序。
可选的,设备侧接收对端发送的iSCSI协议报文,为了保障iSCSI协议报文的可靠传输,需要对iSCSI协议报文的PDU的头字段或数据字段进行校验计算,校验计算的对象分别为PDU的头摘要Header Digest或数据摘要DataDigest。
表一示出了iSCSI协议报文的PDU的报文格式,其中,基本头字段BHS包含了PDU的基本信息,BHS之后是附加头字段AHSTotalAHSLength;
表一:iSCSI协议报文的PDU的格式
其中,BHS和AHS共同构成了PDU的头字段,头字段之后的PDU的头摘要Header Digest是对头字段的校验计算结果;数据字段之后的数据摘要Data Digest是对数据字段的校验计算结果。
可选的,本实施例中,首先,根据iSCSI协议处理结果进行系统复位,如果有数据要递交给iSCSI层,则产生内部控制信号,生成待发送的iSCSI协议报文,进行iSCSI协议报文的PDU的校验计算。在iSCSI协议报文的数据段(DataSegment)开始处插入一个PDU的头部(DATA HEADER),PDU的头部之后插入一个用于对PDU的头部进行校验计算、以在接收端保证所述PDU的头部正确性的PDU的头摘要Header Digest,最后,再输出处理后的含有PDU的头部和PDU的头摘要的ISCSI协议报文。
102、对接收到的iSCSI协议报文的协议数据单元PDU进行校验计算,以获取iSCSI协议报文的每个PDU的第一校验计算值的偏移量,所述第一校验计算值的偏移量是疑似正确的校验计算值的位置;
本实施例中,对接收到的iSCSI协议报文的PDU进行校验计算,具体为循环冗余校验计算;
其中,需要说明的是,获取第一校验计算值的偏移量的同时,可选的,需要获取所述第一校验计算值,将所述第一校验计算值附加在PDU的头字段的摘要中或附加在PDU的数据字段的摘要中。
需要说明的是,所述第一校验计算值的偏移量,在校验计算的过程中,是从一个PDU的起始边界开始,顺序进行统计的。
可选的,所述对接收到的iSCSI协议报文的PDU进行校验计算,可以是在所述PDU的头摘要对所述PDU的头部进行的校验计算,也可以是在所述PDU的数据摘要对iSCSI协议报文的数据字段进行校验计算,以获取到的第一校验计算值为初步确定为正确的校验计算值的位置;在校验计算的过程中,首先并不区分第一校验计算值的位置是PDU的头部的校验计算位置,或者是PDU数据的校验计算位置,只要当对接收到的iSCSI协议报文的协议数据单元PDU进行校验计算所获取的校验计算值与预期的魔方数相等时,则确定所述校验计算值为第一校验计算值,所述第一校验计算值是iSCSI协议报文中确定出错的校验计算值以外的其他校验计算值;输出该第一校验计算值相对于起始地址的偏移量,复位第一校验计算值为初始值,重启所述校验计算,重复上述的校验计算操作,直到获取数据流中所有的iSCSI协议报文的PDU第一校验计算值的偏移量。
在本实施例中,所述执行主体可选的,是具有iSCSI校验计算功能的芯片是;具有iSCSI校验计算功能的芯片在对接收到的iSCSI协议报文的PDU进行校验计算中,并不需要解析PDU中头字段的校验计算位置或者PDU中数据字段的校验计算位置,只要第一校验计算值与预期的魔方数相等时,具有iSCSI校验计算功能的芯片则初步确定该第一校验计算值所对应的位置为正确的校验计算值所对应的偏移量,需要说明的是第一校验计算值是iSCSI协议报文中确定出错的校验计算值以外的其他校验计算值,该第一校验计算值所对应的偏移量为疑似正确的校验计算值所对应的位置。
可选的,本实施例中,所述预期的魔方数可以设置为0x1c2d19ed,当然在这里并不作为限制,也可以根据实际需要设定为其他的自定义值,如果所述校验计算值与预期的魔方数相等,则表明找到了第一校验计算值所对应的位置,输出该第一校验计算值相对应于该PDU的起始地址的偏移量,如果输入数据有效,对接收到的iSCSI协议报文的PDU进行校验计算时,还需要进行字节的起始偏移计数。
此时,第一校验计算值的初始值设定为0xffffffff,循环执行下一次的校验计算,偏移量计数器继续保持计数,直到对整个iSCSI协议报文序列校验计算结束,或者是iSCSI协议报文序列中的部分iSCSI协议报文校验计算结束,从而找到iSCSI协议报文序列中所有的第一校验计算值的偏移量,或者是找到iSCSI协议报文序列中的部分iSCSI协议报文的第一校验计算值的偏移量。
本实施例中,对接收到的iSCSI协议报文的PDU进行校验计算还可以包括步骤1021:
可选的,所述具有iSCSI校验计算功能的芯片可以是在实现TCP功能的TOE网卡上添加至少一个iSCSI的摘要卸载引擎,从而对接收到的iSCSI协议报文的PDU进行校验计算,以获取第一校验计算值;
103、对获取到第一校验计算值的偏移量所对应的PDU的基本头字段进行解析,以获取校验计算位置;其中,所述对PDU的基本头字段进行解析,获取校验计算位置,包括:
可选的,在本发明实施例中,如果解析到所述PDU的头摘要,对PDU的基本头字段中的附加段总长度字段进行解析,获取PDU的头的校验计算位置,所述校验计算位置为头摘要位置;如果解析到所述PDU的数据摘要,对PDU的基本头字段中的数据字段长度进行解析,获取数据的校验计算位置,所述校验计算位置为数据摘要位置。
在解析PDU时,是按照数据流中的协议报文的PDU的顺序进行解析的,所以获知到PDU的头的校验计算位置和数据的校验计算位置后,可以确定出该PDU的头的校验计算位置和数据的校验计算位置需要与哪一个所述第一校验计算值的偏移量进行匹配;
具体的,在本发明实施例中,iSCSI协议报文的PDU的数据位宽可以为一个DW(即32比特);如表二所示,是iSCSI协议报文基本头字段BHS的格式。
表二:BHS的格式介绍
在本发明实施例中,其中,BHS的长度是固定的,为48Byte(字节),其中包括12个DW(4字节)。
数据段开始标识(Initiator Task Tag),用于指示所述iSCSI协议报文数据段开始;
数据段开始标识(Tag)可由用户根据实际应用需要设置为任何值,只要保证不是有效的iSCSI协议报文的头4个字节就可以,例如设定数据段开始标识=0xffffffff;
数据段长度指示(Data Segment Length),用于表示所述iSCSI协议报文中数据段长度;
数据段长度指示(Data Segment Length)和数据段开始标识(Tag)的插入位置也可由用户根据个人习惯灵活设定,例如将数据段开始标识(Tag)置于数据段长度指示(Data Segment Length)之前、或者将数据段长度指示(DataSegment Length)置于数据段开始标识(Tag)之前。
表三是对步骤103的解析操作的说明:
由于iSCSI协议报文的PDU总长度是4字节的整数倍,因此要根据需要在Data Segment中实际的有效数据后面填充1~3个Byte的0来凑成DW的整数倍;Data Segment开始后的[DataSegmentLength/4]取上限值的下一个DW的位置就是Data Digest的位置。
本发明实施例中,表三中的Total AHS Length字段指示的是AHS字段的长度,以DW(双字,4字节)为单位,BHS中的Data Segment Length指的是PDU中是否含有数据字段Data Segment;
如果Data Segment Length=0,则表明头字段后面没有Data Segment和Data Digest;
如果Data Segment Length非零则表示的是头字段后面Data Segment的有效长度(不包含填充的Byte数),以Byte为单位;
例如,如果一个PDU的BHS中,TotalAHSLength=0,即不含有AHS字段,如果支持digest,则在BHS之后就应该是Header Digest的位置,也即PDU开始的第13个DW就是Header Digest。
例如,在另一种情况下,一个PDU的BHS中,TotalAHSLength=2,如果支持digest,则在AHS之后就应该是Header Digest的位置,BHS+AHS的总长度为12+2=14DW,也即PDU开始的第15个DW就是Header Digest。
可选的,本实施例中,在另一种情况下,如果一个PDU的BHS中,DataSegmentLength=16,[16/4]=4,则Data Segment字段后的第5个DW就是Data Digest。
可选的,本实施例中,需要将所述校验计算位置与第一校验计算值的偏移量进行匹配,如匹配,不对PDU的摘要进行校验计算;如不匹配,对PDU的摘要进行校验计算,以获取第二校验计算值。
104、将所述校验计算位置与所述第一校验计算值的偏移量进行匹配,如匹配,则确定所述iSCSI协议报文的PDU传输正确。
如匹配,则表明iSCSI协议报文的PDU在传输过程中没有发生误码,不需要进行PDU的校验计算;反之,确定出第二校验计算值错误,iSCSI协议报文的PDU在传输过程中发生了误码,或者是在校验计算获取第一校验计算值时,恰好算得了一个校验计算值等于魔方数,但该第一校验计算值实际的位置并非是PDU的校验计算位置,需要进一步对PDU的摘要进行校验计算。
可选的,在本发明实施例中,当所述校验计算位置与第一校验计算值的偏移量不匹配时,则执行步骤1041、对所述PDU进行第二校验计算,获取第二校验计算值,判断所述第二校验计算值是否正确;
所述判断第二校验计算值是否正确,是将第一校验计算值和第二校验计算值进行比较,如相同,则确定所述第二校验计算值正确。
如所述第二校验计算值错误,则执行步骤1042,
1043、对所述PDU进行错误恢复处理。
可选的,在本实施例中,具体的,可以进一步对PDU的摘要进行校验计算,获取第二校验计算值,如果确定出第二校验计算值错误,则说明PDU在传输过程中发生了误码,需要对PDU进行错误恢复处理。
可选的,在本发明实施例中,对PDU进行错误恢复处理,可以通过发送对接收到的PDU的状态响应消息,以通知发送端进行PDU的重传操作,或者是接收端直接进行PDU的错误修复操作。
本发明实施例的对iSCSI协议报文的处理方法,首先获取iSCSI协议报文的PDU的第一校验计算值的偏移量,所述第一校验计算值的偏移量为疑似正确的校验计算位置,然后对获取到第一校验计算值的偏移量所对应的PDU的基本头字段进行解析,以获取到正确的校验计算位置,通过上述操作,仅对有可能正确的校验计算位置进行解析,可以避免对所有的iSCSI协议报文的PDU进行直接解析,可以简化对iSCSI协议报文的PDU的校验计算的控制偏移量降低具有iSCSI校验计算功能的芯片设计的复杂度、较少具有iSCSI校验计算功能的芯片资源,减少处理延时。
图2为本发明实施例提供的一种对iSCSI协议报文的处理装置示意图,
在本发明实施例中,iSCSI协议报文处理装置,包括:
接收模块10,用于接收iSCSI协议报文;
第一校验计算模块20,用于对接收到的每个iSCSI协议报文的协议数据单元PDU进行校验计算,以获取所述第一校验计算值的偏移量,所述第一校验计算值是iSCSI协议报文中确定出错的校验计算值以外的其他校验计算值;
需要说明的是,第一校验计算模块20可以是具有iSCSI校验计算功能的芯片,在获取第一校验计算值的偏移量的同时,第一校验计算模块20同时也获取到所述第一校验计算值,将所述第一校验计算值附加在PDU的头字段的摘要中,或附加在PDU的数据字段的摘要中。
解析模块30,对获取到第一校验计算值的偏移量所对应的PDU的基本头字段进行解析,以获取校验计算位置;
在本发明实施例中,可选的,如果解析模块30解析到所述PDU的头摘要,对PDU的基本头字段中的附加段总长度字段进行解析,获取PDU的头的校验计算位置,所述校验计算位置为头摘要位置;如果解析模块30解析到所述PDU的数据摘要,对PDU的基本头字段中的数据字段长度进行解析,获取数据的校验计算位置,所述校验计算位置为数据摘要位置。
匹配处理模块40,将所述校验计算位置与第一校验计算值的偏移量进行匹配,如果所述匹配结果为正确,则确定所述iSCSI协议报文传输正确。
本发明实施例的iSCSI协议报文的处理装置,首先获取iSCSI协议报文的PDU的第一校验计算值的偏移量,所述第一校验计算值的偏移量为疑似正确的校验计算位置,然后对获取到第一校验计算值的偏移量所对应的PDU的基本头字段进行解析,以获取到正确的校验计算位置,通过上述操作,仅对有可能正确的校验计算位置进行解析,可以避免对所有的iSCSI协议报文的PDU进行直接解析,可以简化对iSCSI协议报文的PDU的校验计算的控制偏移量降低具有iSCSI校验计算功能的芯片设计的复杂度、较少具有iSCSI校验计算功能的芯片资源,减少处理延时。
如图3所示,为本发明实施例提供的一种对iSCSI协议报文的处理装置示意图,
在本实施例中,可选的,所述装置还包括:
第二校验计算模块50,用于当所述校验计算位置与所述第一校验计算值的偏移量不匹配时,对PDU的摘要进行校验计算,以获取所述PDU的第二校验计算值,所述第二校验计算值用于与第一校验计算值进行比较,以确定所述iSCSI协议报文的PDU的传输是否正确;
比较模块60,用于将所述PDU的第一校验计算值和第二校验计算值进行比较,如相同,则确定所述第二校验计算值正确,校验计算结束,反之,则确定第二校验计算值错误;
错误处理模块70,用于当第二校验计算值是错误,对所述PDU进行错误恢复处理。
本发明实施例中,可选的,所述错误处理模块70具体用于:发送对接收到的PDU的状态响应消息,以通知发送端进行PDU的重传操作,或者是直接进行PDU的错误修复操作。
本发明实施例的iSCSI协议报文的处理装置,首先获取iSCSI协议报文的PDU的第一校验计算值的偏移量,所述第一校验计算值的偏移量为疑似正确的校验计算位置,然后对获取到第一校验计算值的偏移量所对应的PDU的基本头字段进行解析,以获取到正确的校验计算位置,通过上述操作,仅对有可能正确的校验计算位置进行解析,可以避免对所有的iSCSI协议报文的PDU进行直接解析,可以简化对iSCSI协议报文的PDU的校验计算的控制偏移量降低具有iSCSI校验计算功能的芯片设计的复杂度、较少具有iSCSI校验计算功能的芯片资源,减少处理延时。
图4为本发明实施例提供的一种对iSCSI协议报文的处理装置示意图,
在本发明实施例中,可选的,具有iSCSI校验计算功能的芯片具体可以是在支持TCP功能的TOE网卡上添加的iSCSI的摘要卸载引擎,从而对接收到的iSCSI协议报文的PDU进行校验计算。
本发明实施例中,接收模块10用于产生第一校验计算值的初始值控制信号,以及第一校验计算值的偏移量的重启信号,其中,具体可以采用crc check controler模块;
第一校验计算模块20,具体用于当对接收到的iSCSI协议报文的协议数据单元PDU进行校验计算所获取的校验计算值与预期的魔方数相等时,则确定所述校验计算值为第一校验计算值;
输出所述第一校验计算值的偏移量,重启所述校验计算,直到获取数据流中所有的iSCSI协议报文的PDU第一校验计算值的偏移量;
可选的,第一校验计算模块20包括:
CRC32C Function(CRC32C多项式的运算模块),用于计算iSCSI协议报文的PDU的第一校验计算值;
Magic Number Compare(比较模块),用于将校验计算值与Magic Number(魔方数)进行比较;
offset count(偏移量校验计算模块),用于输出第一校验计算值的偏移量。
解析模块30可以是主机应用程序的一种,用于根据数据段开始标识和数据段长度指示信息对PDU的基本头字段中的附加段总长度字段进行解析,如果解析到所述PDU的头摘要,则获取PDU的头的校验计算位置,如果解析到所述PDU的数据摘要,则获取PDU的数据的校验计算位置;
匹配处理模块40,将所述校验计算位置与第一校验计算值的偏移量进行匹配,如匹配,不对PDU的摘要进行校验计算;如不匹配,匹配处理模块40反馈中央处理单元CPU对PDU的摘要进行校验计算,以获取第二校验计算值。
本发明实施例的iSCSI协议报文处理装置可以使用于iSCSI设备,例如,可以是iSCSI适配卡、iSCSI交换机、iSCSI存储服务器、iSCSI存储设备、iSCSI桥接器等;例如,该设备可以是基于控制器架构、iSCSI连接桥架构、PC架构、PC+NIC架构等,具体的iSCSI设备的物理形态在此不做限定。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个校验计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该校验计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台校验计算机设备(可以是个人校验计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random AccessMemory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。