一种数据通信方法和装置的制作方法

文档序号:7867557阅读:206来源:国知局
专利名称:一种数据通信方法和装置的制作方法
技术领域
本发明属于网络技术领域,尤其涉及一种数据通信方法和装置。
背景技术
随着当前网络技术的快速发展,很多传统的服务已经转移到网络环境中实施,例如金融交易、企业管理等。由于网络环境的脆弱性,常导致服务器需要维护,一旦服务器处于维护状态,如果有没采取必要的措施,那么所提供的服务就会被中断较长的时间。而对于企业级的应用来说,这样长时间的服务的中断是不能接受的。为了克服上述问题,现今的高可用集群使服务器系统能够不间断地运行,该服务器系统一般由两个或两个以上的节点组成。假如某个节点需要维护,该节点上的服务进程会被实时迁移到备用节点上继续服务。对服务进程进行实时迁移,需要在服务器上暂停该待迁移的进程,并将该进程的的执行状态信息保存到检查点(checkpoint)文件中,然后停止该进程。之后在备用节点上新建一个进程并从上面得到的检查文件中读入原有进程的执行状态信息,从而继续提供服务。服务进程在运行过程中,往往包含一个监听套接字来接收客户端的连接,并拥有若干打开的套接字正与已经建立连接的客户端传输数据。因此在将服务进程进行迁移的过程中,也需要对该服务进程的打开套接字进行迁移,因此需要将该服务进程的打开套接字状态信息保存到检查点文件中。在对套接字进行迁移的过程中,网络协议栈仍然正常工作。从一个服务进程的迁移开始,到该服务进程的迁移结束(即该服务进程在备用节点上被重新建立)的期间内,数据包是无法正常接收的,但客户端又不会意识到它所发送的数据包未被正常接收,所以客户端在这段期间内所发送的数据包将丢失。此外,将迁移过程中,将停止原服务进程,客户端将收到服务器发送的FIN数据包,并同时关闭停止的服务进程的套接字,客户端由于感知到进程的迁移导致的连接断开因此需要重新连接服务器。

