用于生成、发送和接收网络编码(NC)快速UDP互联网连接(QUIC)分组的系统和技术的制作方法

文档序号:19542828发布日期:2019-12-27 16:39阅读:441来源:国知局
用于生成、发送和接收网络编码(NC)快速UDP互联网连接(QUIC)分组的系统和技术的制作方法



背景技术:

如本领域中已知的,存在提供遍历互联网的流传输集合的协议。一种这样的协议是快速udp互联网连接(quic),其可以建立在udp(用户数据报协议)之上。

还已知的是,已经尝试将前向纠错(fec)并入到quic协议中。一种quicfec协议利用构建在网络的传输层中的单个xor恢复分组方法。然而,这种方法的一个问题是分组丢失是高度相关的,因此即使发生丢失时,fec分组的很大一部分(在某些情况下约为70%)无法恢复任何内容。对于http业务,已经发现简单地重新发送最早的未决分组(即,在某一时间段之后,服务器重传未确认的分组)的方法提供了比发送xorfec分组更优的性能。此外,在网络传输层中的集成导致难以对fec进行改变。因此,现有的quicfec方法不足以用于实时应用,例如,利用web实时通信(webrtc)协议的应用。



技术实现要素:

本文所描述的是针对网络编码(nc)快速udp互联网连接(quic)协议的概念、系统、设备和技术。根据这样的技术生成的分组与quic兼容。这可以使用下面将要描述的两种技术中的任一种或其组合来实现。另外,本文所描述的概念、系统、设备和技术可以与前向纠错(fec)技术以及相关的设备和系统一起使用。

在第一技术中,将网络编码应用于已经加密的(或“经密封的”)的quic分组。即,整个quic分组被编码。

在第二技术中,可以将quic帧再构造为所谓的“打包帧”,并且将网络编码应用于“打包帧”以用于生成所谓的“编码帧”,其中每个编码帧具有与一个quic分组的有效载荷相对应的大小。

总的来说,对于给定的多个quic帧,生成称为编码帧的新的帧。即,不是按照现有技术将这种多个帧放入quic分组中,而是生成所谓的编码帧。编码帧包含:原始quic帧,其被级联并填充(例如,零填充)到固定大小并使用网络编码编解码器进行编码;多个位,其表示(在填充之前)编码帧报头中的原始长度;以及系数向量(即,包括表示在网络编码中使用的编码系数的信息的向量)。

在实施例中,系数向量也可以被认为是编码帧报头的一部分。在可以使用所谓的显式反馈的情况下,编码帧中还包括编码帧报头中的编解码器的反馈。在使用所谓的推断反馈的情况下,编码帧报头中不包括编解码器的反馈。编码帧可以包含或不包含fec数据。

当然,也可以将系数向量认为是尾部的一部分。将系数向量放在尾部中。

在实施例中,编解码器的反馈被提供为解码器基于已经能够对其进行解码的分组而生成的元数据。基于该反馈,编码器可以关闭/缩小其窗口。在推断方法中,基于quicack生成编解码器的反馈。

得到的编码帧的大小可以是最大quic分组有效载荷大小。因此,当编码帧包括在分组中时,将没有其他quic帧适合。该分组被提供给quic处理器(即,能够根据quic协议生成quic分组的处理器),该处理器将处理像任何其他分组一样的具有编码帧的如此构造的分组。

在接收侧,响应于客户端接收到包含编码帧的分组,使用网络编码编解码器对编码帧进行解码,由此恢复原始quic帧。然后传递原始quic帧以进行处理。如果尚未解码该帧,则该帧被缓冲,直到可以对其进行解码为止。

在实施例中,当不能对帧进行解码时,可以停止对整个分组的处理。在这种情况下,quic不会发送针对该分组的可能会触发从服务器重新发送的ack。

在另一方面,如果帧被缓冲但是存在对接收分组的确认,则未经修改的quic实现方式将尝试处理后面的分组,从而可能导致数据重新排序。

应该认识到,在根据本文所描述的概念操作的实施例中,当接收到具有经编码的quic分组作为有效载荷的udp分组时,必须首先对其进行解密。解密之后,可以确定数据是否可以被解码。如果仍无法完成解码,则未经加密的数据(其不再是分组,而是数据块)可以被缓冲。

本文所描述的一些概念和技术可以在quic内实现(即,该技术可以对quic而言在本地)。因此,这种技术有时在本文被称为“内部”技术,表示为了实现这样的技术,适配或修改现有的quic协议是必要的。然而,还应该认识到,本文所描述的一些概念和技术可以在quic外部实现(即,该技术不需要对quic而言在本地)。因此,这种技术有时被称为“外部”技术,表示不需要改变quic协议来利用这样的技术。应当理解,前述的内部技术和外部技术可以单独或组合使用(即,内部技术和外部技术可以针对同一分组或分组集合使用)。

附图说明

根据以下附图描述,可以更充分地理解前述特征,其中:

图1是根据现有技术quic协议的基线分组发送和接收生命周期的流程图;

图1a是常规quic分组的图;

图2是示出fecxor处理的缺点的分组序列的图;

图3是根据quic协议生成、发送和接收编码分组的过程的流程图;

图3a是由图3的过程产生的类型的说明性编码分组的图;

图3b是被配置为生成、发送和接收根据图3的过程生成的分组的系统的框图;

图4是用于生成、发送和接收编码分组的过程的另一实施例的流程图;

图4a是前向纠错(fec)生成器过程的流程图;

图4b是具有推断反馈的说明性网络编码(nc)编码帧的图;

图4c是具有显式反馈的说明性nc编码帧的图;

图4d是被配置为生成、发送和接收根据图4的过程生成的nc编码分组的系统的框图;

图4e是被配置为生成、发送和接收根据图3和图4的过程的组合生成的编码分组的系统的框图;

图5是具有可以是与图1a的常规quic分组相同或相似的结构的常规quic分组的框图;

