一种实现数据传输的方法、装置和系统与流程

文档序号:20211312发布日期:2020-03-31 11:04阅读:153来源:国知局
一种实现数据传输的方法、装置和系统与流程

本申请实施例涉及通信技术领域,尤其涉及一种实现数据传输的方法、装置和系统。



背景技术:

目前,大码率视频业务越来越普遍,如4k/8k因特网协议电视(internetprotocoltelevision,iptv)业务、虚拟现实(virtualreality,vr)视频业务等。

此类业务所提供的视频的码率大、要求的丢包率极低,如8k视频业务提供的视频的码率可以达到40mbps,当存在0.1%的丢包,用户就能感受到明显卡顿。所以对于此类业务,业务体验的关键在于保障充足稳定的带宽以消除网络中突发流量或者带宽不稳定造成的丢包。

在现有技术中,不同通信设备之间通过一个物理链路传输数据。当这两个通信设备之间的数据流存在突发流量或由于电磁波干扰导致带宽不稳定等问题时,实际传输的数据流量往往会超过该物理链路可以提供的最大带宽,会导致丢包率上升。



技术实现要素:

本申请实施例提供一种实现数据传输的方法、装置和系统,用于降低数据传输的丢包率。

第一方面,提供了一种实现数据传输的方法,该方法包括:发送设备获取目标数据流的数据包,并采用负载均衡的方式通过与接收设备之间的至少两个物理链路向该接收设备发送该目标数据流的数据包,采用负载均衡方式发送的该目标数据流的每个数据包均携带主序列号,发送的该目标数据流的数据包的主序列号连续,该主序列号用于该接收设备对接收自不同物理链路的属于该目标数据流的数据包进行排序,如用于在排序过程中对接收自不同物理链路的属于该目标数据流的数据包进行乱序检测。其中,该至少两个物理链路可以均为有线链路,如均为以太链路,可以均为无线链路,如均为无线局域网络(wirelesslocalareanetworks,wlan)链路,也可以既包括有线链路又包括无线链路。需要说明的是,该至少两个物理链路可以是该发送设备和该接收设备之间建立的所有物理链路中的全部物理链路或部分物理链路。

根据第一方面的实现方式,将目标数据流的数据包分散到不同的物理链路发送而不是集中到一个物理链路发送,可以有效利用不同物理链路所提供的带宽,从而降低丢包率。

在第一方面的第一种实现方式中,该发送设备采用负载均衡方式发送的该目标数据流的每个数据包还携带子序列号,且通过该至少两个物理链路中的任一物理链路发送的该目标数据流的数据包的子序列号连续。该子序列号可以用于该接收设备对接收的该目标数据流的数据包进行丢包检测。

接收设备连续接收的属于该目标数据流两个数据包的主序列号不连续时,可能发生了乱序,也可能发生了丢包。由于通过单个物理链路传输的数据包之间通常不会发生乱序,如果这两个数据包是通过同一个物理链路传输的且子序列号不连续,则可以据此确定这两个数据包之间发生了丢包,而不一定是发生了乱序。因此,该子序列号和该主序列号的组合可以用于更加准确地进行乱序检测。

基于第一方面或第一方面的第一种实现方式,在第一方面的第二种实现方式中,该目标数据流的每个数据包的主序列号携带在该数据包的数据链路层头部和网络层头部之间扩展的头部中。该目标数据流的每个数据包的子序列号也可以携带在该数据包的扩展的头部中。

由于携带在数据链路层头部和网络层头部之间扩展的头部,可以兼容上层不同的网络层协议,也可以兼容下层不同的数据链路层协议,兼容性较强。并且,对发送设备和接收设备中现有的数据链路层的处理逻辑和网络层的处理逻辑没有改动,易于实现。

基于第一方面或第一方面的第一种或第二种实现方式,在第一方面的第三种实现方式中,该发送设备可以动态调整分别通过各物理链路发送的目标数据流的数据量。具体可以根据该目标数据流在统计周期内的传输速率进行调整,也可以根据该多个物理链路的每个物理链路的负载信息进行调整,还可以根据该目标数据流在统计周期内的传输速率、以及该多个物理链路的每个物理链路的负载信息进行调整。

该目标数据流在统计周期内的传输速率反应了该统计周期内的流量突发状况,该多个物理链路的每个物理链路的负载信息反应了各个物理链路的负载情况,由于在进行调整时考虑到该流量突发状况和/或各个物理链路的负载情况,因此,可以更加准确地进行负载均衡,从而进一步降低丢包率。

基于第一方面的第三种实现方式,在第一方面的第四种实现方式中,每个物理链路的负载信息包括预测的该物理链路的与该目标数据流对应的数据发送队列在预设时长之后的队列利用率。

根据该实现方式,根据预测的各物理链路在预设时长之后的队列利用率进行调整,由于考虑了下一时刻的队列利用率,可以更加准确地进行负载均衡,从而进一步降低丢包率。

第二方面,提供了一种实现数据传输的方法,该方法包括:接收设备通过与发送设备之间的至少两个物理链路接收该发送设备采用负载均衡的方式通过该至少两个物理链路发送的目标数据流的数据包,该发送设备采用负载均衡方式发送的该目标数据流的每个数据包均携带主序列号,且该发送设备发送的该目标数据流的数据包的主序列号连续,并根据接收的该目标数据流的数据包的主序列号对接收的该目标数据流的数据包进行排序。在排序过程中具体可以根据接收到的该目标数据流的数据包的主序列号对该目标数据流进行乱序检测,并根据乱序检测结果对接收的该目标数据流的数据包进行排序。

根据第二方面的实现方式,将目标数据流的数据包分散到不同的物理链路发送而不是集中到一个物理链路发送,可以有效利用不同物理链路所提供的带宽,从而降低丢包率。

基于第二方面,在第二方面的第一种实现方式中,该目标数据流的每个数据包的主序列号携带在该数据包的数据链路层头部和网络层头部之间扩展的头部中。该目标数据流的每个数据包的子序列号也可以携带在该数据包的扩展的头部中。

由于携带在数据链路层头部和网络层头部之间扩展的头部,可以兼容上层不同的网络层协议,也可以兼容下层不同的数据链路层协议,兼容性较强。并且,对发送设备和接收设备中现有的数据链路层的处理逻辑和网络层的处理逻辑没有改动,易于实现。

基于第二方面或第二方面的第一种实现方式,在第二方面的第二种实现方式中,该接收设备具体可以根据接收到的该目标数据流的数据包的主序列号对该目标数据流进行乱序检测,并根据乱序检测结果对接收的该目标数据流的数据包进行排序。

该目标数据流的有些数据包是在同一个物理链路上传输的,有些数据包是在不同的物理链路上传输的。根据该实现方式,利用主序列号对通过各物理链路接收的该目标数据流的数据包进行乱序检测并基于检测结果进行排序,可以准确高效地实现排序。

基于第二方面的第二种实现方式中,在第二方面的第三种实现方式中,在对该目标数据流进行乱序检测的过程中,对于当前接收到的数据包(后续称为当前数据包)。可以根据该当前数据包的主序列号与在接收该当前数据包之前接收的该目标数据流中的主序列号最大的数据包(后续称为参考数据包)的主序列号来判断该当前数据包是否发生了乱序。具体可以在确定该发送设备通过与发送该当前数据包所采用的物理链路不同的物理链路发送了属于该目标数据流的、且主序列号大于该参考数据包的主序列号且小于该当前数据包的主序列号的数据包时确定该当前数据包发生乱序。为了实现更加精准的判断,可以先判断在接收到该当前数据包时该目标数据流对应的重排序缓冲区是否为空,进而可以在确定该目标数据流对应的重排序缓冲区为空时执行根据该当前数据包的主序列号和参考数据包的主序列号确定该当前数据包是否发生乱序的操作。另外,如果在接收到该当前数据包时该目标数据流对应的重排序缓冲区不为空,说明该当前数据包为发生乱序的数据包,可能为落入该重排序缓冲区的缓冲区空洞的数据包,也可能为该重排序缓冲区的最后一个缓冲区空洞后面的数据包,则可以直接将该当前数据包加入该重排序缓冲区。

基于第二方面的第三种实现方式中,在第二方面的第四种实现方式中,可以直接在确定该当前数据包和该参考数据包的主序列号不连续时确定该当前数据包发生了乱序且在确定这两个数据包的主序列号连续时确定该当前数据包没有发生乱序。该实现方式比较简单,计算资源消耗少。

基于第二方面的第三种实现方式中,在第二方面的第五种实现方式中,为了提升乱序检测的准确性,接收设备也可以首先判断该当前数据包和该参考数据包是否来自同一个物理链路,并采用相应的方式进行乱序检测。

