具体实施方式
以下描述涉及响应无线网络中经历的假超时的技术。由于超时并非始终指示数据丢失,因此按照网络资源,在假超时时数据自动重发可能是浪费的响应。在后面示例中使用的保守响应通过维持来自发送主机的确实的数据流直至,或除非,数据被证实丢失,来避免多余的数据传输。响应包括恢复拥塞状态值以及根据接收的确认增加拥塞窗口大小。拥塞窗口(又称为“cwnd”)是一个状态变量,它限定发送主机在接收确认之前能够在网络上传输的数据数量。
在此描述的示例实施例可利用各种网络协议,包括公共和/或私人协议中的任意一个。实施例是作为示例,而非以任何方式进行限定。
图1示出了一个示例性结构100,其中网络102使能客户设备105、110、115和120,以及服务器设备125之间的通信。网络102旨在表示各种常用网络拓扑和类型中的任意一种,可包括有线和/或无线网络。网络102还能利用各种常用网络协议中的任意一种,包括公共和/或专用协议。网络102可包括例如因特网以及一个或多个局域网(LAN)的至少一部分。
客户机设备105可包括各种常用计算设备中的任一种,包括台式个人计算机(PC),工作站、大型计算机、Internet设备、以及游戏控制台。与网络102相关联的客户设备还可进一步包括个人数字助理(PDA)110、膝上型计算机115、以及蜂窝式电话120等等,它们可与网络102通过有线和/或无线链路通信。此外还有,客户机设备105、110、115和120的一个或多个可包括相同类型设备,或不同类型设备。
服务器设备125能向计算设备105、110、115和120提供各种数据和/或功能性中的任意一种。该数据可是公开可用的或者受限制的,例如,仅限于特定用户或仅当支付了适当的费用才可用。服务器设备125是网络服务器、应用程序服务器、web叶、或其任意组合中的至少一个。服务器设备125是内容源的任意设备,而客户设备105、110、115和120包括能接收此类内容的任意设备。客户或服务器设备的示例实施例参照图7在下文中进行更详细描述。
客户机设备105、110、115、120和服务器设备125中的任意一个根据在此所述的示例实施例可作为发送主机或接收主机。为进行说明,而非以任何形式进行限制,客户机设备115是一个经由网络102向一个接收主机传输数据的发送主机。发送主机115包括处理器117,该处理器对应在此所述的示例实施例实现假超时响应。
对应图1的网络102的协议包括但不限于TCP/IP(传输控制协议/互联网协议),其中TCP是一个用于实现端到端连接错误检测和校正的基于链接、面向信息流的传输服务。当数据从发送主机115传输到接收主机时,假超时在网络102中并非时常发生的,该网络可以是无线广域网。本领域中熟练的技术人员能理解在传输处理中此类超时的任何影响。然而,假超时的发生并不必然表示数据包的丢失或拥塞。
假超时响应119以不自动重发数据的方式处理假超时。当然,若发现假超时(STO),则假超时响应119通过恢复拥塞状态值并维持来自发送主机的确实数据流来响应STO。也就是说,来自发送主机的数据流不包括任何重发的数据包,直至或除非数据丢失被证实。
更为特别的是,假超时响应119指示TCP栈恢复缓慢启动阈值(也称为“sstresh”)到其检测到超时之前的值并逐渐增加拥塞窗口“cwnd”。存储缓慢启动阈值“sstresh”是与用于控制数据传输的经估计的可用带宽相关的状态变量,且再次,拥塞窗口“cwnd”是限制发送主机在接收确认“ACK”之前能够在网络上传输的数据数量的状态变量。在超时发生之后,拥塞窗口被设置为MSS,且重发第一个未确认的包。尽管如此,若证明重发是不必要的,即,最初的传输已经由接收主机成功的接收,则发送主机停止重发其他超时包。此外,由于ACK是超时数据包成功传输的表示,因此拥塞窗口在接收ACK时增加最大段大小(MSS)(即,cwnd=cwnd+MSS)。就是说,由于ACK提供了使网络路径重新生效所需的准确数据,因此,接收ACK就表示能被传输的数据数量能够被增加。
图2更详细地示出了发送主机115的处理器117。处理器117包括数据包发送器205,它利用如TCP协议向接收主机发送数据包。在数据包从发送器205传输之后,传输定时器/超时检测器210跟踪时间。因此,在数据包传输之后,当预定的时间量,例如,500毫秒过去而没有对应数据包的ACK在发送主机115处被接收回来时,传输定时器/超时检测器210检测到超时。若超时被确定为是假超时时,超时响应处理器215执行超时响应过程119(见图1),该过程是一个“带有重新分包的假超时检测”(下文中称为“STORDER”)响应。图4-6更详细地描述了超时响应过程119。图2所示的处理模块可以如所示的那样实现,独立地,或以其各种组合实现。
图3示出响应假超时的超时响应过程119。过程119被说明为一组框,每个框代表至少一个实现该过程所执行的操作。这些操作可以通过软件、硬件、固件、或其任意组合实现。此外,为了讨论的目的,过程119在数据包的传输在出现超时是从发送主机115到接收主机的情况下进行描述。
在305,发送主机115发现超时情况。在检测到超时时,发送主机115保存310对应于直至超时发现时从发送主机115传输的数据包的最高序列号。所保存的序列号可用作随后数据包传输的基准点。于是,第一个没有确认的包被重发。在接收到第一个来自接收主机的确认时,作出该超时是依照本领域中已知技术生成的假超时(STO)的决定315。此类技术的示例包括,但不限于,于2004年1月15日向美国专利和商标事务所提交的待批的美国申请号10/758,510中描述的技术,且因此不在此描述该技术。
图4-6示出在检测315到STO时进行的示例协议响应119。特别是,在此描述的STODER响应不是通过自动重发数据包或通过默认拥塞控制状态处理对STO响应,而是根据包守恒原则实现响应。
图4示出在STODER响应中的初始操作。因为STO的检测315(见图3)不必基于数据包的丢失被预测,因此拥塞状态值被恢复405以维持来自发送主机115的确实数据流。被传输的下一个数据包的参数被设为与被发送的先前发送的数据包完全相等直至STO检测的点。该点可称为“STODER恢复点”(下文中“SRP”)。缓慢启动阈值”ssthresh”被恢复为与其在超时发生之前的值完全相等,而拥塞窗口“cwnd”被设为最大段大小的两倍(即,cwnd=2*MSS)。这与用于不超过两个数据包大小的拥塞窗口的初始值的已知TCP原则相一致。
在缺乏数据包已经丢失的证实时,按照包守恒原则要求没有先前传输的数据被重发。也就是说,在这个时候,连续的数据流是要仅包括新传输的数据包。因此,在410,发送主机115通过传输直至两个新的数据包到达接收主机来维持数据流。应该注意在网络上传输的用于维持数据流的新数据包的数量可以随协议发展而不同。
在415,发送主机115设置一个“管道”值,它是网络上待完成的字节数量的发送方的估计。在此阶段,管道值被设为等于到目前为止的最大序列号(即,snd.max)和还未确认的最低序列号(即,snd.una)之间的差,加上最大段大小(MSS):
pipe=MSS+snd.max-snd.una
增加MSS是为了计算超时的第一数据包的重发。
在420,发送主机115接收确认(ACK)。随后的过程受ACK是否推进实际数据流或它是否是副本ACK(duplicate ACK)的影响。若它表示在接收主机处已经成功接收了传输的数据,则ACK推进实际数据流。副本ACK是没有累积确认任何新数据而仅仅在其确认字段内重复Snd.una的ACK。
图5仍是ACK在发送主机115处被接收420(见图4)之后的STODER响应的示例实施例。作出有关接收的ACK是否确认覆盖SRP的一个序列号的决定505。若对应ACK的序列号覆盖SRP(ACK Seq.No>SRP)(即,自505的“是”分支起),则STODER响应终止507。
否则,作出有关ACK是否确认数据小于SRP的决定510,即,ACK是否确认了某些新的数据而没有覆盖SRP。此类ACK表示某些数据包已经离开了网络。因此,在这种情况的实际决定之后(即,自510的“是”分支起),管道值被调整用以反映待完成包的减少。此外,由于ACK表示某些数据已经在接收主机处成功接收,因此当接收到ACK时,若拥塞窗口“cwnd”小于缓慢启动阈值“ssthresh”(即,cwnd<ssthresh),则拥塞窗口“cwnd”可以通过向拥塞窗口“cwnd”增加最大段大小“MSS”而打开(即,cwnd=cwnd+MSS)。随后,为了维持一致的数据流,若管道值小于拥塞窗口“cwnd”(即,pipe<cwnd),则新的数据包,即没有被传输的数据,就能被传输。
否则,作出ACK是否为“副本ACK”的确定520,也就是说,ACK具有相同的序列号或是小于未确认数据的最低序列号,即snd.una。在副本ACK确定之后(即,自520的“是”分支起),网络中未完成数据的数量的评估通过重新设置522管道值为初始管道值减去最大段大小“MSS”(即,pipe=pipe-MSS)来调整。
此外,若副本ACK包括一个选择性确认数据段小于SRP的数据段且拥塞窗口“cwnd”小于缓慢启动阈值(即,cwnd<ssthresh)的SACK块,则拥塞窗口“cwnd”通过向拥塞窗口的当前值“cwnd”增加最大段大小“MSS”(即,cwnd=cwnd+MSS)而重新设置。随后,为了维持一致的数据流,若管道值小于拥塞窗口“cwnd”(即,pipe<cwnd)传输新的数据包。
否则,当作出已经接收到3个副本ACK的决定530时,可以推测性地假设数据包已经从网络上丢失(即,自530的“是”分支起)。因此,当接收到第三个副本ACK时,由于没有接收到ACK而丢失的数据包能被从发送主机115重发525,。此外,由于检测到了丢失,所以缓慢启动阈值“ssthresh”状态值以及拥塞窗口“cwnd”状态值被重新设置527。特别是,当接收到第三个副本ACK时,缓慢启动阈值被减少其初始值的一半(即,ssthresh=ssthresh/2),而拥塞窗口被设为拥塞窗口和缓慢启动阈值中的较小的一个(即,cwnd=min(cwnd,ssthresh))。当作出有关三个副本ACK的否定确定530时,过程返回505。
除了重发丢失数据之外,对STO的响应由此转换到基于SACK的缓慢启动恢复过程。
图6示出基于SACK的缓慢启动恢复过程。在缓慢启动阈值状态值和拥塞窗口状态值被重新设置(见527)之后,发送主机115处的ACK的接收作出有关接收的ACK是否确认覆盖SRP的一个序列号的决定605,即对应于任意待完成数据的ACK是否还没有确认。因此,若对应ACK的序列号覆盖了SRP(即,自605的“是”分支起),则STODER响应终止607。
否则,作出关于ACK确认数据是否小于在SRP处所示数据的决定610,即ACK是否为“部分ACK”。在基于SACK的缓慢启动恢复阶段(即,自610的“是”分支起)中的第一个部分ACK的决定615导致了SRP之下所有数据包都丢失的假定结论。因此通过重新设置管道值为将重发的数据大小(retran_data)加上发送的数据直至部分ACK减去SRP(snd.max-SRP)确定的时候,并选择性确认在SRP之上的数据包(sacked_pkts above SRP),以避免620重发的突发:
pipe=retran_data+(snd.max-SRP)-(sacked_pkts above SRP)
此外,拥塞窗口“cwnd”被调整为窗口与管道值加上2*MSS的初始窗口值之间的最小的值:
cwnd=min(cwnd,pipe+(2*MSS))
然后数据以在SRP之下的数据包的形式被发送625,它们被认为是丢失了。
部分ACK的随后的接收使状态值被重新设置630,包括管道值被重新设置为初始管道值减去已确认数据的大小(即,pipe=pipe-data_acked)且若“cwnd”小于“ssthresh”,则拥塞窗口cwnd被重新设置为拥塞窗口cwnd加上最大段大小“MSS”(即,cwnd=cwnd+MSS)。为了维持一致数据流、数据,例如被部分确认的最老的数据接着从发送主机115被重发625,假定管道值小于拥塞窗口(即,pipe<cwnd)。
部分ACK的否定决定610意味着ACK是一个副本ACK。因此,管道值被设置635为管道值减去MSS(即,pipe=pipe-MSS)。若在第一个部分ACK之前副本ACK被接收且ACK包含一个选择性确认SRP之下的数据的SACK块而且拥塞窗口小于缓慢启动阈值(即,cwnd<ssthresh),则拥塞窗口增加最大段大小“MSS”(即,cwnd=cwnd+MSS)。为了维持一致数据流,丢失数据或新数据从发送主机115传输625,假定管道值小于拥塞窗口。
要注意,在第二个重发超时的情况下,上述响应过程被终止,而已知的缓慢启动过程开始。
图7示出一般计算机环境700,它可以用于实现在此所述的技术。计算机环境700仅是计算环境的一个示例,且并非试图提议任何有关使用范围或计算机和网络结构功能性的限定。也不应认为计算机环境700对在示例计算机环境700中举例说明的任何组件中的一个或组合具有任何依赖性或要求。
计算机环境700包括通用计算机702形式的计算设备。计算机702的组件可包括,但不限于,一个或多个处理器或处理单元704,系统存储器706,以及把各种系统组件包括处理器704耦合至系统存储器706的系统总线708。
系统总线708代表任意几种类型总线结构中的一个或多个,包括存储总线或存储控制器、外围总线、加速图形接口、以及利用各种总线结构中的任一种的处理器或本地总线。作为示例,此类结构包括工业标准结构(ISA)总线、微通道体系结构(MCA)总线、扩展工业标准结构(EISA)总线,视频电子标准协会(VESA)本地总线,外设部件互连(PCI)总线又称为Mezzanine总线,PCI快速总线、通用串行总线(USB)、安全数字(SD)总线、或IEEE 1394,即,Firewire总线。
计算机702可包括各种计算机可读介质。此类介质可以是计算机702能够访问的任意可用介质,且包括易失性和非易失性的、可移动和不可移动的介质。
系统存储器706包括诸如随机存取存储器(RAM)710的易失性存储器;和/或诸如只读存储器(ROM)712或闪存RAM的非易失性存储器形式的计算机可读介质。基本输入输出系统(BIOS)714,包括有助于诸如在启动期间计算机702的元件之间传输信息的基本例程被存储在ROM 712或闪存RAM内。RAM 710通常包括处理单元714能立即访问的和/或当前在上面运行的数据和/或程序模块。
计算机702也可包括其他可移动/不可移动介质、易失性/非易失性计算机存储介质。作为示例,图7举例说明了从不可移动、非易失性磁性介质(未示出)读取并向其中写入的硬盘驱动器716,从可移动、非易失性磁性磁盘720(例如,软盘)读取并向其中写入的磁盘驱动器718、以及从可移动、非易失性光盘724诸如CD-ROM、DVD-ROM或其他光学介质中读取和/或向其中写入的光盘驱动器722。硬盘驱动器716、磁盘驱动器718、以及光盘驱动器722每一个都通过一个或多个数据介质接口725连接到系统总线708。换句话说,硬盘驱动器716、磁盘驱动器718、以及光盘驱动器722能通过一个或多个接口(未示出)连接到系统总线708。
磁盘驱动器及其相关计算机可读介质为计算机702提供了计算机可读指令、数据结构、程序模块、以及其他数据的非易失性存储器。尽管示例举例说明了硬盘716、可移动磁盘720、以及可移动光盘724,应该意识到可存储计算机能够访问的数据的其他类型的计算机可读介质,如磁带盒或其他磁性存储设备、闪存卡、CD-ROM、数字通用磁盘(DVD)或其他光学存储器、随机存取存储器(RAM)、只读存储器(ROM)、电可擦除只读存储器(EEPROM)等等,都能被用来实现示例计算系统和环境。
在硬盘716、磁盘720、光盘724,ROM 712、和/或RAM 710上能够存储任意数量的程序模块,包括举例来说,操作系统726,一个或多个应用程序728、其他程序模块730、以及程序数据730。此类操作系统726,一个或多个应用程序728、其他程序模块730、以及程序数据732(或其某些组合)中的任意一个可实现支持分布式文件系统的所有或部分常驻组件。
用户可以通过输入设备如键盘734和定位设备736(如,鼠标)向计算机702输入指令和信息。其他输入设备738(未特别示出)可包括麦克风、操纵杆、游戏垫、卫星接收天线、串行端口、扫描仪等等。这些和其他输入设备通过耦合至系统总线708的输入输出接口740连接至处理单元704,但是也可以通过其他接口和总线结构连接,如并行端口、游戏端口、或通用串行总线(USB)。
监视器742或其他类型显示设备也可以通过接口,如视频分配器744,连接至系统总线708。除监视器742之外,其他输出外围设备可包括如扬声器(未示出)和打印机746的组件,它们可以通过I/O接口740连接至计算机702。
计算机702可以在使用逻辑连接到如远程计算机748的一个或多个远程计算机的网络化环境中运行。作为示例,远程计算设备748可以是PC、便携式计算机、服务器、路由器、网络计算机、对等设备或其他公共网络节点等等。远程计算设备748以包括在此所述与计算机702相关的多个或所有元件和特性的便携式计算机举例说明。另一方面,计算机702也能够在一个非网络化环境中运行。
在计算机702和远程计算机748之间的逻辑连接被描述为局域网(LAN)750和通用广域网(WAN)752。此类网络环境常见于办公室、企业范围的计算机网络、内部局域网、和因特网。
当在LAN网络环境中实现时,计算机702经由网络接口或适配器754连接至局域网750。当在WAN网络环境中实现时,计算机702常包括调制解调器756或其他用于经由广域网752建立通信的设备。对于计算机702可以内置或外置的调制解调器756可通过I/O接口或其他适当的机制连接至系统总线702。所示的网络连接仅是示例,也可以使用在计算机702和708之间至少建立一条通信链路的其他手段。
在网络化环境中,诸如以计算环境700所举例说明的,所述的有关计算机702的程序模块、或其部分,能够存储在远程存储器设备中。作为示例,远程应用程序758驻留在远程计算机748的存储设备中。为了举例说明,应用或程序以及其他可执行程序组件如操作系统在此举例作为离散模块,尽管众所周知这些程序和组件在不同的时间被驻留在计算设备702的各种存储组件之中,且至少能够被计算机的一个数据处理器执行。
各种模块和技术在此可描述为可由一个或多个计算机或其他设备执行的计算机可执行指令如程序模块的通用形式。通常,程序模块包括例程、程序、对象、组件、数据结构等等,用于执行特定任务或实现特定抽象数据类型。一般而言,程序模块的功能性可如同在各个实施例中所述的那样是组合的或分布式的。
这些模块和技术的实现可以存储在某些形式的计算机可读介质上或通过其传输。计算机可读介质可以是计算机能够访问的任何可用介质。作为示例而非限制,计算机可读介质可以包括“计算机存储介质”以及“通信介质”。
“计算机存储介质”包括以任意方式或技术实现的用于存储如计算机可读指令、数据结构、程序模块或其他数据的信息的易失性和非易失性,可移动和不可移动的介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其他存储技术、CD-ROM、数字通用磁盘(DVD)或其他光学介质、磁带盒、磁带、磁性磁盘存储器或其他磁性存储设备、或能用于存储所需信息并能由计算机访问的任何其他介质。
“通信介质”通常提存为计算机可读指令、数据结构、程序模块、或调制数据信号中的如载波或其他传输机制的其他数据。通信介质也包括任意信息传递介质。术语“调制数据信号”表示具有一个或多个特征集或以在信号中编码信息的方式改变的信号。作为非限制性示例,通信介质包括有线介质如有线网络或直接线路连接、和无线介质如声学的、RF、红外的、和其他无线介质。上面的任意组合也包括在计算机可读介质的范畴之内。
贯穿本说明书引用了“一个实施例”、“一实施例”或“示例实施例”表示特别描述的特征、结构、或特性的被包含在本发明的至少一个实施例中。因此,这种措词的使用可能不仅仅指一个实施例。此外,所述的特征、结构、或特性可以任意适当的方式在一个或多个实施例中组合。
然而,本领域技术人员能够理解本发明可以无需一个或多个特定细节、或者以其他方法、资源、材料等等实践。在其他情况下,未详细示出或描述众所周知的结构、资源、或操作只是为了避免混淆发明诸方面。
尽管本发明的示例实施例和应用已经进行了说明和描述,应该理解本发明并不限于上述的精确配置和资源。对于本领域中熟练的技术人员而言,各种修订、更改、以及外观变化可以在在此揭示的本发明方法和系统的排列、操作、以及细节中实现而不背离本发明的范围。