图5a是具有显式反馈的经编码的(或重组帧的)quic分组的框图;

图5b是具有推断反馈的经编码的(或重组帧的)quic分组的框图;

图6是示出根据现有技术fecxor的在服务器与客户端之间的分组流的示例的序列;

图6a是示出根据quic网络编码(nc)fec协议的在服务器与客户端之间的分组流的示例的序列;

图7是用于流级别网络编码(nc)fec的分组的图,其中示出了数据被划分为相等大小的块并且被打包到具有单个流帧的帧中;

图7a是用于流级别ncfec的分组的图,其中示出了数据被划分为相等大小的块并且被打包到具有一对流帧的帧中;以及

图8是根据ncquic协议的通信系统的框图。

具体实施方式

在描述针对具有网络编码(nc)前向纠错(fec)的快速udp互联网连接(quic)协议的概念和技术以及相关设备和系统之前,先解释一些介绍性概念和术语。

如本文所使用的,术语“分组”通常指代通过网络发送的数据单元。应该认识到,存在不同类型的分组,并且每种不同类型的分组可以具有特定结构。

例如,“用户数据报协议(udp)分组”(或更简单地为“udp分组”)是公知的并且包括控制信息(例如,网络地址、端口号序列信息等),该控制信息典型地包括在分组的称为报头的部分中。控制信息也可以包括在尾部中。

