CN100552626C - 用网络栈同步和上载已卸载网络栈连接的方法 - Google Patents

用网络栈同步和上载已卸载网络栈连接的方法 Download PDF

Info

Publication number
CN100552626C
CN100552626C CNB031241514A CN03124151A CN100552626C CN 100552626 C CN100552626 C CN 100552626C CN B031241514 A CNB031241514 A CN B031241514A CN 03124151 A CN03124151 A CN 03124151A CN 100552626 C CN100552626 C CN 100552626C
Authority
CN
China
Prior art keywords
peripherals
statistics
variable
layer
status
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CNB031241514A
Other languages
English (en)
Other versions
CN1458590A (zh
Inventor
J·平克顿
A·巴德热辛
S·卡尼亚
Nk斯里尼瓦斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN1458590A publication Critical patent/CN1458590A/zh
Application granted granted Critical
Publication of CN100552626C publication Critical patent/CN100552626C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/10Streamlined, light-weight or high-speed protocols, e.g. express transfer protocol [XTP] or byte stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/166IP fragmentation; TCP segmentation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level

Abstract

描述了一种在主机网络栈和外围设备之间同步和上载一个已卸载网络栈连接的方法。将对于网络栈中每个层的一个状态对象发送给设备,包括归类成常量、由主机处理的缓存变量或由该设备处理的委托变量的状态变量。必须由网络栈和外围设备更新的状态被清晰地分开。举例来说,统计由主机、设备或主机与设备来跟踪。由主机与外围设备两者所跟踪的统计被分成不重叠的部分,并组合起来产生统计。一旦启动了一个上载后,设备就达到一个一致的状态,并将委托的状态传递给网络栈。在栈中的每个层都控制其所委托的状态,而资源在设备释放。

Description

用网络栈同步和上载已卸载网络栈连接的方法
技术领域
本发明一般涉及提高计算机系统效率、速度和/或吞吐量的方法,更具体地涉及同步和上载一般由主机处理器执行但已卸载到某特定硬件部件的计算任务的方法。
背景技术
操作系统、应用软件、联网、联网通信等等的复杂度和精密度正以引人注目的速度持续增长。这种复杂度和精密度导致应用和系统的功能增加。由于必须由CPU执行额外的负担以实现增加的系统和应用功能,这种增加的功能经常会导致CPU负荷的增加。
CPU负荷增加很明显的一个领域是联网应用领域,在其中网络速度由于高带宽媒体的增长而增长。网络速度通常匹配(也日益超越)主机的CPU处理器速度和存储器带宽容量。由于大多数操作系统所用的分层架构(如七层ISO模型或Windows操作系统所用的分层模型),这些联网应用进一步加重了主机处理器的负担。众所周知,这一模型被用来描述物理连接到网络和最终用户应用之间的数据流。最基本的功能(如将数据位放到网络线缆上)在底层进行,而专注应用细节的功能则在顶层进行。本质上,每一层的目的都是为上一层提供服务,而向上一层遮蔽服务实际上如何实现的细节。这些层被抽象成每一层都以为它是在与另一计算机的相同层通信。
在层间前进的数据包上执行的多种功能可能是依赖软件的,通常要求相当数量的CPU处理器和存储器资源。例如,在多个层的数据包上执行的某些功能是非常依赖CPU的,如包求和计算和校验、数据加密和解密(如SSL加密和IP安全加密)、消息摘要计算、TCP分段、TCP重发和确认(ACK)处理、保护免于拒绝服务攻击的包过滤,以及用户数据报协议(UDP)包分割。在执行这些功能中的某个时,所导致的对CPU的需求可能极大地影响整体计算机系统的吞吐量和性能。
尽管对CPU资源的需求增长了,但如网络接口卡(NIC)等等的计算机硬件外设的容量和吞吐量也增长了。这些外设通常装备有专用处理器和存储器,能够执行原本由CPU执行的许多任务和功能。
计算机业界认识到这一能力,并开发了将以前由CPU执行的依赖CPU的任务和功能卸载的方法。例如,授予Anand等人的美国专利6141705和专利申请“用于将处理任务从软件卸载到硬件的方法和计算机程序产品”(编号09/657510,申请于2000年9月7日)、“用于将处理任务从软件卸载到硬件的方法和计算机程序产品”(编号09/726082,申请于2000年11月29日)提供了查询外围设备并将特定的处理器任务卸载到能够执行强度任务和功能的外围设备的解决方案。一般所卸载的特定任务包括如TCP(传输控制协议)和/或IP(互联网协议)求和校验计算、如大发送卸载(LSO)的TCP分段,以及安全互联网协议(IPSEC)加密和解密这样的任务。
这些卸载机制限于具有第二要求,即对网络栈作最小数量的改变。这第二要求产生了另一个限制,即卸载具有长编码路径,因为整个网络栈被不能到达外围设备的卸载了的任务和功能所横断。还有一个限制是缺乏与网络栈的集成。并没有很好定义的接口让网络栈查询或设定外围设备上的参数,也没有接口让外围设备告知网络栈任何通知或容量的变化。例如,如果在处理一个LSO请求时路由变化了,则后退机制让栈等待超时并重发该LSO请求。
外围设备制造商尝试做的另一个方法是将整个TCP连接从核心栈卸载到一块网络接口卡(NIC)。这一方法通过使用一个专有的接口忽略整个协议栈,而要求外围设备处理所有TCP消息、IP(互联网协议)消息、ICMP(互联网控制消息协议)消息、DNS(域名服务器)消息和RIP消息,要求NIC处理一切。而且,这一方法并不适于多宿的环境,也没有清晰地与主机操作系统网络管理工具集成。一旦某个状态变化,卸载了的连接就会很容易地失效。
发明内容
本发明提供一种方法来卸载一个网络栈连接,如基于TCP的协议栈。一般通过具有多个软件层的NDIS(网络驱动器接口规范)路径发送到外围设备的数据被卸载到一条从交换层至该外围设备的路径。维持了网络栈和处理单元的紧密同步。一个卸载栈的请求通过该NDIS路径发送给该外围设备。该请求包括一个资源需求的列表,这样该外围设备就具有了所需分配资源的信息。在该NDIS路径中的每一层都将其资源需求添加到该列表中。如果该外围设备接受该请求,则分配资源并发送一个卸载句柄给每个软件层,这样这些软件层就可以与该外围设备通信。
一旦外围设备对卸载的接受通知发送给软件层,就将每个软件层的状态发送给该外围设备。可替换的是,状态与卸载请求一起发送,只将状态的变化发送给外围设备。每种状态都有状态变量,而每个状态变量被分类成常变量、缓存变量或委托变量。常变量在卸载协议栈期间不变。缓存变量由CPU处理,而委托变量由外围设备处理。
本发明还提供一种方法将一个卸载了的网络连接从外围设备上载到主机。该上载可以由该外围设备或由交换层来启动。一旦上载启动后,该外围设备就完成所有显著的请求,并将所代表的状态传递给交换层。在所代表状态被主机接受后,就释放该外围设备上的状态资源。
在卸载或上载传输时,可能会有一个更新(如ARP更新或RIP更新)。如果该外围设备接收到多个更新消息,就用一个序列编号来确保使用最近的更新消息,这样该外围设备就不会使用陈旧的数据。
通过下面的对说明性实施例的详细描述,并参照附图,本发明的其它特点和优点将得以显明。
附图说明
虽然所附的权利要求按技术特性阐明了本发明的特点,但本发明(及其目标和优点)通过下面的详细描述与附图,可以被最好地理解,这些附图中:
图1是总体图示本发明可用的一个示例性计算机系统的方框图;
图2是图示本发明的网络栈和旁路路径的功能层的方框图;
图3是图示本发明的NDIS路径和旁路路径的功能层的方框图;
图4是图示本发明的卸载机制的梯形图;
图5a-5d是图示本发明的一棵倒转的树的图;
图6是图示主计算机与外围设备间同步的方框图;
图7是图示本发明的上载机制的梯形图;
图8是图示如本发明的原则所述的一个安全协议栈连接的卸载机制的梯形图;以及
图9是图示如本发明的原则所述的一个安全协议栈连接的上载机制的梯形图。
发明的详细描述
参见附图(其中相应的指示数字代表相应的部件),本发明被图示成在一个合适的计算环境中实现。尽管并未要求,本发明仍将以由个人计算机执行的计算机可执行指令(如程序模块)的一般上下文环境来描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的过程、程序、对象、组件、数据结构等。而且,那些本领域的普通技术人员将明白,本发明也可能以其它计算机系统配置来实现,包括手持设备、多处理器系统、基于微处理器或可编程的消费电子品、网络PC、小型机、大型机、联网外设(如联网打印机)等等。本发明还可能在分布式计算环境中实现,在其中任务由通过一个通信网络连接的远端处理设备来执行。在分布式计算环境中,程序模块既可位于本地,也可位于远端存储器存储设备。
图1图示了本发明可以在其上实现的合适的计算系统环境100的一个示例。该计算系统环境100只是合适计算环境的一个示例,并非提出对本发明的使用范围或功能的任何限制。该计算系统环境100也不能解释成对在该示例性操作环境100中任何成分或其组合具有任何依赖或要求。
本发明可以通过许多其它通用或专用计算系统环境或配置来操作。可以适于本发明使用的众所周知的计算系统、环境和/或配置的例子包括(但不限于)个人计算机、服务器计算机、手持或膝上设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子品、网络PC、小型机、大型机、联网外设(如联网打印机)、包括以上系统或设备中任何一种的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令(如程序模块)的一般上下文环境中来描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的过程、程序、对象、类、组件、数据结构等。本发明还可以在分布式计算环境中实现,其中由通过通信网络连接的远端处理设备来执行任务。在一个分布式计算环境中,程序模块可以位于本地和包括存储器存储设备的远端计算机存储媒介中。
参照图1,一个用于实现本发明的示例性系统100包括一个计算机110形式的通用计算设备。计算机110的部件可以包括一个处理单元120、一个系统存储器130,和一个将包括系统存储器的多种系统部件连接到处理单元120的系统总线121。该系统总线121可以是几种总线结构类型中的任何一种,包括存储器总线或存储器控制器、外围总线、交叉条、交换总线构造,以及使用多种总线架构中任何一种的局部总线。该系统总线121还可以是一种总线的层次结构。举例而言(但非限制),这样的架构包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强ISA(EISA)总线、视频电子标准联盟(VESA)局部总线、无缓冲非统一存储器存取(NC-NUMA)架构总线、连缓冲非统一存储器存取(CC-NUMA)架构总线以及也称为中间层总线的外围部件互连(PCI)总线。
计算机110一般包括多种计算机可读取媒介。计算机可读取媒介可以包括可由计算机110访问的任何可用的媒介,包括易失和非易失媒介、可擦除和不可擦除媒介。举例而言(但非限制),计算机可读取媒介可以包括计算机存储媒介和通信媒介。计算机存储媒介包括以用于存储信息(如计算机可读取指令、数据结构、程序模块或其它数据)的任何方法或技术实现的易失和非易失媒介、可擦除和不可擦除媒介。计算机存储媒介包括(但不限于)RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字通用盘(DVD)或其它光盘存储器、盒式磁带、磁带、磁盘存储器或其它磁存储设备,或任何可用以存储所希望的信息并可由计算机110访问的其它媒介。通信媒介一般以调制数据信号(如某种载波或其它传输机制)来具体表达计算机可读取指令、数据结构、程序模块或其它数据,包括任何信息传递媒介。术语“调制数据信号”意为某种信号,其一种或多种特征能以某种方式设定或改变,以在信号中编码信息。举例而言(但非限制),通信媒介包括有线媒介(如有线网络或直接线缆连接)和无线媒介(如声波、RF、红外以及其它无线媒介)。上述任何一种的组合也应当包括在计算机可读取媒介的范围内。
系统存储器130包括易失和/或不易失存储器形式的计算机存储媒介,如只读存储器(ROM)131和随机访问存储器(RAM)132。在ROM 131中一般存储着一个基本输入/输出系统133(BIOS),包含(如在启动期间)帮助在计算机110内元素间传输信息的基本过程。RAM 132一般包含可立即由处理单元120的数据和/或正在处理单元120上执行的程序模块。举例而言(但非限制),图1图示了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110还可以包括其它可擦除/不可擦除、易失/不易失的计算机存储媒介。仅举例而言,图1图示了一个读取或写入不可擦除的不易失磁媒介的硬盘驱动器141、一个读取或写入可擦除的不易失磁盘152的磁盘驱动器151,和一个读取或写入可擦除的不易失光盘156(如CD-ROM或其它光媒介)的光盘驱动器155。其它可以在该示例性操作环境中使用的可擦除/不可擦除、易失/不易失的计算机存储媒介包括(但不限于)盒式磁带、闪存卡、数字万用盘、数字录影带、固态RAM、固态ROM等等。硬盘驱动器141一般通过一个不可擦除存储器接口(如接口140)与系统总线121相连,而磁盘驱动器151和光盘驱动器155一般通过一个可擦除存储器接口(如接口150)与系统总线121相连。
上面所讨论并在图1中图示的这些驱动器和与其相关的计算机存储媒介为计算机110提供对计算机可读取指令、数据结构、程序模块和其它数据的存储。举例而言,在图1中,硬盘驱动器141被图示成存储着操作系统144、应用程序145、其它程序模块146和程序数据147。请注意这些部分可以与存储操作系统134、应用程序135、其它程序模块136和程序数据137相同,也可以不同。这里对存储操作系统144、应用程序145、其它程序模块146和程序数据147给予了不同的编号,以说明它们至少可以是不同的拷贝。
用户可以通过输入设备如键盘162和指点设备161(普通称为鼠标、轨迹球或触摸板),将命令和信息输入计算机110。其它的输入设备(未示出)可以包括话筒、游戏杆、游戏手柄、卫星天线、扫描仪、视频输入等等。这些以及其它的输入设备通常通过与系统总线121连接的用户输入接口160连接到处理单元120,但也可能由其它接口和总线结构来连接,如并口、游戏口或通用串行总线(USB)。监视器191或其它类型的显示设备也通过一个接口(如视频接口190)连接到系统总线121。除监视器以外,计算机还可以包括其它外围输出设备,如扬声器197、打印机196和视频输出,它们可以通过输出外围接口195来连接。
计算机110可以使用与一个或多个远端计算机(如远端计算机180)的逻辑连接在一个联网环境中运作。远端计算机180可能是另一台个人计算机、服务器、路由器、网络外设(如打印机)、网络PC、对等设备或其它普通网络节点,一般包括上面关于个人计算机110所描述的多个或所有元素,尽管在图1中只图示了存储器存储设备181。在图1中所描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可以包括其它的网络。这样的联网环境在办公室、企业范围计算机网络、内联网和互联网中是很普通的。
当在一个LAN联网环境中使用时,个人计算机110通过一个网络接口或适配器(如网络接口卡(NIC))170连接到LAN 171。当在一个WAN联网环境中使用时,计算机110一般包括一个调制解调器172或其它用以在WAN173(如互联网)上建立通信的手段。调制解调器172(可以是内置或外置的)可以通过网络用户输入接口160或其它适当的机制连接到系统总线121。在联网环境中,关于个人计算机110所描述的程序模块(或其部分)可以存储在远端存储器存储设备中。举例而言(但非限制),图1将远端应用程序185图示成驻留在存储器设备181上。能够明白,所示出的网络连接是示例性的,也可以使用在计算机间建立通信链路的其它手段。
在下面的描述中,除非另外指出,本发明将参照由一台或多台计算机执行的动作或操作的符号表示来描述。这样,就能够理解这样的(有时候称为由计算机执行的)动作或操作包括由计算机的处理单元操作以结构化形式表示数据的电子信号。这一操作在计算机的存储器系统中的位置转换或维护数据,这将以本领域的普通技术人员所充分理解的方式来重新配置或者改变该计算机的操作。在其中维护数据的数据结构是具有由该数据的格式所定义的特定属性的存储器的物理位置。然而,虽然本发明以前面的上下文环境所描述,但并不意味着限制,如本领域的普通技术人员将明白的那样,此后所描述的多种动作和操作也可以用硬件来实现。
图2图表示构成网络模型和本发明的部件的某些部分间的相互关系。在正常操作中,联网消息由应用200通过网络栈202发送给外围设备204,在该外围设备向其它的网络上的设备和应用发送消息,并从其它设备和应用接收消息。网络栈202包括一个或多个中间软件层206。从应用200所发送的数据穿过这些中间软件层206,在这些中间软件层可以在数据上执行特定的操作,如将数据打包、可靠数据传输、数据加密和计算消息摘要。
转换208被用来将处理单元120从对中间软件层206执行网络栈操作中卸载。虽然转换208没有单独示出,但应当注意转换208可以集成到网络栈202的最高的中间层中。数据通过管道210发送给外围设备204,使外围设备204能执行网络栈操作。在这一层次结构中,中间软件层不需要排他地驻留在主机或外围设备中,它允许任何中间层或者完全卸载,或者仍保留在主机中,或者是这两者的某种组合(如卸载一个或多个特定的连接)。而且,管道可以层叠在管道的上面(如一个IPSEC管道可以层叠在一个TCP管道的上面)。连接可以是可靠与不可靠数据传输及单址广播与多址广播数据传输的任意组合。如果某个中间层仍保留在主机中,则该主机更新在外围设备204中的缓存变量(如下面所描述的那样)。举例来说,可以卸载一个用于传输层的对于连接的传输控制块(TCB)状态入口,同时将一个用于网络层的路由缓存入口(RCE)卸载到外围设备204。转换208接着通过共享同一RCE的网络栈202发送对于一个不同的TCB的流量,同时对该卸载了的TCB则通过管道210发送流量。
转换208通过向中间层206发送一个卸载请求来启动卸载。卸载请求包括能帮助外围设备204确定其是否能成功卸载该连接的资源信息。各个中间层206或者拒绝该卸载请求,或者将资源信息添加到该卸载请求中并将该卸载请求发送给在网络栈202中的相邻软件层。当外围设备204接收到该卸载请求后,它计算其是否具有可用于卸载该连接的资源。如果卸载不可能,则外围设备204拒绝该卸载请求。不然,则外围设备204接受该卸载请求,并为该连接分配资源。外围设备204通过向中间软件层206发送一个具有参数链表的完成消息,来完成该卸载请求。参数链表向中间软件层206和转换208提供信息,使该中间软件层206和转换208能与该外围设备通信。各个中间软件层从该参数链表中删除用于其层次的信息。
当一个中间层206接收到对于卸载的完成消息时,该中间层206将其状态传递给外围设备204。每个状态可以具有三种变量:CONST、CACHED和DELEGATED。一个状态可以具有所有三种变量,或者这三种变量的某个子集。CONST变量是在所卸载连接的生命期间不变的常量,它们在连接上载时不读回到这些层中。主机处理单元120维持对CACHED变量的拥有权,并确保将在主机处理单元中对CACHED变量的任何变化都更新到外围设备204中。改变CACHED状态的控制消息由网络栈202处理。其结果是,在上载连接时主机将写入但不需要读回CACHED变量。主机处理单元120将DELEGATED变量的拥有权传递给外围设备204。DELEGATED变量在卸载发生时写入一次,并在卸载终止时读回。通过只传回DELEGATED变量,就最小化了将连接传回主机的开销。必须在网络栈202和因多种原因被卸载(即委托)的外围设备204间共享(如控制)的状态被清晰地在网络栈202和管道210(如在TCP卸载中的IP ID)之间分开,这样网络栈202和外围设备204两者各自拥有该状态的一个排他的部分。在需要时(如为了统计),主机处理单元120向外围设备204查询DELEGATED变量。主机处理单元120还可以查询CONST或CACHED变量以作诊断。将状态分成三类使网络栈202能清楚地与管道210共存。应当注意,状态可以包括在卸载请求中。这可以做到,如果该状态不包含委托的状态变量,或者包含在启动卸载请求和完成卸载请求间不变的委托的状态变量。
外围设备204或主机确定什么时候上载一个卸载了的连接。上载由外围设备204或者由转换208来启动。一旦启动了上载后,外围设备204就完成所有具有适当状态的未完成的请求,并将最高的中间层的委托状态传递给转换208。转换208将任何进一步的传输请求排队,并停止发送接收缓冲。转换208命令最高的中间层接管对委托状态的控制。最高的中间层接管对委托状态的控制,并向转换208发送一个完成消息。在转换208接收到该完成消息后,转换208向外围设备204确认该上载,这使外围设备204能释放不再使用的资源。
应当注意,最高的中间层将对于所卸载连接的输入数据包转发给外围设备以作处理,直至其接管对委托状态的控制。数据包可能在外围设备204将委托状态传递给转换208的时候到最高的中间层接管对委托状态的控制的时候之间到达。在外围设备204将委托状态传递给转换208后,就可不再处理输入数据包。在接收到输入数据时,外围设备204将一个差错消息发送给最高的中间层,指示一个上载正在进行。该差错消息通知最高的中间层停止转发输入数据并缓冲进一步的数据,直至最高的中间层接收到委托状态。可作替换的是,以在外围设备204上额外缓冲存储器的代价,可以将输入数据转发给外围设备204,使该外围设备204缓冲数据。
可以由一个中间软件层206将多个连接卸载到外围设备204。由中间软件层206维护一个上层状态对象(即在该中间软件层206上面的层的状态对象)数目的参考计数器,这指涉用于卸载的中间软件层的状态对象。这里所用的状态对象是这里所用的分类成CONST、CACHED或DELEGATED的用于特定层的状态变量的某个集合。如果一个中间软件层的卸载了的状态对象没有其上面某一层对其的指涉,则中间层206向外围设备204发送一个消息,以上载对于中间层的状态对象,并将委托状态变量发送给中间层206。外围设备204删除对于中间层206的状态对象,而中间层206将一个完成消息发送给转换208。
现在请看图3,现已描述了总体概念,而本发明的细节将以某个实施例来描述,在该实施例中外围设备204是NIC 170,转换208是一个传输层接口转换(TLI)306,而网络栈202包含一个传输层300、一个网络层302和一个分割层304。网络层302也称为路径层,而分割层304也称为邻接层。
在操作中,联网消息由应用200通过网络栈202传送给NIC 170。从应用200发送的数据穿过TLI转换306,该转换控制该数据下传给基于主机的网络栈202还是管道308。请注意TLI转换306可以集成到网络栈202的最高层中。在网络栈202中的软件层从应用200接收数据,以包的形式将其打包,并将其通过NDIS微驱程310发送给外围设备硬件314。在数据包穿过栈202时网络栈202可能执行的其它任务包括数据加密、可靠数据传输,以及计算某种消息摘要(如对数据包求和校验或CRC校验)。这些任务中的许多由处理单元120执行,并且是依赖处理器的。
TLI转换306用来通过将用于连接的数据经管道308(以及管道驱程312)发送给NIC 170而将处理单元120从执行栈操作中卸载。那些本领域的普通技术人员将明白,NDIS微驱程310和管道驱程312的上边界就是Microsoft操作系统中的NDIS API。为解释起见,将用一个基于传输控制协议(TCP)的协议栈来解释本发明。然而,本领域的普通技术人员将明白,利用本发明的原则,还可以使用许多种类的外围设备,可以卸载其它的网络栈。例如,也可以卸载基于流控制传输协议(SCTP)或用户数据报协议(UDP)的协议栈。而且,本发明还可以用来卸载更高的功能协议,如互联网小型计算机系统接口(iSCSI)、网络文件系统(NFS)或通用接口文件系统(CIFS)。
发生卸载有许多理由。举例来说(但非限制),某个系统管理员可以选择某个特定的服务来卸载。如果连接上的流量(以字节或包的数量而言)消耗数量重大的资源,则可以卸载某个特定连接。可以卸载多种服务。例如,可以卸载安全协议,如IPSEC。可以用策略来驱动卸载。例如,某个管理员可以具有一个策略,先卸载所有来自某个组织内的连接。所使用的系统资源(如CPU占用率、数据缓存使用率、页表缓存使用率、存储器带宽)也可以导致主机处理器卸载连接。
图4图示了卸载一个TCP连接所采取的步骤。使用了一个三个阶段的过程。总的来说,这三阶段的过程就是分配卸载该TCP连接所需要的资源,提供对300、302、304、306各层的句柄,以及将300、302、304、306各层的状态卸载到NIC 170。在卸载转换期间,TLI转换306缓冲从应用200发送的所有消息。可作替换的是,传输层300缓冲这些数据。当卸载完成后,所缓冲的数据用和卸载数据传输相同的机制传输到NIC 170。当在卸载转换期间接收到输入包后,NIC 170接着将这些数据向上移动穿过层300、302、304、306,直至将传输层委托状态传递到NIC 170。
TLI转换306通过向传输层300发送一个卸载请求来启动卸载(行400)。该卸载请求包括一个对下一层的本地状态的指针(如用于传输层300的TCB指针、用于网络层302的RCE指针、用于分割层304的ARP表指针或用于NDIS微驱程310的NDIS微端口指针)、卸载类型(用于TLI转换306的TCP、用于网络层302的IPv6等),以及帮助NIC 170确定其是否能成功卸载该TCP连接的资源信息。TLI转换306还可以向NIC 170提供分派表。传输层300或者拒绝该卸载请求,或者将TCP资源信息加到TLI转换资源信息上,向网络层302发送一个卸载请求(行402)。
网络层302接收该卸载请求,并且或者拒绝该卸载请求,或者将网络资源信息加到TCP资源信息和TLI转换资源信息上,向分割层304发送一个卸载请求(行404)。网络层302还可以向NIC 170提供分派表。分割层304或者拒绝卸载该连接,或者限制资源信息加到网络资源信息、TCP资源信息和TLI转换资源信息上,向NIC 170发送一个卸载请求(行306)。
NIC 170接收该卸载请求,并计算其是否具有可用于卸载该TCP连接的资源。如果NIC确定该卸载不可能,就拒绝该卸载请求。如果NIC确定该卸载是可能的,则接受该卸载请求,并为该连接分配资源(如TCB、路由缓存入口(RCE)、地址解析协议(ARP)表入口(ATE))。NIC 170创建一个参数的链表和分派表以传递给层300、302、304和306,并通过向分割层304发送一个具有该参数链表的完成消息来完成该卸载请求(行408)。这些参数包括对于300、302、304、306各层的卸载句柄和分派表。在这里所使用时,卸载句柄意为一种使软件层能与外围设备通信的机制。举例而言(并非限制),该卸载句柄可以是一个基于指针的句柄、一个用作数组查找的整数值、一个哈希表(如一个哈希函数)、一个软件层(或网络栈)与外围设备间的通信信道,或者一组由软件层传下来而由外围设备用来查找状态对象的参数。
分派表被用来直接向NIC 170发送数据或直接从NIC 170接收数据。分派表还可以用来提供诊断。举例来说,可以增加一个软件层来监视系统和探测差错,以确保系统正恰当地发挥作用。而且,如果需要,分派表还可以由能增加额外功能的软件层来补缀。例如,可以增加一个软件层来提供一个过滤驱程的功能。补缀一般通过抓取指向所增加的函数所插入的原先函数的指针,并将其重新引导(即指向)到所增加的函数来完成。在插入了补缀后,所增加的函数执行其功能,并在需要原先的功能时调用原先的函数。
分割层304将用于分割层的卸载句柄和分派表存储在其ARP表入口中,以便在目标MAC地址变化或封装类型变化时容易地更新。而后分割层304更新与ATE相关联的NIC 170的状态(行410)。分割层304将其状态从链表中删除,并将链表中留下的信息转发给网络层302(行412)。
网络层302存储用于网络层302的卸载句柄和分派表。网络层302也将其状态发送给NIC 170(行414)。网络层302将网络层信息从链表中删除,并向传输层300发送一个具有具有参数链表和分派表的完成消息(行416)。网络层302可以将其接收的用于卸载后状态的IP分段转发给NIC 170以作处理,或者可以在网络层中处理这些IP分段并将它们发送给传输层300。
在某个可替代实施例中,层的状态对象与卸载请求一起发送。举例来说,分割层状态对象和网络层状态对象与卸载请求一起发送,并且只有当缓存状态在卸载请求与完成事件之间变化时,才更新该状态。如果委托状态不出现,或者不能在卸载请求与卸载请求的完成之间变化,则整个层的状态对象只能与卸载请求一起发送。然而,即使委托状态出现,并能在卸载请求与卸载请求的完成之间变化,被分类成CONST的状态变量也能与卸载请求一起发送。
传输层300存储用于传输层的卸载句柄,并将其状态发送给NIC 170(行418)。如果有任何未完成的发送或接收缓冲。则传输层300将该缓冲返回给TLI转换306。一旦传输层300开始将该缓冲传递回TLI转换306,则TLI转换306将停止向传输层300发送缓冲,并将它们排列起来,等待传输层向TLI转换204发送一个具有参数链表和分派表的完成消息。传输层300返回所有缓冲,而后发送该完成消息(行420)。当TLI转换306接收到该完成消息后,就将发送和接收缓冲传输给NIC 170(行422)。TLI转换306使用分派表来将正在和将要接收的缓冲传送给NIC 170以作处理。在卸载请求等待完成期
间,300、302、304各层或者拒绝对于所卸载状态对象(即与某层相关联的状态对象)的新的卸载请求,或者将它们排列起来直至卸载完成。
如果传输状态没有卸载到NIC 170,传输层300仍然具有处理输入TCB数据并将这些数据传递到TLI转换306的能力。如果TCB数据在卸载中到达,传输层300可以或者保持这些数据,或者处理这些数据并将其传递给TLI转换306。在传输层300将其状态发送给NIC 170(行418)时到TLI转换将缓冲传输给NIC 170(行422)时之间,通过网络栈202来到的输入TCB数据都被发送给NIC 170。
对于后续的卸载请求,网络层302和分割层304将它们在以前的卸载从NIC170所接收的卸载句柄传递给NIC170。这告知NIC 170用于网络层302和分割层304的资源已经分配过了,这能保存NIC的资源并加快卸载。
如前面所指明的那样,300、302、304层将其状态传递给NIC 170。每个状态具有三种变量:CONST、CACHED和DELEGATED。CONST变量是在所卸载连接的生命期间不变的常量,它们在连接终止时不读回到这些层中。主机处理单元120维持对CACHED变量的拥有权,并确保将在主机处理单元中对CACHED变量的任何变化都更新到NIC 170中。其结果是,主机将写入但不会读回CACHED变量(除非系统诊断要求如此)。主机处理单元120将DELEGATED变量的拥有权传输给NIC 170。DELEGATED变量在卸载发生时写入一次,并在卸载终止时读回。通过只传回DELEGATED变量,就最小化了将连接传回主机的开销。在需要时(如为了统计),主机处理单元120向NIC 170查询DELEGATED变量。
用于传输层300的CONST变量包括目标端口、来源端口、一个指示存在‘照料’地址变化的移动IP情形的标志、SEND和RECV窗口缩放因子,以及用于网络层302的NIC句柄。用于传输层300的CACHED变量是TCP变量和IP变量。TCP变量包括有效MSS、将由NIC 170复制到接收指示中的字节数量、一个关闭Nagling的标志、一个指示需要Keep-Alive的标志,以及Keep-Alive设定(即探测的间隔、数量,以及增量)。IP变量包括TOS和TTL。DELEGATED变量包括当前TCP状态、用于下一RECV的顺序号(即RCV.NEXT)、接收窗口尺寸(RCV.WND)、用于第一个Un-Acked数据的顺序号(SND.UNA)、用于下一SEND的顺序号(SND.NEXT)、所发送的最大顺序号(SND.MAX)、最大发送窗口(MAX_WIN)、当前充塞窗口(CWIN)、慢启动阈值(SSTHRESH)、平滑了的RTT(8*A)、增量(8*D)、当前重发计数、剩余用于下一次重发的时间,以及要显示的时间戳。
用于网络层302的CONST变量包括(对于IPv4或IPv6的)目标IP地址和(对于IPv4或IPv6的)来源IP地址。用于网络层302的CACHED变量包括用于分割层304的NIC句柄。用于网络层302的DELEGATED变量包括IP包ID起始值。用于分割层304的CACHED变量包括ARP地址和一个指示报头格式(如LLC/SNAP[逻辑链路控制/子网访问协议]或DIX[Digital、Intel、Xerox])的标志。
传输层状态包括一个对于网络层的句柄,而网络层状态包括一个对于分割层的句柄,因为网络层状态可以在多个连接间共享而分割层状态可以在多个路径(如IP别名)间共享。这一层次结构因几个原因而维持。一个连接要求一个对于网络层的句柄,因为IP ID命名空间必须在每个路径基础上跨越所有已卸载的连接来管理。一个路径则要求一个对于分割层的句柄,因为一个路由更新可以改变下一跳的地址,从而指向一个新的MAC地址。这一层次结构也精简了所需要由NIC维护的状态的数量。举例来说,一个对于IPv4的ARP更新可以改变从一个IP地址到一个MAC地址的映射(如一个在服务器上的故障切换接口)。主机将MAC地址作为一个缓存的变量来维护,从而只需要进行一次缓存的状态的更新,则所有连接都故障切换到新的接口。
当一个TCP连接卸载后,NIC 170负责对其发送的包赋予包标识符(如IPID)。IP ID以每个接口基础或者以每个层状态对象基础来卸载。NIC 170被赋予IP ID命名空间的一部分。在某一实施例中,NIC 170被赋予IP ID命名空间的一半,并被给予一个IP包ID起始值,以在将网络状态传递给NIC 170时使用。NIC 170用以下公式来在其发送的IP包上产生一个IP ID:
Cur_IPID=[(Start_IPID_For_This_Path)+(Counter_For_This_Path)mod 32K]mod 64K
Counter_For_This_Path=Counter_For_This_Path+1
当已卸载的连接上载或失效时,NIC 170将其将使用的下一个IPID值传输给网络层,以存储用于下一次发生的卸载,而主机处理单元120接着使用其所被赋予的IP ID命名空间的部分。主机处理单元120可以使用全部的IP ID命名空间,但计数器需要在每次发生卸载时设定。
NIC 170将数据按所接收的顺序放入接收缓冲,并按它们所传送用于卸载了的连接的顺序填充应用缓冲。许多应用在传送接收缓冲前等待一个接收指示。在某一实施例中,NIC 170具有一个全局缓冲池(pool),在用于一个连接的数据到达而没有传送应用接收缓冲时使用。全局缓冲池被跨越卸载了的连接而使用,可以用来实现:1)处理打乱了次序的TCP传输;2)拼合IP数据报分段;3)一种缓冲复制算法(而不是某种零复制算法),如果该应用传送对于零复制算法而言太小的缓冲。可作替换的是,如果不需顾虑资源的高效使用,则可以使用一种按每个连接的缓冲池。但是,如果某个NIC不支持按每个连接的缓冲池,或者由于缺乏系统资源(如没有足够的资源来将应用缓冲插入存储器),则使用全局缓冲池。
现在转到图5a-5d,NIC 170具有一棵倒转的树500,在卸载发生后表示该卸载。在这些图中,点线表示由NIC 170分配的新状态。在图5a中,NIC 170具有一个ARP入口502,连接到一个路由缓存入口504,而路由缓存入口504连接到一个TCP入口506。如果,举例来说,所有流量都去到一个路由,则下一跳将总是到同一个ARP入口502。如果路由缓存入口504被用于下一次TCP连接卸载,则唯一新的资源是新的卸载了的TCB。这样当在网络栈202向下启动一次卸载时,已经卸载其状态的中间软件层(如网络层302和分割层304)将简单地插入在以前的卸载请求中所分配的NIC产生的卸载句柄。NIC170只需要分配新的资源(如TCP入口508),并将用于这些新资源的卸载句柄向上发送回网络栈202。该倒转的树500现在具有连接到路由缓存入口504的TCP入口508(见图5b)。这一方法节省了NIC资源,并加速了卸载。而且,如果某个缓存变量的状态改变,则只有一个结构需要更新。如果用于管道中多个软件层的所有状态都被卸载成一个入口,则在最高软件层下面的任何状态更新都需要多次更新。
图5C以某种更为复杂的配置显示了该倒转的树500。有两个路由缓存入口504和510穿过ARP表入口502。TCP连接506和508使用路由缓存入口504。TCP连接512和514则涉及路由缓存入口510。如果发生任何ARP更新(如某个多宿服务器的接口进行故障切换),则只有入口502必须更新。这使潜在的成钱上万的连接能只需要对NIC 170的一次更新就故障切换到某个新的接口。图5d显示了在发生一次路由更新后将两棵独立的倒转的树(入口502-508和入口510-516)合并成一棵倒转的树500。在路由更新前,对于路由缓存入口510的下一跳的ARP表入口是ARP表入口516。在路由更新后,下一跳的ARP表入口是ARP表入口502。这样,如果网络栈状态被卸载成一个入口,倒转的树的使用就使路由更新能对NIC 170作为一个交易来处理,而不是成千上万次更新。
现在转到图6,一旦一个连接被卸载到NIC 170后,就有两条到NIC 170的路径。第一条路径是通过NDIS微驱程310通过分割层304、网络层302和传输层300。第二条路径通过该卸载后的连接608,成为一个管道。从主计算机的观点来看,这两条路径就通信而言一切都是一样的。缓存的状态变量将这两条路径与在NIC 170中按前面所指示的那样更新缓存状态变量的处理单元120同步。缓存变量的更新以箭头602、604、606来指示。
当一个输入数据包到达时,NIC 170确定该输入数据包是通过卸载了的路径还是未卸载的路径(即通过NDIS微驱程310的NDIS路径和层304、302、300)。在某一实施例中,NIC 170通过在来源与目标TCP端口号、来源与目标IP地址以及协议类型上执行一个哈希函数来确定哪条路径来发送输入数据包。如果该哈希符合所卸载连接的参数(即遍历一个哈希链并完全符合该连接的所有部分),则使用管道608。如果该哈希不符合哈希索引,则使用通过网络栈202的未卸载路径。更新缓存状态的控制消息由主机处理。这导致NIC170不需要处理所卸载连接以外的任何控制消息,如ICMP、DNS和RIP消息。
本发明提供用户使用已有工具(如Netstat)获取多种信息(包括在主机上的所有连接、连接参数如协议类型、本地和远端绑定的端口和IP地址、连接状态、进程ID等等)来得到统计的能力。统计在本发明中统计一每层或每个层状态对象为基础来搜集。在一层内,可以将层状态对象分组来搜集跨越多个层状态对象的统计。例如,对网络层的统计可以分离,使统计对于所使用的每个协议(如IPv4和IPv6)。与CONST和CACHED状态变量相关的统计由主机提供,而与DELEGATED状态变量相关的统计由外围设备204提供。当作出一个查询时,与DELEGATED状态变量相关的统计被附加到与CONST和CACHED状态变量相关的统计上。
还有一类跨越主机层状态和外围设备层状态的整个分组而累加的统计,如包计数。另一种统计是对系统中某个功能的状态的列表(如对系统中每个TCB状态的列表)。对TCB的统计是由主机跟踪的统计和由外围设备跟踪的统计的组合。同样,对包计数的统计是主机层状态统计和外围设备层状态统计的和。
在下面的表1中图示了用于TCP MIB(管理信息基数)的主机和外围设备204间的分离的一个示例,而在下面的表2中显示了IPv4的MIB统计。在这些表中,第一列是数据域,第二列指明是外围设备还是主机负责跟踪统计,而第三列指示该数据域如何跟踪。外围设备所负责的统计以每个层状态对象或每层为基础来跟踪。这里所用的“每层”意为统计按每层每外围设备每协议来跟踪。然而请注意,当从主机状态和来自外围设备的状态同步统计时,一般以每个协议为基础来表现。主机网络栈可以不查询外围设备而产生的统计被归类成“栈具有完备的信息”或“只由栈完成”。“栈具有完备的信息”类指示外围设备知道统计,但不跟踪统计。“只由栈完成”类指示外围设备不知道统计。适配器统计是通过正规NDIS接口来查询的。适配器统计包括如已发送字节、已接收字节等变量。
  TCPStats结构数据域   责任   如何跟踪数据域
  ts_RtoAlgorithm   主机网络栈   栈具有完备的信息
  ts_toMin   主机网络栈   栈具有完备的信息
  ts_RtoMax   主机网络栈   栈具有完备的信息
  ts_MaxConn   主机网络栈   栈具有完备的信息
  ts_ActiveOpens   主机网络栈   只由栈完成
  ts_PassiveOpens   主机网络栈   只由栈完成
  ts_AttemptFails   主机网络栈   只由栈完成
  ts_EstabResets   主机网络栈   栈具有完备的信息
  ts_CurrEstab   主机网络栈与外围设备   每层
  ts_InSegs   主机网络栈与外围设备   每层
  ts_OutSegs   主机网络栈与外围设备   每层
  ts_RetransSegs   主机网络栈与外围设备   每层
  ts_InErrs   主机网络栈与外围设备   每层
  ts_OutRsts   主机网络栈与外围设备   每层
  ts_NumCons   主机网络栈   栈具有完备的信息
