多链路环境下数据发送、接收装置及数据发送、接收方法与流程

文档序号:18411001发布日期:2019-08-13 18:09阅读:140来源:国知局
多链路环境下数据发送、接收装置及数据发送、接收方法与流程

本发明涉及网络通信技术领域,尤其涉及一种多链路环境下数据发送、接收装置及数据发送、接收方法。



背景技术:

随着云计算技术的发展,越来越多的用户倾向于使用云服务器部署业务。但是云服务器的带宽有限,通常不能提供有效的链路质量保证。因此,链路的丢包高、时延不稳定等现象往往是云服务器使用过程中用户面临的痛点。为了解决该问题,云服务提供商提供了带宽资源预留服务,可以保证在服务有效期内,为云服务器提供高质量的链路保障,不会因为链路繁忙而导致丢包。但是,这种方法的代价是用户需要支付高昂的服务费用。

解决链路丢包的常见方法是使用前向纠错编码(forwarderrorcorrection,fec)技术。传统的fec技术往往基于单一链路开展,所产生的冗余纠错包和原始数据包在原有链路中同时传输。因此冗余纠错数据包的传输会占用服务器原有的带宽。在云服务器带宽有限的情况下,采用传统fec技术方式的解决方案,在有效数据传输方面效果并不理想。



技术实现要素:

有鉴于此,本申请实施例提供了一种多链路环境下数据发送、接收装置及数据发送、接收方法。

第一方面,本申请实施例提供了一种多链路环境下数据发送装置包括:

本地数据包捕获模块,用于捕获多个第一数据包;所述多个第一数据包拟通过第一链路逐个发送;

fec编码缓冲区模块,用于以n个数据包为单位,对本地数据包捕获模块捕获的多个第一数据包进行编组;n是大于1的自然数;

fec编码模块,用于对编组后的第一数据包进行编码得到m个第二数据包,第二数据包为第一数据包对应的冗余纠错数据包;其中,m为大于1的自然数;

远端数据包发送模块,用于通过第二链路发送编组信息和多个第二数据包。

可选实施例中,所述本地数据捕获模块,支持只捕获指定应用程序的第一数据包或排除指定应用程序的第一数据包的过滤。

可选实施例中,所述编组信息包括:组号、组内编号、负载长度、标志。

可选实施例中,所述fec编码缓冲区设置有定时器,当fec编码缓冲区存入第一个第一数据包时,启动计时;在fec编码缓冲区并未存储够一定数量的第一数据包且定时器超时时,触发fec编码模块。

第二方面,本申请实施例提供了一种多链路环境下数据接收装置包括:

本地数据包捕获模块,用于捕获多个第一数据包;

远端数据包接收模块,用于接收多个第二数据包和编组信息;

fec解码缓冲区模块,根据编组信息将多个第一数据包和第二数据包编组存放;当fec编码缓冲区模块中任意一个编组中的第一数据包和第二数据包的总个数达到一定数量时,触发fec解码模块进行解码;

fec解码模块,对编组后第一数据包和第二数据包进行解码,解码后产生在第一传输链路中丢失的第一数据包的恢复数据包;

本地数据包发送模块,用于从fec解码模块中获取在第一传输链路中丢失的第一数据包的恢复数据包,并将获取的第一数据包的恢复数据包发送到应用程序中。

可选实施例中,所述对编组后的第一数据包和第二数据包进行解码包括:采用里德-所罗门算法对在第一链路传输过程中丢失的第一数据包进行恢复。

第三方面,本申请实施例提供了一种多链路环境下数据发送方法,所述方法包括:

捕获多个第一数据包,对第一数据包进行复制并获取第二链路ip地址;其中,所述多个第一数据包通过第一链路逐个发送;

以n个数据包为单位,对多个第一数据包进行编组;其中,n是大于1的自然数;

对编组后的第一数据包进行编码,并计算m个第二数据包,所述m个第二数据包是n个第一数据包的冗余纠错数据包;其中,m是大于1的自然数;

将编组信息和m个第二数据包通过第二链路发送。

可选实施例中,所述获取第二链路ip地址包括:根据复制的第一数据包的目的ip地址,从配置文件中读取ip地址对应关系,找到接收端的第二链路ip地址。

第四方面,本申请实施例提供了一种多链路环境下数据接收方法,所述方法包括:

