一种分布式系统中的节点间可靠通信方法

文档序号:7705674阅读:174来源:国知局
专利名称:一种分布式系统中的节点间可靠通信方法
技术领域
本发明涉及网络通信领域,具体的说是一种分布式系统中的节点 间可靠通信方法。
背景技术
分布式系统一般采用多主机方式,每个主机称为一个节点,它们 协同工作完成任务,节点间采用网络通信方式,可以分离部署。为保 证系统的运行,节点间有大量的数据需要交换,这些消息的长度不大, 但对实时性要求高,通信也必须是可靠传输。
目前主要的IP (Internet Protocol,网际协议)通信协议有TCP (Transmission Control Protocol,传输控制协议)和UDP (User Datagram Protocol,用户数据报协议)两种。TCP提供一种面向连 接的、可靠的字节流服务,似乎很适合成为节点间的通信方式,但 TCP对用户数据必须顺序发送,比如用户数据A、 B、 C需要依次发送, 如果B因为某些原因没有发送,则TCP会不断重新发送B,而不会发 送C,这对于实时数据较多的节点间通信过于严格,此外TCP链路建 立(三次握手)和数据交换(每个数据包都有确认消息)的开销较大, 不适合用于大量短消息的发送。而UDP提供的是无连接的、不可靠的 数据传送方式,是一种尽力而为的数据交付服务,它比较简单,发送 数据的开销小,而且没有顺序要求,因而比较适合快速大量的实时数 据交互,但UDP是一个不可靠的协议,它发送的消息没有确认,用户 并不知道消息是否被正确的发送到目的地址。

发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种分布式系统中的节点间可靠通信方法,在UDP协议上,利用其优点,设计可 靠通信机制,用于分布式系统节点间通信,实现了消息的可靠传输, 保证节点间通信的质量。
为达到以上目的,本发明采取的技术方案是
一种分布式系统中的节点间可靠通信方法,其特征在于其具体 步骤为-
步骤l,为每个节点配置两块网卡两块网卡分别是网络接口A 和网络接口 B,它们有不同的IP地址,均可提供至其它节点的通信 路径;
步骤2,建立网络接口间的双链路当任意两个节点需要通信前, 先通过链路控制消息建立可用的逻辑链接,并协商相关数据;任意一 个节点上的网络接口 A只与其它节点上的网络接口 A通信,构成A链 路;任意一个节点上的网络接口 B只与其它节点上的网络接口 B通信, 构成B链路;所说的通信采用UDP方式,固定端口,这样每个节点与 任意一个其它节点都有两条网络链路连接;
步骤3,备份式通信当A链路正常时,任意两个节点间的通信 都通过A链路传递;当A链路出现问题或者出现拥塞时,通信自动切
换至B链路上传递;当链路中没有需要传输的用户数据时,定时发送
心跳消息确保链路始终可用;当链路中有需要传输的用户数据时,通 过IPC消息传递节点间的用户数据,IPC消息的最大长度是固定不变 的,在一条IPC消息中可以包含多条用户数据,如果用户数据大于 IPC消息的用户数据部分,则需要对用户数据进行拆分。
在上述技术方案的基础上,链路控制消息、心跳消息和IPC消息 均采用相同的消息格式,所说的消息格式由消息头字段和消息体字段 组成;
消息头字段包括6项,分别为消息类型、乱序标志、源节点信息、 目的节点信息、发送消息序号、应答消息序号;消息类型用于区分该 消息的类型;
链路控制消息的消息体字段包括9项,分别是链路控制类型、链路控制时间Sl、 IPC消息发送时间S2、重传IPC消息时间S3、 IPC 确认时间S4、消息长度值S5、滑动窗口值S6、最大重传次数S7、丢 失心跳消息的最大次数S8;链路控制类型用于区分链路控制消息的 具体类型;
心跳消息的消息体字段为空;
IPC消息的消息体字段为用户数据;
步骤2中所说的协商相关数据是指协商Sl到S8,节点间除了协 商具体取值大小,还应当协商这些值的取值范围,以便于双方协商时 调整。
在上述技术方案的基础上,消息类型取值为1时为链路控制消 息,取值为2时为心跳消息,取值为3时为IPC消息;链路控制类型 取值为1时为链路建立请求SetupRequest,取值为2时为链路建立 请求回应SetupR印ly,取值为3时为链路建立请求回应确认 SetupR印lyAck。
本发明所述的分布式系统中的节点间可靠通信方法,具有以下优