表1TCP MIB统计分离
ts_RtoAlgorithm是一个用以确定用于重发未应答字节的超时值的某个算法的值。ts_RtoMin是一个由用于重发超时的TCP实现所允许的最小值的以微秒测量的值。ts_RtoMax是一个由用于重发超时的TCP实现所允许的最大值的以微秒测量的值。ts_MaxConn是可以支持的TCP连接的总数。ts_ActiveOpens是TCP连接从CLOSED状态向SYN_SENT状态直接转变的次数。ts_PassiveOpens是TCP连接从LISTEN状态向SYN_RCVD状态直接转变的次数。ts_AttemptFails是TCP连接从SYN_SENT状态或SYN_RCVD状态向CLOSED状态直接转变的次数加上从SYN_RCVD状态向LISTEN状态直接转变的次数。ts_EstabResets是TCP连接从ESTABLISHED状态或CLOSE-WAIT状态向CLOSED状态直接转变的次数。ts_CurrEstab是当前状态是ESTABLISHED状态或CLOSE-WAIT状态的TCP连接数。ts_InSegs是已接收的分段的总数,包括那些错误接收的分段。ts_OutSegs是已发送的分段的总数,包括那些在当前连接上的的分段,但不包括那些只包含重发字节的分段。ts_RetransSegs是已重发的分段的总数。ts_InErrs是错误接收的分段(如错误的TCP求和校验)的总数。ts_OutRsts是包含RST标志发送的TCP分段的数量。ts_NumCons是当前存在的TCP连接的总数。
  IPSNMPInfo结构数据域   责任   如何跟踪数据域
  ipsi_Forwarding   主机网络栈   只由栈完成
  ipsi_DefaultTTL   主机网络栈   栈具有完备的信息
  ipsi_InReceives   主机网络栈与外围设备   每层
  ipsi_InHdrErrors   主机网络栈与外围设备   每层
  ipsi_InAddrErrors   主机网络栈   只由栈完成
  ipsi_Forwdatagrams   主机网络栈   只由栈完成
  ipsi_UnknownProtos   主机网络栈   只由栈完成
  ipsi_InDiscards   主机网络栈与外围设备   每层
  ipsi_InDelivers   主机网络栈与外围设备   每层
  ipsi_OutRequests   主机网络栈与外围设备   每层
  ipsi_RoutingDiscards   主机网络栈   只由栈完成
  ipsi_OutDiscards   主机网络栈与外围设备   每层
  ipsi_OutNooutes   主机网络栈与外围设备   每层
  ipsi_ReasmTimeout   主机网络栈   栈具有完备的信息
  ipsi_ReasmReqds   主机网络栈与外围设备   每层
  ipsi_ReasmOKs   主机网络栈与外围设备   每层
  ipsi_ReasmFails   主机网络栈与外围设备   每层
  ipsi_FragOKs   主机网络栈   只由栈完成
  ipsi_FragFails   主机网络栈   只由栈完成
  ipsi_FragCreates   主机网络栈   只由栈完成
  ipsi_NumIf   主机网络栈   只由栈完成
  ipsi_NumAddr   主机网络栈   只由栈完成
  ipsi_NumRoutes   主机网络栈   只由栈完成