如果该当前数据包和该参考数据包来自不同物理链路,则可以在确定该当前数据包的主序列号和该参考数据包的主序列号不连续时,确定该当前数据包发生乱序。该目标数据流的数据包是通过不同的物理链路传输的,可能在一个物理链路上先发送的数据包晚于在另一个物理链路上后发送的数据包,从而导致数据包的乱序。根据该实现方式,考虑了连续接收的来自不同物理链路的主序列号是否连续的情况进行乱序检测,乱序检测结果更加准确。

该发送设备采用负载均衡方式发送的该目标数据流的每个数据包还可以携带子序列号,且通过每个物理链路发送的该目标数据流的数据包的子序列号连续。如果该当前数据包和该参考数据包来自同一个物理链路,则可以在确定该当前数据包和该参考数据包的主序列号差值大于该当前数据包和该参考数据包的子序列号差值时确定该当前数据包发生乱序。

由于通过单个物理链路传输的数据包之间不会发生乱序,如果这两个数据包是通过同一个物理链路传输的且子序列号不连续,则可以据此确定这两个数据包之间发生了丢包,而不一定是发生了乱序。因此,该子序列号和该主序列号的组合可以用于更加准确地进行乱序检测。

第三方面,提供了一种实现数据传输的方法,所述方法包括:

发送设备向接收设备发送启动通知,所述启动通知用于通知所述接收设备将要采用负载均衡的方式通过至少两个物理链路发送目标数据流;

所述发送设备获取所述目标数据流的数据包,并在发送所述启动通知后采用负载均衡的方式通过所述至少两个物理链路向所述接收设备发送所述目标数据流的数据包。

根据第三方面的实现方式,将目标数据流的数据包分散到不同的物理链路发送而不是集中到一个物理链路发送,可以有效利用不同物理链路所提供的带宽,从而降低丢包率。

在第三方面的第一种实现方式中,采用负载均衡方式发送的所述目标数据流的每个数据包均携带主序列号,发送的所述目标数据流的数据包的主序列号连续,所述主序列号用于所述接收设备对接收自不同物理链路的属于所述目标数据流的数据包进行排序,如用于在排序过程中对接收自不同物理链路的属于所述目标数据流的数据包进行乱序检测。所述启动通知可以包括初始主序列号,所述初始主序列号为所述发送设备通过负载均衡方式发送的第一个属于所述目标数据流的数据包的主序列号。

该目标数据流的数据包是通过不同的物理链路传输的,可能在一个物理链路上先发送的数据包晚于在另一个物理链路上后发送的数据包,从而导致数据包的乱序。根据该实现方式,可以根据通过不同的物理链路接收的数据包的主序列号进行排序,从而实现目标数据流的保序。

基于第三方面的第一种实现方式,在第三方面的第二种实现方式中,所述发送设备采用负载均衡方式发送的所述目标数据流的每个数据包还携带子序列号,且通过所述至少两个物理链路中的任一物理链路发送的所述目标数据流的数据包的子序列号连续。所述启动通知还可以包括初始子序列号,每个物理链路对应的初始子序列号为通过所述物理链路发送的第一个属于所述目标数据流的数据包的子序列号。

接收设备连续接收的属于该目标数据流两个数据包的主序列号不连续时,可能发生了乱序,也可能发生了丢包。由于通过单个物理链路传输的数据包之间通常不会发生乱序,如果这两个数据包是通过同一个物理链路传输的且子序列号不连续,则可以据此确定这两个数据包之间发生了丢包,而不一定是发生了乱序。因此,该子序列号和该主序列号的组合可以用于更加准确地进行乱序检测。

第四方面,提供了一种实现数据传输的方法,所述方法包括:接收设备接收发送设备发送的启动通知,根据所述启动通知确定所述发送设备将要采用负载均衡的方式通过至少两个物理链路发送目标数据流,通过所述至少两个物理链路接收所述发送设备采用负载均衡的方式通过所述至少两个物理链路发送的目标数据流的数据包,并对通过所述至少两个物理链路接收的所述目标数据流的数据包进行排序。

在第四方面的第一种实现方式中,所述发送设备采用负载均衡方式发送的所述目标数据流的每个数据包均携带主序列号,且所述发送设备发送的所述目标数据流的数据包的主序列号连续。相应地,所述接收设备根据接收的所述目标数据流的数据包的主序列号对接收的所述目标数据流的数据包进行排序,包括对接收自不同物理链路的属于所述目标数据流的数据包进行乱序检测。

基于第四方面的第一种实现方式,在第四方面的第二种实现方式中,所述发送设备采用负载均衡方式发送的所述目标数据流的每个数据包还携带子序列号,且通过所述至少两个物理链路中的任一物理链路发送的所述目标数据流的数据包的子序列号连续。相应地,所述接收设备具体根据接收的所述目标数据流的数据包的主序列号和子序列号对所述目标数据流的数据包进行乱序检测。

第五方面,提供了一种通信设备,所述通信设备包括获取单元和通信单元。所述获取单元,用于获取目标数据流的数据包。所述通信单元,用于采用负载均衡的方式通过所述通信设备与接收设备之间的至少两个物理链路向所述接收设备发送所述目标数据流的数据包,采用负载均衡方式发送的所述目标数据流的每个数据包均携带主序列号,发送的所述目标数据流的数据包的主序列号连续,所述主序列号用于所述接收设备对接收自不同物理链路的属于所述目标数据流的数据包进行排序。

根据第五方面的实现方式,将目标数据流的数据包分散到不同的物理链路发送而不是集中到一个物理链路发送,可以有效利用不同物理链路所提供的带宽,从而降低丢包率。

在第五方面的第一种实现方式中,所述通信单元采用负载均衡方式发送的所述目标数据流的每个数据包还携带子序列号,且通过所述至少两个物理链路中的任一物理链路发送的所述目标数据流的数据包的子序列号连续。所述子序列号可以用于所述接收设备对接收的所述目标数据流的数据包进行丢包检测。

基于第五方面或第五方面的第一种实现方式,在第五方面的第二种实现方式中,所述目标数据流的每个数据包的主序列号携带在所述数据包的数据链路层头部和网络层头部之间扩展的头部中。所述目标数据流的每个数据包的子序列号也可以携带在所述数据包的所述扩展的头部中。

基于第五方面或第五方面的第一种或第二种实现方式,在第五方面的第三种实现方式中,所述通信单元可以动态调整分别通过各物理链路发送的目标数据流的数据量。具体可以根据所述目标数据流在统计周期内的传输速率进行调整,也可以根据所述多个物理链路的每个物理链路的负载信息进行调整,还可以根据所述目标数据流在统计周期内的传输速率、以及所述多个物理链路的每个物理链路的负载信息进行调整。

基于第五方面的第三种实现方式,在第五方面的第四种实现方式中,每个物理链路的负载信息包括预测的所述物理链路的与所述目标数据流对应的数据发送队列在预设时长之后的队列利用率。

第六方面,提供了一种通信设备,所述通信设备包括:通信单元和处理单元。所述通信单元,用于通过所述通信设备与发送设备之间的至少两个物理链路接收所述发送设备采用负载均衡的方式通过所述至少两个物理链路发送的目标数据流的数据包,所述发送设备采用负载均衡方式发送的所述目标数据流的每个数据包均携带主序列号,且所述发送设备发送的所述目标数据流的数据包的主序列号连续。所述处理单元,用于根据所述通信单元接收的所述目标数据流的数据包的主序列号对接收的所述目标数据流的数据包进行排序。

在第六方面的第一种实现方式中,所述目标数据流的每个数据包的主序列号携带在所述数据包的数据链路层头部和网络层头部之间扩展的头部中。所述目标数据流的每个数据包的子序列号也可以携带在所述数据包的所述扩展的头部中。

基于第六方面或第六方面的第一种实现方式,在第六方面的第二种实现方式中,所述处理单元具体用于,根据接收到的所述目标数据流的数据包的主序列号对所述目标数据流进行乱序检测,并根据乱序检测结果对接收的所述目标数据流的数据包进行排序。