接收第一链路发送的多个第一数据包;

接收第二链路发送的以n个第一数据包为单位的编组信息和多个第二数据包;其中,第二数据包是第一数据包的冗余数据包,n是大于1的自然数;

对多个第一数据包和第二数据包进行解码;

对解码后的第一数据包进行校验和过滤,保留在第一链路传输中丢失的第一数据包的恢复数据包,并发送给应用程序。

可选实施例中,所述对多个第一数据包和第二数据包进行解码采用里德-所罗门算法,根据m+n个数据包中的任意n个数据包恢复n个第一数据包。

本申请实施例具有如下有益效果:

本发明申请多链路环境下数据发送、接收装置及数据发送、接收方法,在一种可能的情况下结合使用高带宽低质量的第一链路传输原始数据包,低带宽高质量的第二链路传输编组信息和冗余纠错包,实现较低丢包率的数据传输。本方法可以在不增加第一链路传输带宽的情况下用较低的代价实现高质量的数据传输。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1示出了本申请一种多链路环境下的数据传输示意图;

图2示出了本申请一种多链路环境下数据发送装置的结构示意图;

图3示出了本申请一种多链路环境下数据接收装置的结构示意图;

图4示出了本申请一种多链路环境下数据发送方法的流程图;

图5示出了本申请一种多链路环境下数据接收方法的流程图;

图6示出了本申请的一实施例示意图。

具体实施方式

下面结合具体实施例对本申请作进一步详细描述,但不作为对本申请的限定。在下述说明中,不同的“一实施例”或“实施例”指的不一定是同一实施例。此外,一或多个实施例中的特定特征、结构、或特点可由任何合适形式组合。

图1示出了本申请一种多链路环境下的数据传输示意图。

参照图1,发送装置和接收装置通过网卡0,实现与第一链路的连接,通过网卡1实现与第二链路的连接。对于同一个发送装置或者同一个接收装置,网卡0的ip地址和网卡1的ip地址具有一一对应的关系,对应关系记录在相关配置文件中。

优选地,第一链路可以使用高带宽低质量的基础互联网链路。第二链路可以使用较低带宽的高质量的专线链路。结合使用两条链路传输数据,在不增加基础互联网带宽的情况下,用较低的代价,实现高质量的数据传输保证。

第一链路和第二链路可以统称为加速链路,通常状况下,加速链路的双方都需要部署发送单元与接收单元程序来满足服务器之间的数据交互的需求。在数据传输过程中,第一数据包(待加速数据和不加速数据)通过基础互联网进行传输,而第二数据包则通过云服务器提供商提供的高质量链路(如:专线链路)进行传输。在丢包率较低的情况下,由于第二数据包的数量远小于第一数据包的数量,因此,可以通过一个较低带宽的高质量链路进行传输,从而满足那些对网络质量要求较高的应用的需求。

图2为本发明实施例提供的一种多链路环境下数据发送装置的结构示意图。参见图2,本发明实施例的数据发送装置包括:本地数据包捕获模块201、fec编码缓冲区模块202、fec编码模块203、远端数据包发送模块204。

本地数据包捕获模块201负责将应用程序发送到网卡0的多个第一数据包复制到fec编码缓冲区模块202中。本地数据包捕获模块201还支持对多个第一数据包进行过滤。具体地,支持基于报文五元组(源地址、源端口、目的地址、目的端口、传输层协议)的过滤或者伯克利包过滤规则的字符串过滤,支持只捕获某几个应用程序的第一数据包或者仅排除某几个应用程序的第一数据包过滤。当捕获到第一数据包时,根据第一数据包的目的ip地址,从配置文件中读取ip地址对应关系,找到对应的接收端的第二链路ip地址,并将该地址发送到远端数据包发送模块204。

fec编码缓冲区模块202负责临时存放本地数据包捕获模块201捕获的多个第一数据包,同时以n个数据包为单位,对多个第一数据包进行编组,并开展标记,实现对每一个第一数据包的组号、组内编号、负载长度以及标志的记录。其中,标志是第一数据包中udp负载的哈希值,n为大于1的自然数。

进一步地,fec编码缓冲区模块202还存在一个定时器。当本地数据包捕获模块201放入第一个数据包时,启动定时器。当缓冲区中达到一定数量的第一数据包时,该模块会通知fec编码模块203进行编码,同时取消定时器。如果定时器超时,且没有足够数量的第一数据包用于开展fec编码时,fec编码缓冲区模块202也会通知fec编码模块203进行编码,解决了因为缓冲区内第一数据包不够,而不能触发fec编码模块203对第一数据包进行编码的问题。

