处理传输控制协议会话中的分组的系统和方法与流程

文档序号:14879853发布日期:2018-07-07 09:26阅读:134来源:国知局

本申请涉及计算机领域,更具体地涉及处理传输控制协议会话中的分组的系统和方法。



背景技术:

网络设备使用一个或多个通信协议在网络上进行通信。例如,在诸如使用因特网协议(ip)的分组网络上使用的通信协议之一是传输控制协议(tcp)。tcp被用于确保发起(源)网络设备传送的所有字节都在目的地网络设备处被接收。tcp业务流被分成多个段,每个段包括来自数据流的数据块和tcp报头。在一些网络中,解析数据分组中的tcp段的网络设备有时实现在数据流的两个方向(例如,接收路径和发送路径,tcp会话中的两个流)上的数据分组被互锁的位置中。例如,解析tcp段的网络设备可以实现在客户端或服务器上,或者可以与tcp业务流一起实现。



技术实现要素:

一种设备可以包括一个或多个存储器以及与所述一个或多个存储器通信耦合的一个或多个处理器,用于:接收传输控制协议(tcp)会话的多个数据分组;确定tcp会话的包括同步确认(syn-ack)标志的特定tcp段已经在所述tcp会话的包括同步(syn)标志的对应tcp段之前被接收;将所述特定tcp段的序列号存储为用于所述tcp会话的流的初始序列号;以及基于用于所述流的所述初始序列号并且基于所述tcp会话的数据分组集合的一个或多个序列号来重组或重排所述数据分组集合。

一种由网络设备执行的用于处理tcp会话中的数据分组的方法,所述方法可以包括:接收多个数据分组;基于所述多个数据分组中的至少一个数据分组中的一个或多个值,针对所述tcp会话的一个或多个数据流的每个方向生成经修改的tcp状态机,所述至少一个数据分组包括tcp段;针对一个或多个标志来分析所述至少一个数据分组的所述tcp段,以在确定所述tcp会话的另一tcp段包括同步(syn)标志之前确定所述tcp段包括同步确认(syn-ack)标志;基于在确定所述tcp会话的另一tcp段包括syn标志之前确定所述tcp段包括syn-ack标志,将所述tcp段的序列号存储为用于服务器流的初始序列号;以及基于所述多个数据分组的集合的序列号,重组所述多个数据分组的集合,其中所述多个数据分组的集合的序列号小于相应方向的最后一个确认序列号。

一种非暂态计算机可读介质可以存储一个或多个指令,所述指令在由设备的一个或多个处理器执行时使所述一个或多个处理器:接收tcp会话的多个数据分组;确定tcp会话的包括syn-ack标志的特定tcp段已经在所述tcp会话的包括syn标志的对应tcp段之前被接收;将所述特定tcp段的序列号存储为用于所述tcp会话的流的初始序列号;以及基于用于所述流的所述初始序列号并且基于所述tcp会话的数据分组的集合的一个或多个序列号来重组或重排所述数据分组的集合。

附图说明

图1是被配置为生成本文描述的tcp状态机的网络设备的框图;

图2是如本文描述的用于处理tcp会话的方法的流程图;

图3是如本文描述的用于处理tcp会话的系统的图;

图4是图1、图3和/或图5的一个或多个设备的示例组件的图;以及

图5是与图3所示的示例处理相关的示例实现的图。

具体实施方式

示例实现的以下详细描述参考附图。不同附图中的相同附图标记可以标识相同或相似的元件。

tcp会话可以与各种状态相关联,诸如关闭状态、监听状态、同步状态、建立或稳定状态、关闭状态等等。网络设备可以监视tcp会话以基于与tcp会话相关联的业务来构建或重建tcp会话的状态。tcp会话的状态的重建(例如,模拟、确定等)可以被称为状态机、tcp状态机、有限状态机或类似术语。tcp状态机可能对检测tcp会话中的异常行为有用。例如,如果tcp会话执行从一个状态到另一个状态的转换,那么可以将该转换与tcp状态机进行比较,以确定该转换是否偏离tcp状态机的预期行为。