基于第六方面的第二种实现方式中,在第六方面的第三种实现方式中,所述处理单元在对所述目标数据流进行乱序检测的过程中,对于当前接收到的数据包(后续称为当前数据包)。可以根据该当前数据包的主序列号与在接收该当前数据包之前接收的所述目标数据流中的主序列号最大的数据包(后续称为参考数据包)的主序列号来判断该当前数据包是否发生了乱序。具体可以在确定所述发送设备通过与发送所述当前数据包所采用的物理链路不同的物理链路发送了属于所述目标数据流的、且主序列号大于所述参考数据包的主序列号且小于所述当前数据包的主序列号的数据包时确定所述当前数据包发生乱序。为了实现更加精准的判断,可以先判断在接收到该当前数据包时该目标数据流对应的重排序缓冲区是否为空,进而可以在确定该目标数据流对应的重排序缓冲区为空时执行根据所述当前数据包的主序列号和参考数据包的主序列号确定所述当前数据包是否发生乱序的操作。另外,如果在接收到该当前数据包时该目标数据流对应的重排序缓冲区不为空,说明该当前数据包为发生乱序的数据包,可能为落入该重排序缓冲区的缓冲区空洞的数据包,也可能为该重排序缓冲区的最后一个缓冲区空洞后面的数据包,则可以直接将该当前数据包加入该重排序缓冲区。

基于第六方面的第三种实现方式中,在第六方面的第四种实现方式中,可以直接在确定所述当前数据包和所述参考数据包的主序列号不连续时确定所述当前数据包发生了乱序且在确定这两个数据包的主序列号连续时确定所述当前数据包没有发生乱序。

基于第六方面的第三种实现方式中,在第六方面的第五种实现方式中,为了提升乱序检测的准确性,接收设备也可以首先判断所述当前数据包和所述参考数据包是否来自同一个物理链路,并采用相应的方式进行乱序检测。

如果所述当前数据包和所述参考数据包来自不同物理链路,则可以在确定所述当前数据包的主序列号和所述参考数据包的主序列号不连续时,确定所述当前数据包发生乱序。

所述发送设备采用负载均衡方式发送的所述目标数据流的每个数据包还可以携带子序列号,且通过每个物理链路发送的所述目标数据流的数据包的子序列号连续。如果所述当前数据包和所述参考数据包来自同一个物理链路,则可以在确定所述当前数据包和所述参考数据包的主序列号差值大于所述当前数据包和所述参考数据包的子序列号差值时确定所述当前数据包发生乱序。

第七方面提供了一种通信设备,所述通信设备包括获取单元和通信单元。所述获取单元,用于获取所述目标数据流的数据包。所述通信单元,用于向接收设备发送启动通知,所述启动通知用于通知所述接收设备将要采用负载均衡的方式通过至少两个物理链路发送目标数据流,并用于在发送所述启动通知后采用负载均衡的方式通过所述至少两个物理链路向所述接收设备发送所述目标数据流的数据包。

在第七方面的第一种实现方式中,所述通信单元采用负载均衡方式发送的所述目标数据流的每个数据包均携带主序列号,发送的所述目标数据流的数据包的主序列号连续,所述主序列号用于所述接收设备对接收自不同物理链路的属于所述目标数据流的数据包进行排序,如用于在排序过程中对接收自不同物理链路的属于所述目标数据流的数据包进行乱序检测。所述启动通知可以包括初始主序列号,所述初始主序列号为所述发送设备通过负载均衡方式发送的第一个属于所述目标数据流的数据包的主序列号。

基于第七方面的第一种实现方式,在第七方面的第二种实现方式中,所述通信单元采用负载均衡方式发送的所述目标数据流的每个数据包还携带子序列号,且通过所述至少两个物理链路中的任一物理链路发送的所述目标数据流的数据包的子序列号连续。所述启动通知还可以包括初始子序列号,每个物理链路对应的初始子序列号为通过所述物理链路发送的第一个属于所述目标数据流的数据包的子序列号。

第八方面提供了一种通信设备,所述通信设备包括通信单元和处理单元。所述通信单元,用于接收发送设备发送的启动通知,并通过所述通信设备与发送设备之间的至少两个物理链路接收所述发送设备采用负载均衡的方式通过所述至少两个物理链路发送的目标数据流的数据包。所述处理单元,用于根据所述启动通知确定所述发送设备将要采用负载均衡的方式通过所述至少两个物理链路发送目标数据流,并对接收的所述目标数据流的数据包进行排序。

在第八方面的第一种实现方式中,所述发送设备采用负载均衡方式发送的所述目标数据流的每个数据包均携带主序列号,且所述发送设备发送的所述目标数据流的数据包的主序列号连续。相应地,所述处理单元根据接收的所述目标数据流的数据包的主序列号对接收的所述目标数据流的数据包进行排序,包括对接收自不同物理链路的属于所述目标数据流的数据包进行乱序检测。

基于第八方面的第一种实现方式,在第四方面的第二种实现方式中,所述发送设备采用负载均衡方式发送的所述目标数据流的每个数据包还携带子序列号,且通过所述至少两个物理链路中的任一物理链路发送的所述目标数据流的数据包的子序列号连续。相应地,所述处理单元具体根据接收的所述目标数据流的数据包的主序列号和子序列号对所述目标数据流的数据包进行乱序检测。

第九方面,提供了一种通信系统,所述通信系统包括:发送设备和接收设备。所述发送设备可以为如上述第五方面或第五方面的任意一种实现方式所述的通信设备,相应地,所述接收设备可以为如上述第六方面或第六方面的任意一种实现方式所述的通信设备。所述发送设备还可以为如上述第七方面或第七方面的任意一种实现方式所述的通信设备,相应地,所述接收设备可以为如上述第八方面或第八方面的任意一种实现方式所述的通信设备。

第十方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。

第十一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。

图1a-1c是本申请实施例提供的通信系统100的组网结构示意图;

图2-3是本申请实施例提供的方法100的流程示意图;

图4a-4c是本申请实施例提供的协议结构示意图;

图5是本申请实施例提供的重排序缓冲区示意图;

图6是本申请实施例2提供的通信设备200的结构示意图;

图7是本申请实施例3提供的通信设备300的结构示意图;

图8是本申请实施例4提供的通信设备1000的结构示意图;

图9是本申请实施例5提供的通信设备2000的结构示意图;

具体实施方式

下面结合附图,对本申请的实施例进行描述。

图1a-1c为本申请实施例提供的通信系统100的组网结构示意图,通信系统100包括第一设备101和第二设备102。第一设备101和第二设备102之间可以是有线通信,也可以是无线通信,如通过无线保真(wirelessfidelity,wifi)通信,也可以既通过有线通信又通过无线通信。第一设备101可以为路由器、交换机等传输设备,第二设备可以为路由器、交换机等传输设备,也可以为用户终端,如机顶盒(settopbox,stb)、vr终端等。该通信系统还可以包括业务服务器103,该业务服务器103可以为iptv服务器、vr视频服务器等。

以第一设备和第二设备之间通过wifi通信为例,第一设备101可以为ap设备,具体可以为光网络终端(opticalnetworkterminal,ont)、客户端设备(customerpremiseequipment,cpe)等家用ap设备,也可以为企业网ap设备。

如图1b所示,第二设备102可以为无线用户终端,如无线机顶盒(settopbox,stb)、无线vr终端等。通过wifi通信的无线用户终端又可以称为站(station,sta)。在如图1b所示的通信系统100中,该业务服务器发送的数据流通过第一设备101发送至第二设备102。

如图1c所示,第二设备102可以为另一个ap设备。如图1c所示的通信系统100还可以包括用户终端104,如stb、vr终端等。在如图1c所示的通信系统100中,该业务服务器发送的数据流通过第一设备101和第二设备102发送至用户终端104。

第一设备101和第二设备102均可以部署多个网卡。第一设备101和第二设备102均为无线设备时,均可以部署多个无线网卡,如,均部署分别工作在2.4g和5g频段的无线网卡。

下面结合图2、图3、图4a-4c和图5介绍本申请实施例1提供的方法100。

图2是本申请实施例1提供的方法流程示意图,本申请实施例1的方法可以应用于图1a-1c所示的通信系统100。

如图2所示,方法100包括如下步骤:

s110:第一设备(如图1所示的第一设备101)与第二设备(如图1所示的第二设备102)之间建立m个物理链路,其中m为不小于2的自然数。

所述第一设备和所述第二设备均可以部署m个网卡,所述第一设备和所述第二设备的对应网卡之间建立物理链路。

当所述第一设备和所述第二设备之间通过以太网通信时,建立的物理链路为以太网链路。当所述第一设备和所述第二设备之间通过wifi通信时,建立的物理链路为wlan链路。

s120:第一设备向第二设备发送启动通知。

所述第一设备可以在开始接收到所述目标数据流的数据包时发送所述启动通知。所述启动通知用于通知所述第二设备将要采用负载均衡的方式通过n个物理链路向所述第二设备发送目标数据流,其中n为大于1且不大于m的自然数。可以理解的是,当n等于m时,则用于采用负载均衡方式发送所述目标数据流的物理链路是所述第一设备和所述第二设备之间建立的所有物理链路,如,第一设备和第二设备之间建立两条wlan链路,可以分别为5g链路和2.4g链路,并通过这两条wlan链路发送所述目标数据流。当n小于m时,用于采用负载均衡方式发送所述目标数据流的物理链路是所述第一设备和所述第二设备之间建立的部分物理链路。如,所述第一设备和所述第二设备之间建立3条物理链路,可以通过这3条物理链路采用负载均衡方式发送所述目标数据流,也可以通过其中2条物理链路采用负载均衡方式发送所述目标数据流。