在另一方面,“quic协议分组”(或更简单地为“quic分组”)在udp分组的内部(即,在udp分组的有效载荷部分内)行进。因此,quic分组被定义为可以由quic接收器解析的形式正确的udp有效载荷。quic分组的大小典型地与具有mtu(最大传输单元)大小的udp分组的有效载荷的大小相对应(参见https://datatracker.ietf.org/doc/draft-ietf-quic-transport/?includetext=1)。因此,quic分组的结构不需要在分组报头中包括任何地址或端口号(因为该信息已经包括在udp分组报头中)。quic分组的内容在https://datatracker.ietf.org/doc/draft-ietf-quic-transport/?include_text=1处指定。quic分组包括有效载荷部分以及其他,该有效载荷部分包括用户或应用数据。该数据可以被组织为一个或多个自识别帧的序列。quic分组的有效载荷部分是经加密的。

分组可以由“帧”组成。通常,帧可以被认为是其自身的分组有效载荷的分段。在分组的有效载荷内的不同的帧可以包含不同的信息。因此,有时参考帧中包括的信息的类型来指代帧。例如,“应用数据帧”(或更简单地为“数据帧”或“流帧”)包括数据(即,流帧或数据帧是包括(或“携带”)应用数据的一个或多个区段的帧)。数据控制帧(或更简单地为“控制帧”)可以包含控制信息(例如,协议数据)。例如,“ack帧”(其包含确认相关的信息)是一种类型的控制帧。

应该认识到,在某些实例中,帧可以部分地包括其他帧。还应该认识到,帧可以包含多种不同类型的数据/信息。因此,例如,在一些实例中,帧可以包括应用数据和控制信息两者。例如,当帧由具有完全不同的帧类型的其他帧组成时(例如,帧可以由数据帧和控制帧两者组成),就可以发生这种情况。

如本文所使用的,术语“经编码的quic分组”(或更简单地“编码分组”)指代已经对其至少一些部分应用了网络编码的quic分组。例如,并且如下面将进一步详细解释的,在一些情况下,整个quic分组被编码(例如,参见图3a)。在其他情况下,仅处理quic帧(即,quic分组的有效载荷部分)而不是处理整个分组(例如,参见图4b、图4c、图5b、图5c)。

因此,存在至少两种不同类型的经编码的quic分组,每种由不同的技术形成。

一种类型的经编码的quic分组被称为“外部编码的quic分组”,表示已经对其应用了网络编码的quic分组(其包括所有有效载荷报头和分组部分)。形成外部编码的quic分组的技术有时被称为分组级别编码,因为在这种方法中,编码是对用于形成quic分组的协议的输出执行的。换言之,可以说用于提供外部编码的quic分组的技术对udp分组的有效载荷执行编码,其中udp分组有效载荷是quic分组。

第二种类型的经编码的quic分组被称为“内部编码的quic分组”,表示具有已经对其应用了网络编码的有效载荷的quic分组。因此,与外部编码的quic分组相反,在内部编码的quic分组中,与对整个分组进行编码相反,使用了其中仅对quic分组有效载荷进行编码的技术。因此,该技术有时被称为帧级别编码。

如本文所使用的,术语“quic帧”指代在quic分组的有效载荷部分中的帧。

根据本文所描述的概念和技术,可以将quic帧“再构造”为所谓的“打包帧”。

可以对这样的打包帧应用网络编码技术来生成编码帧。因此,quic帧被一起分组到打包帧中以装填quic分组有效载荷,并且编码帧指代通过将网络编码应用于打包帧而生成的帧。因此,编码帧可以包含原始数据,并且是原始数据帧的网络编码组合(即,编码帧可以包括来自若干不同quic分组的帧中的数据——例如,编码帧=经编码的分组1帧+经编码的分组2帧)。可替代地,编码帧可以是用于前向纠错的额外帧。因此,编码帧可以包含提供给接收器的新信息,或者可以是fec数据。

总的来说,本文公开了用于根据快速udp互联网连接(quic)协议来生成和接收编码分组的两种技术。在第一技术中(下面结合图3示出并描述,其中所得到的编码分组具有例如图3a中示出的形式),编码是在quic外部进行的。如上面所指出的,由于该技术是在quic外部进行的,因此有时被称为“外部”技术;即,不一定需要对用于形成quic分组的现有过程进行任何改变。当然,应该认识到,如果对用于生成quic分组或quic帧的过程进行了更改,则仍然可以使用该技术。

在第二技术中(在图4中示出,其中所得到的分组具有例如图4b、图4c或图5a或图5b中任一个中示出的形式),编码是在quic内部进行的;即,该技术的实现要求对用于形成quic帧和/或分组的常规过程进行一些改变。如上面所指出的,由于该技术是在quic内部进行的,因此有时被称为“内部”技术。

现在参考图1,示出了根据常规quic协议操作的系统的基线分组发送和接收生命周期的流程图。因此,图1示出了根据具有公共报头的常规quic协议(例如,如图1a和图5中所示)的处理。

现在参考图1a,现有技术quic分组500包括公共报头501、密码签名502(其也可以被称为密码签名报头502)和有效载荷504。公共报头501可以包括字段,例如,公共标志字段、连接id字段、版本信息字段、多样化随机数(nonce)字段以及标识分组号的字段。密码签名报头502可以包括用于解密分组的信息。有效载荷字段504可以包括分组的数据有效载荷。数据分组的有效载荷包含帧的序列。数据有效载荷504可以在传输之前被加密。在实现基于xor的fec的现有技术系统中,fec组号可以包括在公共报头501中。

现在参考图2,在现有技术quicudp分组910a-910d的序列之后是前向纠错(fec)分组912。在利用基于xor运算的fec解决方案的常规quic应用中,对于分组的特定集合,计算有效载荷的异或总和,该总和在冗余fec分组中被发送。如果单个分组丢失,则可以从xor运算中使用的其余分组以及fec分组中恢复其内容。

然而,如果丢失了多于一个分组,当在xor运算中使用的其余分组中的一个由于基于帧的重传和基于分组的丢失也永久丢失时,接收器不可能重建丢失的分组。因此,多于一个的分组丢失将意味着fec分组对于重建丢失的分组将是无用的。

与图1和图2的现有技术(其分别生成并利用图1a的分组结构)相反,本文下面所描述的技术使得能够使用任意数量的fec分组。

例如,本文下面所描述的技术中的一种使得能够使用网络编码(nc)以生成包含用于前向纠错的信息的任意数量的分组(即,ncfec分组)。如将根据下面的描述变得显而易见的,可以使用下面描述的图3或图4的架构/技术来生成任意数量的fec分组。

因此,简单地说,当根据常规的quicfec协议进行操作时,如果仅丢失一个分组(例如,图2中的分组910d),则系统可以恢复信息——例如,通过发送分组910a-910c的总和(即,可以经由xor来完成恢复)。

然而,在丢失多个分组(例如,图2中的分组910b和910d)的情况下,则系统不能使用总和(即,xor)来恢复信息,因为该方案只可以恢复一个丢失的分组。即使重传丢失的分组的内容,情况也是如此,因为重传的数据将与最初计算xor时使用的分组不同。即,现有技术quicfec系统不是重传相同的分组(这将允许恢复信息),而是发送包含可重传的帧的新的分组。因此,当多个分组被丢弃时,分组的相同混合对于fecxor解码操作是不可用的。

因此,可以理解,该现有技术方法的问题在于,虽然丢失发生在分组级别,但是重传发生在帧级别。由于常规quic永远不会两次发送相同的分组,因此如果丢失了多于一(1)个分组,则xorfec会由于常规quic的基于帧级别的重传而没有帮助。

现在参考图3,示出了具有分组级别网络编码(nc)前向纠错(fec)的quic分组发送和接收生命周期的流程图。

在图3中示出的技术中,网络编码被应用于“经密封的”(即,经加密的)quic分组。即,在发送侧,在应用ncfec之前,执行加密过程以生成常规quic分组。相反,在接收侧,首先使用ncfec恢复分组,然后对分组进行解密。因此,可以将该技术描述为可以在quic的“外部”实现(即,该技术对quic而言不在本地)。

现在转到图3,发送侧处理根据分组级别网络编码(nc)前向纠错(fec)来生成诸如下面图3a中示出的分组之类的编码分组(即,外部编码的quic分组),该处理开始于新的流帧300和新的控制帧302被组合以生成具有公共报头306a和帧306b的分组306。执行加密操作308以提供具有公共报头部分306a和经加密(或密封)的部分310b的quic分组310。分组310被提供给生成编码分组的网络编码fec生成器312。

然后,提供分组(例如,具有图3a的形式的分组)以通过udp连接进行传输。应该认识到,在每n个分组之后发送一个或多个ncfec分组。显著地,如将在下面进一步描述的,在实施例中,n可以在传输期间改变。

还应该认识到,分组级别网络编码前向纠错使用显式反馈。在显式反馈方法中,客户端显式地发送答复从而指示接收到哪些分组。这种显式反馈出现在经编码的响应的报头中(例如,编解码器的反馈包括在编码分组的报头中)。即,当客户端向服务器发送经编码的分组时,编解码器的反馈也将包括在报头中,该反馈将由服务器在其答复中使用。服务器在它(即,服务器)生成进一步的经编码的分组时将使用该反馈。下面将结合图3a描述包括显式反馈的编码分组的示例。

应该进一步认识到,利用本文所描述的架构,任何数据修改都可以适用,包括数据/分组生成和数据丢弃。这使得可以将任何类型的fec算法处理添加到quic。因此,可以保持所有可能的技术开放以用于创建与fec兼容的编码分组。这种技术包括但不限于xor、完整rlnc和基于滑动窗口nc的分组生成。

在接收侧,在ncfec接收器/缓冲器322中接收udp传输分组,该ncfec接收器/缓冲器322利用fec重新构建分组以提供具有公共报头部分324a和经密封的部分324b的分组324。分组的经密封的部分在326处打开,以提供具有公共报头328a和帧328b(其为与帧306b相同的帧)的分组328。该分组被提供给接收分组处理机332,该处理机332将确认帧334提供回发送方。同样在330处,将确认帧提供给发送分组处理机314,该发送分组处理机314进而将信息提供给拥塞控制模块318和重传帧336。

鉴于本文所提供的描述,本领域普通技术人员现在将认识到,根据本文结合图3所描述的技术生成的分组可以在利用quic协议的实际系统中使用。此外,在阅读了本文提供的公开内容之后,本领域普通技术人员还应该认识到,例如,可以应用网络编码的不同方法以生成编码分组。例如,可以使用滑动窗口、完整网络编码、稀疏网络编码、系统编码或前述技术的组合。不同的方法可以使用不同量的数据来进行编码。滑动窗口使用对其应用了网络编码的分组的窗口以生成编码分组。滑动窗口也可以对一代(即,对一组分组)应用,或者可以是无代的(generationless)。完整网络编码技术对给定代中的所有分组进行编码。稀疏网络编码技术仅使用一代中的分组中的一些。系统编码方法首先发送原始分组,然后发送编码后的分组以用于擦除/纠错。

现在参考图3a,可以利用图3的处理生成的类型的编码分组340包括分组报头342、编码报头/系数向量344和quic分组348。分组报头342可以包括上面所描述的反馈信息。

现在参考图3b,响应于来自ncfecquic客户端358的请求,根据在图3中描述的发送侧技术,ncfecquic服务器350生成n个网络编码(nc)分组352,随后是一个或多个ncfec分组354。应该认识到,在每n个分组352之后发送一个或多个ncfec分组354。显著地,在实施例中,n可以在传输期间的任何时间改变或者可以是恒定的。n可以(或可以不)改变的方式取决于实施例的具体实现方式(例如,考虑到包括但不限于信道特性的许多因素)。分组352、354经由udp连接被发送到ncfecquic客户端358,该ncfecquic客户端358包括能够根据图3的技术进行操作并且因此能够解析编码分组(例如,图3a的包括quic分组的编码分组)的接收器。如结合图3所指出的,在每n个nc分组352之后发送一个或多个ncfec分组354。在一个实施例中,经由xor逻辑来实现fec。

现在参考图4,示出了具有帧级别编码的分组发送和接收生命周期的另一实施例的流程图。应该认识到,虽然图4示出了滑动窗口网络编码技术,但是也可以使用其他网络编码技术。此外,虽然在使用滑动窗口技术的情况下,通常不使用显式反馈。然而,应该理解,在其他实施例中,使用其他类型的网络编码(即,除了滑动窗口技术之外的网络编码)可以是优选的(或甚至是必要的),在这种情况下,利用显示反馈可以是优选的(或甚至是必要的)。

在图4中示出的技术中,(例如,在fec生成器中的)再构造用于将quic帧捆绑(或分组)到对其应用了网络编码(nc)以生成编码帧(即,nc编码帧)的一个quic分组有效载荷大小的帧(本文称为打包帧)中。可以认为该技术是在quic内部实现的(即,该技术对quic而言在本地)。因此,如上面所指出的,图4的技术在本文有时被称为内部技术(因为该技术在quic处理的内部)。

如将在下面描述的,在实施例中,图4的说明性技术生成具有编解码器报头(例如,系数向量和来自编解码器的某些其他编解码器相关的信息)的nc编码帧(图4b、图4c、图5a、图5b)。即,将系数向量构建到帧中。因此,图4的技术可以生成包括帧的分组,该帧具有图4b中示出的形式(推断反馈)或图4c中示出的形式(显式反馈)。

在反馈的情况下,当使用滑动窗口编解码器时,有必要知道在发送方一侧哪些经编码的帧由客户端接收,因为在对要发送的下一帧进行编码时要使用该信息(例如,如果先前的帧未被接收,则可以在对下一帧的编码中包括这些帧)。

为了获得这种反馈,存在两种方法。在称为显式方法的第一方法中,客户端显式地发送答复从而指示接收到哪些帧。如上面所讨论的,这种答复出现在经编码的响应的报头中。即,当客户端向原始服务器发送经编码的帧时,报头中还包括编解码器的反馈,该反馈将在服务器的答复中使用。

在称为推断方法的第二方法中,在原始发送方中,存储了在哪个分组中发出了哪个经编码的帧。然后,依赖于quic分组确认系统,该系统会告知是否接收到分组。如果接收到分组,则基于关于哪个分组中发出了哪个帧以及接收到了哪个分组的知识,来重新创建客户端将提供的反馈。

因此,显式方法要求客户端每次在接收到经编码的帧时向服务器发送包含反馈的响应。因为反馈在经编码的帧的报头部分中行进,所以响应必须包含一个这样的经编码的帧(其可以包含或可以不包含附加数据,即,在一些实施例中,经编码的帧可以仅包含反馈而不包括任何有意义的数据)。如果服务器到客户端和客户端到服务器的信道具有相似或基本相同的业务量(例如,在p2p文件共享应用中),则该技术很好地工作。

图3与图4的技术之间的一个不同之处在于,在图3的方法中,quic不了解编码分组(并且如上面所指出的,由于编码发生在密封之后,因此在quic外部实现)。

另一方面,在图4的技术中,生成并发送有效的quic帧(即,能够经由quic处理的帧),并且在密封之前进行编码。

如将根据下面的描述变得显而易见的,在图4的技术中,发送方要求反馈。可以以两(2)种方式生成这种反馈:1)经由使用quicack帧的隐式/推断技术,并且基于生成编解码器(例如,kodo编解码器)可以使用的反馈向量;以及2)通过显式地发送反馈向量。