表2IPv4MIB统计分离
ipsi_Porwarding是一个提供对主机是否担当对于转发由主机接收(但未指向主机)的数据报的IP路由的指示的值。ipsi_DefaultTTL是在传输层协议不提供TTL值时,插入由该实体发生的数据报的IP报头的Time-To-Live数据域的缺省值。ipsi_InReceives是从接口接收的输入数据报的总数,包括那些错误接收的数据报。ipsi_InHdrErrors是由于在其IP报头中的差错(包括错误求和校验、版本号不符、其它格式差错、存活时间超出、在处理其IP选项中发现的错误等等)而丢弃的输入数据报的数量。ipsi_InAddrErrors是由于在其IP报头的目标数据域中的IP地址不是一个能在主机接收的可用地址而丢弃的输入数据报的数量。ipsi_Forwdatagrams是主机不是其最终IP目的地的输入数据报的数量,其结果是要尝试找到一个路由来将这些数据报转发到该最终目的地。ipsi_UnknownProtos是成功接收但由于某个未知或不支持的协议而丢弃的本地地址的数据报的数量。ipsi_InDiscards是未遇到问题阻止其继续处理但丢弃(如由于缺乏缓冲空间)的输入IP数据报的数量。ipsi_InDelivers是成功交付IP用户协议的输入数据报的总数。ipsi_OutRequests是本地IP用户协议(包括ICMP)作为对传输的回应而提供给IP的IP数据报的总数。ipsi_RoutingDiscards是选择来丢弃的路由入口(即使其有效)的数量。ipsi_OutDiscards是未遇到问题阻止其传输到其目的地但丢弃(如由于缺乏缓冲空间)的输出IP数据报的数量。ipsi_OutNoRoutes是由于未能找到路由来将其传送到其目的地而丢弃的IP数据报的数量。ipsi_ReasmTimeout是在其等待在主机重新组装时保持所接收分段的最大秒数。ipsi ReasmReqds是需要在主机重新组装的所接收IP分段的数量。ipsi_ReasmOKs是成功重新组装的IP数据报的数量。ipsi_ReasmFails是由IP重新组装算法所检测到的故障(如超时、差错等等)数量。ipsi_FragOKs是在主机成功分段的IP数据报的数量。ipsi_FragFails是由于其需要在主机分段但无法分段(如由于设置了其“不分段”标志)而丢弃的IP数据报的数量。ipsi_FragCreates是作为在主机分段的结果而产生的IP数据报分段的数量。ipsi_NumIf是可用的接口总数。ipsi_NumAddr是在系统中的唯一IP地址的总数。ipsi_NumRoutes是当前活动的路由的总数。
本发明还提供了一种从外围设备将一个卸载了的网络连接上载到主机的方法。有许多发生上载的原因。举例来说(但非限制),下面就提供了某些原因。路由可能改变,就要求将流量在某个不同的接口上发送。连接的流量表现可能变化成不再适合于卸载。例如,流量可能不够,或缺乏活动性,或流控制连接长过某个设定的时间(如没有接收到窗口更新)。而且,如果有太多的IP分段、太多的无序流量、使用超出带宽的数据、太多的重发、某保持活动超时、某安全关联失效且未更新,或有太多的数据要转发到外围设备,则外围设备可能不能支持特定的功能,流量表现可能不适合于卸载。对于上载一个已卸载连接的其它原因是由于资源问题。例如,外围设备可能缺乏资源来继续处理该连接。另一个连接可能具有比已卸载连接更高的优先级,而在外围设备资源的可用性低于某个阈值时上载某个连接可以使较高优先级的连接能继续使用外围设备资源。
系统资源可能改变,使主机处理器具有资源来处理一个已卸载的连接。管道可能要求与原先卸载不同的资源(如安全过滤的改变等等)。主机可以确定外围设备的资源是否接近能由主机处理单元更高效地处理一个卸载连接的阈值水平。举例来说,这些阈值可能包括流量大小(字节或包的数量)、分段的数量、窗口尺寸,以及卸载类型。
现在转到图7,上载由外围设备204(如NIC 170)或者TLI转换306启动。连接可能由于多种原因而上载。这些原因包括连接转移到另一个外围设备、发生某种媒介断开、太多无序分段、太多数据被转发给外围设备204、应用200非传送前缓冲、太多IP分段、某个低带宽连接,以及太多重发。
图7显示了由TLI转换306启动的上载(行700)。请注意,如果由NIC 170启动该上载,则行700不会出现。当上载启动后,NIC 170完成所有具适当状态的未完成请求,并将委托的传输层状态传递给交换层(行702)。NIC 170可能不会完成某次传输或完全填充某个接收缓冲,而只是确保所有的传输和接收状态与传递回传输层300的委托状态同步。TLI转换306排列任何更多的传送请求,并停止传送接收缓冲。TLI转换306命令传输层控制委托的传输状态(行704)。传输层300停止向NIC 170转发其接收到的任何片段,控制委托状态,并向TLI转换306发送一个完成消息(行706)。在TLI转换306接收到传输层300已控制委托传输状态的确认后,则向NIC 170确认上载(行708),使NIC 170能释放资源。传输层300还通知网络层302在完成消息发送给TLI转换前或后的上载连接(行710)。
应当注意,传输层300将用于已卸载连接的输入数据包转发给NIC 170以作处理,直至其控制委托状态(行706)。数据包可能在NIC 170将委托状态传递给TLI转换306时(行702)和传输层300控制委托状态时(行706)之间到达。一旦NIC 170将委托状态传递给TLI转换306后,它就不能再处理输入数据包。当NIC 170接收到一个用于上载连接的输入包时,就将一个差错消息发送给传输层300,指示正在进行上载并可能丢弃该输入包。差错消息通知传输层300停止转发输入数据。在某一实施例中,传输层300缓冲更多的数据,直至其接收到委托状态。
可以由中间软件层将多个连接卸载到外围设备。由中间软件层维护一个从中间软件层向外围设备卸载连接数量的参考计数器。如果该参考计数器为零,则向下一个中间软件层产生一个上载请求。这将使下一层的参考计数减小。如果下一层的参考计数为零,则该上载请求继续沿网络栈202向下。这一过程重复,直至某个中间软件层的参考计数为非零,或外围设备接收到该上载请求。网络层302将与NIC 170相关联的已卸载状态对象数量的参考计数减小。如果该参考计数为零,则没有TCB使用在NIC 170中对网络层302所分配的资源。当该参考计数为零时,网络层302向NIC 170发送一个消息,以对网络层302上载状态对象,并将委托网络状态变量发送给网络层302(行712)。NIC 170删除该状态,并将委托网络状态变量和NIC 170将使用的下一个IPID值发送给网络层302(行714)。网络层302存储这一信息,以在再次卸载连接时用作初始值。网络层302还向分割层304发送一个消息,使分割层304减小其参考计数(行716)。
分割层304也维护一个参考计数,并在接收到来自网络层302的消息时减小其参考计数。如果在分割层304中的该参考计数为零,则分割层向NIC 170发送一个消息,以删除分割层状态(行718)。NIC 170删除在NIC 170中的状态变量,并将其具有的任何委托状态变量发送给分割层(行720)。分割层304向网络层302发送一个完成消息(行722),而网络层302向传输层发送一个完成消息(行724)。
可能要求一个TCP连接在其生命期中的任何点都使用安全连接,而安全连接使用如IPSEC的安全协议。如果某个连接是IP安全的,而外围设备204不能处理安全性,则该连接不能卸载。当卸载某个安全IP连接时,安全性相关的状态被分成CONST、CACHED和DELEGATED变量,并按前面所描述的那样处理。主机处理单元120管理控制消息,如密钥重议。外围设备204使用这些安全性相关的状态变量来执行所有必要的IPSEC数据操作。
现在转到图8,图示了卸载一个安全连接的步骤。在后面的描述中,前面在图4中所描述的步骤仍是相同的,不再重复。为说明目的,将使用一个以传输模式操作的IPSEC连接。当传输层300将一个以TCP资源信息叠加到TLI转换资源信息上的卸载请求发送给IPSEC层800时,开始一个IPSEC层卸载(行402’)。IPSEC层800将一个以IPSEC资源信息叠加到TCP资源信息和TLI转换资源信息上的卸载请求发送给网络层302(行802)。资源需求包括IPSEC层需要卸载的安全关联的数量。如果NIC接受了该卸载请求,则其分配资源来处理这些安全关联。网络层302将一个具有参数链表和分派表的完成消息发送给IPSEC层,而不是传输层300(行804)。
当IPSEC层800接收到该完成消息时,如果IPSEC层状态前面没有卸载,也没有将安全关联中的委托状态的拥有权传输给NIC 170,则将该状态发送给NIC 170,作为内联描述符和外联描述符的一部分(行806)。如果该状态已经卸载,则IPSEC层增加一个参考计数。当该拥有权传输后,NIC 170解密和加密所有包。IPSEC层700将一个具有参数链表和分派表的完成消息发送给传输层(行414’)。
从IPSEC层800传递给NIC 170的CONST状态变量由将包分类到特定安全关联所需要的信息和对内联与外联安全关联特定的信息所组成。CONST变量包括来源和目的端口、协议类型,以及安全关联变量。
CACHED状态变量由用于判定安全关联生命期的因子和对内联与外联安全关联特定的信息所组成。CACHED变量包括基于加密了的字节的一个软限制(如在字节计数上的再键入)和一个硬限制(如在字节计数上的停止)、在安全关联可以使用的最大时间上的一个软限制(如在某个预定义记号上的再键入)和一个硬限制(如在某个预定义记号上的停止),以及在安全关联可以使用的最大休眠期上的一个硬限制(如最大休眠记号)。NIC 170遵从这些软限制和硬限制。当达到某个软限制时,NIC 170通知主机处理单元120。当达到某个硬限制时,NIC 170丢弃该安全关联。
DELEGATED变量由运行信息和对内联与外联安全关联特定的信息所组成。DELEGATED变量包括一个对以该安全关联加密或解密的字节的计数、该安全关联的生命期,以及该安全关联的休眠期。
现在转到图9,图示了从外围设备将一个已卸载的网络连接以IPSEC上载到主机。在后面的描述中,前面在图7中所描述的步骤仍是相同的,不再重复。在将完成消息发送给交换层306前或后,传输层300将上载连接通知给IPSEC层800(行710’)。减少与所有安全关联相关的参考计数。如果没有参考计数为零,则IPSEC层将一个完成消息发送给传输层300(行724’)。如果所卸载的连接是使用特定安全关联的最后一个连接,则IPSEC层800发送一个消息给NIC 170,以将委托状态变量上载到IPSEC层800(行900)。NIC170将该委托状态变量返回给IPSEC层800(行902)。NIC 170停止使用安全关联,并将属于安全关联的包通过栈202发送给IPSEC层800。IPSEC层800将一个完成消息发送给NIC 170,而NIC 170释放为安全关联所分配的资源(行904)。
如果安全关联参考计数为零,则IPSEC层800还发送一个消息给网络层302,将上载了的状态通知网络层302(行906)。在分割层304将一个完成消息发送给网络层302(行722)后,网络层302将一个完成消息发送给IPSEC层(行908)。IPSEC层800将一个完成消息发送给传输层(行724’)。
当卸载用于传输层300、网络层302、分割层304或IPSEC层800的状态时,有可能会到来一个更新(如ARP更新或RIP更新)。如果更新在接收到完成消息前发生,则简单地更新本地状态,并且如果该状态对象是与卸载请求一起发送的,则设置一个标志,以指示该状态已经变化。
如果在调用NIC的更新缓存状态的更新过程时发生更新,则存在某种可能的赛跑。如果那时有一个单独的消息更新该状态,使NIC更新过程被调用,则由于排程的问题,NIC有可能会先看到第二个调用,导致在原先的更新到达时使用陈旧的数据。如果使用了陈旧的数据,就会使用错误的入口,直至下一个更新到达,而这可能导致大量数据被发送到错误的地方,或者被丢弃。对这种赛跑有两种可能的解决方案。第一种解决方案是使完成消息总是执行第二个更新,如果大量数据到来,这可能导致递归问题。第二种解决方案是对更新增加一个序列号,以确保总是使用最近的序列号。
IPSEC支持的另一种运作模式是隧道,在其中数据包被作为安全连接的一部分而封装在一个新的包中。隧道表现成是一个对网络栈202的虚拟接口。卸载一个IPSEC隧道的步骤与在传输模式中卸载一个IPSEC连接的步骤相类似。在传输模式中,一个IPSEC报头位于IP报头和TCP报头之间。在隧道模式中,使用UDP来提供隧道。报头链是TCP报头到IPSEC报头到UDP报头到IP报头到分割层报头。为建立一个隧道,将描述已议定安全连接的一个内联描述符和一个外联描述符发送给外围设备。这些描述符包含用于该连接的状态变量和建立该连接所需要的其它信息。用于隧道的CACHED和DELEGATED状态变量与传输模式CACHED和DELEGATED状态变量相同。用于隧道的CONST状态变量包括来源和目标端口、本地地址、远端地址、协议类型,以及安全关联变量。
已描述了一种将网络栈连接卸载与上载到某个外围设备的方法,维护着与主机处理单元的某种紧密同步。该方法可以与许多协议一起使用。举例而言,可以使用的协议包括TCP、SCTP等等。
考虑到可以对其应用本发明的原则的许多可能的实施例,应当明白这里关于附图所描述的实施例只是说明性的,不能认为是限制发明的范围。举例而言,那些本领域的普通技术人员会明白,以软件示出的所说明实施例的元素可以以硬件实现,反之亦然,所说明实施例可以不背离本发明的精神而在排列与细节上加以修改。因此,这里所描述的本发明预期在以下权利要求及其等价物范围内的所有实施例。