该启动通知可以包括目标数据流的初始主序列号、所述n个物理链路的链路标识、以及每个物理链路对应的初始子序列号。其中,所述目标数据流的初始主序列号为在步骤s150中通过负载均衡方式发送的第一个属于所述目标数据流的数据包的主序列号,用于所述第二设备对接收的所述目标数据流的前几个数据包进行排序,如在排序过程中进行乱序检测。每个物理链路对应的初始子序列号为在步骤s150中通过该物理链路发送的第一个属于所述目标数据流的数据包的子序列号,用于所述第二设备对通过该物理链路接收的所述目标数据流的前几个数据包进行乱序检测。该启动通知还可以包括数据传输方式,该数据传输方式表明第一设备要通过负载均衡方式向第二设备发送目标数据流的数据包。所述启动通知还可以包括所述目标数据流的流标识,用于所述第二设备确定要对通过不同物理链路接收的携带所述流标识的数据包进行排序。

第一设备在确定不再通过负载均衡方式发送所述目标数据流时,还可以向所述第二设备发送结束通知。

在本申请实施例中,第一设备向第二设备发送目标数据流,因此,可以将第一设备称为发送设备并将第二设备称为接收设备。

本申请实施例中的数据包可以为因特网协议(internetprotocol,ip)数据包。

s130-s140:第二设备在接收到该启动通知后,根据所述启动通知确定所述第一设备将要采用负载均衡的方式通过所述n个物理链路发送所述目标数据流,记录启动通知中携带的信息,如初始主序列号,并回复确认消息。

该第二设备在确定所述第一设备将要采用负载均衡的方式通过所述n个物理链路发送所述目标数据流后执行后续步骤s160。

s150:第一设备获取所述目标数据流的数据包,并采用负载均衡的方式通过所述n个物理链路向所述第二设备发送所述目标数据流的数据包,其中,采用负载均衡方式发送的所述目标数据流的每个数据包均携带主序列号,发送的所述目标数据流的数据包的主序列号连续。

所述主序列号用于所述第二设备对接收自不同物理链路的属于所述目标数据流的数据包进行排序,如用于在排序过程中对接收自不同物理链路的属于所述目标数据流的数据包进行乱序检测。

采用负载均衡方式发送的所述目标数据流的每个数据包还携带子序列号,且通过每个物理链路发送的所述目标数据流的数据包的子序列号连续。所述子序列号可以用于所述第二设备对接收的所述目标数据流的数据包进行丢包检测。

具体地,第一设备通过不同物理链路对应的通信接口(如wifi接口)发送目标数据流的不同数据包。

第一设备在采用负载均衡方式发送目标数据流的每个数据包之前,为该数据包添加主序列号,还可以为该数据包添加子序列号。其中,为在步骤s150中发送的目标数据流的第一个数据包添加初始主序列号并为后续数据包依次添加递增1的主序列号。对于每个物理链路,为在步骤s150中通过该物理链路发送的目标数据流的第一个数据包添加初始子序列号,并为后续通过该物理链路发送的目标数据流的其它数据包依次添加递增1的子序列号。

所述第一设备具体从要发送给所述第二设备的待发送数据包中获取所述目标数据流的数据包,具体可以对待发送数据包进行识别,将满足所述目标数据流的预设条件的数据包识别为所述目标数据流的数据包。在具体实现时,第一设备可能向第二设备发送多种业务的数据包,可以仅对部分业务的数据包通过负载均衡的方式进行传输,如针对4kiptv、8kiptv、vr等大码率视频业务的数据流通过负载均衡的方式进行传输。相应地,所述第一设备可以将向第二设备发送的满足所述预设条件的数据包识别为目标数据流的数据包进行负载均衡。如将属于一个或多个预设业务的数据包识别为所述目标数据流的数据包,又如将五元组为预设五元组的数据包识别为所述目标数据流的数据包。

在一种实施方式中,可以对一个或多个业务服务器发送的数据流作为整体进行负载均衡。具体可以将源ip地址属于源ip地址列表的数据包识别为所述目标数据流的数据包,即将源ip地址属于所述源ip地址列表的数据包的整体作为目标数据流。所述源ip地址列表包括一个或多个ip地址,如包括提供各大码率视频业务的业务服务器的ip地址。在具体实现时,所述第一设备可以对待发送数据包中的源ip地址与所述源ip地址列表中的ip地址进行比较,如果该待发送数据包的源ip地址与所述源ip地址列表中的任一ip地址相同,则将所述待发送数据包识别为所述目标数据流的数据包。所述第一设备可以将获取的一个或多个iptv组播ip地址加到所述源ip地址列表中,也可以从用户终端和业务服务器之间的域名系统(domainnamesystem,dns)交互消息中获取与预设域名(如vr服务器域名)对应的ip地址,并将该ip地址加到所述源ip地址列表中。

在另一种实施方式中,可以对特定业务服务器发送的数据流进行负载均衡。具体可以将待发送数据包中源ip地址为预设源ip地址(如vr服务器的ip地址)的数据包识别为所述目标数据流的数据包,即将源ip地址为所述预设源ip地址的数据包的整体作为所述目标数据流。在具体实现时,所述第一设备可以对待发送数据包中的源ip地址与所述预设源ip地址进行比较,如果该待发送数据包的源ip地址与所述预设源ip地址相同,则将所述待发送数据包识别为所述目标数据流的数据包。所述第一设备可以将获取的iptv组播ip地址设置为该预设源ip地址,也可以从用户终端和业务服务器之间的dns交互消息中获取与预设域名(如vr服务器域名)对应的ip地址,并将该ip地址设置为该预设源ip地址。在具体实现时可以预设多个源ip地址,将源ip地址为不同预设源ip地址的数据包作为不同的目标数据流分别采用负载均衡方式传输。相应地,针对每个数据流均执行方法100的步骤s120-s160。

在另一种实施方式中,可以对发给一个或多个用户终端(如vr终端)的数据流作为整体进行负载均衡。具体可以将目的ip地址属于目的ip地址列表的数据包识别为所述目标数据流的数据包,即将目的ip地址属于所述目的ip地址列表的数据包的整体作为目标数据流。所述目的ip地址列表包括一个或多个ip地址,如包括多个vr终端的ip地址。也可以对发给特定用户终端(如vr终端)的数据流进行负载均衡。具体可以将待发送数据包中目的ip地址为预设目的ip地址(如vr终端的ip地址)的数据包识别为所述目标数据流的数据包,即将目的ip地址为所述预设目的ip地址的数据包的整体作为所述目标数据流。

在另一种实施方式中,可以基于单个数据流进行负载均衡,即对五元组为预设五元组的数据流进行负载均衡。具体可以将待发送数据包中五元组为所述预设五元组的数据包识别为所述目标数据流的数据包,即将五元组为所述预设五元组的数据包的整体作为一个目标数据流。在具体实现时,所述第一设备可以对待发送数据包中的五元组与所述预设五元组进行比较,如果该待发送数据包的五元组与所述预设五元组相同,则将所述待发送数据包识别为所述目标数据流的数据包。可以预设多个五元组,将五元组为不同预设五元组的数据包作为不同的目标数据流分别采用负载均衡方式传输。相应地,针对每个数据流均执行方法100的步骤s120-s160。

在另一种实施方式中,可以对视频流统一进行负载均衡。具体可以将待发送数据包中的视频数据包识别为所述目标数据流的数据包,即将视频数据包的整体作为一个目标数据流。视频数据包中携带了用于表示封装的为视频数据的信息,可以根据该信息从待发送数据包中识别出视频数据包。

另外,所述第一设备也可以将向第二设备发送的所有数据包作为整体采用负载均衡的方式进行传输,即将第一设备向第二设备发送的所有数据包的整体作为所述目标数据流。

第一设备在通过负载均衡方式发送所述目标数据流的每个数据包之前,还可以为该数据包添加用于传输该数据包的物理链路的链路标识、所述目标数据流的流标识、用于表明通过负载均衡方式发送该数据包的信息等。每个数据包携带的链路标识用于所述第二设备识别该数据包接收自哪个物理链路。每个数据包携带的流标识用于所述第二设备识别通过不同物理链路接收的携带所述流标识的数据包,并对携带相同流标识的数据包进行排序。每个数据包携带的用于表明通过负载均衡方式发送该数据包的信息用于所述第二设备确定该数据包的发送方式,进而在确定该数据包的发送方式为负载均衡方式后对该数据包及携带相同流标识的数据包进行排序。