如上面结合图1-1a所解释的,应当理解,在现有技术方法中,首先对分组进行加密(或“密封”),然后利用fec码(即,xorfec码)对分组进行编码。此外,在现有技术方法中,对于每个分组使用相同的码。另外,在现有技术方法中,quic也不知道额外的fec分组。

然而,在图4中示出的技术中,首先使用网络编码对quic帧进行编码(即,在内部对分组进行编码),然后对分组进行加密(或密封)。

当然,应该认识到,利用本文所描述的架构,可以保持所有的可能性开放以用于创建编码分组,包括创建与fec兼容的编码分组。因此,基于xor、完整rlnc、滑动窗口nc的分组生成都是可能的。还应该认识到,虽然图4示出了滑动窗口技术,但是也可以使用其他网络编码技术。此外,虽然在使用滑动窗口技术的情况下,通常将不使用附加的fec分组,但是应该理解,在其他实施例中,使用其他类型的网络编码(即,除了滑动窗口技术之外的网络编码)可以是优选的(或甚至是必要的),在这种情况下,利用附加的fec分组可以是优选的(或甚至是必要的)。

现在转到图4,示出了用于生成分组的发送侧过程,该分组具有包括反馈(例如,如图4c和图5a中示出的显式反馈或如图4b和图5b中示出的隐式反馈)的nc编码帧,其中图4的特定架构/技术示出了推断反馈。该过程开始于将数据分组到流中,使用流帧来转发流,并且将新的流帧400和新的数据控制帧402提供给编码生成器(此处示出为fec生成器404)。