监视tcp会话并为tcp会话构建状态机的网络设备可能需要以与在客户端和服务器之间交换数据分组相同的顺序处理数据分组(例如tcp段),以正确地重建tcp会话的tcp状态。对于这样的系统,一个方向上的响应数据分组在另一个方向上的对应数据分组之前可能不被处理。这是因为对应数据分组可能是必需的,以便于目的地首先生成响应数据分组。然而,网络中传送的数据分组可能会被监控通信的任何网络设备无序地接收,从而降低了tcp监控的可靠性和性能,甚至会导致网络设备的功能的丧失。

本文描述的一些实现处理传输控制协议(tcp)会话中的分组,以针对与tcp会话相关联的数据流的每个方向生成经修改的tcp状态机。本文描述的一些实现可以针对tcp会话的每个数据流处理tcp段,使得无序地接收的tcp段不会导致tcp状态机故障。由于网络设备被配置为在tcp会话的一个方向上(其中所接收到的分组可能被无序地并且过早地接收到)处理、生成和存储用于数据分组的信息,所以tcp会话将不会引起错误,而没有在每个方向上生成经修改的tcp状态机的网络设备可能发生错误,并且在看到无序的分组时出现这些错误。因此,网络设备被配置为继续处理针对tcp会话接收到的数据分组,这使得网络设备能够不按顺序处理tcp会话的数据分组。以这种方式,网络设备更能容忍可能导致无序分组接收的网络干扰,这可以带来更高效的实现,因为网络设备不会导致错误和/或请求重传tcp会话中的已经发送的数据分组。

图1是本文描述的网络设备100的概况图。网络设备100是路由器、网关、防火墙、代理服务器、边缘设备等。如图1所示,网络设备100包括用于使用包括本领域已知技术的技术来接收和发送多个数据分组的多个端口102。端口102例如通过一个或多个总线来与一个或多个处理器104和一个或多个存储器106耦合。存储器106可以包括动态随机存取存储器(dram)、静态随机存取存储器(sram)、闪存和/或用于存储数据的其它技术。存储器106可以与一个或多个处理器104耦合。处理器104可以包括中央处理单元(cpu)、图形处理单元(gpu)、加速处理单元(apu)、微处理器、微控制器、数字信号处理器(dsp)、现场可编程门阵列(fpga)、专用集成电路(asic)或其他类型的处理组件。

在一些实施例中,本文描述的网络设备100可以被实现为网络接口卡(nic)。在一些实现中,网络设备可以是在外壳(例如机箱)内实现的物理设备。在一些实现中,网络设备可以是由云计算环境或数据中心的一个或多个计算机设备实现的虚拟设备。

一个或多个处理器104可以被配置为管理对一个或多个存储器106的访问。例如,一个或多个处理器104可以被配置为确定一个或多个存储器106中的位置以存储在一个或多个端口102上接收的数据分组。一个或多个处理器104可以被配置为当数据分组或其部分要在一个或多个端口102上传送或由一个或多个处理器104分析时读取存储在一个或多个存储器106中的该数据分组或其部分。一个或多个处理器104可被配置为重写、更新和/或使存储器位置无效。

此外,一个或多个处理器104可以被配置为分析针对tcp段和接收的数据分组和tcp报头以确定网络设备之间的一个或多个数据流的状态(例如,客户端和服务器之间的tcp会话的一个或多个连接或流)。可以将tcp段封装在包括ip报头和数据区段的因特网协议(ip)数据报中以形成数据分组。ip数据报可以通过ip通信网络传送。

在一些实现中,一个或多个处理器104被配置为分析数据分组中的tcp报头以确定网络设备之间的连接的状态。该一个或多个处理器可以被配置为基于以下中的一个或多个来确定网络设备之间的tcp会话的每个方向的状态:序列号、确认号、tcp报头中的控制位(在本文中有时被称为标志)和/或包含在tcp报头和ip报头中的其他信息。