fec编码模块203用于读取fec编码缓冲区模块202中编组的第一数据包,并以当前缓冲区中最长的第一数据包的长度为标准,在其他第一数据包尾部填充0进行补齐。在所有待编码的第一数据包报文补齐之后,对第一数据包进行fec计算,得到第二数据包,第二数据包为第一数据包对应的冗余纠错数据包。

远端数据包发送模块204用于将将fec编码缓冲区模块202中的编组信息,如组号、组内编号、负载长度、标志等,汇集成信息包,通过第二链路发送到接收端。之后将fec编码模块203计算的第二数据包通过第二链路发送到接收端。

图3为本发明实施例提供的一种多链路环境下数据接收装置的结构示意图。参见图3,本发明实施例的数据接收装置包括:本地数据包捕获模块301、远端数据包接收模块302、fec解码缓冲区模块303、fec解码模块304、本地数据包发送模块305。

本地数据包捕获模块301负责将第一链路传送到接收端网卡0上的多个第一数据包复制到fec解码缓冲区模块303中。本地数据包捕获模块301支持对第一数据包进行过滤,如五元组过滤或者bpf过滤字符串的过滤,支持只捕获某几个应用程序的第一数据包或者仅排除某几个应用程序的第一数据包。

远端数据包接收模块302负责接收发送端发送的多个第二数据包和编组信息,并将编组信息中的fec参数传递给fec解码模块304用于fec解码计算。编组信息还要传递给fec解码缓冲区模块303辅助fec解码缓冲区对第一数据包进行编组。

fec解码缓冲区模块303负责临时存储本地数据包捕获模块301捕获的多个第一数据包和远端数据包接收模块302收到的多个第二数据包。fec解码缓冲区模块303还需要计算第一数据包的标志,即对udp负载部分计算哈希值,并根据远端数据包接收模块302收到的编组信息,将第一数据包进行编组存放。对于第二数据包,可以直接根据数据包中的编组信息,进行编组存放。当某个编组中的第一数据包和第二数据包的总个数满足一定数量时,通知fec解码模块304进行解码。

具体地,设置每一个编组的阈值为i。fec解码缓冲区模块303对接收到的多个第一数据包和多个第二数据包编组进行存放。当某一个编组中的第一数据包的个数达到i个时,表明第一链路上没有丢包,不需要对第一数据包进行解码。当某一个编组中的第一数据包的个数未达到i时,需要继续等待第二数据包。当第一数据包和第二数据包的个数的总和达到i个时,触发fec解码模块304对此编组中的第一数据包和第二数据包进行解码。当某一个编组中的第一数据包和第二数据包的个数的总和未达到i个时,禁止触发fec解码模块304对此编组中的第一数据包或第二数据包进行解码。

fec解码模块304负责解码。具体地,使用一种前向纠错编码算法,对在第一链路传输过程中发生意外丢包的第一数据包进行恢复。fec解码模块304还需要将恢复后的第一数据包中尾部填充的0删除,使其恢复第一数据包的长度。

本地数据包发送模块305负责将fec解码模块304恢复的在第一链路传输过程中发生意外丢包的第一数据包,发送到应用程序。具体地,本地数据包发送模块305需要根据不同的发送端,伪造数据包头部的源ip地址、源端口等信息,让应用程序认为所有的数据包均来自同一个发送方。

图4为一种多链路环境下数据发送方法的流程图,参照图4对一种多链路环境下的数据发送方法进行详细说明,包括:

步骤s401,将送入系统协议栈的原始数据封装成第一数据包。

应用程序通过网络套接字将待发送的原始数据送入系统协议栈,系统协议栈将原始数据封装成第一数据包。

步骤s402,通过第一链路(网卡0)发送第一数据包。

步骤s403,捕获多个第一数据包,并将多个第一数据包进行复制并获取第二链路ip地址。

对通过网卡0发送的第一数据包进行捕获,将捕获的n个第一数据包进行复制。根据复制的第一数据包的ip地址,从配置文件中读取ip地址对应关系,找到对应的接收端的ip地址。