Claims (34)

1、一种将一个已卸载的网络栈状态对象从由外围设备到交换层的第一条路径上载到由该外围设备经过多个软件层到该交换层的第二条路径的方法,这多个软件层包括一个中间层,该网络栈状态对象具有至少一个缓存状态和至少一个委托状态,该方法包含步骤:
在该中间层接收到该至少一个委托状态后,命令该中间层控制该至少一个委托状态;以及
在该中间层控制了该委托状态之后,将数据通过该第二条路径发送;
其中,所述缓存状态具有缓存变量,该缓存变量由CPU处理,而委托状态具有委托变量,该委托变量由外围设备处理。
2、如权利要求1所述的方法,其特征在于,进一步包括启动该已卸载网络栈状态对象的上载的步骤。
3、如权利要求1所述的方法,其特征在于,其中的多个层包括一个网络层,该外围设备具有一个网络委托状态,而该方法进一步包括步骤:
减少一个对该网络委托状态的已卸载传输连接数量的计数;以及
如果该计数减少到零:
向该外围设备发送一个消息,以将该网络委托状态发送到该网络层。
4、如权利要求1所述的方法,其特征在于,其中的多个层包括一个分割层,该外围设备具有一个分割委托状态,而该方法进一步包括步骤:
减少一个对该分割委托状态的已卸载网络层状态数量的分割计数;以及
如果该计数减少到零:
向该外围设备发送一个消息,以将该分割委托状态发送到该分割层。
5、如权利要求1所述的方法,其特征在于,进一步包括确定是否应当启动上载的步骤。
6、如权利要求5所述的方法,其特征在于,确定是否应当启动上载的步骤包括至少下列之一:
确定转发给该外围设备的数据数量是否高于某个最大阈值;
确定该外围设备是否不能处理某个函数;
确定某个应用是否没有预传送缓冲;以及
确定转发给该外围设备的数据数量是否低于某个最小阈值。
7、一种将一个已卸载的网络栈状态对象和至少一个相关联协议从由外围设备到交换层的第一条路径上载到由该外围设备经过多个软件层到该交换层的第二条路径的方法,这多个软件层包括一个中间层,该网络栈状态对象具有一个缓存状态和一个委托状态,该方法包含顺序执行的下述步骤:
完成具有某个传输状态的未完成请求;
将该委托状态传递给交换层;
在该外围设备中对中间层释放资源;以及
将数据通过该第二条路径发送;
其中,所述缓存状态具有缓存变量,该缓存变量由CPU处理,而委托状态具有委托变量,该委托变量由外围设备处理。
8、如权利要求7所述的方法,其特征在于,进一步包括启动该已卸载网络栈状态对象和该至少一个相关联协议的上载的步骤。
9、如权利要求7所述的方法,其特征在于,其中的多个层包括一个网络层,该外围设备具有一个网络委托状态,而该方法进一步包括步骤:
如果已上载所有从传输层卸载的连接,则将该网络委托状态发送给网络层。
10、如权利要求7所述的方法,其特征在于,其中的多个层包括一个分割层,该外围设备具有一个分割委托状态,而该方法进一步包括步骤:
如果已上载所有从网络层卸载的连接,则将该分割委托状态发送给分割层。
11、如权利要求7所述的方法,其特征在于,进一步包括确定是否应当启动上载的步骤。
12、如权利要求11所述的方法,其特征在于,其中的确定是否应当启动上载的步骤包括至少下列之一:
确定从交换层转发给该外围设备的数据数量是否高于某个最大阈值;
确定在已卸载网络栈连接中是否缺乏活动性;
确定该外围设备是否不能处理某个功能;
确定连接的性质是否不适于卸载;
确定如果外围设备的资源可用性低于某个阈值,是否上载能使较高优先级的状态对象使用外围设备资源;
确定某个应用是否没有预传送缓冲;以及
确定转发给该外围设备的数据数量是否高于某个最大带宽。
13、一种在具有多个软件层的主机中在主机和一个外围设备间同步一个已卸载网络栈状态对象的方法,其中每个软件层具有至少一个状态变量,其特征在于,包含步骤:
对于在该多个软件层中的每个软件层:
将该至少一个状态变量归类成常量变量、缓存变量和委托变量中的一种;
将该至少一个状态变量发送给该外围设备,以及
如果该至少一个状态变量被归类成缓存变量:
由该主机来处理该缓存变量;以及
如果该缓存变量变化,则在该外围设备中更新该缓存变量;
其中,所述常量变量在卸载协议栈期间不变,所述缓存变量由CPU处理,而所述委托变量由外围设备处理。
14、如权利要求13所述的方法,其特征在于,其中的多个软件层之一是传输层,而其中的该至少一个状态变量被归类成常量变量,该至少一个状态变量包括一个目的端口、一个来源端口、一个窗口缩放因子和一个卸载句柄中的至少一个。
15、如权利要求13所述的方法,其特征在于,其中的多个软件层之一是网络层,而其中的该至少一个状态变量被归类成常量变量,该至少一个状态变量包括一个目的IP地址和一个来源IP地址中的至少一个。
16、如权利要求13所述的方法,其特征在于,其中的多个软件层之一是TCP层,而其中的该至少一个状态变量被归类成缓存变量,该至少一个状态变量包括一个TCP变量和一个IP变量中的至少一个。
17、如权利要求13所述的方法,其特征在于,其中的多个软件层之一是网络层,而其中的该至少一个状态变量被归类成缓存变量,该至少一个状态变量包括一个卸载句柄。
18、如权利要求13所述的方法,其特征在于,其中的多个软件层之一是分割层,而其中的该至少一个状态变量被归类成缓存变量,该至少一个状态变量包括一个ARP地址。
19、如权利要求13所述的方法,其特征在于,其中的多个软件层之一是IP安全层,而其中的该常量变量包括一个来源端口、一个目的端口、一种协议类型和安全关联变量中的至少一个。
20、如权利要求13所述的方法,其特征在于,其中的多个软件层之一是IP安全层,而其中的该缓存变量包括一个在字节计数上的再键入、一个在字节计数上的停止、一个在某个预定义记号上的再键入、一个在某个预定义记号上的停止和安全关联可以使用的某个最大休眠期中的至少一个。
21、如权利要求13所述的方法,其特征在于,进一步包含步骤:
如果该至少一个状态变量被归类成委托变量:
由该外围设备来处理该至少一个状态变量;以及
如果该委托变量变化,则更新该至少一个状态变量。
22、如权利要求21所述的方法,其特征在于,其中的多个软件层之一是TCP层,而其中的该至少一个状态变量被归类成委托变量,该至少一个状态变量包括一个当前TCP状态、一个接收窗口尺寸、一个用于下一个RECV的顺序号、一个最大发送窗口、一个当前拥塞窗口、一个已发送最大顺序号和一个用于下一个SEND的顺序号中的至少一个。
23、如权利要求21所述的方法,其特征在于,其中的多个软件层之一是网络层,而其中的该至少一个状态变量被归类成委托变量,该至少一个状态变量包括一个IP包id起始值。
24、如权利要求21所述的方法,其特征在于,其中的多个软件层之一是IP安全层,而其中的该委托变量包括一个以某个安全关联加密或解密的字节的计数、一个该安全关联的生命期和一个该安全关联的休眠期中的至少一个。
25、一种在处理至少一个已卸载状态和一个相关联协议的外围设备中保存用于网络栈的多个中间软件层的资源的方法,该至少一个已卸载状态具有一个状态对象,其特征在于,该方法包含步骤:
对第一个已卸载状态存储一个初始状态对象;
从该外围设备接收一个用于该初始状态对象的初始卸载句柄;
如果该状态对象是该初始状态对象,则在后续卸载中将该初始卸载句柄传递给该外围设备;以及
如果该状态对象是一个新的状态对象,则在后续卸载中接收一个新的卸载句柄;
其中,所述状态对象包括常量变量、缓存变量和委托变量或其子集;
其中,所述常量变量在卸载协议栈期间不变,所述缓存变量由CPU处理,而所述委托变量由外围设备处理。
26、如权利要求25所述的方法,其特征在于,其中的该初始状态对象包括一个初始传输状态对象,该初始卸载句柄包括一个初始传输卸载句柄,该新的卸载句柄包括一个新的传输卸载句柄,而其中的如果该状态对象是该初始状态对象则在后续卸载中将该初始卸载句柄传递给该外围设备以及如果该状态对象是一个新的状态对象则在后续卸载中接收一个新的卸载句柄的这些步骤包括步骤:
如果该状态对象是该初始传输状态对象,则在后续卸载中将该初始传输卸载句柄传递给该外围设备;以及
如果该状态对象是一个新的传输状态对象,则在后续卸载中接收一个新的传输卸载句柄。
27、如权利要求25所述的方法,其特征在于,其中的该初始状态对象包括一个初始网络状态对象,该初始卸载句柄包括一个初始网络层卸载句柄,该新的卸载句柄包括一个新的网络层卸载句柄,而其中的如果该状态对象是该初始状态对象则在后续卸载中将该初始卸载句柄传递给该外围设备以及如果该状态对象是一个新的状态对象则在后续卸载中接收一个新的卸载句柄的这些步骤包括步骤:
如果该状态对象是该初始网络状态对象,则在后续卸载中将该初始网络层卸载句柄传递给该外围设备;以及
如果该状态对象是一个新的网络状态对象,则在后续卸载中接收一个新的网络层卸载句柄。
28、如权利要求25所述的方法,其特征在于,其中的该初始状态对象包括一个初始分割状态对象,该初始卸载句柄包括一个初始分割层卸载句柄,该新的卸载句柄包括一个新的分割层卸载句柄,而其中的如果该状态对象是该初始状态对象则在后续卸载中将该初始卸载句柄传递给该外围设备以及如果该状态对象是一个新的状态对象则在后续卸载中接收一个新的卸载句柄的这些步骤包括步骤:
如果该状态对象是该初始分割状态对象,则在后续卸载中将该初始分割层卸载句柄传递给该外围设备;以及
如果该状态对象是一个新的分割状态对象,则在后续卸载中接收一个新的分割层卸载句柄。
29、如权利要求25所述的方法,其特征在于,其中的至少一个已卸载状态包括一个传输状态对象、一个网络层状态对象和一个分割层状态对象,而其中的:
对第一个已卸载状态存储一个初始状态对象的步骤包含对第一个已卸载连接存储一个初始传输状态对象、一个初始网络层状态对象和一个初始分割层状态对象;
从该外围设备接收一个用于该初始状态对象的初始卸载句柄的步骤包含对第一个已卸载连接接收一个用于该初始传输状态对象的初始传输状态卸载句柄、一个用于该初始网络层状态对象的初始网络层卸载句柄和一个用于该初始分割层状态对象的初始分割层卸载句柄;
如果该状态对象是该初始状态对象,则在后续卸载中将该初始卸载句柄传递给该外围设备的步骤包含:
如果该传输状态对象是该初始传输状态对象,则在后续卸载中将该初始传输状态卸载句柄传递给该外围设备;
如果该网络层状态对象是该初始网络层状态对象,则在后续卸载中将该初始网络层卸载句柄传递给该外围设备;以及
如果该分割层状态对象是该初始分割层状态对象,则在后续卸载中将该初始分割层卸载句柄传递给该外围设备;以及
如果在该外围设备对该状态对象分配资源后,该状态对象是一个新的状态对象,则在后续卸载中接收新的卸载句柄的步骤包含:
如果该传输状态对象是一个新的传输状态对象,则在后续卸载中接收一个新的传输卸载句柄;
如果该网络层状态对象是一个新的网络层状态对象,则在后续卸载中接收一个新的网络层卸载句柄;以及
如果该分割层状态对象是一个新的分割层状态对象,则在后续卸载中接收一个新的分割层卸载句柄。
30、一种对一个具有已卸载到一个外围设备的至少一个中间软件层和至少一个网络状态对象的网络栈获取统计的方法,该网络状态对象具有一个常量状态变量、一个缓存状态变量和一个委托状态变量中的至少一个,该网络栈由一台主机控制而该已卸载的网络状态对象由该外围设备处理,该方法包含步骤:
对于每个中间软件层:
对主机所维护的统计从该主机获取统计;
对外围设备所维护的统计从该外围设备获取统计;
对主机与外围设备所维护的统计从该主机与外围设备获取统计;以及
将该外围设备所维护的统计和该主机与外围设备所维护的统计和该主机所维护的统计组合起来;
其中,所述常量状态变量在卸载协议栈期间不变,所述缓存状态变量由CPU处理,而所述委托状态变量由外围设备处理。
31、如权利要求30所述的方法,其特征在于,其中的统计是传输控制协议管理信息基础统计,而其中的主机所维护的统计包括ts_RtoAlgorithm统计、ts_rtomin统计、ts_RtoMax统计、ts_RtoMaxConn统计、ts_ActiveOpens统计、ts_PassiveOpens统计、ts_AttemptFails统计、ts_EstabResets统计和ts_numcons统计中的至少一个。
32、如权利要求30所述的方法,其特征在于,其中的统计是传输控制协议管理信息基础统计,而其中的主机与外围设备所维护的统计包括ts_CurrEstab统计、ts_InSegs统计、ts_OutSegs统计、ts_RetransSegs统计、ts_InErrs统计和ts_OutRsts统计中的至少一个。
33、如权利要求30所述的方法,其特征在于,其中的统计是互联网协议版本四管理信息统计,而其中的主机所维护的统计包括ipsi_Forwarding统计、ipsi_DefaultTTL统计、ipsi_InAddrErrors统计、ipsi_ForwDatagrams统计、ipsi_UnknownProtos统计、ipsi_RoutingDiscards统计、ipsi_ReasmTimeout统计、ipsi_FagOKs统计、ipsi_FagFails统计、ipsi_FagCreates统计、ipsi_NumIf统计、ipsi_NumAddr统计和ipsi_NumRoutes统计中的至少一个。
34、如权利要求30所述的方法,其特征在于,其中的统计是互联网协议版本四管理信息统计,而其中的主机与外围设备所维护的统计包括ipsi_InReceives统计、ipsi_InHdrErrors统计、ipsi_InDiscards统计、ipsi_InDelivers统计、ipsi_OutRequests统计、ipsi_OutDiscards统计、ipsi_OutNoRoutes统计、ipsi_ReamsReqds统计、ipsi_ReasmOKs统计和ipsi_ReasmFails统计中的至少一个。
CNB031241514A 2002-04-30 2003-04-30 用网络栈同步和上载已卸载网络栈连接的方法 Expired - Fee Related CN100552626C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/135,630 2002-04-30
US10/135,630 US7181531B2 (en) 2002-04-30 2002-04-30 Method to synchronize and upload an offloaded network stack connection with a network stack