基于所确定的tcp会话或连接的状态,一个或多个处理器104可以生成并更新一个或多个数据流的经修改的tcp状态机。例如,一个或多个处理器104可以被配置为将诸如变量的状态信息存储在存储器106中,并且基于包含在tcp报头中的信息来初始化和更新变量。状态信息可以包括但不限于:序列号、流的方向(例如,客户端流(客户端发起流)对服务器流(服务器发起流))、最后字节序列号(last_seq)、最后看到的确认(ack)值,基本序列(base_seq)变量和/或用于针对tcp会话设置状态信息或初始化变量的其他信息。

如本文所使用的,经修改的tcp状态机是指基于序列号、流的方向、最后字节序列号、最后看到的ack值、基本序列等的tcp状态机。例如,经修改的tcp状态机可以从描述tcp状态和/或tcp状态之间的转换的传统或已知的tcp状态机修改。经修改的tcp状态机可以包括或标识确定无序分组所需的信息,其中这种形式的信息可以是在对应消息之前已经接收到的ack。此外,经修改的tcp状态机可以包括或标识基于确定在对应消息之前已经接收到ack来重组多个数据分组所需的信息,如下面更详细地描述的那样。

在一些实现中,一个或多个处理器104可以使用包括本领域已知技术的技术来在存储器106中存储值或设置标志,以更新tcp状态机的状态信息。例如,一个或多个处理器104可以接收包括syn标志的数据分组作为tcp会话的第一数据分组。一个或多个处理器104可以确定数据分组是来自tcp会话的客户端流的客户端数据分组(例如,可以确定数据分组是从客户端流向服务器),并且可以存储包括在tcp报头中的数据分组的序列号作为用于客户端流的初始序列号(isn)。

在另一个示例中,一个或多个处理器104可以被配置为确定包括syn-ack标志的数据分组是服务器分组(例如,tcp会话的服务器流的分组)。基于该确定并且在分析数据分组的tcp报头之后,一个或多个处理器104可以被配置为使用tcp报头中的序列号来存储用于服务器流的isn以设置用于服务器流的isn。

如果具有syn-ack标志的数据分组是针对tcp会话接收的第一分组,则一个或多个处理器104可以被配置为使用数据分组中的确认值来确定用于客户端流的isn。而且,一个或多个处理器104可以被配置为:尽管是针对tcp会话看到的第一分组,但是确定数据分组方向是从服务器到客户端(例如,数据分组被包括在服务器流中),并将值或标志存储在存储器106中以指定数据分组的方向。在一些实现中,使用用于指定数据分组的方向的该方向值或标志来通知一个或多个其它模块将tcp会话的数据分组重组为由发起设备(例如,客户端、服务器或网络设备)发送的正确顺序。

在一些实现中,一个或多个处理器104可被配置为分析数据分组的tcp报头以确定针对tcp会话接收的数据分组是否设置了完成(fin)标志。基于确定在数据分组中包括或设置了fin标志,一个或多个处理器104可以通过在存储器106中存储fin值或标志来更新用于tcp会话的tcp状态机的状态。

在一些实现中,一个或多个处理器104可以被配置为分析tcp报头以确定针对tcp会话接收的数据分组是否设置了重置(rst)标志。基于确定rst标志被包括在数据分组中,一个或多个处理器104可以通过在存储器106中存储rst值或标志来更新tcp状态机的状态。

在一些实现中,一个或多个处理器104可以被配置为分析用于一个或多个数据分组的tcp段,并且基于包含在tcp段的tcp报头中的信息来生成信息。一个或多个处理器104可以被配置为基于或针对tcp报头中的信息来生成状态信息。例如,一个或多个处理器104可以被配置为分析tcp报头,并且与syn标志相反,确定在针对tcp会话接收的第一数据分组中tcp报头是否包括syn-ack标志,在tcp协议下syn标志应被包括在tcp会话的第一数据分组中。在一些实现中,一个或多个处理器104可以被配置为基于来自客户端流的分组的tcp报头中的确认号(ack值)来生成用于服务器流的isn。此外,如果tcp报头在针对tcp会话接收的第一数据分组中包括syn-ack标志,则一个或多个处理器104可以被配置为确定数据分组是来自服务器流并且存储值来标记数据分组的方向,并将分组的数据流标记为是从服务器到客户端(例如,作为服务器流)。