编码生成器404接收一个或多个quic帧,以对quic帧404a进行再构造以提供分组帧,然后在编码器404b中将该分组帧编码为一个分组大小的编码帧406。应该认识到,编码帧406可以包含一个或若干个quic帧。

简要地转向图4b,说明性编码帧406包括:内部编码帧报头(“内部cfh”)452,该内部编码帧报头452包括原始长度部分(即,表示诸如帧400、402之类的原始帧(在诸如零填充之类的填充之前)的长度的多个位);外部编码帧报头(“外部cfh”)454,该外部编码帧报头454包括系数向量;以及经编码的数据部分450,该经编码的数据部分450包括一个或多个quic帧451。因此,每个编码帧具有至少一个内部cfh和一个外部cfh。

在替代实施例中,应该认识到,包含在内部cfh和/或外部cfh的部分内的数据可以分布在帧的其他部分中。因此,在实施例中,编码帧406可以至少包括:第一帧部分,其具有包括一个或多个quic帧和原始长度的经编码的数据;以及第二帧部分,其具有系数向量(即,包含在网络编码中使用的编码系数的向量)。应该认识到,原始长度必须包括在编码帧的经编码的数据部分内,否则当从多个分组重建数据时,将不可能知道将哪个原始长度应用于哪个分组。还应该认识到,在一些实施例中,可以将系数向量构建到编码帧中,并且系数向量可以是编解码器报头的一部分(或全部)。

还应该认识到,quic帧被再构造为打包帧。可以对这样的打包帧执行滑动窗口网络编码来生成编码帧。因此,编码帧可以包含去往接收器的新信息,或者编码帧可以是fec(前向纠错)帧/数据。

在一些实施例中,可以使用(例如,在kodo库中可用的类型的)滑动窗口编码器。在实施例中,滑动窗口编码器可以以以下方式操作:首先,向编码器馈送新的数据(例如,新的流帧,并且特别是已经被再构造以形成打包帧的流帧),并且响应于此而增加滑动窗口编码器的窗口大小;发送方将分组发送给接收器,并且在接收到该分组后,接收器将ack分组发送回发送方;第二(在使用推断反馈的情况下),根据ack生成滑动窗口反馈——例如,以二进制向量表示的ack(当然,应该认识到,在显式反馈的情况下,由于接收器显式地发送回反馈,因此不一定需要生成反馈);第三,滑动窗口编码器接收反馈,并且响应于此可以减小滑动窗口的大小。因此,该技术被称为滑动窗口技术,因为新的分组被添加到编码器并且旧的分组被移除。

再次返回图4,应该认识到,fec生成器404消耗数据并且异步地生成经编码的数据。如果在决策框408中确定允许发送,则形成具有公共报头部分410a和帧部分410b(例如,具有至少一个内部编码的帧)的分组410。

然后,对帧进行加密(即,“密封”)412,并且在输出处提供具有公共报头部分410a和经密封的部分414b的分组414,以用于通过udp连接传输到客户端。发送分组处理机416接收与所发送的分组相关的信息。这样的信息可以例如是所发送的分组的副本。

可以通过图4的过程形成的分组414的示例在图5a和图5b中示出。

在接收(或客户端)侧,经由过程432接收并打开(即,解密)分组430以揭露编码帧434。在接收到的分组430与所发送的分组414相同的情况下,编码帧434将与编码帧406相同。编码帧434被提供给fec接收器436,该fec接收器436对帧进行缓冲436a、(例如,利用网络编码)解码436b、以及解帧436c以提供解码帧438。在接收到的分组430与所发送的分组414相同的情况下,帧438将与帧400(如果包括帧402则与帧402)相同。

接收分组处理机442将确认444提供回发送侧。确认440也被发送到发送侧发送分组处理机416。显著地,发送分组处理机416不需要发起重传帧449沿着路径447的重传。发送分组处理机416还向拥塞控制模块420提供信息,这反过来有助于决定是否允许发送。

显著地,通过消除从发送分组处理机416到重传帧过程449的反馈447的需要,系统禁用了流(数据)帧的重传,因为在图4的技术中,fec生成器404处理丢失的分组。

这与现有技术方法相反,如上面结合图1-2所描述的,现有技术方法对帧进行重传(即,在图1的现有技术方法中,系统发送包含可重传的帧的新的分组)。

应该认识到,滑动窗口网络编码编码器是已知的。通常,在这种编码器中使用的窗口大小可以在1到n的最大窗口大小之间变化,其中n在理论上可以是无限大的数字。本领域普通技术人员将认识到如何在实际系统中选择n的值。

在使用如图4中描述的滑动窗口网络编码技术的情况下,要求窗口大小管理策略。特定的窗口大小管理策略的选择将至少部分地取决于采用滑动窗口网络编码技术的系统的特定特性。在一些情况下,期望增加在滑动窗口编码器中使用的窗口的大小,而在其他情况下,期望减小窗口大小。