在步骤s150中所述第一设备还可以对通过各物理链路发送的数据流量进行调整,以实现动态的负载均衡。具体可以根据所述目标数据流在统计周期内的传输速率进行调整,可以根据各物理链路的负载信息进行调整,也可以根据所述目标数据流在统计周期内的传输速率和各物理链路的负载信息的组合进行调整。

所述第一设备具体可以按照预设的统计周期长度(如10ms)统计所述目标数据流在每个统计周期内的传输速率。所述目标数据流在每个统计周期内的传输速率可以是所述第一设备在所述统计周期内从上游设备接收所述目标数据流的接收速率,也可以是在所述统计周期内向所述第二设备发送所述目标数据流的发送速率。所述目标数据流在当前统计周期内的传输速率具体可以通过在当前统计周期内统计的从上游设备接收的或向所述第二设备发送的所述目标数据流的数据量(如数据包的个数、字节数等)来表征。所述第一设备可以将所述n个物理链路中的一个链路作为主链路,如将通过5g网卡建立的wlan链路作为主链路。当该传输速率低于或等于预设的速率阈值时,仅通过该主链路发送该目标数据流的数据包;当该传输速率高于速率阈值时将该目标数据流的部分数据包分担到其它物理链路传输。进一步地,当该传输速率高于该速率阈值时,还可以根据该传输速率(后续表示为s)和该速率阈值(后续表示为s’)的差值对通过各物理链路发送的数据流量进行调整,如,将接收的该目标数据流的数据量与r的乘积作为分配给其它物理链路的数据量,其中r=(s-s’)/s。该速率阈值不大于该主链路的最大带宽,如,可以是该主链路的最大带宽的70%。

所述第一设备具体可以按照预设的检测周期长度(如10ms)检测各物理链路的负载信息。对于用于发送所述目标数据流的任一物理链路,所述物理链路的负载信息可以是在检测时刻检测到的所述物理链路的与所述目标数据流对应的数据发送队列的队列利用率,也可以是预测的所述数据发送队列在预设时长(如检测周期长度)之后的队列利用率。具体可以根据在检测时刻检测到的所述数据发送队列的队列利用率d1计算所述数据发送队列在预设时长t之后的队列利用率d2,其中,d2=d1+k*t。k用于表征所述物理链路的队列利用率变化趋势,可以是根据d1和所述数据发送队列在该预设时长t之前的队列利用率计算得到的。对于负载较轻的物理链路,如预测队列利用率较低的物理链路,可以增加通过该物理链路发送的目标数据流的数据量,相应地,对于负载较重的物理链路,如预测队列利用率较高的物理链路,可以减少通过该物理链路发送的目标数据流的数据量。如,通过wlan链路1和wlan链路2发送目标数据流的不同数据包,预测的两个wlan链路的队列利用率分别为30%和60%,则可以增加为wlan链路1分配的目标数据流的数据量,减少为wlan链路2分配的目标数据流的数据量。另外,也可以将所述n个物理链路中的一个链路作为主链路,如将通过5g网卡建立的wlan链路作为主链路。当该主链路的预测队列利用率低于或等于预设的利用率阈值时,仅通过该主链路发送该目标数据流的数据包;当该主链路的预测队列利用率高于利用率阈值时将该目标数据流的部分数据包分担到其它物理链路传输。该利用率阈值大于50%且小于100%,如可以为70%。

步骤s160:第二设备通过所述n个物理链路接收目标数据流的数据包,并根据接收的所述目标数据流的各数据包的主序列号对接收的所述目标数据流的数据包进行排序。

在步骤s160中,第二设备可以先识别出属于所述目标数据流的数据包,进而根据识别出的所述目标数据流的各数据包的主序列号进行排序。如果所述目标数据流的数据包携带所述目标数据流的流标识,所述第二设备还可以先根据所述流标识从接收的数据包中识别出属于所述目标数据流的数据包。如果同一时间段内只有一路目标数据流,该目标数据流的数据包中可以不用携带流标识,相应地,该第二设备可以将携带主序列号的数据包识别为属于所述目标数据流的数据包。

第二设备在排序过程中,可以根据接收的各数据包的主序列号对所述目标数据流进行乱序检测,并根据乱序检测结果对接收的所述目标数据流的数据包进行排序。为了提升检测的准确性,还可以进一步结合所述目标数据流的丢包情况进行乱序检测。其中,在检测丢包情况时,可以根据接收到的所述目标数据流的数据包的子序列号对所述目标数据流的丢包情况进行检测。进一步地,如果确定当前接收的数据包发生乱序,将该数据包加入重排序缓冲区,否则转发该数据包或将该数据包收往所述第二设备的操作系统协议栈。可以理解的是,如果该第二设备不是用户终端,需要向下游设备(如用户终端,或所述第二设备与用户终端之间的其它设备)转发该目标数据流,则转发该数据包。如,所述第二设备为ap,将该数据包转发给该第二设备所连接的用户终端。如果所述第二设备为用户终端,将该数据包收往所述第二设备的操作系统协议栈。

如果该目标数据流的后发送数据包早于该目标数据流的先发送数据包到达第二设备。通常可以将该后发送数据包加入重排序缓冲区,以等待该先发送数据包。对于已接收的该目标数据流的主序列号分别为num1和num2的数据包1和数据包2,num1小于num2且num1和num2不连续,如果尚未接收到主序列号大于num1且小于num2的数据包,则可以认为数据包1和数据包2之间形成一个缓冲区空洞,该缓冲区空洞可以表示为主序列号区间(num1,num2),主序列号大于num1且小于num2的数据包可以称为落入该缓冲区空洞的数据包。可以理解的是,如果当前不存在缓冲区空洞,则该重排序缓冲区为空。如,依次接收到主序列号为1、2、3、6、5、4的数据包,主序列号区间(3,6)为缓冲区空洞,主序列号分别为4和5的数据包为落入缓冲区空洞的数据包。接收到主序列号为5和4的数据包后,该缓冲区空洞被补齐,则主序列号为1-6的数据包均会被转发或送往操作协议栈,此时,该重排序缓冲区为空。

在对所述目标数据流进行乱序检测的过程中,对于当前接收到的数据包(后续称为当前数据包),可以首先判断该目标数据流对应的重排序缓冲区是否为空。如果在接收到该当前数据包时该目标数据流对应的重排序缓冲区不为空,通常该重排序缓冲区中存在一个或多个缓冲区空洞,说明该当前数据包为落入该重排序缓冲区的一个缓冲区空洞的数据包,或者为该重排序缓冲区的最后一个缓冲区空洞后面的数据包,则可以直接将该当前数据包加入该重排序缓冲区。如,依次接收到主序列号为1、2、3、6、5、7的数据包,主序列号区间(3,6)为缓冲区空洞,主序列号分别为4和5的数据包为落入缓冲区空洞的数据包,主序列号为7的数据包为该缓冲区空洞后面的数据包。相应地,在接收到主序列号为5的数据包时,该重排序缓冲区不为空,将主序列号为5的数据包加入重排序缓冲区填补缓冲区空洞,在接收到主序列号为7的数据包时,该重排序缓冲区不为空,将主序列号为7的数据包加入重排序缓冲区等待填充缓冲区空洞。可以理解的是,如果在接收到该当前数据包时该目标数据流对应的重排序缓冲区不为空,也可以认为该当前数据包发生了乱序。

如果在接收到该当前数据包时该目标数据流对应的重排序缓冲区为空,则可以根据该当前数据包的主序列号与在接收该当前数据包之前接收的所述目标数据流中的主序列号最大的数据包(后续称为参考数据包)的主序列号来判断该当前数据包是否发生了乱序。具体可以在确定存在属于所述目标数据流的、与所述当前数据包通过不同物理链路发送的、且主序列号大于所述参考数据包的主序列号且小于所述当前数据包的主序列号的数据包时确定所述当前数据包发生乱序。可以理解的是,如果该接收设备不是用户终端,需要向下游设备转发该目标数据流的数据包,则该参考数据包为该接收设备在接收到该当前数据包之前转发的该目标数据流的最后一个数据包。如果该接收设备为用户终端,则该参考数据包为该接收设备在接收到该当前数据包之前最后一个收往操作系统协议栈的数据包。

可以直接在确定所述当前数据包和所述参考数据包的主序列号不连续时确定所述当前数据包发生了乱序且在确定所述当前数据包和所述参考数据包的主序列号连续时确定所述当前数据包没有发生乱序。该实现方式比较简单,计算资源消耗少。