Publications (2)

Publication Number Publication Date
CN1458590A CN1458590A (zh) 2003-11-26
CN100552626C true CN100552626C (zh) 2009-10-21

Family

ID=29249503

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB031241514A Expired - Fee Related CN100552626C (zh) 2002-04-30 2003-04-30 用网络栈同步和上载已卸载网络栈连接的方法

Country Status (12)

Country Link
US (2) US7181531B2 (zh)
EP (1) EP1361512B1 (zh)
JP (2) JP4638658B2 (zh)
KR (1) KR100938519B1 (zh)
CN (1) CN100552626C (zh)
AT (1) ATE396453T1 (zh)
AU (1) AU2003203727B2 (zh)
BR (1) BR0301035A (zh)
CA (1) CA2425706C (zh)
DE (1) DE60321082D1 (zh)
MX (1) MXPA03003787A (zh)
RU (1) RU2336652C2 (zh)

Families Citing this family (103)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5978379A (en) 1997-01-23 1999-11-02 Gadzoox Networks, Inc. Fiber channel learning bridge, learning half bridge, and protocol
US8539112B2 (en) 1997-10-14 2013-09-17 Alacritech, Inc. TCP/IP offload device
US8621101B1 (en) 2000-09-29 2013-12-31 Alacritech, Inc. Intelligent network storage interface device
US6226680B1 (en) 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US6434620B1 (en) 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US6757746B2 (en) * 1997-10-14 2004-06-29 Alacritech, Inc. Obtaining a destination address so that a network interface device can write network data without headers directly into host memory
US8782199B2 (en) * 1997-10-14 2014-07-15 A-Tech Llc Parsing a packet header
US6904519B2 (en) * 1998-06-12 2005-06-07 Microsoft Corporation Method and computer program product for offloading processing tasks from software to hardware
US7430171B2 (en) 1998-11-19 2008-09-30 Broadcom Corporation Fibre channel arbitrated loop bufferless switch circuitry to increase bandwidth without significant increase in cost
US8019901B2 (en) 2000-09-29 2011-09-13 Alacritech, Inc. Intelligent network storage interface system
WO2002084499A1 (en) 2001-04-11 2002-10-24 Chelsio Communications, Inc. Multi-purpose switching network interface controller
US8218555B2 (en) 2001-04-24 2012-07-10 Nvidia Corporation Gigabit ethernet adapter
US7239636B2 (en) 2001-07-23 2007-07-03 Broadcom Corporation Multiple virtual channels for use in network devices
US7295555B2 (en) 2002-03-08 2007-11-13 Broadcom Corporation System and method for identifying upper layer protocol message boundaries
US7543087B2 (en) * 2002-04-22 2009-06-02 Alacritech, Inc. Freeing transmit memory on a network interface device prior to receiving an acknowledgement that transmit data has been received by a remote device
US7007103B2 (en) * 2002-04-30 2006-02-28 Microsoft Corporation Method to offload a network stack
US7558873B1 (en) * 2002-05-08 2009-07-07 Nvidia Corporation Method for compressed large send
US7437548B1 (en) 2002-07-11 2008-10-14 Nvidia Corporation Network level protocol negotiation and operation
US7934021B2 (en) 2002-08-29 2011-04-26 Broadcom Corporation System and method for network interfacing
US7346701B2 (en) 2002-08-30 2008-03-18 Broadcom Corporation System and method for TCP offload
US7411959B2 (en) 2002-08-30 2008-08-12 Broadcom Corporation System and method for handling out-of-order frames
US7313623B2 (en) 2002-08-30 2007-12-25 Broadcom Corporation System and method for TCP/IP offload independent of bandwidth delay product
US8180928B2 (en) 2002-08-30 2012-05-15 Broadcom Corporation Method and system for supporting read operations with CRC for iSCSI and iSCSI chimney
US7058797B2 (en) * 2002-09-10 2006-06-06 Veritas Operating Corporation Use of off-motherboard resources in a computer system
US7177790B2 (en) * 2002-11-13 2007-02-13 Hewlett-Packard Development Company, L.P. Method and apparatus for providing virtual devices
US7596634B2 (en) * 2002-12-12 2009-09-29 Millind Mittal Networked application request servicing offloaded from host
US7680944B1 (en) * 2003-02-28 2010-03-16 Comtrol Corporation Rapid transport service in a network to peripheral device servers
US7370082B2 (en) * 2003-05-09 2008-05-06 Microsoft Corporation Remote invalidation of pre-shared RDMA key
US7609696B2 (en) * 2003-06-05 2009-10-27 Nvidia Corporation Storing and accessing TCP connection information
US7913294B1 (en) 2003-06-24 2011-03-22 Nvidia Corporation Network protocol processing for filtering packets
US7526577B2 (en) * 2003-09-19 2009-04-28 Microsoft Corporation Multiple offload of network state objects with support for failover events
US8285881B2 (en) * 2003-09-10 2012-10-09 Broadcom Corporation System and method for load balancing and fail over
US7689702B1 (en) * 2003-10-31 2010-03-30 Sun Microsystems, Inc. Methods and apparatus for coordinating processing of network connections between two network protocol stacks
US6996070B2 (en) * 2003-12-05 2006-02-07 Alacritech, Inc. TCP/IP offload device with reduced sequential processing
US7636372B2 (en) * 2003-12-19 2009-12-22 Broadcom Corporation Method and system for providing smart offload and upload
US8549170B2 (en) * 2003-12-19 2013-10-01 Nvidia Corporation Retransmission system and method for a transport offload engine
US7349999B2 (en) * 2003-12-29 2008-03-25 Intel Corporation Method, system, and program for managing data read operations on network controller with offloading functions
US8359349B2 (en) * 2004-03-18 2013-01-22 Nokia Corporation System and associated terminal, method and computer program product for uploading content
US7783769B2 (en) * 2004-03-31 2010-08-24 Intel Corporation Accelerated TCP (Transport Control Protocol) stack processing
US20050246443A1 (en) * 2004-03-31 2005-11-03 Intel Corporation Management of offload operations in a network storage driver
KR100587560B1 (ko) * 2004-05-07 2006-06-08 삼성전자주식회사 링크 로컬 주소를 가지는 시스템에서 외부 시스템과통신하는 방법 및 장치
US7831745B1 (en) 2004-05-25 2010-11-09 Chelsio Communications, Inc. Scalable direct memory access using validation of host and scatter gather engine (SGE) generation indications
US20050281262A1 (en) * 2004-06-17 2005-12-22 Zur Uri E Method and system for supporting read operations for iSCSI and iSCSI chimney
US7493427B2 (en) * 2004-07-14 2009-02-17 International Business Machines Corporation Apparatus and method for supporting received data processing in an offload of network protocol processing
US7533176B2 (en) * 2004-07-14 2009-05-12 International Business Machines Corporation Method for supporting connection establishment in an offload of network protocol processing
US7930422B2 (en) * 2004-07-14 2011-04-19 International Business Machines Corporation Apparatus and method for supporting memory management in an offload of network protocol processing
US7386566B2 (en) * 2004-07-15 2008-06-10 Microsoft Corporation External metadata processing
US7165118B2 (en) * 2004-08-15 2007-01-16 Microsoft Corporation Layered message processing model
US8248939B1 (en) 2004-10-08 2012-08-21 Alacritech, Inc. Transferring control of TCP connections between hierarchy of processing mechanisms
US7783880B2 (en) * 2004-11-12 2010-08-24 Microsoft Corporation Method and apparatus for secure internet protocol (IPSEC) offloading with integrated host protocol stack management
US7730196B2 (en) * 2004-12-03 2010-06-01 Microsoft Corporation Efficient transfer of messages using reliable messaging protocols for web services
US20060153215A1 (en) * 2004-12-20 2006-07-13 Linden Cornett Connection context prefetch
US8219622B2 (en) * 2005-02-09 2012-07-10 Verizon Business Global Llc Systems and methods for providing extended peering
US7568056B2 (en) * 2005-03-28 2009-07-28 Nvidia Corporation Host bus adapter that interfaces with host computer bus to multiple types of storage devices
US7475167B2 (en) * 2005-04-15 2009-01-06 Intel Corporation Offloading data path functions
US7516252B2 (en) * 2005-06-08 2009-04-07 Intel Corporation Port binding scheme to create virtual host bus adapter in a virtualized multi-operating system platform environment
US7715436B1 (en) 2005-11-18 2010-05-11 Chelsio Communications, Inc. Method for UDP transmit protocol offload processing with traffic management
US7724658B1 (en) 2005-08-31 2010-05-25 Chelsio Communications, Inc. Protocol offload transmit traffic management
US7616563B1 (en) 2005-08-31 2009-11-10 Chelsio Communications, Inc. Method to implement an L4-L7 switch using split connections and an offloading NIC
US7660264B1 (en) 2005-12-19 2010-02-09 Chelsio Communications, Inc. Method for traffic schedulign in intelligent network interface circuitry
US7660306B1 (en) 2006-01-12 2010-02-09 Chelsio Communications, Inc. Virtualizing the operation of intelligent network interface circuitry
US7760733B1 (en) 2005-10-13 2010-07-20 Chelsio Communications, Inc. Filtering ingress packets in network interface circuitry
JP4872412B2 (ja) * 2006-03-31 2012-02-08 日本電気株式会社 情報検知処理方法及び装置
US7895646B2 (en) * 2006-05-25 2011-02-22 International Business Machines Corporation IKE daemon self-adjusting negotiation throttle
US8112803B1 (en) * 2006-12-22 2012-02-07 Symantec Corporation IPv6 malicious code blocking system and method
US8935406B1 (en) 2007-04-16 2015-01-13 Chelsio Communications, Inc. Network adaptor configured for connection establishment offload
US20080263171A1 (en) * 2007-04-19 2008-10-23 Alacritech, Inc. Peripheral device that DMAS the same data to different locations in a computer
US7826350B1 (en) 2007-05-11 2010-11-02 Chelsio Communications, Inc. Intelligent network adaptor with adaptive direct data placement scheme
US8060644B1 (en) 2007-05-11 2011-11-15 Chelsio Communications, Inc. Intelligent network adaptor with end-to-end flow control
US8589587B1 (en) 2007-05-11 2013-11-19 Chelsio Communications, Inc. Protocol offload in intelligent network adaptor, including application level signalling
US7831720B1 (en) 2007-05-17 2010-11-09 Chelsio Communications, Inc. Full offload of stateful connections, with partial connection offload
US20090019160A1 (en) * 2007-07-12 2009-01-15 International Business Machines Corporation Method and system for workload management utilizing tcp/ip and operating system data
US8539513B1 (en) 2008-04-01 2013-09-17 Alacritech, Inc. Accelerating data transfer in a virtual computer system with tightly coupled TCP connections
US8341286B1 (en) 2008-07-31 2012-12-25 Alacritech, Inc. TCP offload send optimization
WO2010015142A1 (zh) * 2008-08-04 2010-02-11 中兴通讯股份有限公司 一种实现零拷贝发送流媒体数据的方法及系统
US20100058082A1 (en) * 2008-08-27 2010-03-04 Lenovo (Singapore) Ple., Ltd. Maintaining network link during suspend state
US9306793B1 (en) 2008-10-22 2016-04-05 Alacritech, Inc. TCP offload device that batches session layer headers to reduce interrupts as well as CPU copies
US8572251B2 (en) 2008-11-26 2013-10-29 Microsoft Corporation Hardware acceleration for remote desktop protocol
KR101145385B1 (ko) 2010-05-31 2012-05-15 (주)이앤비소프트 단축 명령을 통한 데이터 업로드 방법
WO2011152593A1 (en) * 2010-05-31 2011-12-08 Hyo-Hwan Bae Data upload method using shortcut
US8582581B2 (en) * 2010-09-28 2013-11-12 Cooper Technologies Company Dual-port ethernet traffic management for protocol conversion
CN102148748B (zh) * 2010-10-26 2014-05-21 华为技术有限公司 伪线路由扩散方法、系统和汇聚节点设备
CN102571912B (zh) * 2010-12-08 2014-09-10 中国科学院声学研究所 一种实现基于多核处理器和混合操作系统的卸载协议栈的方法
US8868710B2 (en) * 2011-11-18 2014-10-21 Amazon Technologies, Inc. Virtual network interface objects
US9581675B2 (en) * 2012-08-24 2017-02-28 Tektronix, Inc. Virtual model adapter removal and substitution technique for cascaded networks
US9191209B2 (en) * 2013-06-25 2015-11-17 Google Inc. Efficient communication for devices of a home network
US10063407B1 (en) 2016-02-08 2018-08-28 Barefoot Networks, Inc. Identifying and marking failed egress links in data plane
US10313231B1 (en) * 2016-02-08 2019-06-04 Barefoot Networks, Inc. Resilient hashing for forwarding packets
CN109155786B (zh) * 2016-06-09 2021-11-16 英特尔公司 从用户设备到网络的卸载处理的装置和方法
US20180152393A1 (en) * 2016-11-28 2018-05-31 Microsoft Technology Licensing, Llc Application resource usage reduction
US20180150256A1 (en) * 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10404619B1 (en) 2017-03-05 2019-09-03 Barefoot Networks, Inc. Link aggregation group failover for multicast
US10237206B1 (en) 2017-03-05 2019-03-19 Barefoot Networks, Inc. Equal cost multiple path group failover for multicast
CN110460544B (zh) 2018-05-08 2021-09-07 华为技术有限公司 一种堆叠中交换机的标识分配方法、光缆及相关设备
US11032367B2 (en) 2018-07-16 2021-06-08 Microsoft Technology Licensing, Llc Long upload time detection and management
KR102151987B1 (ko) * 2018-11-23 2020-09-04 한국과학기술원 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버
CN110113407B (zh) * 2019-04-30 2021-08-17 上海连尚网络科技有限公司 小程序状态同步方法、设备和计算机存储介质
US20220353199A1 (en) 2019-05-23 2022-11-03 Hewlett Packard Enterprise Development Lp System and method for facilitating data-driven intelligent network with ingress port injection limits
US11855834B2 (en) * 2020-06-02 2023-12-26 Apple Inc. Traffic sink interface
US11368361B2 (en) 2020-06-05 2022-06-21 Microsoft Technology Licensing, Llc Tamper-resistant service management for enterprise systems
WO2022051985A1 (en) * 2020-09-10 2022-03-17 Qualcomm Incorporated Managing a communication link for transfer control protocol communications
RU208657U1 (ru) * 2021-04-23 2021-12-29 Российская Федерация, от имени которой выступает ФОНД ПЕРСПЕКТИВНЫХ ИССЛЕДОВАНИЙ Модель бортового вычислителя авиационного средства поражения

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5727142A (en) * 1996-05-03 1998-03-10 International Business Machines Corporation Method for a non-disruptive host connection switch after detection of an error condition or during a host outage or failure
US6094712A (en) 1996-12-04 2000-07-25 Giganet, Inc. Computer network interface for direct mapping of data transferred between applications on different host computers from virtual addresses to physical memory addresses application data
EP0848563A3 (en) * 1996-12-11 2000-01-05 Texas Instruments Incorporated Improvements in or relating to telecommunication systems
US6591302B2 (en) * 1997-10-14 2003-07-08 Alacritech, Inc. Fast-path apparatus for receiving data corresponding to a TCP connection
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US6427171B1 (en) * 1997-10-14 2002-07-30 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US7133940B2 (en) 1997-10-14 2006-11-07 Alacritech, Inc. Network interface device employing a DMA command queue
US6226680B1 (en) 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US6757746B2 (en) 1997-10-14 2004-06-29 Alacritech, Inc. Obtaining a destination address so that a network interface device can write network data without headers directly into host memory
US6389479B1 (en) * 1997-10-14 2002-05-14 Alacritech, Inc. Intelligent network interface device and system for accelerated communication
US5937169A (en) * 1997-10-29 1999-08-10 3Com Corporation Offload of TCP segmentation to a smart adapter
US6765901B1 (en) * 1998-06-11 2004-07-20 Nvidia Corporation TCP/IP/PPP modem
US6904519B2 (en) 1998-06-12 2005-06-07 Microsoft Corporation Method and computer program product for offloading processing tasks from software to hardware
US6141705A (en) 1998-06-12 2000-10-31 Microsoft Corporation System for querying a peripheral device to determine its processing capabilities and then offloading specific processing tasks from a host to the peripheral device when needed
JP2001230812A (ja) * 2000-02-14 2001-08-24 Hitachi Ltd 通信開始処理をオフロードするネットワーク接続装置およびそれを用いた方法
ATE550852T1 (de) 2000-09-29 2012-04-15 Alacritech Inc Intelligentes netzwerkspeicherschnittstellensystem und solche einrichtungen
US7007103B2 (en) * 2002-04-30 2006-02-28 Microsoft Corporation Method to offload a network stack