步骤s404,以n个第一数据包为单位,对多个第一数据包进行编组和编码,并计算n个第一数据包对应的m个第二数据包。

将复制的第一数据包存放在fec编码缓冲区,fec编码缓冲区是一个固定长度的数组,可以对复制的第一数据包进行暂存。在fec缓冲区内对第一数据包进行编组,并开展标记,实现对每一个第一数据包的组号、组内编号、负载长度以及标志的记录,并将这些记录汇集成编组信息。

进一步地,在fec缓冲区内设置一个定时器,当第一个第一数据包进入缓冲区时,启动定时器。当fec编码缓冲区收到足够多的第一数据包或者定时器超时时,通知fec编码模块203进行fec编码计算。fec编码模块203统计当前fec编码缓冲区的中的第一数据包的最大长度并按照该长度对其他的第一数据包进行补齐操作,即在第一数据包的尾部填充字节0进行补齐。然后,进行fec编码,并将计算出来的第二数据包送到远端数据包发送模块204。第二数据包包括:冗余标志位、组号、组内编号、冗余纠错数据。

具体地,fec编码可以采用里德-所罗门(reed-solomon,rs)算法。里德-所罗门算法是一种常见的前向纠错编码算法,可以将n份长度均为l的第一数据包,通过一定的运算,得到m份长度为l的第二数据包。同时,只要有n+m个数据包中的任意n个数据包,就可以恢复出n份第一数据包。通过fec编码后,即使在传输过程中,发生了意外丢包,只要丢包数量不超过m个时,就可以恢复出原来的数据,提高网络链路的可靠性。

步骤s405,将多个第一数据包的编组信息和m个第二数据包通过第二链路(网卡1)发送。

第一数据包的编组信息和第二数据包通过远端数据包发送模块204进行发送。

在一个可能的实施例中,远端数据包发送主要通过udp协议。其中,编组信息主要包括编组标志位、组号、源地址、目的地址、源端口、目的端口、fec参数(第一数据包数量、第二数据包数量、fec长度)以及编组内每一个第一数据包哈希值和第一数据包的长度。在本实施例中,第一数据包的哈希值采用第一数据包udp负载部分的md5的前四个字节,通过第一数据包的哈希值来区分每一个第一数据包,并进行编组。

图5为一种多链路环境下数据发送方法的流程图,参照图5对一种多链路环境下的数据接收方法进行详细说明,包括:

步骤s501,接收第一链路发送的多个第一数据包、第二链路发送的多个第一数据包的编组信息和m个第二数据包。m个第二数据包为n个第一数据包的冗余纠错数据包。

应用程序和本地数据包捕获模块301监听连接第一链路的网卡0,远端数据包接收模块302监听连接第二链路的网卡1。当发送方发送的多个第一数据包到达网卡0时,第一数据包被系统协议栈直接送到应用程序,同时本地数据包捕获模块301会复制一份第一数据包,并将复制的第一数据包送到fec解码缓冲区模块303。

步骤s502,根据编组信息将多个第一数据包存入相应的编组中。

fec解码缓冲区模块303对送入的第一数据包的负载进行哈希计算,并查找该哈希值是否已经在收到的编组信息中。若不在编组信息中,则将该第一数据包进行缓存。否则根据编组信息,将该第一数据包存入相应的编组中。

对于缓存的未编组的第一数据包。在远端数据包接收模块302接收到编组信息后,会将编组信息传递给fec解码缓冲区模块303,fec解码缓冲区模块303根据收到的编组信息对之前缓存的未编组的第一数据包进行编组。

步骤s503,对第一数据包进行解码并校验。

在fec解码缓冲区模块303中的某个编组的数据包数量达到或超过某个阈值时,fec解码缓冲区模块303会通知fec解码模块304进行解码操作,修复在第一链路传输过程中丢失的第一数据包。fec解码算法采用的是与fec编码模块203相同的算法。具体地,可以采用里德-所罗门算法。fec解码模块304会对解码后的数据进行校验,并删除额外填充在尾部的字节0数据。对通过校验的第一数据包进行过滤,对未通过校验的第一数据包进行丢弃。

步骤s504,对解码后的第一数据包进行过滤,保留在传输过程中丢失的第一数据包的恢复数据包,并将丢失的第一数据包的恢复数据包发送到应用程序。