为了提升乱序检测的准确性,第二设备也可以首先判断所述当前数据包和所述参考数据包是否来自同一个物理链路,并采用相应的方式进行乱序检测。

如果所述当前数据包和所述参考数据包来自不同物理链路,则可以在确定所述当前数据包的主序列号和所述参考数据包的主序列号不连续时,确定所述当前数据包发生乱序。由于该目标数据流的数据包是通过不同的物理链路传输的,可能在一个物理链路上先发送的数据包晚于在另一个物理链路上后发送的数据包,从而导致数据包的乱序。根据该实现方式,考虑了连续接收的来自不同物理链路的主序列号是否连续的情况进行乱序检测,乱序检测结果更加准确。

如果所述当前数据包和所述参考数据包来自同一个物理链路,还可以考虑所述物理链路上的丢包情况,结合所述当前数据包和所述参考数据包的主序列号、以及所述物理链路上的丢包情况进行乱序检测。具体可以在确定第一发包数量大于第一丢包数量时确定所述当前数据包发生乱序,其中,所述第一发包数量为所述第一设备发送的属于所述目标数据流的、主序列号大于所述参考数据包的主序列号且小于所述当前数据包的主序列号的数据包的个数,所述第一丢包数量为所述第一设备发送的属于所述目标数据流的、主序列号大于所述参考数据包的主序列号且小于所述当前数据包的主序列号的数据包中在所述物理链路上丢失的数据包的个数。

第二设备接收的所述当前数据包和所述参考数据包的主序列号不连续时,可能发生了乱序,也可能发生了丢包,也可能既发生了丢包也发生了乱序。根据上述实现方式结合丢包情况进行乱序检测,乱序检测结果更加准确。

在具体实现时,所述第一设备采用负载均衡方式发送的所述目标数据流的每个数据包还可以携带子序列号,且通过每个物理链路发送的所述目标数据流的数据包的子序列号连续。相应地,确定所述发包数量大于所述丢包数量的具体实现方式可以是,确定所述当前数据包和所述参考数据包的主序列号差值大于所述当前数据包和所述参考数据包的主序列号差值。

可以理解的是,这两个数据包的主序列号差值大于这两个数据包的子序列号差值包括两种情况。一种情况是这两个数据包的主序列号不连续、子序列号不连续、且这两个数据包的主序列号差值大于子序列号差值,这种情况下,所述丢包数量不为0,即这两个数据包之间的属于所述目标数据流的数据包在所述物理链路上发生了丢包,丢包数量为子序列号差值减一。另一种情况是,这两个数据包的主序列号不连续且子序列号连续,这种情况下,所述丢包数量为0,即这两个数据包之间的属于所述目标数据流的数据包在所述物理链路上没有发生丢包。

由于通过单个物理链路传输的数据包之间不会发生乱序,如果这两个数据包是通过同一个物理链路传输的且子序列号不连续,则可以据此确定这两个数据包之间发生了丢包,而不一定是发生了乱序。因此,该子序列号和该主序列号的组合可以用于更加准确地进行乱序检测。

下面结合示例对利用主序列号和子序列号的组合进行乱序检测的过程进行详细描述。

在步骤s160中,对于接收的所述目标数据流的第一个数据包,如果该数据包的主序列号为该目标数据流的初始主序列号,确定该数据包没有发生乱序;如果该数据包的主序列号不是该目标数据流的初始主序列号且该数据包的子序列号为用于传输该数据包的物理链路的初始子序列号,表明主序列号小于该数据包的主序列号的数据包(如主序列号为该初始主序列号的数据包)是通过其它物理链路传输的,因此可以确定该数据包发生乱序;如果该数据包的主序列号不是该目标数据流的初始主序列号且该数据包的子序列号也不是用于传输该数据包的物理链路的初始子序列号,且该数据包的主序列号和初始主序列号的差值与该数据包的子序列号与初始子序列号的差值相同,说明主序列号小于该数据包的主序列号的数据包也是通过该物理链路发送的,由于同一物理链路上不会发生乱序,说明主序列号小于该数据包的主序列号的数据包发生了丢包,因此确定该数据包没有发生乱序;如果该数据包的主序列号不是该目标数据流的初始主序列号且该数据包的子序列号也不是用于传输该数据包的物理链路的初始子序列号,且该数据包的主序列号和初始主序列号的差值大于该数据包的子序列号与初始子序列号的差值,说明主序列号小于该数据包的主序列号的数据包中一部分发生了丢包一部分是通过其它物理链路发送的,因此确定该数据包发生了乱序。

对于接收的所述数据流的每个后续数据包(后续还是称为当前数据包),下面结合图3介绍步骤s160对所述当前数据包进行乱序检测的具体实现流程。

在如下具体实现流程中,用于传输在接收该当前数据包之前接收的所述目标数据流中的主序列号最大的数据包(后续还是称为参考数据包)的物理链路的标识为phyid1,所述参考数据包的主序列号为x1、子序列号为y1。用于传输所述当前数据包的物理链路的标识为phyid2,当前数据包的主序列号为x2、子序列号为y2。

步骤s201:在接收到所述当前数据包时,获取所述当前数据包的主序列号为x2、子序列号y2、以及所述当前数据包的物理链路标识phyid2。

s202:判断所述目标数据流对应的重排序缓冲区是否为空,如果不为空转步骤s204,否则转s203。

重排序缓冲区不空时,通常该重排序缓冲区中存在一个或多个缓冲区空洞,说明该当前数据包为落入该重排序缓冲区的一个缓冲区空洞的数据包,或者为该重排序缓冲区的最后一个缓冲区空洞后面的数据包,因此可以转步骤s204直接将该当前数据包加入该重排序缓冲区。

s203:根据参考数据包的主序列号和当前数据包的主序列号的关系进行乱序检测。

在步骤s203中可以检测当前数据包是否满足乱序条件1或2,如果满足乱序条件1或乱序条件2,确定当前数据包存在乱序,转步骤s204,如果既不满足乱序条件1也不满足乱序条件2,则确定当前数据包不存在乱序,转步骤s205。在该实现方式中,不进行有序条件1和2的具体判断。

在步骤s203中也可以检测当前数据包是否满足有序条件1或2,如果满足有序条件1或有序条件2,确定当前数据包不存在乱序,转步骤s205,如果既不满足有序条件1也不满足有序条件2,则确定当前数据包存在乱序,转步骤s204。在该实现方式中,不进行乱序条件1和2的具体判断。

在步骤s203中也可以检测当前数据包满足有序条件1-2、乱序条件1-2中的哪一个条件,如果满足乱序条件1或乱序条件2,确定当前数据包存在乱序,转步骤s204,如果满足有序条件1或有序条件2,确定当前数据包不存在乱序,转步骤s205。

其中,确定满足乱序条件1的具体实现为:phyid2=phyid1,x2-x1>y2-y1。其中,phyid2=phyid1表明所述当前数据包和所述参考数据包来自同一个物理链路,x2-x1>y2-y1表明所述当前数据包和所述参考数据包的主序列号差值大于子序列号差值。

在一种情况中,x2=x1+n,y2=y1+1,n>1。其中,x2=x1+n表明所述当前数据包和所述参考数据包的主序列号不连续,y2=y1+1表明所述当前数据包和所述参考数据包的子序列号连续。所述当前数据包和所述参考数据包是从同一个物理链路上连续接收到的,且子序列号连续,说明该物理链路无丢包。所述当前数据包和所述参考数据包之间存在n-1个尚未收到的数据包,这n-1个数据包很可能正在其它物理链路上传输。因此,满足乱序条件1可以认为有乱序,且无丢包。

在另一种情况中,x2=x1+n,y2=y1+m,n>m,m>1,n>1。其中,x2=x1+n表明所述当前数据包和所述参考数据包的主序列号不连续,y2=y1+m表明所述当前数据包和所述参考数据包的子序列号不连续,n>m表明所述当前数据包和所述参考数据包之间存在n-m个尚未收到的数据包,由于同一物理链路内通常不会出现乱序,还可以确定其中n-m个尚未收到的数据包中有m-1个数据包发生了丢包。

在具体实现时,可以将乱序条件1作为一个乱序条件进行乱序检测,也可以将乱序条件1拆分为分别对应上述两种情况的两个乱序条件进行乱序检测,即乱序条件1包括两个乱序条件,满足其中一个即认为发生乱序。

确定满足乱序条件2的具体实现为:phyid2!=phyid1,且x2-x1>1。其中,phyid2!=phyid1表明所述当前数据包和所述参考数据包来自不同物理链路,x2-x1>1表明所述当前数据包和所述参考数据包的主序列号不连续。