Also Published As

Publication number Publication date
CN1458590A (zh) 2003-11-26
MXPA03003787A (es) 2005-08-26
EP1361512A3 (en) 2005-11-30
JP2011018373A (ja) 2011-01-27
EP1361512A2 (en) 2003-11-12
CA2425706C (en) 2010-02-16
US7171489B2 (en) 2007-01-30
DE60321082D1 (de) 2008-07-03
JP4638658B2 (ja) 2011-02-23
AU2003203727A1 (en) 2003-11-13
EP1361512B1 (en) 2008-05-21
AU2003203727B2 (en) 2009-04-23
JP2004030612A (ja) 2004-01-29
KR100938519B1 (ko) 2010-01-25
US20030204631A1 (en) 2003-10-30
ATE396453T1 (de) 2008-06-15
US20050182854A1 (en) 2005-08-18
BR0301035A (pt) 2004-08-17
AU2003203727A8 (en) 2003-11-13
US7181531B2 (en) 2007-02-20
CA2425706A1 (en) 2003-10-30
KR20030085484A (ko) 2003-11-05
RU2336652C2 (ru) 2008-10-20

Similar Documents

Publication Publication Date Title
CN100552626C (zh) 用网络栈同步和上载已卸载网络栈连接的方法
US11178259B2 (en) Methods and apparatus for regulating networking traffic in bursty system conditions
US7756990B2 (en) Configurable protocol engine
US7414975B2 (en) Protocol stack
US9003053B2 (en) Message acceleration
EP1494426B1 (en) Secure network processing
CN1607781B (zh) 利用连接操作进行网络负载平衡
CN102201977B (zh) 批量数据传输
CN100438403C (zh) 用于管理通过网络的数据传输的方法和系统
US8121148B2 (en) Protocol stack using shared memory
US7685287B2 (en) Method and system for layering an infinite request/reply data stream on finite, unidirectional, time-limited transports
CN102227718A (zh) 用于远程桌面协议的硬件加速
US20090316581A1 (en) Methods, Systems and Computer Program Products for Dynamic Selection and Switching of TCP Congestion Control Algorithms Over a TCP Connection
US8467390B2 (en) Method and system for network stack tuning
US20080002739A1 (en) Reflecting the bandwidth assigned to a virtual network interface card through its link speed
JP2003333076A (ja) ネットワークスタックをオフロードする方法
CN1954574B (zh) 以太网上的统一架构
US8447880B2 (en) Network stack instance architecture with selection of transport layers
CN1595935B (zh) 支持故障切换事件的网络状态对象的多个卸载
CN101803289B (zh) 基于适合度的路由
Hegde et al. FAST TCP in high-speed networks: An experimental study
US8578040B2 (en) Method, system and article for client application control of network transmission loss tolerance
CN116684468B (zh) 数据处理方法、装置、设备及存储介质
CN103795705B (zh) 用于交换安全的数据包的时间锁定的网络和节点
US7069561B1 (en) Method and system for communication between application programs and a network

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150515

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150515

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20091021

Termination date: 20150430

EXPY Termination of patent right or utility model