fec解码模块304会对解码后的原始数据进行过滤,保留在第一互联网传输过程中丢失的第一数据包的恢复数据包。fec解码模块304将这些在传输过程中丢失的第一数据包的恢复数据包发送到本地数据包发送模块305。本地数据包发送模块305通过建立一个原始套接字,将恢复后的第一数据包重新分装成一个新的ip报文,发送到应用程序所对应的端口。

具体地,在套接字配置中设置ip_hdrincl标志,可以自定义ip报文的ip头部信息。将第一数据包的源ip地址填入新数据包的ip头部的源ip地址字段;将第一数据包的源端口信息,填入到新数据包udp头部的源端口字段,从而伪造一个正常的数据包,并通过sendto函数发送到对应的应用程序中。

参照图6,在一个可能的实施例中,在第一主机上安装了数据发送单元200,第二主机上安装了数据接收单元300。第一主机和第二主机之间通过两条千兆网线连接(分别为第一连接链路和第二连接链路),其中第一连接链路先连接到丢包发生器,再从丢包发生器连接到第二主机,设置丢包率为5%,时延为10ms。网络编码的参数为20:10,即20个原始数据一组,并产生10个冗余数据。

第一主机上的数据发送单元200将2000个1kb长度的数据包通过网卡0进行发送。本地数据包捕获模块201实时监测网卡0,当监测到有第一数据包发送时,采用pf_ring技术进行数据包获取。pf_ring通过在内核中创建一个环形缓冲队列,将网卡中待发送的第一数据包复制到环形缓冲队列中,发送单元通过相应的用户态api,读取环形缓冲队列中的第一数据包,并将第一数据包暂存到fec编码缓冲区202中。

fec编码缓冲区将接收到的第一数据包,以20个为一组进行编组,即2000个第一数据包在fec编码缓冲区被编为100组。当fec编码模块接收到第一个第一数据包时,启动计时器。当接收到的第一数据包的个数达到一个编组的个数即20个时,触发fec编码模块对此编组的第一数据包进行编码。当接收到的第一数据包的个数未达到一个编组的个数即20个时,但此时定时器超时,也需要触发fec编码模块对此编组的第一数据包进行编码。

fec编码模块203采用里德-所罗门(reed-solomon,rs)算法,将2000份长度均为lkb的第一数据包,通过一定的运算,得到1000份长度为lkb的第二数据包,第二数据包为第一数据对应的冗余纠错数据包。将第二数据包发送到远端数据发送模块204中,与远端数据发送模块204中的编组信息一起通过第二连接链路发送到接收单元300。

第二主机中的捕获模块301和远端数据包接收模块302,实时监测网卡0和网卡1。当监测到有数据包时,本地数据包捕获模块301将网卡0中发送给应用程序的第一数据包进行复制,并暂存在fec解码缓冲区303中。远端数据包接收模块302,接收由第二连接链路传输的第一数据包的编组信息和第二数据包,并将分组信息和第二数据包暂存在fec解码缓冲区303中。

fec解码缓冲区303将所有收到的数据包(包括第一数据包和第二数据包)全部暂存在环形缓冲区中,根据编组信息对第一数据包和第二数据包进行编组。当fec解码缓冲区303中的任意一个编组中的第一数据包和第二数据包的总和不小于20个时,触发fec解码模块对该编组中的第一数据包进行解码。

fec解码模块304采用里德-所罗门算法。当任意一个编组中接收到的第一数据和第二数据包的个数不少于20个时(任意一个编组中的第一数据包和第二数据包在不丢失的情况下为20+10=30个),使用里德-所罗门算法能够恢复该编组中的20个第一数据包。fec编码模块会对恢复的在传输过程中丢失的第一数据包尾部填充的字节0数据进行删除,并将这些第一数据包通过本地数据包发送模块305发送给应用程序。

在本申请实施例中,发送单元共发送2000个1kb长度的数据包,接收单元接收到了2351个数据包(含有一部分冗余的数据包),经校验,所有数据包均无损坏,且无丢包。

在一种可能的实施例中可以在数据发送装置和数据接收装置中添加会话管理模块,对多个装置之间的通信进行管理。

需要说明的是,在本申请所提供的几个实施例中,应该理解所揭露的各个单元模块,可通过其它的方式实现。其中,所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,本审请实施例中只使用了两条链路进行描述说明,实际实现时可以采用单条链路实现或者多条链路实现。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1