确定满足有序条件1的具体实现为:phyid2=phyid1,且x2-x1=y2-y1。其中,phyid2=phyid1表明所述当前数据包和所述参考数据包来自同一个物理链路。

在一种情况中,x2=x1+1,y2=y1+1。其中,x2=x1+1表明所述当前数据包和所述参考数据包的主序列号连续,y2=y1+1表明所述当前数据包和所述参考数据包的子序列号连续。

在另一种情况中,x2=x1+n,y2=y1+n,n>1。其中,x2=x1+n表明所述当前数据包和所述参考数据包的主序列号不连续,y2=y1+n表明所述当前数据包和所述参考数据包的子序列号不连续,且主序列号差值和子序列号差值相同。所述当前数据包和所述参考数据包的主序列号和子序列号均不连续,说明从该物理链路链路上接收数据包时出现丢包,主序列号差值和子序列号差值相同,均为n-1,由于同一物理链路内通常不会出现乱序,说明这n-1个数据包均为该物理链路上的丢包。

在具体实现时,可以将有序条件1作为一个有序条件进行乱序检测,也可以将有序条件1拆分为分别对应上述两种情况的两个有序条件进行乱序检测。即有序条件1包括两个有序条件,满足其中一个即认为没有发生乱序。

确定满足有序条件2的具体实现为:phyid2!=phyid1,且x2-x1=1。其中,phyid2!=phyid1表明所述当前数据包和所述参考数据包来自不同物理链路,x2-x1=1表明所述当前数据包和所述参考数据包的主序列号连续。

s204:将所述当前数据包加入所述重排序缓冲区。

需要说明的是,如果执行步骤s202之后执行步骤s204,该当前数据包可能为落入该重排序缓冲区的一个缓冲区空洞的数据包,也可能为该重排序缓冲区的最后一个缓冲区空洞后面的数据包。如果是前者,则该当前数据包在步骤s204中用于填补缓冲区空洞。如果是后者,则该当前数据包在步骤s204中可能会形成新的缓冲区空洞,如,依次接收到主序列号为1、2、3、6、8的数据包,在收到主序列号为8的数据包时,重排序缓冲区包括一个缓冲区空洞,为主序列号区间(3,6),将主序列号为8的数据包加入所述重排序缓冲区后形成新的缓冲区空洞(6、8)。

如果执行步骤s203后执行步骤s204,由于在执行步骤s204之前该重排序缓冲区为空,该当前数据包在步骤s204中会形成一个缓冲区空洞(lnum,rnum),该缓冲区空洞的左边界lnum为所述参考报文的主序列号,右边界rnum为所述当前数据包的主序列号。如,依次接收到主序列号为1、2、3、6的数据包,或依次接收到主序列号为1、3、2、6的数据包,在接收到主序列号为6的数据包时,该重排序缓冲区为空,将主序列号为6的数据包加入所述重排序缓冲区后形成缓冲区空洞(3、6)。

对于该重排序缓冲区包括一个缓冲区空洞的情况,如果执行步骤s204后该缓冲区空洞中的数据包被补齐,或该缓冲区空洞的定时器超时,则转步骤s206转发该重排序缓冲区中的数据包或将重排序缓冲区中的数据包收往操作系统协议栈。

对于该重排序缓冲区包括多个缓冲区空洞的情况,如果执行步骤s204后第一个缓冲区空洞中的数据包被补齐,或该第一个缓冲区空洞的定时器超时,则转步骤s206转发该重排序缓冲区中的位于第二个缓冲区空洞之前的数据包或将该重排序缓冲区中的位于第二个缓冲区空洞之前的数据包收往操作系统协议栈。

如图5的左图所示,将数据包13加入重排序缓冲区后,该重排序缓冲区包括位置p1和p2之间的数据包。p1和p2之间虚框所示的为缓冲区空洞中的缺失数据包,如数据包12,该重排序缓冲区共计包括6个缓冲区空洞。当前最后一个已转发的数据包或最后一个收往操作系统协议栈的数据包为数据包11。p2后的数据包尚未接收到。

如图5的右图所示,10ms后,第一个缓冲区空洞和第二个缓冲区空洞均被补齐,第三个缓冲区空洞之前的数据包(即数据包21及数据包21之前的数据包)均被转发或收往操作系统协议栈。此时该重排序缓冲区包括位置p3和p4之间的数据包,数据包22为第一个缓冲区空洞中的缺失数据包,数据包23为重排序缓冲区中序列号最大的数据包。p4后的数据包尚未接收到。

在具体实现时,为了进一步提高转发效率,在对重排序缓冲区中的数据包进行转发时,也可以考虑丢包情况。

对于该重排序缓冲区包括一个缓冲区空洞的情况,如果该缓冲区空洞前面的数据包和后面的数据包来自同一个物理链路,则可以将这两个数据包的子序列号差值减1确定为该缓冲区空洞中的丢包数量ln,相应地,在该缓冲区空洞中的缺失报文补齐至只缺失ln个数据包后即可以转步骤s206转发该重排序缓冲区中的数据包或将重排序缓冲区中的数据包收往操作系统协议栈。

对于该重排序缓冲区包括多个缓冲区空洞的情况,对于该重排序缓冲区中的第一个缓冲区空洞,如果该缓冲区空洞前面的数据包和后面的数据包来自同一个物理链路,则可以将这两个数据包的子序列号差值减1确定为该缓冲区空洞中的丢包数量ln,相应地,在该缓冲区空洞中的缺失报文补齐至只缺失ln个数据包后即可以转步骤s206转发该重排序缓冲区中的位于第二个缓冲区空洞之前的数据包或将该重排序缓冲区中的位于第二个缓冲区空洞之前的数据包收往操作系统协议栈。

根据该实现方式,在存在丢包的情况下,可以不用等该缓冲区空洞的定时器超时,效率较高。

步骤s205:转发所述当前数据包或将所述当前数据包收往操作系统协议栈。

执行步骤s205之后,将在当前数据包之后接收的数据包作为新的当前数据包,重新执行步骤s201及其后续步骤。

根据本申请实施例,可以通过在目标数据流的数据包的二层(即数据链路层)头部和三层头部之间扩展头部来携带该数据包的主序列号、子序列号、所属目标数据流的流标识等信息。后续将扩展的头部称为垫层头部,将该垫层头部所对应的协议称为垫层协议。本申请实施例中的目标数据流的数据包通常为网络层数据包,如ip数据包,相应地,所述数据包的网络层头部为所述数据包中的ip报文头,所述数据包的数据链路层头部为所述数据包外封装的媒体访问控制(mediaaccesscontrol,mac)头。

图4a为增加了垫层的网络层次示意图。如图4a所示,在二层和三层之间扩展垫层,扩展的垫层位于二层和三层之间,又可以称为2.5层。通过负载均衡方式发送的所述目标数据流的每个数据包均携带垫层头部。如,所述目标数据流的数据包为ip数据包,第一设备对ip数据包封装垫层头部,在该ip数据包的垫层头部中携带主序列号等信息。相应地,第二设备在转发该ip数据包或将该ip数据包收往操作系统协议栈之前剥除该ip数据包的垫层头部。

如图4a所示,301为802.3以太(ethernet,eth)协议,302为802.11wlan协议,均属于物理层和二层协议;304为ip,305为802.1qvlan协议,均属于三层协议;306为传输控制协议(transmissioncontrolprotocol,tcp)/用户数据报协议(userdatagramprotocol,udp),307为应用层(applicationlayer)协议,均为三层以上协议。303为本申请实施例扩展的垫层(shimlayer)协议。

扩展的垫层头部的数据结构如图4b所示。

垫层头部的各字段定义如表1所示。

表1

在本申请实施例中,加垫层头部的报文的类型可以分为两种,一种是控制消息,另一种是通过负载均衡方式发送的数据包。其中,控制消息用于控制通过负载均衡方式发送目标数据流的过程,具体可以是上述启动通知、结束通知、确认消息等,控制消息中的垫层头部用于携带目标数据流的相关信息。其中,启动通知的垫层头部包括初始主序列号、初始子序列号、流标识等信息。结束通知和确认消息的垫层头部包括流标识等信息。当pt字段的值表示所在报文为控制消息时,sequencenumber字段和subsequencenumber的值分别为初始主序列号和初始子序列号。当pt字段的值表示所在报文为通过负载均衡方式发送的数据包时,sequencenumber字段和subsequencenumber的值分别为该数据包的主序列号和子序列号。

具体可以通过pt字段区分报文类型,pt(packettype)的标记位定义如表2所示。

表2

