发明内容
基于此,有必要针对现有技术中网络连接出现故障时无法进行信息交换的问题,提供一种利用共享磁盘构建通信通道的方法,能建立独立于网络环境且能提高信息交换可靠性的通信通道。
此外,还有必要提供一种利用共享磁盘构建通信通道的系统,能建立独立于网络环境且能提高信息交换可靠性的通信通道。
一种利用共享磁盘构建通信通道的方法,包括以下步骤:
发送状态时按照预定义的数据包格式创建数据包,并将所述数据包写入共享磁盘的数据包地址;
发送状态时按照预定义的发送序号包格式,根据所述数据包及数据包地址创建发送序号包,并将所述发送序号包写入所述共享磁盘的发送序号包地址;
接收状态时从所述共享磁盘的发送序号包地址中读取所述发送序号包中数据包序号和数据包地址;
接收状态时从所述共享磁盘的数据包地址中读取数据包,并校验所述数据包,若校验通过,则按照预定义的答应序号包格式创建答应序号包,并将所述答应序号包写入所述共享磁盘的答应序号包地址;
发送状态时读取所述答应序号包地址的答应序号包,校验所述答应序号包,若校验通过,则判断所述答应序号包中数据包序号是否等于所述数据包中数据包序号,若是,则所述数据包发送完成。
一种利用共享磁盘构建通信通道的系统,包括:
数据包写入模块,用于发送状态时按照预定义的数据包格式创建数据包,并将所述数据包写入共享磁盘的数据包地址;
发送序号包写入模块,用于发送状态时按照预定义的发送序号包格式,根据所述数据包及数据包地址创建发送序号包,并将所述发送序号包写入所述共享磁盘的发送序号包地址;
数据包读取模块,用于接收状态时从所述共享磁盘的发送序号包地址中读取所述发送序号包中数据包序号和数据包地址,从所述共享磁盘的数据包地址中读取数据包;
数据包校验模块,用于接收状态时校验所述数据包;
答应序号包写入模块,用于当数据包校验通过时,按照预定义的答应序号包格式创建答应序号包,并将所述答应序号包写入所述共享磁盘的答应序号包地址;
答应序号包读取模块,用于发送状态时读取所述答应序号包地址的答应序号包;
答应序号包校验模块,用于校验所述答应序号包;
判断模块,用于当答应序号包校验通过时,判断所述答应序号包中数据包序号是否等于所述数据包中数据包序号,若是,则所述数据包发送完成。
上述利用共享磁盘构建通信通道的方法和系统,通过某一个节点处于发送状态时把数据包写入共享磁盘,再由共享磁盘的处于接收状态的其余节点读取数据包,从而实现节点之间的通信,进行信息交换,保证了在集群环境中网络出现故障时,节点之间仍然能够进行信息交换,提供了一条独立于网络环境的、节省成本的,可靠的通信通道。
具体实施方式
下面结合具体的实施例及附图对利用共享磁盘构建通信通道的方法和系统的技术方案进行详细的描述,以使其更加清楚。
如图1所示,在一个实施例中,一种利用共享磁盘构建通信通道的方法,包括以下步骤:
步骤S110,发送状态时按照预定义的数据包格式创建数据包,并将该数据包写入共享磁盘的数据包地址。
在集群环境中,多个主机使用共享磁盘存储数据。每个主机是一个节点。节点工作时包括发送状态和接收状态两种。同一个节点发送数据时作为发送节点,处于发送状态,接收数据时作为接收节点,处于接收状态。共享磁盘是指集中为多个节点提供数据存储的设备。如图2所示,多个节点22与共享磁盘24相连,两个节点22之间通过网络相互连接。在某一个时刻可允许一个节点在连续磁盘扇区写入数据,其余节点读取数据。本发明中以一个节点作为发送节点,另一个节点作为接收节点为例描述两个节点之间利用共享磁盘构建双向通信通道,但不限于此。
首先需预定义数据包格式、发送序号包格式和答应序号包格式。
数据包格式包括检验和字段、发送标识字段、接收标识字段、数据包序号字段、数据长度字段和数据字段。如表1所示。
表1
表1中定义了一个定长的数据包,长度为1024字节,其中字段的划分为:校验和字段为4字节,用于校验数据包是否完整;发送标识字段为4字节,用于存放发送节点的标识;接收标识字段为4字节,用于存放接收节点的标识;数据包序号字段为4字节,用于存放数据包序号;数据长度字段为4字节,用于表示有效数据长度;数据字段为1004字节,用于保存发送的数据,最小0字节,最大1004字节。
发送序号包格式包括发送标识字段、接收标识字段、数据包地址字段、数据包序号字段和校验和字段。如表2所示。
表2
表2中定义了发送序号包,共20字节,其字段划分为:发送标识字段为4字节,用于填入数据包发送节点标识;接收标识字段为4字节,用于填入数据包接收节点的标识;数据包地址字段为4字节,用于填入数据包在共享磁盘的写入地址;数据包序号字段为4字节,用于在发送节点写入数据包后,填入此数据包序号;校验和字段为4字节,用于校验数据包地址、数据包序号是否完整。
答应序号包格式包括发送标识字段、接收标识字段、数据包序号字段和校验和字段。如表3所示。
表3
发送标识(4Byte) |
接收标识(4Byte) |
数据包序号(4Byte) |
校验和(4Byte) |
表3中定义了答应序号包,共16个字节,其字段划分为:发送标识字段为4字节,用于填入数据包发送标识;接收标识字段为4字节,用于填入数据包接收节点的标识;数据包序号字段为4字节,用于在发送节点写入数据包后,填入此数据包序号;校验和字段为4字节,用于校验数据包地址、数据包序号是否完整。
定义发送序号包和答应序号包是为了建立答应机制,方便发送节点获知接收节点是否收到数据。
发送节点创建数据包P,并根据字段的定义填入相关的信息,并把P写入到共享磁盘的数据包地址,本实施例中数据包地址为地址AddressA。
步骤S120,发送状态时按照预定义的发送序号包格式,根据该数据包及数据包地址创建发送序号包,并将发送序号包写入共享磁盘的发送序号包地址。
具体的,发送节点创建发送序号包S,根据发送序号包字段填入相关信息,并把S写入到共享磁盘的发送序号包地址,本实施例中发送序号包地址为地址AddressSend。
步骤S130,接收状态时从共享磁盘的发送序号包地址中读取发送序号包中数据包序号和数据包地址。
在一个实施例中,步骤S130包括:接收状态时从共享磁盘的发送序号包地址中读取发送序号包中数据包,并对发送序号包进行校验,若校验通过,则读取所述发送序号包中数据包序号和数据包地址。
具体的,接收节点从共享磁盘的地址AddressSend读取20个字节的发送序号包数据,进行校验,校验通过时,读取发送序号包中的数据包序号和数据包地址AddressA,若校验不通过时,重新从共享磁盘的地址AddressSend中读取发送序号包数据。
步骤S140,接收状态时从共享磁盘的数据包地址中读取数据包,并校验数据包,若校验通过,则按照预定义的答应序号包格式创建答应序号包,并将答应序号包写入共享磁盘的答应序号包地址。
具体的,接收节点从共享磁盘的数据包地址AddressA读取1024个字节的数据包,并且校验数据包,若校验通过,则创建答应序号包,并将答应序号包写入到共享磁盘的答应序号包地址。本实施例中答应序号包地址为地址AddressAck。
步骤S150,发送状态时读取答应序号包地址的答应序号包,校验答应序号包,若校验通过,则判断答应序号包中数据包序号是否等于数据包中数据包序号,若是,则所述数据包发送完成。
具体的,发送节点读取答应序号包地址AddressAck的答应序号包,校验未通过时,重新读取答应序号包,若校验通过,则判断答应序号包中数据包序号是否等于数据包P中的数据包序号,若是,则该数据包P发送完成,即可发送下一个数据包,若答应序号包中数据包序号小于数据包P中数据包序号,则表示接收节点尚未完成答应,则由发送节点继续读取答应序号包。
采用上述步骤S110至步骤S150的方式构建从接收节点到发送节点的数据通道,从而有了双向通道。
进一步的,发送标识和接收标识均为节点标识,上述利用共享磁盘构建通信通道的方法还包括步骤:
将节点标识分别与数据包地址、发送序号包地址和答应序号包地址建立映射关系。
具体的,节点标识是唯一区分节点的,本实施例中,节点标识为节点编号,节点编号唯一,例如为每个节点配置为1、2、3、……、N的编号。数据包地址、发送序号包地址和答应序号包地址也唯一,建立节点编号与数据包地址、发送序号包地址和答应序号包地址之间的映射关系。如此,根据节点编号可确定数据包地址、发送序号包地址和答应序号包地址。
上述利用共享磁盘构建通信通道的方法,通过某一个节点处于发送状态时把数据包写入共享磁盘,再由共享磁盘的处于接收状态的其余节点读取数据包,从而实现节点之间的通信,进行信息交换,保证了在集群环境中网络出现故障时,节点之间仍然能够进行信息交换,提供了一条独立于网络环境的、节省成本的,可靠的通信通道。
如图3所示,在一个实施例中,一种利用共享磁盘构建通信通道的系统,包括至少两个节点,其中一个节点作为发送节点发送数据,其余节点作为接收节点接收数据。本实施例中,以两个节点为例进行描述,某时刻其中一个节点作为发送节点,另一个节点作为接收节点。
发送节点10包括数据包写入模块110、发送序号包写入模块120、答应序号包读取模块130、答应序号包校验模块140和判断模块150。接收节点20包括数据包读取模块210、数据包校验模块220和答应序号包写入模块230。其中:数据包写入模块110用于发送状态时按照预定义的数据包格式创建数据包,并将数据包写入共享磁盘的数据包地址。
首先需预定义数据包格式、发送序号包格式和答应序号包格式。故利用共享磁盘构建通信通道的系统包括预定义模块,由预定义模块预定义数据包格式、发送序号包格式和答应序号包格式。
数据包格式包括检验和字段、发送标识字段、接收标识字段、数据包序号字段、数据长度字段和数据字段。如表1所示,定义了一个定长的数据包,长度为1024字节,其中字段的划分为:校验和字段为4字节,用于校验数据包是否完整;发送标识字段为4字节,用于存放发送节点的标识;接收标识字段为4字节,用于存放接收节点的标识;数据包序号字段为4字节,用于存放数据包序号;数据长度字段为4字节,用于表示有效数据长度;数据字段为1004字节,用于保存发送的数据,最小0字节,最大1004字节。
发送序号包格式包括发送标识字段、接收标识字段、数据包地址字段、数据包序号字段和校验和字段。如表2所示,定义了发送序号包,共20字节,其字段划分为:发送标识字段为4字节,用于填入数据包发送节点标识;接收标识字段为4字节,用于填入数据包接收节点的标识;数据包地址字段为4字节,用于填入数据包在共享磁盘的写入地址;数据包序号字段为4字节,用于在发送节点写入数据包后,填入此数据包序号;校验和字段为4字节,用于校验数据包地址、数据包序号是否完整。
答应序号包格式包括发送标识字段、接收标识字段、数据包序号字段和校验和字段。如表3所示,定义了答应序号包,共16个字节,其字段划分为:发送标识字段为4字节,用于填入数据包发送标识;接收标识字段为4字节,用于填入数据包接收节点的标识;数据包序号字段为4字节,用于在发送节点写入数据包后,填入此数据包序号;校验和字段为4字节,用于校验数据包地址、数据包序号是否完整。
定义发送序号包和答应序号包是为了建立答应机制,方便发送节点获知接收节点是否收到数据。
数据包写入模块110创建数据包P,并根据字段的定义填入相关的信息,并把P写入到共享磁盘的数据包地址,本实施例中数据包地址为地址AddressA。
发送序号包写入模块120用于发送状态时按照预定义的发送序号包格式,根据数据包及数据包地址创建发送序号包,并将发送序号包写入共享磁盘的发送序号包地址。
具体的,发送节点创建发送序号包S,根据发送序号包字段填入相关信息,并把S写入到共享磁盘的发送序号包地址,本实施例中发送序号包地址为地址AddressSend。
数据包读取模块210用于从共享磁盘的发送序号包地址中读取发送序号包中数据包序号和数据包地址,从共享磁盘的数据包地址中读取数据包。数据包读取模块210读取发送序号包中的数据包序号和数据包地址AddressA。
数据包校验模块220用于校验数据包。
答应序号包写入模块230用于当校验通过时,按照预定义的答应序号包格式创建答应序号包,并将所述答应序号包写入所述共享磁盘的答应序号包地址。
从共享磁盘的数据包地址AddressA读取1024个字节的数据包,并且数据包校验模块220校验数据包,若校验通过,则答应序号包写入模块230创建答应序号包,并将答应序号包写入到共享磁盘的答应序号包地址。本实施例中答应序号包地址为地址AddressAck。
答应序号包读取模块130用于发送状态时读取答应序号包地址的答应序号包。
答应序号包校验模块140用于校验所述答应序号包。
判断模块150用于当校验通过时,判断所述答应序号包中数据包序号是否等于所述数据包中数据包序号,若是,则所述数据包发送完成。
答应序号包读取模块130读取答应序号包地址AddressAck的答应序号包,答应序号包校验模块140用于校验地址AddressAck的答应序号包,校验未通过时,答应序号包读取模块130重新读取答应序号包,若校验通过,则判断模块150判断答应序号包中数据包序号是否等于数据包P中的数据包序号,若是,则该数据包P发送完成,即可发送下一个数据包,若答应序号包中数据包序号小于数据包P中数据包序号,则表示接收节点尚未完成答应,则由发送节点继续读取答应序号包。
如图4所示,在一个实施例中,接收节点除了包括数据包读取模块210、数据包校验模块220和答应序号包写入模块230,还包括发送序号包读取模块240和发送序号包校验模块250。其中:
发送序号包读取模块240用于从共享磁盘的发送序号包地址中读取所述发送序号包中数据包。
发送序号包校验模块250用于对所述发送序号包进行校验;
数据包读取模块210还用于当发送序号包校验通过时,读取所述发送序号包中数据包序号和数据包地址。
具体的,发送序号包读取模块240从共享磁盘的地址AddressSend读取20个字节的发送序号包数据,发送序号包校验模块250进行校验,校验通过时,数据包读取模块210读取发送序号包中的数据包序号和数据包地址AddressA,若校验不通过时,发送序号包读取模块240重新从共享磁盘的地址AddressSend中读取发送序号包数据。
此外,在其他时刻,作为发送节点的节点也可作为接收节点接收数据,作为接收节点的其中一个节点可作为发送节点发送数据。故此,每个节点作为发送节点时,包括发送节点10的所有模块,作为接收节点时,包括接收节点20的所有模块。进一步的,发送标识和接收标识均为节点标识,上述利用共享磁盘构建通信通道的方法还包括映射模块,用于将节点标识分别与数据包地址、发送序号包地址和答应序号包地址建立映射关系。
具体的,节点标识是唯一区分节点的,本实施例中,节点标识为节点编号,节点编号唯一,例如为每个节点配置为1、2、3、……、N的编号。数据包地址、发送序号包地址和答应序号包地址也唯一,建立节点编号与数据包地址、发送序号包地址和答应序号包地址之间的映射关系。如此,根据节点编号可确定数据包地址、发送序号包地址和答应序号包地址。
上述利用共享磁盘构建通信通道的系统,通过某一个节点处于发送状态时把数据包写入共享磁盘,再由共享磁盘的处于接收状态的其余节点读取数据包,从而实现节点之间的通信,进行信息交换,保证了在集群环境中网络出现故障时,节点之间仍然能够进行信息交换,提供了一条独立于网络环境的、节省成本的,可靠的通信通道。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。