发明内容
有鉴于此,本发明的目的在于提供一种基于套接字的数据通信方法和装置,能够避免因为进程迁移导致的数据包丢失的现象。为实现上述目的,本发明的一个实施例提供一种基于套接字的数据通信方法,包括在接收到客户端发送的数据包后,寻找该数据包的宿主套接字;寻找所述宿主套接字的接收队列的尾端的数据包,判断所述尾端的数据包的检查点标志位是否被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值;如果所述尾端数据包的检查点标志位被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值,则直接丢弃接收到的数据包。另一方面,本发明实施例还提供一种数据通信装置,包括数据包接收单元,用于接收客户端发送的数据包;套接字查找单元,用于寻找所述接收到的数据包的宿主套接字;数据包查找单元,用于寻找所述宿主套接字的接收队列的尾端的数据包;判断单元,用于判断所述尾端的数据包的检查点标志位是否被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值;丢弃单元,用于当所述判断单元的判断结果为是,则丢弃接收到的数据包。根据本发明实施例,在接收到数据包后,首先检查该数据包的宿主套接字的接收队列尾端的数据包中的检查点标志位,是否被置为表示该宿主套接字的接收队列内容已经被检查点进程保存到检查点文件中的值,如果是,则会将接收到的数据包丢弃,进而可以使得客户端意识到该客户端所发送的数据未被正常接收,进行后续的重发步骤,不会产生丢包的问题。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供一种基于套接字的数据通信方法的示意图;图2是本发明提供的基于套接字的数据通信方法的一个具体实施例的示意图;图3和图4分别是修改前和修改后的TCP数据包的格式示意图;图5是本发明实施例中提供的一种关闭套接字的流程图;图6是本发明实施例提供的一种数据通信装置的示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例提供一种基于套接字的数据通信方法,如图1所示,该方法包括如下步骤步骤SlOl :在接收到客户端发送的数据包后,寻找该数据包的宿主套接字;步骤S102 :寻找宿主套接字的接收队列尾端的数据包;步骤S103 :判断步骤S102中寻找到的尾端的数据包的检查点标志位是否被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值;步骤S104 :当步骤S103的判断结果为是时,直接丢弃接收到的数据包。在本发明实施例提供的数据通信方法中,在客户端发送的数据包中增加了用来表示该数据包的宿主套接字的接收队列内容已经被检查点进程保存到检查点文件中的标志位(可以简写为CKPT)。当CKPT标志位的值为表示该数据包的宿主套接字的接收队列内容已经被检查点进程保存到检查点文件中的值时,表示当前接收的数据包的宿主套接字的接收队列内容已经被检查点进程保存到检查点文件中,也就是说该宿主套接字已经被迁移,此时会将接收到的数据包丢弃,进而可以使得客户端意识到该客户端所发送的数据未被正常接收,进行后续的重发步骤,不会产生丢包的问题。以下以一个具体的例子详细说明本发明的具体实现。如图2所示,该方案包括如下步骤步骤S201 :对进程的套接字进行迁移;步骤S202 :如果该迁移的套接字的接收队列不为空,则检查点进程将该套接字的接收队列内容保存到检查点文件中,并将该接收队列尾端的数据包中的CKPT标志位的值置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值。此外,本实施例中还可以考虑被迁移的套接字的接收队列为空的情况,此时,就构造一个空的数据包,这里所谓空的数据包是指不包含实际数据的数据包,并将该空的数据包中的CKPT标志位的值置为表示已经被检查点进程保存到检查点文件中的值。在本发明实施例中,可以修改TCP数据包的格式,使用原来TCP数据包的一个保留比特位作为CKPT标志位。一种具体的方案可以参见图3和图4。图3中示出了修改前的TCP数据包的格式,图4示出了修改后的TCP数据包的格式,对比图4和图3,可知该方案中利用了原有TCP数据包的若干保留比特位中的一个作为CKPT标志位。当采用原有TCP数据包的保留比特位作为CKPT标志位时,不会对网络协议栈的性能以及网络通信过程中的其他环节产生影响。步骤S203 :当接收 到客户端发送的数据包时,对接收到的数据包进行正确性校验。正确性校验可以包括数据包是否属于本地、首部校验和是否正确等。步骤S204 :判断步骤S203中的正确性校验是否通过,如果是,则继续执行步骤S205,如果否,则直接执行步骤S210 :丢弃数据包。步骤S205 :寻找该接收到的数据包的宿主套接字。在实际中可以从存放打开套接字的哈希表中寻找该数据包所属的传输控制块,并由该传输控制块找到宿主套接字。实际上,每个打开套接字及其接收队列都在一个哈希(hash)表中维护,而属于同一个套接字的数据包的四元组(源IP、目的IP、源端口、目的端口)在哈希表中的键值是相同的,因此根据接收到的数据包的四元组即可确定其所属的套接字,即宿主套接字。步骤S206 :找到宿主套接字后,寻找该宿主套接字的接收队列尾端的数据包。步骤S207 :判断该尾端的数据包的CKPT标志位的值是否被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值,如果判断结果为是,则直接执行步骤S210 :丢弃数据包;如果判断结果为否,则继续执行步骤S208。步骤S208 :将接收到的数据包挂到其宿主套接字的接收队列的尾端。步骤S209 :向客户端反馈ACK确认消息,表示客户端发送的该数据包已经被服务端正常接收。在进程被迁移的过程中,会结束原进程,同时关闭原进程的所有打开套接字,本发明另一实施例还对关闭套接字的流程进行了优化,如图5所示,本发明实施例提供的数据通信方法中还包括如下示出的关闭套接字的步骤步骤S501 :检查要关闭的套接字的接收队列尾端的数据包的CKPT标志位的值是否被置位为表示该接收队列内容已经被检查点进程保存到检查点文件中的值。如果步骤S501中的判断结果为是,则执行步骤S502 :直接释放该关闭的套接字的缓冲区和撤销该关闭的套接字的结构体。从而跳过发送FIN消息的步骤直接关闭该套接字。这种情况下,客户端没有接收到FIN消息,也就不会感知到服务端套接字被关闭,如果在TCP连接超时规定的时间内成功完成进程的迁移,则会恢复打开套接字的状态,除了有一定程度的延时以外,客户端不会感知到网络连接曾被中断。如果步骤S501中的判断结果为否,则按照传统的套接字关闭流程对套接字进行关闭,即执行步骤S503 :向客户端发送FIN消息,等待客户端的确认后,释放该关闭的套接字的缓冲区,并撤销该关闭的套接字的结构体。同时客户端也将关闭该套接字的相关端口。本发明实施例还相应提供一种数据通信装置,如图6所示,该装置包括数据包接收单元601,用于接收客户端发送的数据包;套接字查找单元602,用于查找接收到的数据包的宿主套接字;数据包查找单元603,用于寻找宿主套接字的接收队列的尾端的数据包;判断单元604,用于判断尾端的数据包的检查点标志位是否被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值;
丢弃单元605,用于当判断单元604的判断结果为是,则丢弃接收到的数据包。此外,本实施例中的数据通信装置还可以包括数据包挂入单元606,用于判断单元604的判断结果为否时,将接收到的数据包挂到宿主套接字的接收队列的尾端,并向客户端返回表示数据包已经被正常接收的确认信息。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种基于套接字的数据通信方法,其特征在于,包括 在接收到客户端发送的数据包后,寻找该数据包的宿主套接字; 寻找所述宿主套接字的接收队列的尾端的数据包,判断所述尾端的数据包的检查点标志位是否被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值; 如果所述尾端数据包的检查点标志位被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值,则直接丢弃接收到的数据包。
2.根据权利要求1所述的方法,其特征在于,该方法还包括 如果所述最后一个数据包的检查点标志位未被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值时,则将所述接收到的数据包挂到所述宿主套接字的接收队列的尾端,并向所述客户端反馈表示数据包已经被正常接收的确认信息。
3.根据权利要求1或2所述的方法,其特征在于,该方法还包括 在对套接字进行迁移的过程中,如果所述套接字的接收队列不为空,则检查点进程将所述套接字的接收队列内容保存到检查点文件中,并将所述接收队列尾端的数据包中的检查点标志位置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值。
4.根据权利要求3所述的方法,其特征在于,该方法还包括 在对套接字进行迁移的过程中,如果所述套接字的接收队列为空,则创建一个空数据包,将所述创建的空数据包中的检查点标志位置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值,将置位后的空数据包挂到接收队列中,然后检查点进程将所述套接字的接收队列内容保存到检查点文件中。
5.根据权利要求1或2所述的方法,其特征在于,该方法还包括 在对套接字进行关闭的过程中,判断所述套接字的接收队列尾端的数据包的检查点标志位是否被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值; 如果是,则直接释放缓冲区和撤销所述套接字的结构体; 如果否,则向客户端发送FIN数据包,待客户端确认后释放缓冲区和撤销所述套接字的结构体。
6.一种数据通信装置,其特征在于,包括 数据包接收单元,用于接收客户端发送的数据包; 套接字查找单元,用于寻找所述接收到的数据包的宿主套接字; 数据包查找单元,用于寻找所述宿主套接字的接收队列的尾端的数据包; 判断单元,用于判断所述尾端的数据包的检查点标志位是否被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值; 丢弃单元,用于当所述判断单元的判断结果为是,则丢弃接收到的数据包。
7.根据权利要求6所述的装置,其特征在于,该装置还包括 数据包挂入单元,用于在所述判断单元的判断结果为否时,将所述接收到的数据包挂到宿主套接字的接收队列的尾端,并向客户端返回表示数据包已经被正常接收的确认信息
全文摘要
本发明实施例提供一种基于套接字的数据通信方法和数据通信装置,该方法包括在接收到客户端发送的数据包后,寻找该数据包的宿主套接字;寻找所述宿主套接字的接收队列的尾端的数据包,判断所述尾端的数据包的检查点标志位是否被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值;如果所述尾端数据包的检查点标志位被置为表示该接收队列内容已经被检查点进程保存到检查点文件中的值,则直接丢弃接收到的数据包。
文档编号H04L29/08GK103036957SQ20121051661
公开日2013年4月10日 申请日期2012年12月5日 优先权日2012年12月5日
发明者赵琪, 杨振章 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1