在图4的示例实施例中,可以使用以下策略。如果窗口大小小于预定义的极限wmax,并且不期望发送具有接下来要生成的编码帧的附加fec数据,则允许增加窗口大小。如果允许增加窗口大小并且存在可用的新的打包帧,则增加窗口大小以容纳这种新的打包帧。

通常,期望将窗口大小保持为较小的以减少计算开销所要求的时间量。因此,一旦发送方确定特定的打包帧已经到达接收器(意味着接收器能够解码提供给其的编码帧中的至少一些以便获得该打包帧),则该打包帧可以从窗口中移除,由此减小了窗口的大小。

在一些实例中,可能会将窗口大小减小到值一(即,窗口大小=1)。在实施例中,将窗口大小设置为等于值一(例如,将预定义的极限wmax设置为一)可能是优选的或甚至是必要的。不管窗口大小如何达到一,在这种情况下,fec生成器404仅在单个打包帧上操作。由于要求至少两(2)个帧来执行网络编码,因此这意味着fec生成器提供不具有任何编码的帧(即,编码帧406实际上不包含任何编码)。因此,实际上,打包帧被发送而没有任何修改。

在本文结合图4所描述的说明性技术中,如果往返时间(rtt)为使得接收确认比创建新的打包帧更快(例如,rtt接近零),则滑动窗口的窗口大小可以取值一(1)。此外,如果信道上的损耗大于或等于某个预先确定的百分比(例如50%),则窗口大小可以为一(1),因为在这种情况下可能期望将所有分组重复一次或若干次。然而,应该注意的是,在这种情况下,虽然窗口大小可能达到一或被设置为一,但取决于诸如rtt值之类的其他因素,窗口大小并不需要假定为值一。

在信道上的损耗大于或等于50%,并且rtt相对较长,使得接收ack并不比创建新的打包帧更快的情况下,可能期望利用大于一的窗口大小(即,使得编码分组被发送)。通常,窗口大小将随信道的随机性而趋于增加(不可预测的损耗数量越多,rtt越长),并且窗口大小将随着网络变得更加稳定且可预测而趋于减小。

应当理解,在上述因素或其他因素(例如,包括但不限于特定应用/系统的要求/限制、rtt、信道损耗以及其他信道和系统特性)的任意组合的情况下,窗口大小可以假定为值一(1)。如上面所指出的,也可以将窗口大小简单地设置为一(例如,在已知rtt接近于零的情况下)。

鉴于以上,应该认识到,找到优选的(或者理想的、最佳的)窗口大小管理策略是重要的。取决于特定应用的要求,可以使用不同的窗口大小调整策略(即,与上面所描述的不同),在这种情况下,窗口大小可能以与上面所描述的示例不同的方式达到(或被设置为)值一(1)。

不管窗口大小如何达到一,当存在为一的窗口大小时,不会对分组进行编码。因此,在这种情况下,系统可以生成一些或甚至所有未经编码的分组并与其一起操作。

鉴于本文所提供的描述,本领域普通技术人员现在将认识到,根据本文结合图4所描述的技术生成的(无论是编码的还是未经编码的)分组都可以在利用quic协议的实际系统中使用。此外,在阅读了本文所提供的公开内容之后,本领域普通技术人员还应该认识到,例如,可以应用网络编码的不同方法(即,与图4和图4a中示出的滑动窗口技术不同)来生成编码帧。例如,除了滑动窗口之外,还可以使用完整网络编码、稀疏网络编码、系统编码或前述技术中任一项的组合。不同的方法可以使用不同量的帧来进行编码。滑动窗口使用对其应用了网络编码的帧的窗口以生成编码帧。滑动窗口也可以对一代(即,对一组帧)应用,或者可以是无代的。完整网络编码对给定代中的所有帧进行编码。稀疏网络编码方法仅使用一代中的帧中的一些。系统编码方法首先发送原始帧,然后发送编码后的帧以用于擦除/纠错。

现在参考图4a,其中图4的相同元素被提供有相同附图标记,示出了由fec生成器404执行以使用滑动窗口技术生成(例如,图4b、4c中所示的类型的)编码帧的过程。在fec生成器404过程中,新的流帧以及可能的新的数据控制帧被提供作为quic帧,并且如处理块480中示出地被再构造以形成打包帧482。在一个说明性的再构造过程中,原始quic帧被视为字节阵列并被组合(例如,级联在一起)。如果从这种组合操作得到的数据的量不足以装填预定义的打包帧大小(在一些实施例中,该预定义的打包帧大小理想地等于quic分组帧的大小),则可以将数据(例如,用零)填充为达到所期望的大小。再构造过程产生打包帧482,然后将该打包帧482添加到滑动窗口缓冲器,如处理框484中示出的。

在处理框484中,将打包帧与来自反馈生成器486的信息组合,并且将一个或多个帧提供给滑动窗口编码器,如处理框488中示出的。在操作中,向滑动窗口网络编码的编码器连续馈送帧或分组,如适合于架构的。在每个新的quic数据400上,滑动窗口网络编码窗口增加,并且在成功递送的帧或分组上,如适合于架构的(例如,根据反馈生成器486),减少窗口(即,从缓冲器中移除递送的打包帧)。

滑动窗口编码器488将滑动窗口网络编码应用于打包帧并且生成编码帧406。因此,对滑动窗口缓冲器中的打包帧执行滑动窗口网络编码以生成编码帧406。