一个或多个处理器104可以被配置为分析tcp报头以确定在tcp会话中接收到的数据分组是否设置了fin标志。基于确定在数据分组中包括或设置了fin标志,一个或多个处理器104可以被配置为针对tcp会话的流的对应方向生成数据的最后字节的序列号。一个或多个处理器104可以基于组合数据分组的tcp报头中的序列号和数据分组的有效载荷长度来生成序列号,如利用数据分组的tcp报头而包括的那样。一个或多个处理器104可以被配置为在存储器106中存储该生成的最后字节序列号的值(例如,存储在名为last_seq的变量中,或存储在具有不同名称的变量中)。

根据一些实现,一个或多个处理器104可以被配置为分析tcp报头以确定针对tcp会话接收的数据分组是否设置了rst标志。基于确定在数据分组中包括或者设置了rst标志,一个或多个处理器104可以被配置为针对tcp会话的流的相应方向生成数据的最后字节的序列号。一个或多个处理器104可以基于组合数据分组的tcp报头中的序列号和数据分组的有效载荷长度来生成序列号,如利用数据分组的tcp报头而包括的那样。一个或多个处理器104可以被配置为在存储器106中存储该所确定的值(例如,存储在名为last_seq的变量中,或存储在具有不同名称的变量中)。

在一些实现中,一个或多个处理器104被配置为使用所确定的isn作为用于基本序列(base_seq)变量的值。例如,所确定的isn可以用于tcp会话的特定流或流的方向。可以使用base_seq变量(例如,基本序列变量)来指示直到已经被重组的tcp段的数据的字节值。基于base_seq值,一个或多个处理器104可以被配置为生成数据的下一字节,从该下一字节应继续段的重组(例如,基于将base_seq值加1(例如,base_seq+1))。

在一些实现中,网络设备100可以被配置为在网络设备100标识出对应于尚未接收到的tcp段的ack标志时继续分析用于tcp会话的数据分组,而不会出错或丢弃分组。例如,一个或多个处理器104可以被配置为:在存储器106中存储包括ack标志的tcp段的确认号作为针对正在进行确认的tcp会话的方向/流的最后看到的ack值,如果ack值大于迄今为止针对所述tcp会话的方向/流所检测到的最高ack值,或者如果尚未针对所述tcp会话的方向/流存储ack值,那么一个或多个处理器104可以继续处理数据分组中的tcp有效载荷。

在一些实现中,网络设备100被配置为重组tcp会话的数据分组,而不管数据分组被接收的顺序(例如,即使数据分组以错误的顺序被接收)。在一些实现中,一个或多个处理器104被配置为将接收到的数据分组重组直到针对tcp会话的方向/流所接收的数据的最后确认字节。在一些实现中,尽管数据分组保持针对尚未被接收到的来自相反方向的tcp段的确认值,但是一个或多个处理器104可以被配置为不引起错误,并且继续分析和存储包含在所接收的数据分组中的其他tcp段的状态信息。因为网络设备100被配置为不引起错误并且继续处理包含针对尚未被接收到的相反方向的tcp段的确认值的无序数据分组,所以网络设备100可能不会针对声明尚未被看到/接收到的确认字节/段的数据分组生成错误,而是可以提取并存储来自tcp段的信息并相应地更新用于tcp会话的状态机。在这种情况下,网络设备100可以被配置为等待下一tcp段到达(例如,以不正确的顺序)。根据一些实现,当网络设备100接收到在tcp会话方向的字节流中引起间隙的tcp段时,网络设备100被配置为继续新接收到的tcp段的重组,并且从网络设备100之前直到其已经执行重组的字节继续tcp段的重组。在这种情况下,新接收到的tcp段可以填补该间隙。