其中,pt字段的bit0的值用于表明所在报文是否有options字段,0表明有,1表明没有。pt字段的bit1-3的值用于表明所在报文的类型,其中,0x0表明所在报文为通过多链路方式(如负载均衡、多发选收)发送的目标数据流的数据包,0x1-0x3表明所在报文为控制消息,其中,0x1表明所在报文为启动通知,0x2表明所在报文为结束通知,0x3表明所在报文为确认消息。需要说明的是,该控制消息可以是信令,也可以利用没有通过多链路方式发送的数据包来实现,只要在该数据包中携带用于表明该数据包用作控制消息的字段值即可。

流状态字段status的标记位定义如表3所示。

表3

其中,status字段的bit0的值表明所在数据流当前采用单物理链路发送还是采用多物理链路发送,status字段的bit1-3的值用于表明所在数据流所采用的数据传输方式是多发选收还是负载均衡。其中,0x1表明是多发选收,0x2表明是负载均衡。多发选收指的是,发送设备通过与接收设备之间的不同物理链路发送同一个数据包,接收设备对于收到的序列号相同的数据包利用先收到的携带该序列号的数据包组合数据流。

步骤s150发送的目标数据流的其中一个数据包的垫层头部示例如图4c所示。phyid=1,代表通过物理链路1发送该数据包。流标记是0x02,代表采用均衡负载收发方式传输该数据包所属目标数据流。假如初始主序列号和初始子序列号均为1,图4c中的主序列号sequencenumber=6,表示该数据包为目标数据流的第6个数据包,子序列号subsequencenumber=1,表示该数据包是在phyid为1的物理链路上发送的第1个数据包,说明主序列号为1-5号的数据包是通过其它物理链路传输的。

根据本申请实施例1提供的方法100,将目标数据流的数据包分散到不同的物理链路发送而不是集中到一个物理链路发送,可以有效利用不同物理链路所提供的带宽,从而降低丢包率。

根据本申请实施例1,本申请实施例2提出了一种通信设备200,如图6所示,通信设备200包括:获取单元210和通信单元220。

获取单元210,用于获取目标数据流的数据包。具体用于从待发送数据包中获取所述目标数据流的数据包,如将向第二设备发送的满足预设条件的数据包(如属于一个或多个预设业务的数据包)识别为所述目标数据流的数据包。获取单元210所能够进行的各具体操作可参考前述图2-5所示实施例中第一设备侧的对应操作的详细处理过程,如步骤s150的详细处理过程,此处不再逐一赘述。

通信单元220,用于与其它设备通信,包括采用负载均衡的方式通过与接收设备之间的多个物理链路向所述接收设备发送所述目标数据流的数据包,采用负载均衡方式发送的所述目标数据流的每个数据包均携带主序列号,发送的所述目标数据流的数据包的主序列号连续,所述主序列号用于所述接收设备对接收自不同物理链路的属于所述目标数据流的数据包进行排序。还可以用于收发控制消息(如发送启动通知)、建立与第二设备之间的物理链路等,在发送所述目标数据流的数据包的过程中还可以用于对通过各物理链路发送的目标数据流的数据量进行动态调整、为所述目标数据流的待发送数据包添加主序列号、子序列号等负载均衡相关信息。通信单元220所能够进行的各具体操作可参考前述图2-5所示实施例中第一设备侧的对应操作的详细处理过程,如步骤s110、s120、s140和s150的详细处理过程,此处不再逐一赘述。

根据本申请实施例2提供的传输设备200,由于将目标数据流的数据包分散到不同的物理链路发送而不是集中到一个物理链路发送,可以有效利用不同物理链路所提供的带宽,从而降低丢包率。

以下是本申请实施例根据本申请实施例1,本申请实施例2提出的一种通信设备300,如图7所示,在该实施例中,该通信设备300包括:通信单元310和处理单元320。

通信单元310,用于与其它设备通信,包括通过与发送设备之间的多个物理链路接收所述发送设备发送的目标数据流的数据包,所述目标数据流的每个数据包均携带主序列号,且所述发送设备发送的所述目标数据流的数据包的主序列号连续。还可以用于收发控制消息(如接收启动通知)、建立与第一设备之间的物理链路等。通信单元310所能够进行的各具体操作可参考前述图2-5所示实施例中第二设备侧的对应操作的详细处理过程,如步骤s110、s120、s140、s201、s205和s206的详细处理过程,此处不再逐一赘述。

处理单元320,用于根据通信单元310接收的所述目标数据流的数据包的主序列号对接收的所述目标数据流的数据包进行排序。具体可以用于根据接收的所述目标数据流的数据包的主序列号和子序列号组合所述目标数据流,如,对所述目标数据流进行乱序检测,对于发生乱序的数据包,将该数据包加入重排序缓冲区,对于没发生乱序的数据包,通过通信单元310转发该数据包,或将该数据包收往操作系统协议栈。处理单元320的所能够进行的各具体操作可参考上述图2-5所示实施例中第二设备侧的对应操作的详细处理过程,如步骤s130、s160和s202-s204的详细处理过程,此处不再逐一赘述。

根据本申请实施例3提供的通信设备300,由于将目标数据流的数据包分散到不同的物理链路发送而不是集中到一个物理链路发送,可以有效利用不同物理链路所提供的带宽,从而降低丢包率。

根据本申请实施例1,本申请实施例4提供了一种通信设备1000。如图8所示,通信设备1000包括处理器1010和多个通信接口1020。

处理器1010,用于实施本申请实施例1提供的方法100中的第一设备执行的操作,其中,在与其它设备通信时通过通信接口1020与其它设备通信。处理器1010具体可以是中央处理器(centralprocessingunit,cpu),或者是特定集成电路(applicationspecificintegratedcircuit,asic),或者是被配置成实施本申请实施例的一个或多个集成电路。

如图8所示,通信设备1000还可以包括存储器1030。处理器1010和存储器1030之间可以通过总线完成相互间的通信。存储器1030,用于存放计算机操作指令,具体可以是高速随机存取存储器(randomaccessmemory,ram),也可以是非易失性存储器(non-volatilememory)。处理器1010具体可以执行存储器1030中存放的计算机操作指令,通过执行所述计算机操作指令使得通信设备1000执行上述实施例1所述的方法中第一设备所执行的操作,如,用于获取目标数据流的数据包,并采用负载均衡的方式通过所述多个通信接口中的至少两个通信接口对应的物理链路向所述接收设备发送所述目标数据流的数据包,发送的所述目标数据流的每个数据包均携带主序列号,发送的所述目标数据流的数据包的主序列号连续,所述主序列号用于所述接收设备对接收自不同物理链路的属于所述目标数据流的数据包进行排序。在具体实现时,存储器1030可以包括获取模块1031和通信模块1032,分别存储用于实现图6所示的获取单元210和通信单元220的功能。相应地,处理器1010具体通过执行获取模块1031中的指令实现获取单元210的功能并通过执行通信模块1032中的指令实现通信单元220的功能。上述通信设备1000中的各单元所能够进行的各具体操作可参考上述图2-5所示实施例中第一设备侧的对应操作的详细处理过程,此处不再逐一赘述。

根据本申请实施例4提供的通信设备1000,由于将目标数据流的数据包分散到不同的物理链路发送而不是集中到一个物理链路发送,可以有效利用不同物理链路所提供的带宽,从而降低丢包率。

根据本申请实施例1,本申请实施例5提供了一种通信设备2000。如图9所示,通信设备2000包括处理器2010和多个通信接口2020。

处理器2010,用于实施本申请实施例1提供的方法100中的第二设备执行的操作,其中,在与其它设备通信时通过通信接口2020与其它设备通信。处理器2010具体可以是cpu,或者是asic,或者是被配置成实施本申请实施例的一个或多个集成电路。

如图9所示,通信设备2000还可以包括存储器2030。处理器2010和存储器2030之间可以通过总线完成相互间的通信。存储器2030,用于存放计算机操作指令,具体可以是ram,也可以是非易失性存储器。处理器2010具体可以执行存储器2030中存放的计算机操作指令,通过执行所述计算机操作指令使得通信设备2000执行上述实施例1所述的方法中第二设备所执行的操作。在具体实现时,存储器2030可以包括通信模块2031和处理模块2032,分别存储用于实现图7所示的通信单元310和处理单元320的功能。相应地,处理器2010具体通过执行通信模块2031中的指令实现通信单元310的功能、并通过执行处理模块2032中的指令实现通信单元310的功能。上述通信设备1000中的各单元所能够进行的各具体操作可参考上述图2-5所示实施例中第二设备侧的对应操作的详细处理过程,此处不再逐一赘述。

根据本申请实施例5提供的通信设备2000,由于将目标数据流的数据包分散到不同的物理链路发送而不是集中到一个物理链路发送,可以有效利用不同物理链路所提供的带宽,从而降低丢包率。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

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