现在参考图4c,说明性编码帧456包括内部编码帧报头(cfh)452’和外部cfh454’。提供具有显式反馈的编码帧456,因此外部cfh包含反馈458和nc系数向量459。内部cfh452’包含nc报头(即,与表示诸如帧400、402之类的原始帧(在零填充之前)的原始长度的多个位相对应的原始长度部分)。编码帧456还包括经编码的数据部分450’,该经编码的数据部分450’包括一个或多个quic帧451。应注意,原始长度必须与quic帧的经编码的块一起被包括,以便允许适当的解码(否则,在根据多个分组重建原始数据时,将不可能知道哪个原始长度与哪个分组相关联)。因此,每个编码帧具有一个内部cfh和一个外部cfh。

编码帧456因此在内部cfh452’中包括编解码器的反馈。这与利用推断反馈的编码帧406(图4b)形成对比(并且因此编解码器的反馈没有包括在编码帧406的内部cfh452中)。

原始长度系数向量和编解码器反馈可以各自包括在编码帧的单独部分或帧中。因此,在实施例中,编码帧可以包括:第一帧部分,其具有包括一个或多个quic帧和原始长度的经编码的数据;第二帧部分,其具有系数向量;第三帧部分,其包括编解码器反馈。

如上面所解释的,quic帧被再构造为打包帧。对这些打包帧执行滑动窗口网络编码以生成编码帧。因此,编码帧可以包含去往接收器的新信息,或者编码帧可以是fec(前向纠错/擦除校正)帧/数据。

现在参考图4d,响应于来自ncfecquic客户端466(即,能够接收和划分上面结合图4-4c所描述的类型的分组/帧的客户端)的请求,ncfecquic服务器460生成n个nc分组462a-462n。分组462中的每一个分组可以与上面结合图4b和/或图4c所描述的分组相同或相似(即,作为quic分组的一部分提供的编码帧)。nc分组462a-462n经由udp连接从ncquic服务器460发送到ncquic客户端466。

应该认识到,在图4的滑动窗口方法中,没有显式地创建fec分组(因为纠错是由编解码器(例如,fec生成器404)基于提供给其的反馈来处理的)。

然而,应当理解,在帧级别编码的其他实施例(即,使用除了滑动窗口技术之外的网络编码技术的实施例)中,可以使用附加的fec分组。

应当理解,上面结合图3和图4所描述的技术可以被单独或组合使用。

现在参考图4e,示出了利用使用上面结合图3和图4两者所描述的技术的组合生成的分组操作的系统的示例。特别地,首先使用帧级别编码技术(例如,图4中示出的内部技术)来生成(例如,图4b、图4c中示出的类型的)编码帧。然后,这样的编码帧经历分组级别编码技术(例如,图3中示出的外部技术)来生成上面结合图3a所描述的类型的帧。

当然,应该认识到,在实际系统中的流程将比图4e中示出的流程显著地更为复杂。quic由流组成。客户端发送请求,在客户端与服务器之间创建新的流(这是在一个udp连接内的虚拟连接)。流正在生成流(数据)帧,该流(数据)帧被给予生成编码帧的编码生成器。编码帧在quic分组中行进。

响应于来自ncquic客户端466’的请求,ncquic服务器460’根据图4中描述的发送侧技术生成n个(这里为4个)分组462。因此,分组462中的每一个包括编码帧作为有效载荷,如上面在图4b中所描述的。根据图3中描述的发送侧技术,分组462之后是ncfec分组472。分组462、472经由udp连接被发送到ncquic客户端466’。如上面结合图3所指出的,在每n个分组462之后发送fec分组472。

现在参考图5,可以与图1a的分组500相同或相似的现有技术quic分组500’包括公共报头501’、密码签名502’和有效载荷504’。公共报头501’可以包括字段,例如,公共标志字段、连接id字段、版本信息字段、多样化随机数字段以及标识分组号的字段。密码签名报头502’可以包括用于解密分组的信息。有效载荷字段504’可以包括分组的数据有效载荷。数据有效载荷504’可以在传输之前被加密。

现在参考图5a,具有显式反馈的编码分组505包括公共报头506、密码签名报头508和编码帧507(即,分组505的虚线部分)。应该认识到,编码帧507可以与上面结合图4c所描述的编码帧456相同或相似。在该说明性实施例中,编码帧507包括外部编码帧报头(cfh)510、内部cfh512和有效的有效载荷514。外部cfh510包括反馈部分510a和系数向量510b。图5a中的分组可以例如通过诸如图4中示出的过程之类的过程来产生。

与图5a的编码分组相反,应当理解,现有技术quic技术使用相同的码(即,被组合的所有分组的直接总和)。因此,在现有技术quic技术中,quic分组不包括外部cfh,该外部cfh包括表示码的信息(由于在现有技术方法中码没有改变,因此在与quic一起使用的现有技术分组的任何报头中都没有任何要表示的内容)。

公共报头506可以与公共报头501’相同或相似,并且可以具有1到51个字节之间的长度。类似地,密码签名报头508可以与密码签名报头502相同或相似,并且可以具有12个字节的长度。当然,可以提供具有根据特定应用进行正确操作所要求的任何数量的字节的报头506、508。

外部cfh510可以是使用网络编码算法生成的前向纠错报头。在实施例中,外部cfh510可以包括信息,例如,关于帧的元信息(例如,类型id)以及(在显式反馈的情况下的)反馈。内部cfh512至少包括原始长度,该原始长度可以用于经由网络编码技术恢复分组。如上面所指出的,原始长度信息必须包括在编码帧的经编码的数据部分中。可以使用网络编码技术来例如恢复在目的地处未接收到的一个或多个quic分组。

外部cfh510被提供有足以保持一定量的信息的长度。在一个说明性实施例中,外部cfh510可以被提供有与用于生成外部cfh的分组、帧、流等的生成长度有关的长度。在任何应用中,外部cfh的特定长度均基于各种因素,包括但不限于实现网络编码的方式。在一些实施例中,可以使用无代滑动窗口技术,而在其他实施例中,可以使用其他网络编码技术。