1、 在UDP上实现了消息的可靠传输,保证节点间通信的质量。
2、 通过链路控制消息和心跳消息,用户层可以较好地控制链路 状态。
3、 消息的确认通过消息中的应答消息序号字段实现,没有专门 的确认消息,节省链路流量。如果链路中始终发送IPC消息,则链路 利用率可达100%。


本发明有如下附图
图l是链路建立消息图。
图2是普通IPC消息交换图。
图3是IPC消息编号的滑动窗口示例图。
6图4是IPC消息超时重传示意图。 图5是IPC消息乱序重传示意图。
图中Ke印Alive表示心跳消息,src表示消息头中发送消息序号, ack表示消息头中应答消息序号,out-of-order=true表示乱序标志 字段置位。
具体实施例方式
以下结合附图对本发明作进一步详细说明。 本发明公开了一种分布式系统中的节点间可靠通信方法,其具体 步骤为
步骤l,为每个节点配置两块网卡两块网卡分别是网络接口A 和网络接口 B,它们有不同的IP地址,均可提供至其它节点的通信 路径;
步骤2,建立网络接口间的双链路当任意两个节点需要通信前, 先通过链路控制消息建立可用的逻辑链接,并协商相关数据;任意一 个节点上的网络接口 A只与其它节点上的网络接口 A通信,构成A链 路;任意一个节点上的网络接口 B只与其它节点上的网络接口 B通信, 构成B链路;所说的通信采用UDP方式,固定端口,这样每个节点与
任意一个其它节点都有两条网络链路连接;
步骤3,备份式通信当A链路正常时,任意两个节点间的通信 都通过A链路传递;当A链路出现问题或者出现拥塞时,通信自动切 换至B链路上传递;当链路中没有需要传输的用户数据时,定时发送 心跳消息确保链路始终可用;当链路中有需要传输的用户数据时,通 过IPC消息传递节点间的用户数据,IPC消息的最大长度是固定不变 的,在一条IPC消息中可以包含多条用户数据,如果用户数据大于 IPC消息的用户数据部分,则需要对用户数据进行拆分。
在上述技术方案的基础上,链路控制消息、心跳消息和IPC消息均采用相同的消息格式,所说的消息格式由消息头字段和消息体字段
组成;消息头字段包括6项,分别为消息类型、乱序标志、源节点信 息、目的节点信息、发送消息序号、应答消息序号;消息类型用于区 分该消息的类型;链路控制消息的消息体字段包括9项,分别是链路 控制类型、链路控制时间Sl、 IPC消息发送时间S2、重传IPC消息 时间S3、 IPC确认时间S4、消息长度值S5、滑动窗口值S6、最大重 传次数S7、丢失心跳消息的最大次数S8;链路控制类型用于区分链 路控制消息的具体类型;心跳消息的消息体字段为空;IPC消息的消 息体字段为用户数据;步骤2中所说的协商相关数据是指协商Sl到 S8,节点间除了协商具体取值大小,还应当协商这些值的取值范围, 以便于双方协商时调整。
在上述技术方案的基础上,消息类型取值为1时为链路控制消 息,取值为2时为心跳消息,取值为3时为IPC消息;链路控制类型 取值为1时为链路建立请求SetupRequest,取值为2时为链路建立 请求回应SetupR印ly,取值为3时为链路建立请求回应确认 Set叩R印lyAck。
如上述技术方案所述,本发明为保证节点的网络接口可靠,采用 l+l备份方式,每个节点配置有两块网卡,分别是网络接口A和网络 接口 B,它们有不同的IP地址,均可提供至其它系统节点的通信路 径。节点上的网络接口A只与其它所有节点的网络接口A通信,而网 络接口 B也只与其它所有节点的网络接口 B通信。通信采用UDP方式, 固定端口,这样每个节点与任何其它节点都有两条网络链路连接,称 为A链路和B链路。 一般的通信在A链路上,当出现问题或者拥塞时, 可以切换至B链路上通信。
节点间传递的消息有链路控制、心跳和IPC三种,采用相同的消 息格式,消息格式如下所示,其中,l到6为消息头字段,7为消息 体字段-
1、消息类型。可以定义链路控制消息值为l,心跳消息值为2,
8IPC消息值为3。
2、 乱jW7fe。 t^Mm的节点节点接收到了一个乱序的IPC 消息。
3、 源节点信息。指明发送消息节点的编号、名称、类型等内容。
4、 目的节点信息。指明接收消息节点的编号、名称、类型等内容。
5、 发送消息序号。指明发送节点最后发送IPC消息的序号。
6、 应答消息序号。指明期待收到下一个IPC消息的序号,比如, 该值为5,则序号为4以及4以前的IPC消息都已经收到。该字段表 示对接收节点己发送消息的确认。
7、 消息体部分。链路控制消息中该部分为链路控制内容,IPC 消息中该部分为用户数据,心跳消息中该部分为空。
链路控制消息的消息体含有如下字段-
1、 链路控制类型。取值有,SetupRequest (链路建立请求)为 1, SetupR印ly (链路建立请求回应)为2, SetupR印lyAck (链路建 立请求回应确认)为3。
2、 Sl,链路控制时间,指示发送链路控制消息和心跳消息的等 待时间。
3、 S2, IPC消息发送时间,指示发送IPC信息等待的时间。
4、 S3,重传IPC消息时间,指示没有收到IPC确认重发IPC的 间隔时间,该值不应该比Sl小, 一般来说该值应该等于节点间消息 往返时间。
5、 S4, IPC确认时间,指示接收节点发送确认的等待时间,一 般为2*S1。
6、 S5,消息长度值,指示节点间传递消息的最大长度, 一般应 该与网络中的最大传输单元(MTU, maximum Transmission unit)接 近,但不应大于MTU,以避免消息分段负荷。
7、 S6,滑动窗口值,指示在没有收到确认时可以发送的最大IPC消息数目,也是消息序号的最大值。
8、 S7,最大重传次数,指示IPC消息允许的最大重传次数。
9、 S8,丢失心跳消息的最大次数。链路没有IPC消息时,中每 隔Sl应该收到一条心跳消息,当没有收到心跳消息的次数达到S8时, 该链路将变为不可用。
Sl到S8是链路建立时节点间协商的数据,节点间除了协商具体 取值大小,还应当协商这些值的取值范围,以便于双方协商时调整。
链路控制、心跳和IPC三种消息的功用如下
1、 链路控制消息,用于节点间建立可用的逻辑链接,并协商相 关数据。
2、 心跳消息,当可用的链路上没有用户数据传输时,将定时发 送该消息,确保链路始终可用。该消息的用户数据部分为空。
3、 IPC (Inter-process communications)消息,传递的是节点 间的用户数据,它的最大长度应该是确定的,在一条IPC消息中可以 包含多条用户数据,如果用户数据大于IPC消息的用户数据部分,用 户考虑拆分以适应IPC消息的长度。
步骤2中,节点间通过发送SetupRequest、 SetupR印ly和 SetupR印lyAck这三种链路控制消息来建立链路并协商Sl到S8数据, 其中SetupRequest是链路建立请求,SetupR印ly是对SetupRequest 的回应,SetupR印lyAck是对SetupR印ly的确认,图1说明了链路 建立的步骤。链路建立后状态始终保持可用,直到出现以下情况任意 一种该链路被设置为不可用;超过IPC消息的最大重传次数S7; 达到规定的丢失心跳消息的最大次数S8。
一旦链路状态变为可用,心跳消息和IPC消息将在节点间发送。 当链路上有IPC消息时,心跳消息将不会被发送。如果链路上没有出 现IPC消息的时间超过链路控制时间Sl,心跳消息将会被发送,并 每隔S1时间发送一次。
10用户数据将被打包到IPC消息的消息体中,当IPC消息大小达到 消息长麼直S5时,■ IPC发送间隔时间超过IPC消息发送时间S2 时,这条IPC消息将被发送出去。所有没有被确认的IPC消息都将被 缓存起来。IPC没有被确认的时间超过IPC确认时间S4时,这条IPC 消息将会被重新发送,如果重传次数超过最大重传次数S7时,这条 链路将的状态将变为不可用。图2说明了 IPC消息交换的情况,图4 说明了 IPC消息重传的情况。
对IPC消息进行编号发送,通过消息头中的发送消息序号字段指 明发送节点发送IPC消息的序号,通过应答消息序号字段指明期待收 到下一个IPC消息的序号,也就是对该序号以前的IPC消息进行确认。 编号的方式采用滑动窗口模式,图3对此进行了说明。当发送的IPC 消息数目达到滑动窗口值S6而没有一条消息被确认时,新的IPC消 息将不能被发送,只有当对方节点发来消息对本节点发送的消息进行 了确认后,新的IPC消息才可以发送,确认几条就可以新发送几条。
网络通信中常常存在丢包的情况。当节点1收到节点2发来的 IPC消息后,将会把消息中的发送消息序号字段与上次收到的节点2 消息的序号进行比较,要求是循序增长,如果序号出现跳跃,表示中 间有消息没有收到,消息丢失了,此时节点1发送回节点2的消息中 乱序标志字段将会被置位,应答消息序号字段不变,节点2就会知道 出现乱序情况,它将把所有没有收到确认的IPC消息重新发送一遍, 而节点1将会把开始收到的消息丢弃,因为还会收到节点2重新发来 的这条消息。图5说明了 IPC消息乱序的情况。
以下结合附图,对本发明所述的方法的具体步骤详细说明
节点间通过发送链路控制消息来建立链路,只有链路状态变为可
用,心跳消息和IPC消息才能在节点间发送。下面结合图1说明链路
建立的步骤
1、节点A初始化后,发现需要与节点B建立链路,因此开始向 节点B发送SetupRequest消息,并携带本地的SI到S8参数。如果
ii节点B没有回应,这每隔Sl时间重发一次,其中srcttl表示节点A 自己的消息序号为1, ack恥表示节点A最近一次对节点B消息回复 的序号。
2、 节点B收到SetupRequest消息,从中获得节点A的Sl到S8 参数,然后与自己的值比较,取最小值作为本次通信的参数,在给节 点A的SetupR印ly中携带这些值,其中src#l表示节点B自己的消 息序号为1, ack#l表示节点B对节点A发过来的消息的回应。
3、 节点A收到SetupR印ly后,得到协商的Sl到S8参数并保存, 发出Set叩R印lyAck消息,并标识链路可用其中src#l表示节点A自 己的消息序号为1, ack#l表示节点A收到节点B发的SetupR印ly的 响应。
4、 节点B收到SetupR印lyAck,保存协商后的Sl到S8参数并 标识链路可用。此时链路已经建立,在S1时间后,双方互发心跳消 息Ke印Alive,确保链路始终可用。
本发明需要对IPC消息进行编号发送,编号的方式采用滑动窗口 模式,窗口的大小由滑动窗口值S6参数决定。下面结合图3对此举 例进行说明
'F'表示前指针,《R'表示后指针,R根据发送IPC的编号移动, F根据收到消息的应答消息序号移动。图3中滑动窗口的大小为8。 a是初始设置。
b表示编号为0、 1、 2的IPC消息已经被发送出去,下一条要发 送的消息编号为3,因此R指针向前移动到3。
c表示收到一条消息,其应答消息序号为3,也就是说对方已经 收到0、 1、 2消息,因此F指针向前移动到2。
d表示编号为3、 4、 5、 6、 7、 0的IPC消息已经发送出去,下 一条要发送的消息编号为1,因此R指针向前移动的1。
e表示收到一条消息,其应答消息序号为5,也就是说对方已经 收到3、 4消息,因此F指针向前移动到4。IPC消息的传递如图2所示,图2说明了节点A、 B之间互相传 递消息的示例,当IPC由节点A发送给节点B时,如果节点B没有 IPC消息需要发送,则定期发送的心跳消息(ke印alive)就会对节 点A的消息进行确认;如果节点B有IPC消息需要发送,则其中的应 答消息序号字段对节点A的消息进行确认。其中IPC[srcttl,ackm] 表示节点A给节点B发送IPC消息,src#l表示节点A消息序号为1, ack#l表示期待收到下一个由节点B发送的消息编号为1, Ke印Alive[srcW, ackW2]表示节点B收到节点A发送的IPC消息确 认,src#l表示节点B消息序号为1, ack#2表示节点B期待收到下一 个IPC消息序号为2,序号为1和1以前的IPC消息都收到了 (后面 的指令以此类推)。
图4说明了 IPC消息超时重传的一个示例,节点A向节点B发送 的编号为3的IPC消息在S3时间后还没有收到确认,因此该消息被 重新发送,其后已经发送的编号为4的消息也被重新发送,节点B并 不是因为链路断了而没有收到消息,而是因为发送的确认还没有到达 节点A就发生了S3超时,当节点A收到确认后,后面重传被取消, 节点B收到了两次编号为3、 4的消息,它会把第二次收到的消息丢 弃。(每条指令说明如前述对图2的解释)
图5说明了 IPC消息乱序重传的一个示例,节点A向节点B发送 的编号为3的IPC消息丢失,节点B跳过3收到的编号为4的消息, 发现出现乱序情况,因此节点B在发送给节点A的消息中将乱序标志 置位(out-of-order二true),并丢弃编号为4的消息,节点A收到消 息知道乱序情况后,马上将还没有收到确认的消息重传一遍,而不是 等到S3超时再重传。(每条指令说明如前述对图2的解释)。
1权利要求
1. 一种分布式系统中的节点间可靠通信方法,其特征在于其具体步骤为步骤1,为每个节点配置两块网卡两块网卡分别是网络接口A和网络接口B,它们有不同的IP地址,均可提供至其它节点的通信路径;步骤2,建立网络接口间的双链路当任意两个节点需要通信前,先通过链路控制消息建立可用的逻辑链接,并协商相关数据;任意一个节点上的网络接口A只与其它节点上的网络接口A通信,构成A链路;任意一个节点上的网络接口B只与其它节点上的网络接口B通信,构成B链路;所说的通信采用UDP方式,固定端口,这样每个节点与任意一个其它节点都有两条网络链路连接;步骤3,备份式通信当A链路正常时,任意两个节点间的通信都通过A链路传递;当A链路出现问题或者出现拥塞时,通信自动切换至B链路上传递;当链路中没有需要传输的用户数据时,定时发送心跳消息确保链路始终可用;当链路中有需要传输的用户数据时,通过IPC消息传递节点间的用户数据,IPC消息的最大长度是固定不变的,在一条IPC消息中可以包含多条用户数据,如果用户数据大于IPC消息的用户数据部分,则需要对用户数据进行拆分。
2. 如权利要求1所述的分布式系统中的节点间可靠通信方法, 其特征在于链路控制消息、心跳消息和IPC消息均采用相同的消息 格式,所说的消息格式由消息头字段和消息体字段组成;消息头字段包括6项,分别为消息类型、乱序标志、源节点信息、 目的节点信息、发送消息序号、应答消息序号;消息类型用于区分该 消息的类型;链路控制消息的消息体字段包括9项,分别是链路控制类型、链 路控制时间Sl、 IPC消息发送时间S2、重传IPC消息时间S3、 IPC 确认时间S4、消息长度值S5、滑动窗口值S6、最大重传次数S7、丢失心跳消息的最大次数S8;链路控制类型用于区分链路控制消息的具体类型;心跳消息的消息体字段为空;IPC消息的消息体字段为用户数据;步骤2中所说的协商相关数据是指协商Sl到S8,节点间除了协 商具体取值大小,还应当协商这些值的取值范围,以便于双方协商时 调整。
3.如权利要求2所述的分布式系统中的节点间可靠通信方法, 其特征在于消息类型取值为1时为链路控制消息,取值为2时为心跳消息,取值为3时为IPC消息;链路控制类型取值为1时为链路建立请求SetupRequest,取值为2时为链路建立请求回应Set叩R印ly, 取值为3时为链路建立请求回应确认SetupR印lyAck。
全文摘要
一种分布式系统中的节点间可靠通信方法,涉及网络通信领域,其具体步骤为步骤1,为每个节点配置两块网卡;步骤2,建立双链路当任意两个节点需要通信前,先通过链路控制消息建立可用的逻辑链接并协商相关数据;步骤3,备份式通信当A链路正常时,任意两个节点间的通信都通过A链路传递;当A链路出现问题或拥塞时,自动切换至B链路上传递;当链路中没有需要传输的用户数据时,定时发送心跳消息确保链路始终可用;否则,通过IPC消息传递节点间的用户数据。本发明所述的分布式系统中的节点间可靠通信方法,在UDP协议上,利用其优点,设计可靠通信机制,用于分布式系统节点间通信,实现了消息的可靠传输,保证节点间通信的质量。
文档编号H04L29/08GK101505306SQ20091011909
公开日2009年8月12日 申请日期2009年3月23日 优先权日2009年3月23日
发明者华 李, 春 罗, 覃洪清 申请人:烽火通信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1