重组tcp会话的数据分组并且以正确的顺序发送数据分组对于接收所有客户端-服务器通信的副本的网络设备以及使用多个接收(rx)环实现高性能的网络设备可以是有益的。在这样的配置中,网络设备可以频繁地处理无序的两个方向/流的数据分组。例如,一些通信系统可以使用非对称哈希函数来分配业务(例如,非对称接收侧缩放(rss)哈希函数等),这可能导致同一tcp会话的两个流/方向由不同的rx环接收。这可能会导致tcp段的无序接收。因此,本文描述的一些实现对于处理这样的tcp会话可能是有用的,因为当接收到无序tcp段时,这样的实现可能不会发生故障。

作为另一个示例,布置在tcp会话的源网络设备(诸如客户端)和目的地网络设备(诸如服务器)之间的网络中的网络设备可以被称为中间网络设备。这种中间网络设备可以用作span、tap、mirror等。中间网络设备可以通过重组跨tcp会话的两个方向/流的数据分组来对这些数据分组重新排序,从而导致tcp会话的一个流/方向上的数据分组确认来自同一tcp会话的相反方向/流的看不到的字节/段,如上面讨论的那样。

因此,当针对tcp会话的tcp段的ack已经从对应syn分组被无序地接收到时,或者如果在看到对应数据分组之前接收到ack时,网络设备的实现减少了在处理该tcp会话时的故障。此外,本文描述的一些实现通过减少基于无序或者以与由发起设备原始传送的顺序不同的错误顺序接收的数据分组的故障来提高效率,这对于涉及多个接收环的通信系统可能是特别有用的。因此,如本文所描述的,网络设备改善了分组处理性能和处理器负载分配,因为网络设备能够以任何顺序从多个rx环接收数据分组。这又可以改善通信系统的可扩展性。

如上所述,图1仅作为示例提供。其他例子是可能的,并且可能不同于关于图1所描述的例子。

图2是用于处理与无序tcp序列相关联的tcp会话的示例处理200的流程图。在一些实现中,图2的一个或多个处理块可以由网络设备100(图1)或系统300(图3)执行。

如图2所示,处理200可以包括:使用包括本领域已知技术的技术接收多个数据分组(框202)。如图2进一步所示,处理200可以包括:使用包括本文所述技术的技术来生成一个或多个数据流的经修改的tcp状态机(框204)。如图2进一步所示,处理200可以包括:使用包括本文所述技术的技术来分析传输控制协议段(框206)。作为例子,下面描述伪代码以实现处理200的一部分,其涉及以错误的顺序接收初始tcp握手,并且即使在无序地接收到分组时也存储该分组中的ack值。

下面的伪代码解释涉及接收tcp握手的处理200的一部分,而不管tcp握手是正确的顺序还是不正确的顺序。如果接收到的分组是syn-ack分组,并且如果服务器流状态还没有初始化,那么可以使用该tcp分组和报头中的细节或信息来初始化服务器流状态。如果客户端流未被初始化,则表明该syn-ack分组可能是针对该tcp会话看到的第一分组,并且可以使用该tcp分组和报头来初始化客户端流状态。因为该分组是针对tcp会话看到的第一分组,所以任何标志也可以被反向以指示接收到的这个特定分组的方向是服务器至客户端分组或方向而不是客户端至服务器分组或方向,因为否则分组可能被标记为客户端至服务器分组。同样,如果所看到的分组只是syn分组,则在客户端服务器流还没有被初始化的情况下可以使用该分组来初始化客户端服务器流。如果分组是ack分组,则在分组的ack值大于存储器中的值的情况下,使用该分组来更新存储器中用于相反流方向的最后确认(last_ack)变量。

如图2中进一步示出的,处理200可以包括:基于在作为syn分组的前一个tcp分组之前确定tcp段包括syn-ack标志来存储tcp段的序列号(框208)。例如,当网络设备确定在包括syn标志的对应tcp段之前已经接收到包括syn-ack标志的tcp段时,网络设备可以将tcp段的序列号存储为用于服务器流的初始序列号。如图2中进一步示出的,处理200可以包括基于小于该对应方向的最后确认序列号的每个tcp段的序列号来重组多个数据分组的集合(框210)。例如,网络设备可以基于数据分组的集合中的序列号来重排数据分组的集合。通过在与确认序列号相关联的确认tcp段之前放置具有比最后接收的确认序列号更少的序列号的数据分组,网络设备可以重排数据分组的集合。