生成长度是在一个编码器中分组在一起的分组或帧的数量。在完整nc的情况下,将编码应用于所有分组/帧,或者在稀疏nc的情况下,将编码应用于这些分组/帧的子集。例如,在将10个分组/帧分组在一起的情况下,生成长度=10。在无代滑动窗口的情况下,生成长度是未定义的,但是窗口指定了一起编码的分组或帧的组。因此,在一起编码10个分组/帧的情况下,窗口大小=10。在真正无代滑动窗口实现方式的情况下,窗口长度理论上可以在1到无穷大之间变化。

通常,考虑用于生成外部cfh的分组、帧、流等的生成长度g来选择内部cfh512的长度。内部cfh512可以包括关于上面所提到的网络编码方案的信息。例如,内部cfh512可以包括诸如编码系数之类的信息,或者可以在解码中使用的其他信息。在进行网络编码的情况下,仅必须收集足够的分组以便执行解码。因此,应该认识到,在滑动窗口的情况下,接收器不需要明确地区分fec和普通分组。

有效载荷514可以包括要由接收器接收的数据。在实施例中,有效载荷514的长度可以是quic有效载荷的长度减去内部chf报头510和外部chf报头512的长度。

现在参考图5b,可以通过诸如图4中示出的过程之类的过程产生的具有推断反馈的quic分组515例如包括公共报头516、密码报头518和编码帧517(即,分组515的虚线部分),该编码帧517可以与上面结合图4b所描述的编码帧406相同或相似。在该说明性实施例中,编码帧517包括外部cfh报头520、内部cfh报头522和有效的有效载荷524。

公共报头516可以与公共报头501’相同或相似。在说明性实施例中,公共报头516可以具有高达51个字节的长度(例如,在1到51个字节之间)。类似地,密码签名报头518可以与密码签名报头502’相同或相似,并且在一个实施例中可以具有高达12个字节的长度。

外部cfh报头520可以是使用网络编码技术生成的前向纠错报头。在实施例中,外部cfh报头520可以包括诸如系数之类的信息,该信息例如可以用于对网络编码算法求解。可以使用网络编码算法来例如恢复在目的地处未接收到的一个或多个quic分组。

在实施例中,外部cfh510可以具有2个字节的长度。在其他实施例中,可以使用少于或多于2个字节。内部cfh522可以具有考虑到用于生成外部cfh报头的分组、帧、流等的生成长度g而选择的长度。内部cfh522可以包括关于上面所提到的网络编码方案的信息。例如,内部cfh522可以包括诸如编码系数之类的信息,或者可以用于执行解码的其他信息。应该认识到,在滑动窗口的情况下,接收器不需要明确地区分fec和普通分组。

有效载荷524可以包括要由接收器接收的数据。在实施例中,有效载荷524的长度可以是quic有效载荷的长度减去外部cfh520和/或内部cfh522的长度。

图6和图6a是在客户端与服务器之间的分组流的示例,其示出了基于xor的fec与基于nc的fec之间的差异。图6和图6a示出了在同一fec组中发生多个分组丢失的情况下(可能被认为是现有技术方法的最坏情况的场景),如何利用网络编码技术来改进分组的传输。

现在转向图6,示出了根据现有技术quicfec协议的一个方面示出在服务器与客户端之间的分组流的示例的序列。

现在参考图6a,示出了根据基于网络编码(nc)的quic协议的一个方面的示出在服务器与客户端之间的分组流的示例的序列。如从使用本文所描述的技术(即,图3和图4的技术)的图6和图6a的比较可以看出的,传输完成的比现有技术方法更快。

然而,根据本文所描述的概念、系统和技术,通过使用较大的字段大小和多个等式发送网络编码分组,即使在丢失多个分组时也可以恢复期望的信息。

现在参考图7,用于流级别fec的示例分组(即,流级别编码的说明)包括一个或多个控制帧和流帧(流1帧)。流帧是从流中生成的。如图7中示出的,流1帧包括被划分成相等大小的块并打包到流帧中的网络编码数据。当然,应该认识到,使用相等大小的nc块不是必要的。相反,可以使用可变大小的nc块。

控制帧可以包括可以用于从流1中恢复丢失的分组的信息(例如,fec分组和/或网络编码系数)。在该示例中,控制帧可以与单个流相关联。

现在参考图7a,用于流级别fec的分组包括一个或多个控制帧和多个流帧,在该示例中示出了两个流(流1和流2)。每个流帧包括多个网络编码块。因此,可以将多个不同的流一起编码(即,可以使用内部流(intraflow)与简单地中间流(interflow))。

在该说明性实施例中,每个流帧包括被划分成相等大小的块并打包到流帧中的网络编码块。当然,应该认识到,使用相等大小的nc块不是必要的。相反,可以使用可变大小的nc块。

控制帧可以包括可以用于从流1和/或流2中恢复丢失的分组的信息(例如,fec分组和/或网络编码系数)。在该示例中,fec控制帧可以与多于一个流相关联。在实施例中,相同的fec和网络编码系数可以用于恢复多个流中的错误。在另一实施例中,fec控制帧块可以具有fec和网络编码系数的多个集合。每个集合可以用于解码和恢复相应的流中的错误。

现在参考图8,多个节点1102a-1102n通过网络1110耦合。以节点1102a作为节点1102b-1102n的代表,节点1102a包括ncquic服务器1104a和ncquic客户端1106a。节点中的每一个都能够生成并接收根据上面结合图3和图4所描述的技术中的任一种或组合所生成/接收的编码分组。

已经描述了用于说明本专利主题的各种概念、结构和技术的优选实施例,对于本领域普通技术人员而言现在将变得显而易见的是,可以使用并入了这些概念、结构和技术的其他实施例。另外,本文所描述的不同实施例的元素可以被组合以形成上面未具体阐述的其他实施例。

因此,认为本专利的范围不应当限于所描述的实施例,而应该仅由所附权利要求的精神和范围来限定。

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