作为示例,实现重组数据分组的集合的方案的一部分的伪代码可以包括以下内容:

下面的伪代码示出了针对tcp流会如何发生处理的例子。每个流在列表stream.segment_list中保持段,其中段按照其序列号的升序排列。stream.next_seq保持针对tcp流重组应从中继续的字节的序列号的值。名为next_seq的变量在段被处理时更新,并更新stream.next_seq变量。next_seq保持重组完成的当前序列号。对于段列表中的每个段,如果段大于last_acked值,则表示段还没有被确认,并且在大于last_acked值的段之后没有段可以被处理。接下来,如果要处理的段保持完全在next_seq变量之前的字节,则表明该段已经被处理,并且代码继续到列表中的下一个段。如果段的seq大于next_seq,则表明在列表中缺少段,从而指示流中的间隙,并且直到接收到新段来填补该间隙才继续处理更多的段。如果满足所有这些条件,则表明段保持字节,其包括由next_seq中的值指示的下一个要处理的字节。因此,这个段在上层中被处理,并且next_seq值被相应地更新。

虽然图2示出处理200的示例框,但在一些实现中,与图2中所描绘的那些相比,处理200可以包括附加的框、较少的框、不同的框或不同布置的框。附加地或备选地,处理200的两个或更多框可以被并行执行。

图3是被配置为执行例如图2所示的示例处理200的示例系统300的图。如图所示,系统300可以包括一个或多个处理器302、一个或多个通信接口304、存储器316以及用于互连这些组件的一个或多个通信总线306。系统300可以包括用户界面308,用户界面308包括显示设备310、键盘312、触摸屏314和/或其它输入和/或输出设备。在一些实现中,存储器316可以包括高速随机存取存储器和/或非易失性存储器,诸如一个或多个磁或光学存储盘。在一些实现中,存储器316可以包括远离处理器302定位的大容量存储装置。此外,存储器316或者备选地存储器316内的一个或多个存储设备(例如,一个或多个非易失性存储设备)包括非暂态计算机可读介质。存储器316可以存储以下元素和/或一个或多个其他元素中的至少一个:

·操作系统318,其包括用于操控各种基本系统服务和用于执行硬件相关任务的过程;

·网络通信模块320(或标识网络通信模块的指令),其被用于系统300与其他计算机、客户端、服务器、网络设备、系统或设备之间的、经由一个或多个通信接口304和/或一个或多个通信网络例如因特网、其他广域网、局域网、城域网和其他类型网络的通信;

·应用模块322,其可以包括web浏览器、文档查看器或其它应用,用于执行分析信息、接收数据分组和发送数据分组中的至少一项;

·tcp状态机模块324,用于使用包括本文描述技术的技术来生成用于一个或多个tcp会话的状态机并且更新tcp会话的一个或多个流的状态;

·分组分析器模块326,用于分析针对包括tcp报头和有效载荷的tcp段接收到的数据分组,并且使用包括本文描述技术的技术来确定tcp会话的每个流的状态信息和变量值;和

·分组重组器模块328,用于使用包括本文描述技术的技术以发起(源)网络设备传送的顺序来重组或重排tcp会话的tcp流。

如上所述,仅作为示例提供图3。其他示例是可能的,并且可以不同于关于图3描述的示例。

图4是设备400的示例组件的图。设备400可以对应于网络设备100和/或系统300。在一些实现中,网络设备100和/或系统300可以包括一个或多个设备400和/或设备400的一个或多个组件。如图4所示,设备400可以包括总线410、处理器420、存储器430、存储组件440、输入组件450、输出组件460和通信接口470。

总线410包括允许在设备400的组件之间进行通信的组件。处理器420以硬件、固件或硬件和软件的组合来实现。处理器420采取中央处理单元(cpu)、图形处理单元(gpu)、加速处理单元(apu)、微处理器、微控制器、数字信号处理器(dsp)、现场可编程门阵列(fpga)、专用集成电路(asic)或其他类型的处理组件的形式。在一些实现中,处理器420包括能够被编程为执行功能的一个或多个处理器。存储器430包括存储用于由处理器420使用的信息和/或指令的随机存取存储器(ram)、只读存储器(rom)和/或其它类型的动态或静态存储设备(例如,闪存、磁存储器和/或光学存储器)。

存储组件440存储与设备400的操作和使用有关的信息和/或软件。例如,存储组件440可以包括硬盘(例如,磁盘、光盘、磁光盘和/或固态盘)、压缩盘(cd)、数字多功能盘(dvd)、软盘、盒式磁带、磁带和/或其它类型的非暂态计算机可读介质以及相应的驱动器。

输入组件450包括允许设备400例如经由用户输入(例如,触摸屏显示器、键盘、小键盘、鼠标、按钮、开关和/或麦克风)接收信息的组件。附加地或备选地,输入组件450可以包括用于感测信息的传感器(例如全球定位系统(gps)组件、加速度计、陀螺仪和/或致动器)。输出组件460包括提供来自设备400(例如,显示器、扬声器和/或一个或多个发光二极管(led))的输出信息的组件。

通信接口470包括类似收发机的组件(例如,收发机和/或单独的接收机和发射机),其使得设备400能够诸如经由有线连接、无线连接或有线连接和无线连接的组合来与其他设备通信。通信接口470可以允许设备400从另一设备接收信息和/或向另一设备提供信息。例如,通信接口470可以包括以太网接口、光学接口、同轴接口、红外接口、射频(rf)接口、通用串行总线(usb)接口、wi-fi接口、蜂窝网络接口等。

设备400可以执行本文描述的一个或多个处理。设备400可以基于处理器420执行这些处理,处理器420执行由诸如存储器430和/或存储组件440的非暂态计算机可读介质存储的软件指令。计算机可读介质在本文中被定义为非暂态存储器设备。存储器设备包括在单个物理存储设备内的存储器空间或分布在多个物理存储设备上的存储器空间。

软件指令可以经由通信接口470从其它计算机可读介质或者从其它设备读取到存储器430和/或存储组件440中。当被执行时,存储在存储器430和/或存储组件440中的软件指令可以使得处理器420执行本文描述的一个或多个处理。附加地或备选地,可以使用硬连线电路装置代替软件指令或与软件指令结合以执行本文所述的一个或多个处理。因此,本文描述的实现不限于硬件电路装置和软件的任何特定组合。

提供图4中所示的组件的数量和布置作为示例。实际上,与图4所示的组件相比,设备400可以包括附加的组件、更少的组件、不同的组件或者不同布置的组件。附加地或备选地,设备400的一组组件(例如,一个或多个组件)可以执行被描述为由设备400的另一组组件执行的一个或多个功能。

图5是与图2中所示的示例处理200有关的示例实现500的图。图5示出了基于无序ack来重组或重排tcp会话的数据分组的集合的示例。如图所示,图5包括网络设备505、客户端设备510和服务器设备515。网络设备505、客户端设备510和/或服务器设备515可以对应于或包括网络设备100、系统300和/或设备400的一个或多个组件。客户端设备510和服务器设备515可以与tcp会话相关联,该tcp会话可以包括(如所示)从客户端设备510到服务器设备515的客户端流和从服务器设备515到客户端设备510的服务器流。网络设备505可以监视tcp会话。例如,网络设备505可以接收客户端流的数据分组以及服务器流的数据分组。在一些实现中,网络设备505可以是与客户端设备510和服务器设备515相关联的多个不同rx环的一部分。

如图5所示,并且由附图标记520表示,网络设备505可以接收tcp会话的数据流(例如,客户端流和服务器流)。如附图标记525所示,网络设备505可以在时间t0接收syn-ack消息或数据分组。如进一步示出的,syn-ack消息或者数据分组可以标识ack值,该ack值可以标识与syn-ack消息或者数据分组相关联的对应syn消息或者数据分组。例如,对应syn消息或数据分组可能在时间t0之前由客户端设备510发送,但是可能在时间t0之前未被网络设备505接收。此外,syn-ack消息或数据分组可以标识syn-ack消息或数据分组的序列号(sn)。

如附图标记530所示,网络设备505可以确定在对应syn消息或数据分组之前已经接收到syn-ack消息或者数据分组。例如,网络设备505可以基于由syn-ack消息或数据分组标识的ack值并且基于syn-ack分组是来自服务器的分组的事实来执行该确定,并且如果在来自服务器的syn-ack之前先看到来自客户端的syn分组,则在客户端流状态未被初始化的情况下,客户端流状态将另外被初始化。因此,如附图标记535所示,网络设备505可以确定客户端流和服务器流的初始sn。例如,网络设备505可以将syn-ack消息或数据分组的sn确定为用于服务器流的初始sn,并且可以使用由syn-ack消息或数据分组标识的、尚未看到的syn消息或数据分组的sn作为用于客户端流的初始sn。网络设备505可以使用客户端流和服务器流的初始sn来重组或重排tcp会话的数据分组,如本文别处更详细描述的那样。

如附图标记540所示,网络设备505可以重组或重排tcp会话的数据分组的集合(例如,如上面结合图1-3更详细描述的那样)。例如,当网络设备505在对应syn消息或数据分组之前接收到syn-ack消息或数据分组时,网络设备505可以不生成错误、故障等。为了执行数据分组的集合的重组或重排,网络设备505可以确定在对应ack消息或数据分组(例如,在第二流上)之前何时接收到第一消息或数据分组(例如,在第一流上)。

如上所述,仅作为示例提供图5。其它示例是可能的并且可以不同于关于图5描述的示例。

这样,网络设备(例如,网络设备100、系统300或网络设备505)通过重组或重排tcp会话的无序数据分组来提高tcp会话的效率和弹性。这对于与使用分组的非对称哈希的多rx配置相关联的网络设备可能是特别有用的,所述网络设备可以频繁地造成数据分组的无序接收。

如本文所使用的,术语业务或内容可以包括分组或数据分组的集合。分组或数据分组可以指用于传递信息的通信结构,诸如协议数据单元(pdu)、网络分组、数据报、段、消息、块、小区、帧、子帧、时隙、符号、上述中的任何一部分和/或能够经由网络传送的其它类型的格式化或未格式化的数据单元。

前面的公开内容提供了说明和描述,但是并不旨在穷举或将实现限制到所公开的精确形式。鉴于以上公开内容,修改和变化是可能的,或者可以从实现的实践中获得修改和变化。

如本文所使用的,术语组件旨在被广义地解释为硬件、固件和/或硬件和软件的组合。

将显而易见的是,本文所述的系统和/或方法可以以不同形式的硬件、固件或者硬件和软件的组合来实现。用于实现这些系统和/或方法的实际的专用控制硬件或软件代码不是对上述实现的限制。因此,这里描述了系统和/或方法的操作和行为,而没有参考具体的软件代码——应当理解,软件和硬件可以被设计为基于本文的描述来实现系统和/或方法。

即使特征的特定组合在权利要求中列举和/或在说明书中公开,但这些组合并不意图限制可能实现的公开内容。实际上,这些特征中的许多特征可以以未在权利要求中具体记载和/或在说明书中公开的方式进行组合。尽管下面列出的每个从属权利要求可以仅直接依赖于一个权利要求,但是可能的实现的公开内容包括每个从属权利要求与权利要求集合中的每个其他权利要求的组合。

除非明确地描述,否则本文使用的任何元件、行为或指令都不应被解释为关键的或必要的。而且,如本文所使用的,冠词“一”和“一个”旨在包括一个或多个项,并且可以与“一个或多个”互换使用。此外,如本文所使用的,术语“集合”旨在包括一个或多个项(例如,相关项、不相关项、相关项和不相关项的组合等),并且可以与“一个或多个”互换使用。在只期望有一个项时,使用术语“一个”或类似的语言。另外,如本文所使用的,术语“具有”、“含有”、“有”等旨在为开放式术语。此外,短语“基于”旨在表示“至少部分基于”,除非另有明确说明。

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