CN1910869B - 具有简化的顺序处理的tcp/ip卸载设备 - Google Patents
具有简化的顺序处理的tcp/ip卸载设备 Download PDFInfo
- Publication number
- CN1910869B CN1910869B CN200480040030.XA CN200480040030A CN1910869B CN 1910869 B CN1910869 B CN 1910869B CN 200480040030 A CN200480040030 A CN 200480040030A CN 1910869 B CN1910869 B CN 1910869B
- Authority
- CN
- China
- Prior art keywords
- tcp
- packet
- socket
- memory
- state
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/12—Protocol engines
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
Abstract
TCP卸载引擎(TOE)设备包括并行执行TCP/IP协议处理操作的状态机。在第一方面,状态机包括第一存储器、第二存储器和组合逻辑。第一存储器保存并同时输出多个TCP状态变量。第二存储器保存并同时输出多个首部值。相比于顺序处理器技术,组合逻辑从TCP状态变量和首部值产生转储清除检测信号,而无须执行顺序处理器指令或顺序存储器存取。在第二方面,TOE包括执行同时更新TCB缓冲区中的多个TCP状态变量的状态机,从而避免对TCB缓冲存储器进行多个顺序写。在第三方面,TOE包括在单一状态机时钟周期中建立DMA移动的状态机。
Description
发明背景
计算机使用TCP/IP协议套在因特网(及许多其它网络)上进行通信。这样的计算机通过将TCP/IP数据包中的信息传输到网络上并从网络接收TCP/IP数据包中的信息而进行通信。然而,TCP和IP协议相当复杂。在简单的传统计算机体系结构中,计算机的中央处理单元(CPU)不得不牺牲相当的处理能力以执行允许计算机在网络上通信所必须的TCP/IP协议处理。这降低了可用于其它任务的处理能力,而这些其它任务是计算机的主要功能。
为此,已开发了称为TCP卸载引擎(TOE)的设备。在一定义中,TOE设备是为计算机执行部分或所有TCP和IP协议处理使得计算机CPU的处理能力可致力于其它任务的设备。TOE设备通常被实现在称为网络接口卡(NIC)的扩充插件板上。包括TOE类型设备的NIC卡有时被称为智能网络接口卡(INIC)。
美国专利6,247,173描述了TOE的一个实例。该TOE设备包括处理器及几个其它器件。TOE上的处理器执行保存在TOE设备上的固件指令。随着联网速度增加,施加于上述TOE的处理器上的处理需求也相应增加。增加TOE处理能力的一种办法是增加处理器的时钟频率。这相应增加了处理器取回和/或执行指令的速率。然而,处理器时钟频率可被增加到多高实际上有限制。半导体处理技术的日益发展已允许不断地增加处理器时钟频率,但可以想象,由于网络速度增加更快,该增加速率并不足以跟上未来对处理能力的需求的步伐。
如果TOE吞吐量不能通过增加处理器时钟速度而简单地得以足够的增加,则在要实现所希望增加的吞吐量时,不得不采用其它技术。增加吞吐量的一个技术包括增加处理器的数据总线的宽度并使用更宽的数据总线和ALU。尽管这可增加某些TOE功能被执行的速率,但由于其它TCP/IP卸载任务的顺序处理特性,其它功能的运行将依然可能是不合需要的慢。可能采用的其它计算机体系结构技术包括使用多线程处理器和/或流水线技术以试图增加每单位时间运行的指令数量,但时钟频率是受限制的。运行特别适于TCP/IP协议处理的特殊指令集的专用处理器可被采用以使用特定执行的指令做更多的处理,但这样的处理器仍然要求顺序取回指令。可能采用的另一技术包括使用同时运行多个指令的超标量处理器。但是,TCP/IP协议处理任务经常包括许多不同的、需按序完成的功能。即使使用特殊指令集和超标量处理器,未满足未来网络速度所要求的吞吐量,仍然必须将时钟频率增加到超出可能频率的范围。可以想象,支持下一代高速网络将使即使最新的处理器的时钟速度超出可实现的速度。即使在TOE上采用这样的先进及成本高昂的处理器可行,采用这样的处理器将可能非常复杂且经济上不可行。因而需要另外的解决方案。
发明内容
网络接口设备(NID)能够卸载TCP协议处理任务的主计算机。NID有时被称为TOE(TCP卸载引擎)设备。
第一方面,NID包括第一存储器、第二存储器、及组合逻辑电路。第一存储器保存并同时输出多个TCP状态变量。例如,这些TCP状态变量可包括:接收数据包顺序限制号、预期接收数据包顺序号、传送顺序限制号、传送确认号、及传送顺序号。第二存储器保存并同时输出来自输入数据包首部的值。例如,这些首部值可包括:接收数据包顺序号、数据包有效负载大小、数据包确认号、及数据包传送窗口大小。
组合逻辑电路同时接收:1)来自第一存储器的TCP状态变量,及2)所有同时来自第二存储器的首部值。从至少两个TCP状态变量和至少两个首部值,组合逻辑电路产生转储清除(flush)检测信号。转储清除检测信号指示关于TCP状态变量与其相关的TCP连接的异常条件(例如错误条件)是否已出现。例如,组合逻辑电路是状态机的一部分,其中转储清除检测信号由导致状态机在状态间变换状态的时钟信号的单一时钟周期中的TCP状态变量和首部值确定。
与顺序处理器形成对比,其中顺序处理器取回指令、解码指令、运行指令以执行从存储器多次读TCP状态变量并执行从存储器多次读首部变量、继而使用这些读的值和变量确定转储清除条件是否存在,NID的组合逻辑电路被提供以同时进行确定所需要的所有TCP状态变量和首部值。因此,取回TCP状态变量和首部值不包括大量耗时的顺序存储器存取。此外,状态机不取回指令或运行指令。不需顺序取回指令,也不要求复杂的指令解码流水线技术。而且,确定转储清除条件是否存在由高速组合硬件逻辑电路进行,TCP状态变量和首部值被提供为该电路的输入。与在软件中按顺序执行分立逻辑测试不同,组合硬件逻辑电路以硬件逻辑门速度并行执行测试。
第二方面,NID包括状态机,其完全同时更新TCB缓冲器中的多个TCP状态变量,从而避免顺序运行执行该任务的指令并避免向存储器结构顺序写多个值。而且,与通过窄的数据总线向存储器结构写相关的瓶颈也得以避免。保存TCP状态变量的存储器结构非常宽并允许所有值同时写入存储器,使得TCP状态更新在一个或非常少量的存储器写操作中执行。
第三方面,NID包括状态机和DMA控制器。状态机使用DMA控制器将信息传送给主计算机并从主计算机接收信息。为设置DMA控制器以传送信息,将信息源提供给DMA控制器,将要传送的信息量也提供给DMA控制器,且信息将被放置于那里的目的地地址也提供给DMA控制器。相比于顺序处理器NIC卡设计,其中需要多个顺序步骤设置DMA传送,根据第三方面的NID的状态机同时对DMA控制器提供以将要传送的信息源、将要传送的信息量和信息将放置于那里的目的地地址,所有均在状态机操作的一个状态内同时进行。
在非常宽的存储器结构中保存TCP状态变量和数据包首部的体系结构方面,其以这样一种方式进行,这些变量和首部可同时并行存取并由硬件状态机处理,使得所得的更新后的TCP状态变量可在一个或非常少量的存储器写中全部并行写回到宽存储器中,其不仅可应用于TCP连接的控制在TOE设备和主机之间来回通过的系统,而且可应用于TOE保持对TCP连接的控制且TCP连接的控制不可在TOE和主机之间传递的系统。通过采用在本专利文献中提出的新的TOE体系结构,每单位时间处理的数据包的数量将得以增加而不用增加最大时钟速度,或者,如果每单位时间将处理的数据包的数量保持不变,则可降低最大时钟速度。降低给定量的处理吞吐量的时钟速度可降低整个TOE系统的功率消耗。此外,对于给定量的数据包处理吞吐量,新的TOE体系结构允许放松对存储器存取带宽的要求,从而允许使用不太昂贵的存储器,进而降低了TOE系统成本。
其它实施例和详细内容将在下面描述。本发明内容部分并不意于定义本发明。本发明由权利要求而非本发明内容部分定义。
附图说明
图1(现有技术)为根据本发明的网络接口设备(NID)在其中运行的系统的简图。
图2是图1的NID的专用集成电路(ASIC)的简化框图。执行所述数据传送所需要的、各个模块之间的所有读和写选通信号及所有控制信号均未在图中示出,因为包括所有这些信息将使所说明的信息流不明显,并将导致很难在印刷专利文献中进行阅读的大图。
图3为用于引用图2的各个模块的助记忆码的表。
图4为图2的每一模块将被怎样组织的表。
图5为图4的表中使用的每一助记忆码的简要描述表。
图6为组成表中左列中的每一变量的多个变量的列表。
图7为图2的各个模块执行数据包的慢速路径接收处理所做的硬件描述伪码。
图8为图2的各个模块在连接分发顺序中所做的硬件描述伪码。
图9为图2的各个模块执行数据包的快速路径接收处理所做的硬件描述伪码。
图10为图2的套接字引擎SktEng状态机的每一状态中出现的硬件描述伪码。
图11为示出主机信息缓冲区的组织的示意图。
图12为图2的各个模块在连接转储清除顺序中所做的硬件描述伪码。
图13为套接字引擎SktEng状态机的组合逻辑执行输入确认(ACK)处理所做的硬件描述伪码。
图14为示出图13中使用的各个变量之间的各种关系的示意图。
图15为套接字引擎SktEng状态机的组合逻辑执行输入数据处理所做的硬件描述伪码。
图16为示出图15中使用的各个变量之间的各种关系的示意图。
图17为首部缓冲区的格式。
图18为图17的首部缓冲区的帧状态A分量的各个部分。
图19为图17的首部缓冲区的帧状态B的各个部分。
图20为组成TCB并被保存在TCB缓冲器中的各个分量值。
具体实施方式
图1是用于说明本发明的示例性系统1的简图。系统1连接到包交换网络2。例如,网络2可以是局域网(LAN)和/或网络的集合。例如,网络2可以是因特网。例如,网络2可以是运行iSCSI的、基于IP的SAN。例如,网络2可经媒介连接到系统1,媒介经光纤电缆和/或无线通信信道传输电信号。
系统1包括主机3和网络接口设备(NID)4。例如,主机3可被具体化在主板上。例如,NID4可以是连接到主板的扩展卡。主机3包括中央处理单元(CPU)5或CPU芯片组及许多存储器6。在图示的例子中,存储器6包括半导体存储器和磁盘存储器的结合。CPU5运行保存在存储器6中的软件。软件包括网络协议处理栈,其包括媒体存取协议处理层、IP协议处理层、TCP协议处理层、和应用层。在TCP协议处理层之上的协议层有时称为会话层,有时称为应用层。在下面的描述中,该层称为应用层。
NID4经主机总线7、网桥8和局域总线9连接到主机3。例如,主机总线7可以是PCI总线或另外的计算机扩充总线。NID4包括专用集成电路(ASIC)10、许多动态随机存取存储器(DRAM)11、及物理层接口(PHY)电路12。NID4包括专门的协议处理加速硬件以实现“快速路径”处理,其中某些类型的网络通信相比于“慢速路径”处理被加速,其中其余类型的网络通信至少部分由主机3上运行的协议处理栈进行处理。在图示的实施例中,被加速的某些类型的网络通信为满足某一快速路径标准的TCP/IP通信。因此,NID4有时称为TCP卸载引擎(TOE)。
关于执行快速路径和慢速路径处理的系统的其它信息,可参见:美国专利6,247,060、美国专利6,226,680、美国专利6,247,173、公开的美国专利申请20010021949、公开的美国专利申请20010027496、公开的美国专利申请20010047433、和美国专利申请10/420,364(上面指出的每一专利、公开的专利申请和专利申请的内容均通过引用组合于此)。图1的系统1采用这些文献中提出的技术在主机协议处理栈和网络接口设备之间传递TCP/IP连接的控制。关于TCP/IP连接的控制怎样从主机传递到网络接口设备及怎样从网络接口设备传回到主机的信息均作为背景信息通过引用而特别组合于此。
图2是图1的ASIC10的方块图。ASIC10包括接收MAC块(RcvMac)20、接收分析程序块(RcvPrs)21、套接字检测器块(SktDet)22、接收管理器块(RcvMgr)23、套接字引擎块(SktEng)24、DMA控制器/PCI总线接口单元块25、DRAM控制器块26、SRAM块27、传输格式顺序发生器块(XmtFmtSqr)28、和传输MAC块(XmtMac)29。其余的块指存储器结构如缓冲器和队列。用字母“Q”结尾的标号标记的块表明该块是队列。用字母“Buf”结尾的标号标记的块表明该块是缓冲器或一组缓冲器。队列和缓冲器用于在多个其它块之间传递信息。
系统1的运行将在下面通过描述下述内容而进行描述:1)慢速路径接收顺序;2)连接分发顺序,其中连接的控制是从主机传递到NID;3)快速路径接收顺序,其中在所分发的连接上接收的数据包的TCP和IP协议处理在NID上执行;4)套接字引擎的运行;及5)连接转储清除顺序,其中连接的控制是从NID传递到主机。在这些描述中,助记忆码用于指图2的各个块。
图3是用于提及图2的各个块的助记忆码的表。图2中每一不同类型的存储器块包含以某一方式格式化的信息。
图4是说明图2的每一存储器块将被怎样组织的表。例如,图4的第一行表明由HdrId寻址的特定首部缓冲器(HdrBuf)入口包含分析首部(PrsHd),其后为数据包首部(PktHd)。HdrBuf是代表首部缓冲器的助记忆码,HdrId是代表首部缓冲器标识符的助记忆码,PrsHd是代表分析首部的助记忆码,PktHd是代表数据包首部的助记忆码。
图5是图4的表中使用的每一助记忆码的简要描述。图5中提出的信息项在下面的描述中有时称为“变量”。变量本身可由多个其它变量组成。
图6所示为组成表的左列中的每一变量的多个变量的列表。例如,图6的第一行表明套接字元组(SkTpl)由发送确认号(XmtAckNum)、发送序号(XmtSeqNum)、发送顺序限制(XmtSeqLmt)、发送拥塞控制窗口大小(XmtCcwSz)、最大段长度(MaxSegSz)、最大发送窗口(MaxXmtWin)、接收顺序限制(RcvSeqLmt)、预期的接收序号(RcvSeqExp)、预期的首部长度(ExpHdrLen)、及发送控制块地址(TcbAd)组成。
慢速路径数据包接收顺序:
图7在硬件描述伪码中说明图2的各个块执行数据包的慢速路径处理时的作为。伪码中的行由行号指代,其出现在行左侧的圆括号中。
最初,如图2中的箭头30所指,网络信息包从PHY12输入ASIC10。在图7中,行701-703表示RcvMac块(RcvMac)20采取的行动。如行701所指示的,RcvMac20分析输入的数据包RcvPk并查看离开网络的前同步码和后同步码。RcvMac20检查数据包末尾的CRC值,并检测在数据包开始接收到RcvMac上之后是否有碰撞,及执行其它标准功能。RcvMac20产生状态字RcvSt,其指明该检查的结果。RcvMac查看目的地链接地址并基于该信息将不指定NID4的数据包过滤掉。在一实施例中,RcvMac是由另一公司设计的、市场上可买到的电路块。如果数据包指定NID4,则RcvMac20在先进先出RcvMacQ31上存放相应的条目。条目的进栈包括如行702和703所指示的数据包RcvPk和状态字RcvSt。
接收分析程序块(RcvPrs)21使该条目从RcvMacQ退栈。在图7中,行705-708表示RcvPrs块21采取的行动。但是在RcvPrs21退栈该条目之前,其在DRAM11中确定信息将要保存的位置。通过NID4的所有数据包均被临时保存在DRAM11中。DRAM11总共2M字节,并被分为1024缓冲区。每一缓冲区长度为2048字节。因此,每一缓冲区可由10位缓冲区标识符(BufId)标识,其标识缓冲区的起始地址。为获得相应缓冲区的21位起始地址,在BufId的右边加11个0。保存不带11个0(总是为0)的BufId以节约存储空间。
称为接收缓冲器队列RcvBufQ的队列(见图2)是保存空闲且可用于RcvPrs块21的DRAM缓冲区的BufId的队列。RcvPrs块21退栈RcvBufQ并获得BufId,如行705所指示的那样。RcvPrs接收BufId值,并将该值向左移11位以获得DRAM中的缓冲区的起始地址。一旦RcvPrs有地方存放数据包,RcvPrs开始分析离开RcvMacQ(行706)的条目并产生分析首部PrsHd。
该分析首部PrsHd的构成如图6所示。对于另外的、更详细的信息,可参见图18和19。帧状态A和帧状态B共同包括PrsHd。帧状态A的位23是注意位Attn。在其它异常和错误条件中,Attn位指明数据包的传输和网络层协议是否不是TCP和IP。
分析首部PrsHd的构成之一是首部长度码HdrCd。首部长度码HdrCd指明首部可在所接收的数据包中延伸多深。如图4中所示,RcvMacQ条目包括接收数据包RcvPk和接收状态RcvSt。回到图7,RcvPrs块21将分析首部PrsHd预先挂起(行707)在数据包RcvPk上并将该信息写入值BufId确定的接收缓冲区RcvBuf中(在行705,BufId从RcvBufQ退栈)。RcvPrs21通过存放将要写入PrsWrDatQ的信息进而将给DRAM控制器26的指令存放在PrsWrReqQ上而实现该写。PrsWeReqQ上的指令告诉DRAM控制器26将数据移出PrsWrDatQ并将其存入DRAM中的适当缓冲区。请求指令指明将离开PrsWrDatQ的字节的数量并还指明DRAM中的起始地址。DRAM控制器26在随后某一时间从PrsWrReqQ退栈请求指令,告诉其有多少将从PrsWrDatQ退栈及将数据写到哪。行707中的指示“write RcvBuf[BufId]{PrsHd,RcvPk}”意为写到由值BufId确定的“接收缓冲区”并写预先挂起到RcvPk的分析首部PrsHd。{}符号包围要写的信息。方括号符号[]包围的值指明RcvBuf内的哪一接收缓冲区将被写。
接着,在行708,RcvPrs块20将条目写在分析事件队列PrsEvtQ32上(参见图2)。条目包括数据包结束指示符PkEnd,其向套接字检查块SktDet22警示数据包的到达及缓冲区中下一可被写的空闲位置(PkEnd)。PkEnd“数据包结束”是指向DRAM中数据包结尾的指针(DRAM中缓冲区的开始地址加数据包大小加分析首部的长度)。套接字检查块SktDet可从PkEnd提取在开始指向缓冲区的最初缓冲区ID,并还提取数据包的大小。接收分析程序RcvPrs还包括套接字散列(SkHsh)及条目中的套接字描述符(SktDsc),其进栈到PrsEvtQ上。如图6中所示,套接字描述符SktDsc包括:首部长度码(HdrCd)、IP源地址(SrcAd)、IP目的地址(DstAd)、TCP源端口(SrcPt)、及TCP目的端口(DstPt)。每一套接字描述符包括DetEn位。
在在前的TOE设备中,套接字描述符和散列被预先挂起在数据包的前面,其中数据包保存在DRAM中。为执行TCB查寻,其处保存了套接字描述符和散列的数据包的前部不得不先传出DRAM以获得执行TCB查寻所必须的散列和套接字描述符。相比于这样的现有技术TOE设备,本发明的TOE设备将散列经PrsEvtQ直接传给套接字检查块。每一PrsEvtQ条目包含PkEnd、SkHsh和SktDsc(见行708)。数据包被留在DRAM中。将散列和套接字描述符直接传给套接字检查块避免了在套接字检查块可执行TCB查寻操作以前不得不将数据包前部传出DRAM。这样,减少DRAM采取量可允许多余可用的DRAM存取带宽能用于其它目的。
图7中的行710-712表示套接字检查块SktDet22的操作。SktDet块22按行710所指示的退栈PrsEvtQ,并使用取回的散列SkHsh看所取回的套接字描述符SktDsc是否是保存在套接字描述符缓冲区SktDscBuf中的4096个套接字描述符之一。SktDscBuf(见图2)是具有1024存储桶的双端口存储器,每一存储桶包含四个套接字描述符缓冲区,每一缓冲区可保存一个套接字描述符。如果TCP/IP连接在快速路径中进行处理,则该连接的套接字描述符将保存在SktDscBuf中。
从自PrsEvtQ退栈的条目取回的散列SkHsh确定1024个散列存储桶之一。套接字检查块SktDet使用该SkHsh识别适当的散列存储桶并检查可能保存在该散列存储桶中的四个套接字描述符中的每一个以看这些保存的套接字描述符之一是否与从PrsEvtQ取回的套接字描述符相匹配。
在目前描述的例子中,数据包是慢速路径数据包。因此,行711的“测试”结果为不匹配。之后,套接字检测器(SktDet)将慢速码SlwCd、PkEnd值和首部长度码HdrCd写入DetEvtQ。SlwCd是双位值,其表明数据包是慢速路径数据包(即没有套接字描述符匹配)。首部码HdrCd是由RcvPrs产生的双位码,其指示首部将在特定的数据包中进入多深。根据所接收的数据包的类型,首部延伸到数据包内的不同深度。首部的长度是变化的,因为数据包可以也可不具有某些首部如802.3首部、SNAP首部、VLAN首部、RDMA首部、ISCSI首部。HdrCd指明有多少数据包需要从DRAM11DMA入首部缓冲区HdrBuf中以确保数据包的所有适当首部均已被传送。为保存DRAM11上的带宽,或64字节、或128字节、或192字节或256字节从DRAM11传给首部缓冲区HdrBuf。所传送的量是依然导致首部被传送的最小量。套接字引擎SktEng块24仅需要查看首部,而不必查看数据包有效负载。
图7的行714和715指出了接收管理器块RcvMgr 23执行的操作。RcvMgr从DetEvtQ获得条目。如图4中所示,DetEvtQ上的条目可具有四种格式之一。例如,条目可以慢速码SlwCd开始以表明相关的数据包将在慢速路径中处理。或者,条目可以快速码FstCd开始以表明相关数据包将在快速路径中处理。DetEvtQ条目还可以使能码EnbCd或禁止码DblCd作为开始。
有慢速路径事件队列SlwEvtQ,接收管理器RcvMgr通过其将慢速路径事件传送给套接字引擎SktEng以进行进一步处理。还有快速路径事件队列FstEvtQ,接收管理器RcvMgr通过其将快速路径事件传送给套接字引擎SktEng进行进一步处理。这些队列中的每一个均有就绪位。该位向套接字引擎SktEng指明队列具有将被退栈的条目。
在本例子中,RcvMgr块23检测DetEvtQ条目中是否存在慢速码SlwCd。因此,RcvMgr块23仅将条目写回到慢速事件队列SlwEvtQ上。被写在SlwEvtQ上的条目的各个变量在图4中指出。
套接字引擎SktEng在其空闲状态并检测SlwEvtQ的就绪位。如行717所指示的,其使条目从SlwEvtQ退栈。(还参见图10的行1001,其将在后面描述套接字引擎状态时进行阐述)。从所退栈的条目中的慢速码SlwCd,套接字引擎SktEng知道其只需将相关数据包传给主机3,因为在慢速路径处理中,主机栈执行TCP和IP协议处理。
NID4通过信息缓冲机构将信息传给主机3。通过该机构,主机3在NID3上的信息缓冲队列MsgBufQ(见图2)中保存信息缓冲标识符的队列。这些信息缓冲标识符中的每一个均指示主机存储器6中空闲信息缓冲区的起始地址。NID4可使用这些信息缓冲区将信息传给主机栈。
因此,套接字引擎SktEng退栈MsgBufQ并获得空闲信息缓冲区的信息缓冲区地址MsgAd(行718)。(还参见图10的行1079,其将在随后描述套接字引擎状态时进行阐述)。之后,套接字引擎SktEng将分析首部PrsHdr和数据包RcvPk从BufId确定的接收缓冲区复制到主机存储器HstMem,该主机存储器在信息地址MsgAd和偏移量MsgHdrLen所指示的主机存储器位置。在此,值BufId从PkEnd提取(见行717),因为PkEnd是BufId和PkLen的拼接。其后,慢速路径数据包在主机存储器6中。
接着,信息首部被发送给主机以通知主机信息缓冲区包含慢速路径数据包。该信息首部将被追加在信息缓冲区的前面。为实现此(见行720),信息首部MsgHd被写入以MsgAd开始的主机存储器,从而信息首部被预先挂起到以地址MsgAd开始的信息缓冲区中的RcvPk和PrsHd。(还可参见图10的1087行,其将在随后描述套接字引擎状态时进行阐述)。随着数据包移出DRAM11,DRAM缓冲区得以释放以保存其它进入或离开网络的数据包。如行721所示,这通过套接字引擎SktEng将目前空闲的DRAM缓冲区的BufId进栈到空闲缓冲区的RcvBufQ上实现。
一旦数据包和信息首部出现在MsgAd确定的主机信息缓冲区中,主机栈检查主机信息缓冲区(或由于中断或由于主机处理器轮询)、取回信息首部、确定信息缓冲区包含慢速路径数据包、并对数据包执行任何必要的TCP和IP协议处理。
连接分发顺序:
NID4对某些类型的网络通信执行所有或实质上所有TCP和IP协议处理,从而卸载该任务的主机栈。在本例子中,TCP连接由主机3上运行的协议栈建立。一旦已建立TCP连接,TCP连接的控制可从主机3传给NID4。在TCP连接的控制已传给NID4之后,假如没出现某些错误条件,NID4对随后跨TCP连接通信的数据包执行所有TCP和IP协议处理。在该连接上接收的后续数据包的数据包有效负载由NID4直接写入主机3上的应用存储器中的最终目的地。数据包有效负载被放在没有任何TCP或IP网络首部的最终目的地中。对于将从主机3传给NID4的TCP连接的控制,用于该TCP连接的信息的TCB(TCP控制块,有时称为事务控制块或发送控制块)控制从主机3传给NID4。TCB包括TCP连接的状态信息。在该实施例中,传递该连接的TCB控制包括从主机3实际上传送一部分TCB信息给NID4。TCP连接的控制在下述二阶段“连接分发”进程中从主机3传给NID4。
第一阶段(慢速路径清除):在连接分发进程的第一阶段,主机3暂时将TCP连接的控制传给NID4。NID4在接收到对于该连接的NID4上的慢速路径数据包流中放入清除标记,并使NID4保存随后接收的该连接的输入数据包,而不将它们传给主机3。主机3继续处理该连接的慢速路径数据包流。当主机3接收到清除标记时,主机3知道慢速路径数据包流已被清除并知道其将不再接收更多的该连接的数据包。连接分发进程的第一阶段结束,之后,主机空闲以将TCP状态传给NID4。
图8所示为图2的各个块执行连接分发所做的伪码硬件描述。如行801所示,主机3在主机存储器中的CmdAd位置建立接收指令(即清除接收指令)。清除接收指令包括指令首部CmdHd,其指示清除接收指令并包括连接的TCB保存在主机上的地址TcbAd。如行802所示,主机3通过将连接(TcbId)的指针(CmdAd)和指示写入NID4上的HstEvtQ而将清除接收指令通知给NID4。指针CmdAd指向主机存储器中的接收指令。TcbId指明哪一连接将开始保存给NID4的数据包。
套接字引擎SktEng块24在其空闲状态并检测HstEvtQ是否就绪。因此,套接字引擎退栈(行804)主机事件队列HstEvtQ并取回指令地址CmdAd和TcbId。(还可参见图10的1049-1052行,其将在下面描述套接字引擎状态时进行阐述)。
从指令地址CmdAd,套接字引擎SktEng使DMA控制器块25取回接收指令(指令首部CmdHd和TcbAd)。套接字引擎SktEng查看指令首部CmdHd中的指令码CmdCd并看其是否是“套接字描述符输入”指令(也称为“Tcb输入”指令,即使其仅导致TCB的套接字描述符部分被输入而不输入TCB的TCP状态部分)。参见图10的1144和1145行,其将在下面描述套接字引擎状态时进行阐述。
套接字引擎SktEng使用TcbAd从主机存储器HstMem中的TCB拷贝(行806)套接字描述符SktDsc,并将套接字描述符SktDsc放入由TcbId确定的NID4上的特定套接字描述符缓冲区SktDscBuf中。如上所述,NID4上有一个套接字描述符缓冲区用于正被NID4进行快速路径处理的每一Tcb。如图6中所示,套接字描述符SktDsc包括首部码HdrCd、TCP源端口、TCP目的端口、IP源地址、IP目的地址、及检测使能位DetEn。(还可参见图10的1153-1159行,其将在下面描述套接字引擎状态时进行阐述)。
一旦该连接的套接字描述符已加载入NID4上的套接字描述符缓冲区SktDscBuf中,套接字引擎SktEng发送(行807)检测使能指令EnbCd给套接字检测器SktDet块22。检测使能指令EnbCd指示套接字检测器块SktDet 22开始检测该连接的数据包。如行807所示,检测使能指令通过套接字引擎SktEng将套接字使能码EnbCd和TcbId写入检测指令队列DetCmdQ中而进行发送。(还可参见图10的1161-1162行,其将在下面描述套接字引擎状态时进行阐述)。
套接字引擎SktDet块22退栈DetCmdQ(行809),取回套接字使能码EnbCd和TcbId。之后,套接字检测器SktDet在由SktDscBuf[TcbId]确定的特定套接字描述符缓冲区中“置位”(行810)检测使能位DetEn。该检测使能位DetEn是套接字描述符SktDsc中的位,其告诉套接字检测器接收数据包的下一时间并将Tcb与数据包中的首部进行对比,其可指示分析首部PrsHd中的匹配。如果检测使能位未被置位,则套接字描述符将不指示匹配,即使进行了Tcb与数据包首部的比较也不指示。(检测使能位防止套接字检测器SktDet因使用与无效套接字描述符条目匹配而错误地确定输入数据包应在快速路径中进行处理)。
套接字检测器SktDet块22将使能码EnbCd清除标记和TcbId写入检测事件队列DetEvtQ中(行811)。
接收管理器RcvMgr读(行813)DetEvtQ并获得EnbCd清除标记和TcbId。RcvMgr通过将EnbCd和TcbId写入慢速事件队列SlwEvtQ中而将EnbCd清除标记加入TcbId确定的对于该连接的数据包流中(行814)。因此,除了包含指向DRAM中保存慢速路径数据包的那一缓冲区的PkEnd值的条目以外,具有清除标记格式的条目也可加在该SlwEvtQ上。对于这样的包含EnbCd清除标记的SlwEvtQ条目的格式,可参见图4。
因此,对于对应于该Tcb的任何数据包,在启动Tcb分发之前已接收的接收描述符在EnbCd清除标记之前已在SlwEvtQ中,它们将通过在清除标记从SlwEvtQ退栈之前发送给主机栈而以正常的慢速路径方式进行处理。
另一方面,在清除标记之后接收的数据包的接收描述符将保存在NID4上,其通过将它们放入套接字接收队列SktRcvQ实现(见图2)。用于这样的数据包的接收描述符累积在该SktRcvQ中。实际的数据包照常由接收分析程序RcvPrs保存在DRAM接收缓冲区中,但这些DRAM接收缓冲区被接收描述符中的PkEnd变量指向,这些变量被保持在SktRcvQ上。
套接字引擎SktEng在其空闲状态并检测SlwEvtQ上的条目。因此,套接字引擎SktEng读SlwEvtQ(行816)并获得EnbCd清除标记和TcbId。EnbCd清除标记是一种类型的事件代码EvtCd(EvtCd==1)。当套接字引擎SktEng看见该特定的EnbCd清除标记时,SktEng获得信息缓冲区地址MsgAd(其指向NID4可用以将指明分发阶段I结束的信息发送给主机的信息缓冲区MsgBuf)。因此,如行817所示,SktEng退栈MsgBufQ以获得MsgAd。SktEng块24使DMA控制器25将信息首部MsgHd写入主机上由MsgAd确定的信息缓冲区。在此,信息首部MsgHd指使能标记信息EnbMrkMsg。(还可参见图10的使能标记事件状态的1094-1100行,其将在下面描述套接字引擎状态时进行阐述)。
从NID4到主机3的所有信息均通过主机存储器中信息缓冲区的虚拟队列。如前所述,主机3经MsgBufQ将空闲信息缓冲区的起始地址分发给NID4。主机3还跟踪信息缓冲区地址分发给NID4的顺序。主机栈完全按信息缓冲区的分发顺序检查信息缓冲区。因此,清除标记以该虚拟队列中信息首部MsgHd的形式流经主机栈。该信息首部MsgHd清除标记告诉主机栈主机接收指令(由套接字引擎在行805读取)已被NID4完成。
第二阶段(加载套接字状态):主机3通过读在MsgAd位置的HstMem而从NID4读MsgHd清除标记(行820),其中NID4将信息首部放置在所述位置。在确定连接分发的第一阶段已经结束的情况下,主机3将套接字元组SkTpl形式的套接字状态写入TcbAd确定的主机存储器的一部分中(行821)。如图6所示,套接字元组SkTpl包含该连接的TCB的状态信息。主机3还将指令首部CmdHd和TcbAd形式的套接字接收指令SktRcvCmd写入CmdAd确定的信息缓冲区(行822)。主机3还将包含指令缓冲区的地址CmdAd和TcbId的条目写入NID4上的主机事件队列HstEvtQ。
套接字引擎SktEng 24在其空闲状态并检测HstEvtQ是否就绪。因此,套接字引擎退栈HstEvtQ(行825)并使用CmdAd指针从主机存储器中的缓冲区读(行826)主机指令(指令首部CmdHd和TcbAd)。(还可参见图10的1137-1141行,其将在下面描述套接字引擎状态时进行阐述)。
TcbAd确定套接字元组在主机存储器中的位置。指令是套接字使能指令。因此,套接字引擎SktEng使用TcbAd将状态信息SkTpl从主机存储器HstMem复制(行827)到NID4上TcbId确定的Tcb缓冲区内。(还可参见图10的1177-1183行,其将在下面描述套接字引擎状态时进行阐述)。
一旦状态已被加载,SktEng经MgrCmdQ发送“待命中断(arm)”码给接收管理器(行828)。(还可参见图10的187行,其将在下面描述套接字引擎状态时进行阐述)。
接收管理器RcvMgr在一位宽的MgrBuf中保存事件使能位EvtEn(见图2)。对NID4控制的每一Tcb均有一个这样的事件使能位。如果Tcb的事件使能位EvtEn被置位,则RcvMgr“受命”将一快速路径事件发送给该Tcb的套接字引擎SktEng。如果没有该Tcb的事件在SktRcvQ上排队,则接收管理器RcvMgr等待,直到SktRcvQ具有对于该TcbId的条目。如SktRcvQRdy[TcbId]所指示的,当接收描述符在该TcbId的SktRcvQ中时,则接收管理器RcvMgr退栈该TcbId的SktRcvQ并使用该条目为该TcbId产生一快速路径事件由套接字引擎SktEng进行处理。
因此,接收管理器RcvMgr退栈MgrCmdQ(行830),并取回ArmCd和TcbId。如果在SktRcvQ上有该TcbId的接收描述符,则SktRcvQRdy[TcbId]将为真。接收管理器RcvMgr退栈该Tcb的SktRcvQ并通过将FstCd和TcbId写在FstEvtQ上而将事件移到快速路径队列中(行832)。
如果当前在SktRcvQ上没有该TcbId的接收描述符,则SktRcvQRdy[TcbId]为假。因此,接收管理器RcvMgr置位MgrBuf中对于该TcbId的EvtEn位,如行834所示。EvtEn位被置位,从而当下次在对于该TcbId的SktRcvQ上发现接收描述符时,接收管理器RcvMgr将使其从该TcbId的SktRcvQ退栈并在FstEvtQ上产生快速路径事件(见图9的919行),并继而清除MgrBuf中对于该TcbId的EvtEn位。
因此,应认识到EvtEn位用于实现一次待命指令机制,因为当快速路径事件由接收管理器RcvMgr返回给套接字引擎SktEng时,EvtEn位被清除。置位EvtEn位使接收管理器RcvMgr受命发送一个且仅发送一个快速路径事件给套接字引擎SktEng。提供该一次待命指令机制,使得套接字引擎SktEng将仅在其已完成快速路径连接上的先前数据包的处理之后才能处理该快速路径连接(TcbId)上的数据包。
基于图8中所示行动的结果,跨TcbId确定的TCP连接的通信正由NID4在快速路径中处理。快速路径TCP连接上的数据包的接收描述符经用于快速路径处理的快速事件队列FstEvtQ从接收管理器RcvMgr传给套接字引擎SktEng。
快速路径数据包接收顺序:
第一快速路径接收数据包(建立最终目的地的第一个数据包):
网络信息包从PHY12输入ASIC10,如图2中的箭头30所指。通过接收Mac块RcvMac 20和接收分析程序块RcvPrs21的处理(见图9的900-908行)以与慢速路径接收顺序几乎一样的方式进行,但在快速路径接收顺序的情况下,上面结合图8描述的连接分发顺序已经发生。TCP连接的套接字描述符已经在套接字描述符缓冲区SktDscBuf中,且保存TCP连接状态的套接字元组SkTpl已经在Tcb缓冲区中。
当套接字检测器SktDet块22取回套接字散列SkHsh(行910)并测试SktDscBuf(行911)时,检测匹配。因此,套接字检测器SktDet将快速码FstCd写入检测事件队列DetEvtQ(行912),而不是写慢速码SlwCd。如行912和913所示,两个条目被进栈到DetEvtQ上,使得快速码FstCd、首部码HdrCd、数据包结束指针PkEnd及TcbId被传给接收管理器RcvMgr。需要两个条目是因为DetEvtQ只有32位宽。当接收管理器RcvMgr接收FstCd时,其知道下一条目是TcbId,从而其自动从DetEvtQ退栈该第二条目及第一条目。
如行915和916所示,接收管理器RcvMgr块23退栈DetEvtQ两次,并取回由接收分析程序RcvPrs放在那里的条目。
接收管理器RcvMgr保存先进先出套接字接收队列SktRcvQ。SktRcvQ实际上是多个队列,每一TcbId均有一队列。TcbId的SktRcvQ保存该TcbId的检测事件描述符。在接收管理器RcvMgr块23未待命发送快速路径事件给套接字引擎SktEng且RcvMgr从DetEvtQ接收事件的情况下,RcvMgr块23将快速路径事件进栈到该TcbId的SktRcvQ上。因此,如行917所示,在该例子中,接收管理器RcvMgr将SlwCd写到该TcbId的SktRcvQ。RcvMgr检查该TcbId的MgrBuf以看该TcbId的EvtEn位是否被置位。如果EvtEn位被置位,则RcvMgr将FstCd和TcbId放入FstEvtQ并清除EvtEn位(行920)。EvtEn位被清除是因为其只有一次且一个快速路径事件刚才已转发给套接字引擎SktEng。
套接字引擎在检测快速事件队列是否就绪时处于其空闲状态。因此,套接字引擎SktEng退栈FstEvtQ(行923)并取回FstCd和TcbId。之后,其通过将ReqCd、HdrId和TcbId写在用于接收管理器RcvMgr的MgrCmdQ上而请求快速路径数据包的首部。(该TcbId的Tcb缓冲区包含状态、MDL条目、一些工作区及保存首部的区域)。(还可参见图10的行1117,其将在下面描述套接字引擎状态时进行阐述)。
接收管理器RcvMgr退栈MgrCmdQ(见行926)并取回ReqCd、HdrId和TcbId。使用TcbId,其退栈(见行927)SktRcvQ并获得当前TcbId的接收事件描述符。之后,其使用HdrCd和PkEnd指示DRAM控制器将分析首部PrsHd和数据包首部PkHd从BufId确定的DRAM接收缓冲区传入HdrId确定的首部缓冲区HdrBuf。HdrBuf不是队列。而是,每一TcbId有一HdrBuf。由DRAM控制器传出DRAM接收缓冲区的数量基于HdrCd。其后,接收管理器RcvMgr将TcbId写入HdrEvtQ(见行929)以告诉套接字引擎SktEng首部已被放入HdrBuf[TcbId]。
套接字引擎SktEng再次在其空闲状态并检测首部事件队列是否就绪。因此,套接字引擎退栈HdrEvtQ(见行931)并取回TcbId。从而套接字引擎SktEng被通知:首部出现在HdrBuf[TcbId]中且其具有适于TcbId确定的套接字的数据包。现在套接字引擎SktEng处理数据包。如行933所示,其在检查确认、窗口和序号时并行处理。如果数据包通过这些测试,则数据包将在快速路径中进行处理,且套接字引擎SktEng将必须知道将该数据包中的数据传送到哪里。
SktEng按如下确定将数据传到哪里。多数据包会话层信息的第一TCP有效负载数据包括会话层首部,但随后的数据包不包括。NID4将该第一TCP数据包连同确定TcbId的信息首部传给主机栈进入主机存储器中的虚拟队列。信息首部告诉该栈:该数据包是该TcbId的初始接收数据包。主机栈将NID4使用的TcbId变换为主机上使用的Tcb号。主机栈将该数据包的会话层首部给予主机上运行的应用程序。应用程序返回存储描述符列表(MDL),其指明会话层信息的数据有效负载保存在哪里。MDL包括条目列表,其中每一条目包括地址和大小。MDL还包括总字节计数。主机通过将适当的主机指令指针进栈到HstEvtQ上而将MDL传给NID4。主机通过在其指令缓冲区之一中建立指令并将指向主机上的该指令缓冲区的指针存入NID4的HstEvtQ而将指令传给NID4。NID4退栈,取回指针并从主机上的指令缓冲区的指令中取回DMA传输。现在,NID4具有第一MDL条目的地址和大小以及总字节计数。当NID4在已确定的TcbId上接收数据包的有效负载数据时,NID4DMA将数据有效负载传入在MDL条目所确定的地址的主机存储器6内,并将MDL条目的大小值减小所移除的有效负载数据量。当接收到更多的有效负载数据时,减小MDL条目直到超出大小值为止。之后,从主机存储器取回第二MDL条目,进程继续直到第二MDL条目被填满为止。该进程一直继续,直到MDL的总字节数被用尽为止。当整个MDL列表条目均被用尽时,NID4卡经主要事件队列MstEvtQ将该事实通知给主机并向主机发送中断。之后,经通过主机栈传送初始数据包的初始阶段,NID4和主机回到应用程序以取回第二MDL列表。
因此,在行934,套接字引擎SktEng检查是否有对于TcbId的有效描述符条目。在每一TcbId的Tcb缓冲区中有MDL有效位MdlVd。套接字引擎SktEng检查该MdlVd位。如果其被置位,则执行935-942行提出的行动,否则执行943-961行提出的行动。
如果有有效MDL条目,则套接字引擎SktEng从HdrId确定的HdrBuf读(行935)首部缓冲区Id BufId。(BufId是分析首部PrsHd的一部分)。套接字引擎SktEng读MDL条目(在此称为ApDsc),其保存在该TcbId的Tcb缓冲区TcbBuf中。套接字引擎SktEng将数据包有效负载PayLd从DRAM接收缓冲区RcvBuf[BufId]复制(行937)到主机应用存储器HstMem[ApDsc]内。套接字引擎SktEng通过将请求放在DRAM到主机请求队列D2hReqQ上而执行数据移动。该请求使DRAM控制器26将有效负载从DRAM接收缓冲区移入DRAM到主机数据队列D2hDatQ。之后,套接字引擎SktEng通过MstWrReqQ给予DMA控制器/PCI总线接口单元块25请求以将数据包有效负载从D2hDatQ移入主机存储器内ApDsc所确定的位置(即MDL条目)。
一旦数据传送已经结束,DMA控制器/PCI总线接口单元块25将主要事件发送回MstEvtQ上的套接字定序器。该主要事件通知套接字引擎SktEng:数据包有效负载传入主机存储器已经完成。
在此,为简化起见,假设数据传送用尽了最后一个MDL条目。因此,NID4必须通知主机栈:MDL条目已被数据填满。(该通知包括用于MDL的第二主机中断。第一中断出现在第一数据包上,其导致MDL被返回给NID4。这是MDL已被数据填满之后的第二中断。)
为通知主机,NID4读(行938)脱离信息缓冲区Q MsgBufQ的空闲信息缓冲区的地址MsgAd。套接字引擎SktEng将适当的信息首部MsgHd放入该信息缓冲区。该信息首部MsgHd向主机栈指明:数据已被存入该TcbId的应用存储空间。既然数据有效负载已被挪到主机存储器,则不再需要NID4上的DRAM接收缓冲区,且其可用于接收另外的数据包。因此,DRAM接收缓冲区的BufId被进栈(行940)回到空闲缓冲区队列RcvBufQ上。
在本例子中,为简单起见,假设数据有效负载的传输导致MDL接收指令的完成及整个MDL列表的填充可由主机利用。因此,对于该TcbId,不再有MDL条目可被填充。因此,MDL“无效”且套接字引擎SktEng清除TcbBuf[TcbId]中的MdlVd位,如行942所示。
如果接收到快速路径数据包且MDL有效位MdlVd为假,则数据块可能是快速路径多数据包会话层信息的第一数据包。在这种情况下,因为MdlVd为假,处理进行到行943-961。整个数据包(首部和数据)连同快速码FstCd将被传给主机栈,从而主机栈可返回MDL条目用于该连接上接收的下一快速路径数据包。因此,套接字引擎SktEng取回脱离信息缓冲区队列MsgBufQ的空闲信息缓冲区的地址MsgAd(行944)。之后,整个数据包PayLd被从BufId确定的DRAM接收缓冲区RcvBuf复制到主机上MsgAd确定的通用信息缓冲区(行945)。信息首部MsgHd表明数据包有效负载属于快速路径接收数据包,并指明TcbId,及指明有多少信息正被传给主机。一旦有效负载PayLd已从DRAM接收缓冲区复制到主机存储器,通过将DRAM接收缓冲区标识符BufId写回到空闲接收缓冲区队列RcvBufQ上而重复利用DRAM接收缓冲区(见行947)。
主机栈从通用主机信息缓冲区HstMem[MsgAd]取回信息(行949)并通过IP协议处理层和TCP协议处理层处理该信息MsgDt的有效负载(整个数据包),并将会话层首部传送给应用层程序。应用层程序返回MDL列表。主机栈将第一数据包的会话层信息的数据部分移入第一MDL条目确定主机存储器区域,并减小第一MDL条目以反映现在在主机存储器MDL条目区域中的数据量。之后,主机栈通过将指令首部CmdHd和MDL条目(称为ApDsc)写入主机存储器中而将第一MDL条目(已减小)提供给NID4(行950)。接着,主机栈通过将指令的起始地址CmdAd和TcbId进栈到NID4上的主机事件队列HstEvtQ上而给予NID4指令通知。
套接字引擎SktEng退栈HstEvtQ(行953)并取回指令在主机存储器中的地址CmdAd和TcbId。之后,指令首部CmdHd和指令数据(在该例子中为ApDsc)被传入Tcb缓冲区TcbBuf[TcbId]。由于MDL条目现在出现在NID4上将被填充,套接字引擎SktEng置位该连接(TcbId)确定TcbBuf的中的MDL有效位MdlVd。之后,套接字引擎SktEng通过将待命中断码ArmCd连同TcbId写在管理器指令队列MgrCmdQ上而将待命中断指令发送给接收管理器。这将使接收管理器将该TcbId的快速路径事件发送给套接字引擎SktEng。
接收管理器RcvMgr退栈MgrCmdQ并取回待命中断指令ArmCd和TcbId(行958)。如果套接字接收队列对于该TcbId具有将退栈的条目(行959),则接收管理器RcvMgr通过将快速码FstCd和TcbId写在FstEvtQ上而将离开SktRcvQ的对于Tcb的事件传送到快速事件队列FstEvtQ上。另一方面,如果在套接字接收队列上没有该Tcb的事件,则接收管理器RcvMgr保持待命,当将来接收事件由对于该TcbId的接收管理器RcvMgr接收时,其将快速路径事件发送给套接字引擎SktEng。因此,套接字引擎SktEng返回到行922以监视快速事件队列FstEvtQ,以等待将从接收管理器RcvMgr传至其的快速路径事件。
套接字引擎状态:
图10指出了套接字引擎SktEng状态机通过其进行转换的多个状态。这些状态是:Idle、SlwRcvEvt、SlwRcv0、EnbMrkEvt、DblMrkEvt、DblMrk0、FstRcvEvt、ClrMrkEvt、ClrMrk0、SktCmdEvt、SktCmd0;SktEnbCmd、SktEnb0、SktArmCmd、SKtArm0、SktRcvCmd、SktRcv0、HdrDmaEvt、HdrEvt0、FastRcv、UpdMdlEntries和InitRcv。套接字引擎SktEng基于当前状态变量和输入信息从一状态进行到另一状态。状态转换仅在计时状态机的时钟信号的时钟周期的上升沿时进行。在下面的状态定义内提出的所有行动均在该状态内同时发生。
在Idle状态,状态机期待做一些事。如果慢速事件队列具有将被退栈的慢速事件条目(即SlwEvtQRdy为真),则执行1001-1018行的行动。如果事件码EvtCd为0,则EvtCd是慢速码SlwCd并执行1002-1009行的行动。如果事件码EvtCd为1,则EvtCd为使能码EnbCd并执行1011-1018行的行动。如果事件码EvtCd既不是0又不是1,则EvtCd为禁止码DblCd并执行1020-1028行的行动。如上所述,事件码由套接字检测器块SktDet 22置位。在Idle状态提出的“if,then,else”逻辑和SlwEvtQ{EvtCd}位的测试均由数字逻辑硬件门执行。
如果事件码EvtCd为0(见行1001),则慢速路径数据包的处理将移交给主机。在标志符Estate、ETcbId、ECmdAd、EHdrCd、EHdrCd、EHdrAd、EBufId和EPkLen前面的“E”指套接字状态机内的局部寄存器。引擎状态EState指套接字引擎下一次将要转换的状态。因此,EState被置位为SlwRcvEvt,其是用于处理慢速路径接收事件的状态。在从SlwEvtQ退栈的条目中提取的TcbId被写入ETcbId。类似地,在从SlwEvtQ队列退栈的条目中提取的首部的长度HdrCd、接收缓冲区号BufId及接收缓冲区长度PkLen分别被载入EHdrCd、EBufId、和EPkLen。HdrCd是由接收分析程序块RcvPrs 21产生的代码,其指明首部有多大,从而确保套接字引擎读入分析首部、MAC首部、IP首部和TCP首部。在图10中,值“x”指不在乎。使用“x”则可允许硬件合成器,其将硬件描述代码合成到逻辑门中以简化所得的硬件。在EvtCd为0的开始-结束区内的所有分配均在一个时钟转换内发生。
如果EvtCd是1(即是EnbCd),则慢速事件为使能标记事件(见行1010)。在使能标记事件中,由套接字引擎SktEng接收的清除标记EnbCd告诉套接字引擎SktEng:对于所指示的连接,其将不接收更多的描述符,因为这些描述符在连接分发的第一阶段中正被保存(Dsc输入)。因此,EState被加载以EnbMrkEvt,其是处理使能标记事件的状态。其它“E”值按与上述事件码为0的情形相同的方式加载。在EvtCd为1的开始-结束区内的所有分配均在一个时钟转换发生。
如果EvtCd既不是0也不是1(即是DblCd),则慢速事件为禁止标记事件(见行1019)。引擎状态EState被加载以DblMrkEvt,其是用于处理禁止标记事件的状态。
如果SlwEvtQRdy不为真(没有慢速事件将从慢速事件队列退栈)但FstEvtQRdy为真(有条目将从快速事件队列退栈),则套接字引擎SktEng退栈FstEvtQ并提取和检查事件码EvtCd(见行1029)。
如果所提取的EvtCd为0(见行1030),则快速事件为快速接收事件,执行1030-1038行的行动。因此,EState被加载以FstRcvEvt,其是用于处理快速接收事件的状态。“E”值按所指示的进行加载。
如果所提取的EvtCd不是0,则快速事件为清除标记事件,则执行1040-1047行的行动。因此,EState被加载以ClrMrkEvt,其是用于处理清除标记事件的状态。“E”值按所指示的进行加载。
如果SlwEvtQtRdy和FstEvtQRdy均为假,则检查HstEvtQRdy(见行1049)。如果HstEvtRdy为真,则从HstEvtQ出栈条目并执行1050-1056行的行动。EState被加载以SktCmdEvt,其是主机指令被处理的状态。除了将从出栈的条目提取的TcbId保存在ETcbId中以外,还从出栈的条目提取主机存储器中的指令地址并保存在ECmdAd中。这允许NID4上的DMA控制器块25从主机存储器取回指令并将其载入NID4进行处理。
如果SlwEvtQRdy、FstEvtQRdy、和HstEvtQRdy均为假,则检查HdrEvtQRdy(见行1058)。如果HdrEvtQRdy为真,则HdrEvtQ被退栈。EState被加载以HdrDmaEvt,其是离开HdrEvtQ的条目被处理的状态。“E”值按所指示的进行加载。
如果SlwEvtQRdy、FstEvtQRdy、HstEvtQRdy、和HdrEvtQRdy均为假,则没有事件要服务,则执行1067-1075行的行动。EState被加载以Idle,使得下一状态保持为Idle状态。因此,套接字状态机将继续检查事件以在空闲状态下处理。
如果套接字引擎SktEng在Idle状态且SlwEvtQRdy变为真,则依靠行1002将状态变为慢速路径接收事件状态SlwRcvEvt,其中执行1078-1083行的行动。值EState被加载以SlwRcv0,使得下一状态将为SlwRcv0状态。空闲主机信息缓冲区被取回离开MsgBufQ,且该地址被载入EMsgAd(行1079)。这确定主机存储器中套接字引擎SktEng将使用的信息缓冲区将慢速路径数据包传给主机。EBufId被向左移位11位(行1080)以产生包含慢速路径数据包的相应2k接收缓冲区的DRAM地址。接收缓冲区地址被加载为DRAM地址DrmAd。
图11为主机中的信息缓冲区的示意图。信息地址MsgAd指向主机存储器中信息缓冲区的开始。在行1081,将信息长度MsgHdLen与信息地址MsgAd相加以获得HstAd。HstAd是信息数据MsgDat将在主机的信息缓冲区中开始的地址。在行1082,慢速路径数据包的长度EPkLen被载入HstSz。套接字引擎SktEng使整个慢速路径数据包将从NID4上DRAM中的接收缓冲区移到主机上的信息缓冲区,其通过启动给DMA控制器块25的接收buffer-to-host DMA指令R2hCd实现。R2h意为“接收缓冲区到主机”。DMA控制器块25使用值HstAd和HstSz执行DMA操作。写入主机存储器在主机信息缓冲区中信息数据开始的位置开始。1078-1083行的开始-结束区中的所有操作均在一个时钟周期内发生。
之后,在行1085,处理进行到慢速路径接收零状态(SlwRcv0)。在该状态下,套接字引擎将慢速路径接收信息SlwRcvMsg放入引擎到主机缓冲区E2hBuf。当该信息由主机接收时,其将通知主机:慢速路径接收事件数据已被放入主机的通用信息缓冲区之一且主机栈需要处理输入数据。信息将放于主机中的地址(行1088)以及信息长度被设置(行1089)。套接字引擎SktEng使信息将被从E2hBuf传给主机,其通过将DMA控制器25的引擎到主机指令E2hCd存入HstDmaCmd寄存器实现(行1090)。当慢速路径数据包已从NID4的DRAM接收缓冲区移到主机上的信息缓冲区时,由BufId确定的接收缓冲区可被释放以由另外的接收事件使用。因此,EBufId被进栈到空闲接收缓冲区队列RcvBufQ上(行1091)。在下一时钟,因为EState被加载以Idle,处理返回到Idle状态(行1086)。
如果主机已向NID4发出指令,则主机事件描述符条目将出现在主机事件队列HstEvtQ中。主机事件描述符包括指向主机上的存储器中的主机指令的指针CmdAd。主机事件描述符还包括主机指令属于其的TcbId。在主机发指令给NID4的情况下,套接字引擎SktEng在其Idle状态并检测HstEvtQRdy是否为真(行1049)。下一状态将被设置为主机指令事件状态SktCmdEvt(行1050)。套接字引擎SktEng退栈主机事件队列HstEvtQ,提取指针CmdAd和TcbId,并按1051和1052行所示保存这些值。SktEng进行到主机指令事件状态SktCmdEvt(见行1137-1141)。
在主机指令事件状态SktCmdEvt下(行1137),来自主机事件队列的主机指令被读入NID4。下一状态被设置为SktCmd0状态。主机指令在主机上所处的起始地址通过将ECmdAd值载入HstAd而进行设置(行1139)。对所有主机指令总是一样的首部长度常数CmdHdLen被载入HstSz(行1140)以指明将要移动的信息量。DMA控制器块25被指示进行主机到NID移动,其通过用主机到引擎指令H2eCd加载主机DMA指令HstDmaCmd实现(行1141)。DMA控制器将主机指令移入H2eBuf。
套接字引擎SktEng进行到SktCmd0状态,其中主机指令的指令码CmdCd被解码。刚读入NID4的主机指令可以是三种可能类型之一:1)套接字使能指令SktEnbCmd,2)待命中断指令SktArmCmd,及3)套接字接收指令SktRcvCmd。套接字使能指令SktEnbCmd指示NID4开始保存该套接字的数据包并将清除标记发回给主机。套接字待命中断指令SktArmCmd指示NID4从主机取套接字状态并将其载入NID4,使得NID4可控制和更新套接字的状态。根据主机指令中的值或指令码用适当的下一状态值加载EState。
在SktEnbCmd状态(见行1153-1159),套接字描述符将被写入套接字描述符缓冲区SktDscBuf以执行连接分发的第一阶段。为实现此,ETcbId被乘以套接字描述符的长度。SktDscBuf中套接字描述符的长度是固定数。在存储器中有4k描述符缓冲区。这两个值的积是套接字描述符在SktDscBuf中的起始地址DscBufAd。这是该套接字描述符将被加载的目的地。
套接字描述符的源是主机上的Tcb缓冲区。现在从H2eBuf访问来自主机的已被DMA入NID4的指令首部以从该指令提取由主机存在那里的TcbAd。该TcbAd指向主机上Tcb缓冲区的开始。主机上的该主机Tcb缓冲区具有不同的区,其中之一包含套接字描述符。因此,固定常数SktDscIx被加到TcbAd上以确定主机上套接字描述符放在主机Tcb缓冲区内的起始地址HstAd。SktDscIx是由主机上Tcb缓冲区的格式确定的固定值。套接字描述符的大小SktDscLen被载入HstSz以设定将从主机Tcb缓冲区移动的信息量(行1157)。之后,发出DMA移动指令以将套接字描述符从主机上的Tcb缓冲区移到NID4上的套接字描述符缓冲区,其通过将主机到描述符指令H2dCd写到HstDmaCmd上而实现(行1158)。
在SktEnb0状态(行1160),套接字引擎SktEng通过将EnbCd指令连同ETcbId放入寄存器指令队列DetCmdQ而发送套接字使能指令给套接字检测器块22。该套接字使能码EnbCd使套接字检测器开始尝试匹配输入的数据包和刚载入的套接字描述符(见行1158)。当套接字检测器块22从DetCmdQ取回EnbCd指令时,其看见该TcbId的EnbCd码并将该TcbId的清除标记进栈到检测事件队列DetEvtQ上。响应于接收该TcbId的清除标记,接收管理器RcvMgr开始将该TcbId的后续数据包保存在其套接字接收队列SktRcvQ中并经慢速事件队列SlwEvtQ将清除标记发送到套接字引擎SktEng上。该清除标记告诉套接字引擎SktEng:在该TcbId上接收的后续数据包正由接收管理器RcvMgr保存在套接字接收队列SktRcvQ中。下一状态被设置为Idle状态(行1161)。
因此,套接字引擎SktEng检测慢速事件队列上的事件,只有这时事件码EvtCd为1(见行1010),其表明清除标记已被套接字引擎SktEng接收在慢速事件队列上。接着,套接字引擎SktEng将清除标记传回主机,使得主机将知道连接分发的第一阶段已结束。因此,Tcb号被保存(行1012)且下一状态被设置为使能标记事件状态EnbMrkEvt(行1011)。
在EnbMrkEvt状态(行1093-1101),套接字引擎SktEng从空闲信息缓冲区队列MsgBufQ取出空闲信息缓冲区地址(行1096)。该信息缓冲区地址被载入HstAd(行1098)并设定将要移动的信息量(行1099)。套接字引擎SktEng将使能标记信息EnbMrkMsg写入引擎到主机缓冲区E2hBuf(行1097)。使能标记信息从NID4上的E2hBuf到主机上的主机信息缓冲区的DMA移动通过将引擎到主机码E2hCd载入HstDmaCmd而开始。之后,DMA控制器25将使能标记信息从E2hBuf移动到主机上的信息缓冲区。主机检查主机信息缓冲区中的信息、确定其是使能标记信息,从而得知连接分发的第一阶段已经结束,且主机现在可将TCP状态传给连接分发第二阶段中的NID4。
由于行1095,套接字引擎SktEng返回到Idle状态。主机经HstEvtQ发送主机指令(套接字待命中断指令)给NID4以执行连接分发的第二阶段。因此,套接字引擎SktEng检测HstEvtQRdy(行1049),将主机指令的TcbId存入ETcbId,并将指向主机指令的指针CmdAd存入主机存储器中的ECmdAd内。处理经行1050进行到主机指令事件SktCmdEvt状态。发生行1137-1142的行动。DMA定序器块25将主机指令从主机信息缓冲区移到E2hBuf。当主机指令的指令码CmdCd在状态SktCmd0被解码时,指令码CmdCd指示套接字待命中断指令。在行1147,SktArmCmd被载入EState,且处理进行到套接字待命中断指令状态SktArmCmd(行1164-1171)。
在状态SktArmCmd(行1165),主机上对于该连接的套接字状态将被载入NID4上的适当TcbBuf,使得NID4可被“武装(arm)”以处理该连接的快速路径数据包。NID4上TcbBuf中Tcb缓冲区的地址TcbBufAd(套接字状态将被置放于此)通过ETcbId乘以Tcb缓冲区长度TcbBufLen而进行确定(行1167)。指向主机上的正确Tcb的套接字状态的指针通过在主机上Tcb缓冲区地址TcbAd上加固定偏移量而得以确定。该偏移量是主机上Tcb缓冲区的开始和该缓冲区中套接字状态(套接字元组)的起始位置之间的固定偏移量。所得的指针(其指向主机Tcb缓冲区中的套接字元组)被载入HstAd(行1168)。套接字元组的大小SkTplLen被载入HstSz(行1169)。之后,开始DMA移动以将套接字元组从主机移到NID4,其通过向DMA控制器25发出主机到套接字元组指令H2tCd而实现。指令通过将主机到套接字元组指令H2tCd加载在HstDmaCmd上而发出。处理进行到状态。
在SktArm0状态(行1172),待命中断码ArmCd经MgrCmdQ发送给接收管理器RcvMgr。这“武装”接收管理器以向套接字引擎发回一快速路径事件从而在该连接上处理。ArmCd是2位,ETcbId是12位。因此,管理器指令队列MgrCmdQ上的条目是14位。现在,连接分发的第二阶段结束。套接字状态的控制已转给NID4。移到待命中断码ArmCd已从套接字引擎传给接收管理器,接收管理器可将快速路径数据包的一事件描述符放在该连接上的快速事件队列FstEvtQ中。
套接字引擎在Idle状态。当接收管理器块RcvMgr 23将快速事件描述符放在FstEvtQ上时,FstEvtQRdy为真。快速事件描述符中从快速事件队列退栈的事件码EvtCd为0(见行1030),这意味着其是快速路径接收事件。TcbId和首部缓冲区指针HdrId均从快速事件描述符提取(行1032和1035)。套接字引擎处理进行到FstRcvEvt的下一状态(行1114-1118)。
在快速路径接收事件状态FstRcvEvt(行1114-1118),下一状态被设定为Idle且套接字引擎SktEng经MgrCmdQ发送指令给接收管理器(行1117)以将快速路径数据包的首部存入该TcbId的首部缓冲区HdrBuf中。为实现此,将适当的请求指令ReqCd、TcbId和数据包标识符BufId载入管理器指令队列MgrCmdQ。BufId描述数据包在DRAM中的什么地方。接收管理器RcvMgr使用ETcbId确定SktRcvQ中正确的套接字接收队列,使所指示连接的下一事件描述符离开队列,并使用事件描述符导致数据包首部从DRAM接收缓冲区(由BufId确定)DMA移入该TcbId的首部缓冲区HdrBuf。因此,放入首部缓冲区中的首部为分析首部、链接首部、TCP和IP首部。为通知套接字引擎SktEng:首部现在在首部缓冲区中,接收管理器RcvMgr将首部事件条目存入首部事件队列HdrEvtQ中。该条目指示TcbId。
套接字引擎回到Idle状态。由于接收管理器RcvMgr的行动,首部事件在首部事件队列上且HdrEvtQRdy为真。因此,套接字引擎执行1058-1066行的行动。TcbId被从首部事件队列HdrEvtQ条目进行提取(行1060),且下一状态被设定为HdrDmaEvt状态(行1059)。
在HdrDmaEvt状态(行1190-1197),下一状态被设定为HdrEvt0。从首部缓冲区HdrBuf中的分析首部取出数据包长度(行1196)并存入EPkLen。DRAM中保存数据包有效负载数据的接收缓冲区还被保存在EBufId中(行1195)。还执行转储清除检测操作FlushDet以用快速路径接收数据包上到达的信息处理接收和传送窗口的当前状态。
如上所述,在慢速路径上,带有分析首部和信息首部的接收数据包被放入信息缓冲区并通过信息缓冲机构传给主机。在快速路径上,所有TCP和IP协议处理均在NID4上完成且只有有效负载数据被放入主机上的MDL空间。然而,仍然必须由NID4通知主机:有效负载数据已被传给MDL。该通知经相同的信息缓冲机构发送给主机。因此,套接字引擎SktEng从空闲信息缓冲区队列MsgBufQ取回空闲信息缓冲区地址且该信息缓冲区地址被保存(行1193)。
处理进行到首部事件0状态HdrEvt0(行1198-1216)。在HdrEvt0状态,如果转储清除被检测到(EFlush为真),则执行一组行动(行1199-1200)。如果没检测到转储清除,且对于该Tcb有MDL条目将被填充,则执行1202-1208行的行动。如果没检测到转储清除且在Tcb中没有MDL条目将被填充,则执行1209-1216行的行动。没检测到转储清除条件但没有MDL条目有效的情形是在接收快速路径多数据包信息的第一数据包时。在这种情况下,NID4不知道将数据包有效负载存入主机存储器中的什么地方,因而Tcb中的MdlVd位将为假。
在当前描述的例子中,所接收的快速路径数据包是多数据包信息的第一数据包且在TcbBuf中尚没有对于该快速路径连接的MDL条目。因此,执行1209-1216行的行动。
下一状态被设定为InitRcv状态(行1210)且第一快速路径数据包发送到主机的通用信息缓冲区中。为移动该数据包,通过对EBufId移位11位而确定DRAM接收缓冲区的地址(行1211)。数据包长度EPktLen被载入HstSz。数据包有效负载数据将被传给主机上的地址,该地址为主机地址EMsgAd和信息首部长度MsgHdLen的和。这将数据包数据有效负载放在信息缓冲区的结尾。通过将接收缓冲区到主机指令R2hCd放在HstDmaCmd上而取消DMA移动。这使得数据包如慢速路径数据包将经主机信息缓冲区给予主机,但在该初始快速路径数据包的情形下,则使用不同类型的信息首部(接收请求信息首部)。信息首部告诉主机栈从该应用获得MDL列表,其指明将随后该连接上接收的快速路径数据包的额外数据有效负载放在什么地方。
因此,下一状态为初始接收状态InitRcv(行1232),其中接收请求信息被发送给主机。接收请求信息包含初始快速路径数据包。
主机从其信息缓冲区获得接收请求信息,并处理该数据包(其是初始快速路径数据包)的数据部分,并将该初始快速路径数据包提供给应用程序。所有下述并包括TCP协议层的协议处理均由NID4执行。应用程序为该连接返回MDL列表。主机栈将MDL列表写入适当Tcb的Tcb主机缓冲区中。在这时,MDL和MDL列表均不传送给NID4。为将MDL条目传给NID4,主机在主机存储器中形成主机指令。之后,主机将指向主机存储器中的主机指令的指针CmdAd进栈到HstEvtQ上。
之后,套接字引擎回到Idle状态,但现在对该套接字引擎已有主机事件就绪HstEvtRdy。执行1050-1057行的行动。套接字引擎从HstEvtQ退栈条目,并从该条目提取指令指针CmdAd和TcbId。下一状态被设定为SktCmdEvt。
在SktCmdEvt中(行1136-1142),套接字引擎使DMA控制器块25将主机指令从主机移入H2eBuf(见行1141)。在SktCmd0状态,H2eBuf中的主机指令被检查且指令码CmdCd被解码。在此,指令既不是SktEnbCmd也不是SktArmCmd。因此,SktEng处理进行到套接字接收指令状态SktRcvCmd(见行1150)。
在SktRcvCmd状态(行1176-1183),MDL列表的第一MDL条目(称为ApDsc)从主机上的Tcb缓冲区载入NID4上对于该TcbId的TcbBuf的适当字段内。通过将应用描述符偏移量ApDscIx加到主机中Tcb缓冲区的起始地址上而设定MDL条目在主机上所处的源地址(行1180)。将从主机上的Tcb缓冲区移动的信息量被设定为常数ApDscLen(行1181)。设定MDL条目的移动目的地(行1179)。NID4上Tcb缓冲区的起始地址为TcbId号乘以Tcb缓冲区的长度TcbBufLen。接着,对Tcb缓冲区内的MDL条目的偏移量ApDscIx与起始地址相加以确定MDL条目将被写于那里的目的地地址TcbBufAd。之后,套接字引擎SktEng使DMA控制器25将MDL条目从主机存储器移到NID4上的TcbBuf,其通过将主机到套接字元组指令H2tCd放在HstDmaCmd上进行。
接下来,在状态SktRcv0,接收窗口TcbBuf{RSqMx}被递增(行1186)。当应用程序消费数据时,应用程序通过移动接收顺序而改变窗口大小。主机告诉我们可将窗口改变多少。我们到TcbBuf并取出接收顺序最大值RSqMx,加上主机在指令h2eBuf{SqInc}中所指示的量,将更新后的值放回Tcb缓冲区TcbBuf以作为新的接收顺序最大值TcbBuf{RSqMx}。(RSqMx有时被标注为RcvSqLmt)。有涉及传输帧的硬件,且该硬件将窗口信息的一部分传给发送数据给我们的那人以告诉他:他还可以向我们发送多少数据,我们通过告诉发送人窗口大小而实现此,且窗口大小部分源于该接收顺序限制,从而当发送人看见该信息到达时,他知道我们还可接受多少数据。这样,我们更新接收顺序限制并回到Idle状态。
由于MDL条目现在出现在NID4上的TcbBuf中,设定Tcb缓冲区内的MDL有效位(行1188)。下次有快速接收事件时,Tcb缓冲区中的MDL有效位将被设定,使得处理将不通过初始接收顺序从主机取回MDL条目,而是通过快速接收顺序,因为有有效MDL。
套接字引擎SktEng返回到Idle状态。由于接收管理器RcvMgr被武装,用于该连接上第二快速路径数据包的接收事件描述符可从接收管理器RcvMgr经快速事件队列FstEvtQ转发给套接字引擎SktEng。套接字引擎看见FstEvtQRdy为真且事件码EvtCd为0,并通过上面提出的过程提取TcbId并进入FstRcvEvt状态(行1115-1118)。在快速路径接收事件状态FstRcvEvt,套接字引擎经MgrCmdQ指示接收管理器传输由TcbId确定的第二快速路径数据包的首部(行1117)并回到Idle状态。首部经过首部缓冲区HdrBuf到达套接字引擎,接收管理器RcvMgr将该Tcb的首部事件放在HdrEvtQ上。
套接字引擎SktEng在Idle状态,检测HdrEvtQRdy,并执行1058-1066行的行动。来自首部事件队列的TcbId被存入ETcbId中(行1060)。ETcbId是套接字引擎本地的寄存器。将TcbId载入ETcbId使得TcbBuf中由TcbId确定的特定Tcb缓冲区的所有位可用于套接字引擎。所确定的Tcb缓冲区的所有位均可立刻可用。
首部缓冲区指针HdrId被存入EHdrAd中(行1063)。EHdrAd是套接字引擎本地的寄存器。将首部缓冲区指针载入EHdrAd使得由HdrAd确定的特定首部缓冲区HdrBuf的所有位可用于套接字引擎。所确定的首部缓冲区的所有位均可立即可用。
接下来,在HdrDmaEvt状态(行1191-1197),首部的位(EHdrAd确定的首部缓冲区的输出)和Tcb的位(ETcbId确定的Tcb缓冲区的输出)均用于执行转储清除检测FlushDet测试(行1194)。假设没有转储清除事件,套接字引擎变迁到HdrEvt0。这时MdlVd[ETcbId]为真(与通过该状态的初始接收相反),从而NID4知道将数据有效负载放在主机中的什么位置。缓冲区Id被移位11位以发现数据包在DRAM接收缓冲区中的什么地方开始,并跳过数据包首部到实际数据(行1204)。该地址DrmAd是将被移到主机的数据有效负载的源。对于主机上的目的地地址HstAd,保存在NID4上TcbBuf中的应用描述符ApDsc(即MDL条目)被使用。将要移动的有效负载数据的量为数据包长度EPkLen减去首部的量HdrLen。数据包有效负载从NID4上的DRAM接收缓冲区到主机上MDL条目确定的地址的移动通过将接收缓冲区到主机指令R2hCd进栈到HstDmaCmd上而开始。DMA定序器块25执行移动。
一旦数据有效负载已被复制到主机,套接字引擎进入快速接收状态FastRcv(行1217-1225)。在该例子中,有效负载数据移到MDL条目用尽MDL条目。因此,快速接收信息被准备并发送给主机栈以通知主机栈特定MDL条目已被用尽且主机的接收指令已被完成。(尽管未在此示出,在一状态中(未示出),MDL条目的字节数根据有多少数据有效负载已被移动而递减以看MDL条目是否已被用尽,如果已用尽,则处理通过FastRcv状态进行,否则将更新的MDL值加载回到TcbBuf中且套接字引擎返回到Idle状态以期待另一快速路径接收事件)。快速接收信息FstRcvMsg使用与上述主机信息缓冲技术相同的技术进行传送。套接字引擎使DMA定序器25将信息从NID4移到主机上的信息缓冲区,其通过将E2hCd指令放在HstDmaCmd上实现(行1222)。保存在TcbBuf中的套接字连接状态被TplUpd更新(行1224)。元组更新TplUpd值在图6中示出。行1224中的TplUpd指明Tcb缓冲区值按如下进行更新:
TcbBuf[TcbId]{ExpRcvSeq}<=TplUpd{NxtSeqExp}
TcbBuf[TcbId]{XmtAckNum}<=TplUpd{PktXmtAck}
TcbBuf[TcbId]{XmtSeqLmt}<=TplUpd{NxtXmtLmt}
TcbBuf[TcbId]{XmtCcwSz}<=TplUpd{NxtXmtCcw}
由于由套接字引擎进行的该第二快速路径数据包的处理现在已结束,套接字引擎“武装”接收管理器RcvMgr以为该连接发送另一事件描述符(行1225)。
处理进行到状态更新MDL条目UpdMdlEntries。如果由主机提供的MDL条目已被用尽,则NID4上Tcb缓冲区中的MDL有效位被清除(行1229)。下一状态被设定为FastRcv(行1231)。
连接转储清除顺序:
图12为当将连接的控制从NID4传给主机3时在该连接上检测到转储清除条件后图2的各个硬件块采取的行动。在快速路径接收情形下,套接字引擎SktEng进入快速路径接收事件状态FstRcvEvt(见图10的1114-1118行)。套接字引擎SktEng将下一状态设为Idle(行1116)并告诉接收管理器RcvMgr传输首部给套接字引擎(行1117)。因此,套接字引擎SktEng在Idle状态且首部事件HdrEvtQRdy变为真(见行1058)。由于行1059,套接字引擎SktEng转到首部DMA事件HdrDmaEvt状态(见行1191-1197)并继而转到HdrEvt0状态(见行1198-1216)。在那里,转储清除检测条件被检测(见行1194),且单位值FlushDet被载入EFlush。如果EFlush为真(见行1198),则在HdrEvt0状态,套接字引擎SktEng将“进栈”码PshCd进栈到接收管理器的指令队列MgrCmdQ上(见行1200)。
回到图12,接收管理器RcvMgr退栈MgrCmdQ(行1503)并取回进栈码PshCd和TcbId。该进栈码使接收管理器RcvMgr反转从SktRcvQ退栈最后描述符的作用。进栈码PshCd使RcvMgr将套接字接收队列SktRcvQ的读点“进栈”回到一描述符条目。该TcbId的套接字接收队列SktRcvQ具有读指针和写指针。当描述符从套接字接收队列SktRcvQ退栈时,描述符并不实际上从存储器中擦除,而是描述符被留在队列存储器中且读指针前进,从而下次SktRcvQ被退栈时,队列上的下一条目将被读。然而,在接收管理器RcvMgr接收进栈码PshCd的情况下,读指针被倒退一描述符条目且不前进。由于先前退栈的接收描述符仍然保留在队列存储器中,向后推读指针使SktRcvQ返回原始条件,好像最后退栈的描述符永远不会被从队列退栈。
接收管理器RcvMgr还通过将ClrCd和TcbId写在快速路径事件队列FstEvtQ上而将清除标记ClrCd插入该TcbId的快速路径接收描述符流中(行1504)。随后,当套接字引擎处理该TcbId的离开快速路径事件队列的接收描述符时,套接字引擎将检测ClrCd。遭遇ClrCd将通知套接字引擎:由于所遇到的错误,对该TcbId将不再有更多的快速路径事件。然而,在清除标记ClrCd之前的快速路径事件队列FstEvtQ中的快速路径数据包接收描述符将在快速路径中处理。在使FlushDet为真的数据包之前在快速路径模式下处理快速路径数据包将减少处理转储清除条件的等待时间。
接收管理器RcvMgr还清除MgrBuf中的事件使能位EvtEn以防止任何更多的快速路径接收描述符被接收管理器RcvMgr发送给该TcbId的套接字引擎。这使连接转储清除操作的第一阶段(快速路径事件清除阶段)结束。
当FstEvtQRdy被检测为真时套接字引擎SktEng在Idle状态(见行1029)。SktEng读快速路径事件队列FstEvtQ(行1507)并取回事件码EvtCd。事件码EvtCd为清除标记ClrCd(也称为“清除标记事件”码)。事件码为清除标记事件,其通知套接字引擎SktEng:对于TcbId确定的该特定连接,已清空快速路径事件接收队列FstEvtQ的快速路径接收事件描述符。从自快速路径事件接收队列FstEvtQ退栈的条目提取TcbId(见行1041)。EvtCd为清除标记事件使得套接字引擎SktEng变为ClrMrkEvt状态(行1120-1128)。
在状态ClrMrkEvt,套接字引擎SktEng将禁止码DblCd和ETcbId放入套接字检测器SktDet的检测指令队列DetCmdQ(见行1127)。套接字引擎SktEng从信息缓冲区队列MsgBufQ获得信息缓冲区地址以供未来在ClrMrk0状态中使用。套接字引擎SktEng提出连接的当前套接字状态SkTpl从Tcb缓冲区TcbBuf[TcbId]移到主机存储器中的Tcb缓冲区HstMem[TcbAd](也可参见行1508)。其通过将元组到主机指令T2hCd放在HstDmaCmd上而实现此。DMA控制器25接收T2hCd并将套接字元组信息移到指定的主机信息缓冲区中。更进一步的细节可参见图10的1120-1126行。
套接字引擎SktEng变迁到ClrMrk0状态并通知主机携载TCP状态信息的套接字元组SkTpl已被放回用于该连接的主机Tcb缓冲区中。套接字引擎通过从MsgBufQ取回空闲信息缓冲区地址(行1509)并接着将状态输出信息ExportMsg写入引擎到主机缓冲区E2hBuf而实现此(行1131)。DMA操作的目的地被设定为信息缓冲区地址EMsgAd。DMA移动的长度被设为信息首部的长度MsgHdLen(行1133)。之后,套接字引擎SktEng通过将引擎到主机指令放入HstDmaCmd而使DMA发生(行1134)。接下来,DMA控制器25将状态输出信息从NID4移到主机上的信息缓冲区。这使连接转储清除操作的第二阶段(套接字状态保存)结束。
在连接转储清除操作的第三阶段(快速路径队列清除),套接字引擎SktEng告诉套接字检测器SktDet停止检测该TcbId的数据包,因为将来的数据包将被转给主机以在主机上进行TCP处理。在状态ClrMrkEvt,套接字引擎SktEng将禁止指令DblCd和ETcbId写在套接字检测器指令队列DetCmdQ上(图12的1511行)。还可参见图10的1127行。
套接字检测器SktDet 22检测该连接上的数据包,直到其看见检测器指令队列DetCmdQ上的禁止指令DblCd为止。禁止指令DblCd指示套接字检测器停止检测数据包。套接字检测器SktDet(行1513)读DetCmdQ并获得禁止指令DblCd和所指明的TcbId。之后,套接字检测器SktDet清除套接字描述符缓冲区SktDscBuf中用于该TcbId的检测使能位DetEn(行1514),并通过将清除标记DblCd写在检测事件队列DetEvtQ上而发送清除标记DblCd给接收管理器RcvMgr(行1515)。这保证在DblCd清除标记之后,对于DetEvtQ中的该Tcb的检测事件队列DetEvtQ中的任何东西均将不是快速路径,而是慢速路径,因为对于所指明的TcbId,套接字检测器已被禁止。DblCd清除标记通过DetEvtQ传给接收管理器RcvMgr。接收管理器RcvMgr接收清除标记DblCd和TcbId(行1517),并从SktRcvQ取出对于该TcbId的所有描述符并将它们放在慢速事件队列SlwEvtQ上(见1518-1519行)。当完成后,接收管理器RcvMgr将清除标记DblCd放在慢速事件队列SlwEvtQ上(行1520)。
其间,套接字引擎SktEng正努力从SlwEvtQ获得慢速路径事件,直到其在Idle状态为止,套接字引擎读慢速事件队列SlwEvtQ并获得清除标记DblCd(行1522)。也可参见图10的1020行。当套接字引擎SktEng获得清除标记DblCd时,套接字引擎SktEng进入DblMrkEvt状态(图10的1103-1106行)。清除信息被发送给主机以告诉主机:对于所指明的TcbId,套接字检测器已被禁止。套接字引擎SktEng通过下述步骤实现此:从主机获得信息缓冲区地址(1105行),将禁止标记信息放入引擎到主机缓冲区(1109行),并接着使DMA控制器25通过将引擎到主机指令E2hCd放入HstDmaCmd而将信息从NID4移到主机(1112行)。当主机在信息缓冲区中看见禁止标记信息时,主机知道所指明的套接字描述符不再使用,对于所指明的TcbId的套接字接收队列SktRcvQ为空,且主机可将不同的套接字描述符逐出套接字检测器SktDet以使能另一套接字上的快速路径处理。
转储清除检测:
在上述过程中,如一位FlushDet值所指示的(见1194行),转储清除条件的检测发生在时钟信号的一个时钟周期内,时钟信号对套接字引擎SktEng状态机计时。图13-16示出了怎样确定转储清除检测FlushDet。在图13-16中,斜体值为来自TcbId确定的特定Tcb缓冲区TcbBuf的值;而带下划线的值为来自输入数据包首部的值,其是HdrId确定的首部缓冲区HdrBuf的输出。两种类型的值(TcbBuf值和HdrBuf值)均被接收在套接字引擎SktEng上。既不是斜体又没有下划线的值为套接字引擎SktEng内从另一值确定的值。
FlushDet信号按图15的1712-1713行所指示的进行确定。如果当前窗口溢出CurWinOvr OR((没检测到预期顺序!ExpSeqDet)AND(没检测到旧顺序OldSeqDet)OR(下一窗口收缩NxtWinShr)OR((没有传送确认有效XmtAckVld)AND(没有传送确认旧XmtAckOld),则FlushDet信号为真。竖线符号代表逻辑OR。感叹号符号代表逻辑NOT。&符号代表逻辑AND。引用符号代表定义的常数。“==”符号代表“如果等于”。A?B:C形式的等式指“如果A,则B,否则C”。!=符号指“不等于”。!<符号指“不小于”。!>符号指“不大于”。<=符号指将等式右边的值赋值给左边。<<指向左移位,且移位次数由<<符号右边的值指定。
例如,当前窗口溢出值CurWinOvr为如1708行所示从RcvSeqLmt、NxtSeqExp、和Quadrant确定的单位值。如果RcvSeqLmt减去NxtSeqExp不小于常数Quadrant,则存在当前窗口超限,将CurWinOvr设为1。RcvSeqLmt是从Tcb Buf获得的32位值。关于Tcb缓冲区的内容参见图4和6。NxtSeqExp是32位值,其通过取得32位值PktRcvSeq并将其与16位值PktPaySz相加进行计算。PktRcvSeq是保存在首部缓冲区中的值。值PktPaySz是从首部缓冲区值PktRcvSeq和NxtSeqExp获得的值。Quadrant是十六进制的32位值40000000。
以与根据图13-16的等式计算当前窗口超限值CurWinOvr相同的方式,可计算出现在1712和1713行的等式中等号右边的所有其它值。
如果数据包的32位序号是未来的序号,则1712行的表达式(!ExpSeqSet & !OldSeqDet)为真。例如,旧数据包如复制的数据包将具有小于(即旧于)所预期序号的序号。这样的旧数据包不会导致转储清除检测,因为旧数据包可能是复制的数据包,这样的复制的数据包将在NID不导致连接的转储清除的情况下传给主机。在这种情况下,主机可导致连接的控制传回到主机。因此,如果接收的数据包具有小于(即旧于)预期序号的序号,则FlushDet信号不为真。如果数据包的序号是预期的序号,则数据包具有其应该具有的序号,没有转储清除会被检测到。另一方面,如果所接收的数据包具有大于预期序号的序号,则数据包是在其应该被接收之前就已被接收的未来数据包,因而可能是错误。因此,如果数据包的序号不是预期的序号且如果序号不是旧序号,则转储清除检测为真(见行1712)。
在1712行的表达式中使用的预期序号检测值ExpSeqDet按1703行所示进行计算。如果保存在首部缓冲区中的数据包的序号PktRcvSeq等于保存在Tcb缓冲区中的预期接收序号ExpRcvSeq,则预期序号检测值ExpSeqDet为真。ExpRcvSeq是应在该连接上接收的下一数据包的序号。当接收数据包后,使ExpRcvSeq增加先前接收的数据包中的数据有效负载量。因此,为获得下一ExpRcvSeq,当前数据包的有效负载大小PktPaySz与数据包的序号PktRcvSeq相加,所得的和即为预期的下一序号NxtSeqExp。数据包有效负载PktPaySz的单位是数据的字节数。在数据包被处理之后,NxtSeqExp成为保存在Tcb缓冲区中的预期序号ExpRcvSeq。
如果从NID4接收数据的机器以收缩其TCP接收窗口,则1713行的表达式NxtWinShr为真。在TCP协议中收缩TCP接收窗口被阻拦。从NID4接收数据的机器返回其接收的数据的确认PktXmtAck,在下一数据包中其发送回NID4。接收数据的机器还在返回数据包中包括窗口大小PktXmtWin。NID4接收该返回数据包,使用两个值确定(行1618)另一机器是否已收缩其接收窗口。收缩TCP接收窗口通过确定当前传输限制XmtSeqLmt是否大于下一传输限制NxtXmtLmt而进行检测。
当前传输顺序限制XmtSeqLmt是保存在NID4上套接字元组中的序号值。NID4使用XmtSeqLmt序号值确定其可将多少数据传送回另一机器。另一机器控制该值但不能使其降低。
下一传输限制NxtXmtLmt由NID4通过将PktXmtAck与窗口大小PktXmtWin相加确定(见行1606)。
如果NID被允许传送的NxtXmtLmt小于NID先前被允许传送的前一传输限制XmtSeqLmt,则另一机器已收缩其接收窗口。这是非法条件,因为NID4可能已经传输数据包且当NID接收ack时该数据包可能在传输中,ack通知NID刚传输的数据包太大。因此,如果下一传输限制NxtXmtLmt小于先前的传输限制XmtSeqLmt,则值下一窗口压缩NxtWinShr为真(行1618)。
数NxtXmtLmt和XmtSeqLmt为无符号的绕回32位数。比较这样的无符号的绕回数可能非常棘手。在1618行,通过比较两个数与最大序号(1G)的四分之一之间的差而比较两个无符号的数。
1713行中的下一表达式(!XmtAckVld & !XmtAckOld)包括检查接收数据包中的确认号以确定该确认号是否为未来确认号。因此,如果所接收的确认号无效(见行1611)且如果确认号不是旧确认号(见行1612),则该表达式为真。
如1712和1713行中所示,值FlushDet为这四个表达式的逻辑OR。逻辑OR由组合硬件逻辑在计时套接字引擎SktEng的时钟信号的一个周期中执行。被提供为组合硬件逻辑的输入的值为来自下述的输出值:1)由ETcbId确定的TcbBuf的特定Tcb缓冲区,及2)由EHdrAd确定的HdrBuf的特定首部缓冲区。用于确定FlushDet的特定Tcb缓冲区为:1)RcvSeqLmt(32位)、2)ExpRcvSeq(32位)、3)XmtSeqLmt(32位)、4)XmtAckNum(32位)和5)XmtSeqNum(32位)。用于确定FlushDet的特定HdrBuf值为:1)PktRcvSeq(32位)、2)PktPaySz(16位)、3)PktXmtAck(32位)、和4)PktXmtWin(16位)。
在图13-16的等式中,每一逻辑运算符的功能由单独的ALU型硬件数字逻辑块执行。作为例子,“+”运算可由逻辑门组成的数字加法器执行。“-”运算可由数字门组成的数字减法器执行。“==”可由数字门组成的数字比较器执行。
TcbBuf是双端口存储器结构,其被组织为与Tcb中的位数一样宽,使得一个特定Tcb缓冲区的所有位被同时输出,特定Tcb缓冲区为由地址值ETcbId确定的Tcb缓冲区。在图2的例子中,TcbBuf为256字节宽。DMA控制器25经32位宽端口和多个写选通向TcbBuf写,而TcbBuf经256字节宽的端口与套接字引擎SktEng连接。
HdrBuf是双端口存储器结构,其被组织为与一个特定首部缓冲区中的位数一样宽,特定首部缓冲区为由地址值EHdrAd确定的首部缓冲区。在图2的例子中,HdrBuf为128字节宽。DMA控制器26经32位宽端口和多个写选通向HdrBuf写,而HdrBuf经128字节宽的读/写端口与套接字引擎SktEng连接。
状态更新:
不是在向Tcb缓冲存储器中的各个位置进行一系列写值时按序更新Tcb缓冲区中的连接状态,连接状态更新发生在计时套接字引擎SktEng状态机的时钟信号的单一周期中。连接状态的更新在图10的1224行发生,其中所有元组更新TplUpd值(见图6)被载入用于ETcbId所指示的连接的Tcb缓冲区的适当字段。所加载的值在上面关于套接字引擎SktEng和图10的1224行的描述中指出。为有助于该元组更新操作,Tcb缓冲存储器结构被组织为至少与一个特定Tcb缓冲区的位数一样宽,从而所有TplUpd位可被同时并行写入Tcb缓冲区中。
多线程套接字引擎:
上面的套接字引擎SktEng的描述假设套接字引擎建立DMA控制器移动,并假设移动接着快速发生,使得状态机可基于下一状态机时钟变迁为另一状态,就好像该移动已经发生一样。在一实施例中,DMA控制器移动实际上需要长于一个状态机时钟周期的时间才能完成。并非套接字引擎SktEng等待直到移动已完成为止,套接字引擎SktEng为多线程状态机,其可处理第一线程、指示DMA控制器执行移动、停止处理该第一线程直到DMA控制器移动结束为止、在DMA控制器正执行移动时处理第二线程、之后在DMA控制器完成移动时重新处理第一线程。为在线程间跳转,套接字引擎内部寄存器内容可以语境的形式进行保存。对每一线程均有一个这样的语境。为从第一线程移到第二线程,套接字引擎内部寄存器内容被载入第一语境,且第二语境的内容被载入套接字引擎内部寄存器。不管套接字引擎是否是多线程,套接字引擎SktEng在单一状态机状态中建立DMA控制器移动。因此,状态机相对于传统的定序器处理器具有速度上的改善,为了将移动的源地址提供给DMA控制器、为向DMA控制器提供将移动多少数据的指示、为向DMA控制器提供目的地地址、及为开始移动,其不得不执行多个指令并执行几个顺序操作。
尽管为教学目的已结合某些具体的示例性实施例对本发明进行了描述,但本发明并不限于此。NID的功能不必在连接到主计算机的扩展插件板上实施。而是,NID的功能可具体化在CPU芯片组内。例如,NID功能可具体化在奔腾芯片组的北桥或南桥芯片中。在一实施例中,NID功能被具体化在存储控制器集成电路中,其具有用于连接到存储器的第一接口和连接到CPU的第二接口。在另一实施例中,NID功能被具体化在输入/输出控制器集成电路中,其具有连到CPU的第一接口和连到I/O设备的其它接口。尽管在上面结合接收数据包对状态机进行了描述,但另外的状态机状态执行与支持TCP协议相关的传送和计时器功能。TCP状态变量和数据包设备保存在宽存储器结构中,使得这些变量和首部可被并行同时存取并由状态机处理,使得所得的更新的TCP状态变量在一个或非常小量的存储器写入期间并行写回到宽的存储器,其不仅可用于TCP连接的控制在TOE设备和主机之间来回传送的系统,而且还可用于TOE保持对TCP连接的控制且TCP连接的控制不在TOE和主机之间传送的系统。在上述例子中,尽管Tcb信息和数据包首部均被保存在分开的存储器中,但Tcb缓冲区和首部缓冲区可以是同一存储器的组成部分。该单一存储器可由TcbId寻址。如果对Tcb设计允许多个数据包设备将被排队,则存储器可被制成更宽的存储器以容纳多个数据包首部。Tcb被保存在存储器的第一部分中,而数据包首部被保存在存储器的相应其它部分中。Tcb和相关的数据包首部均从单一存储器同时并行输出。该Tcb的数据包首部中的哪一个被提供给套接字引擎由多路复用器确定。HdrId用作多路复用器选择值。因此,在不背离本发明精神的情况下,可对上述实施例的各个特征进行各种修改、调整和组合。
Claims (18)
1.能够从主机卸载TCP协议处理任务的TCP卸载引擎TOE设备,所述TCP协议处理任务与TCP连接相关联,TOE设备包括:
保存并同时输出至少两个与TCP连接相关联的TCP状态值的第一存储器,其中至少两个TCP状态值取自由下述值构成的组:接收数据包顺序限制、预期接收数据包顺序号、传送顺序限制、传送确认号、及传送顺序号;
保存并同时输出在TCP连接上通信的数据包的至少两个数据包首部值的第二存储器,其中至少两个数据包首部值取自由下述值构成的组:接收数据包顺序号、数据包有效负载大小、数据包确认号、及数据包传送窗口大小;及
接收所述至少两个TCP状态值和所述至少两个数据包首部值并从其产生转储清除检测信号的组合硬件逻辑,所述转储清除检测信号指示是否已出现错误条件,所述至少两个TCP状态值和所述至少两个数据包首部值均被同时提供给组合硬件逻辑。
2.根据权利要求1的TOE设备,其中如果转储清除检测信号指示错误条件,则TOE将接收数据包顺序限制、预期接收数据包顺序号、传送顺序限制、传送确认号和传送顺序号传给主机。
3.根据权利要求1的TOE设备,其中TCP状态值组中的两个以上状态值被同时提供给组合硬件逻辑,且其中TCP状态值组中的两个以上状态值用于产生转储清除检测信号。
4.根据权利要求1的TOE设备,其中数据包首部值组中的两个以上首部值被同时提供给组合硬件逻辑,且其中数据包首部值组中的两个以上首部值用于产生转储清除检测信号。
5.根据权利要求1的TOE设备,其中TOE控制多个TCP连接,所述TCP连接中的每一个均与TCB标识符相关联,且其中第一存储器包括多个事务控制块TCB,其中第一存储器可由TCB标识符寻址以访问TCB,所述TCB包含与TCB标识符相关联的TCP连接的TCP状态信息。
6.根据权利要求1的TOE设备,其中组合硬件逻辑是状态机的一部分,状态机由时钟信号计时,其中组合硬件逻辑在大约一个时钟信号周期内从所述至少两个TCP状态值和所述至少两个数据包首部值产生所述转储清除检测信号。
7.根据权利要求6的TOE设备,其中状态机不读取指令、解码指令、及执行指令。
8.根据权利要求7的TOE设备,其中状态机使得第一存储器中的预期接收数据包顺序号和接收数据包顺序限制将在单一时钟信号周期内得以更新。
9.根据权利要求8的TOE设备,其中TCP连接由在主机上运行的栈建立,且其中TCP连接的控制被从主机传给TOE。
10.根据权利要求7的TOE设备,其中具有有效负载的数据包在TOE上进行接收,TOE还包括:
DMA控制器,其使用源地址值、指示将要移动的信息量的大小值、及目的地地址值将有效负载从TOE移到主机,其中状态机使得源地址值、大小值、及目的地地址值将在状态机的单一状态中提供给DMA控制器。
11.能够从主机卸载TCP协议处理任务的TCP卸载引擎TOE设备,TCP协议处理任务与TCP连接相关联,该TOE设备包括:
保存并同时输出至少两个与TCP连接相关联的TCP状态值的第一存储器,其中至少两个TCP状态值取自由下述值构成的组:接收数据包顺序限制、预期接收数据包顺序号、传送顺序限制、传送确认号、及传送顺序号;
保存并同时输出在TCP连接上通信的数据包的至少两个数据包首部值的第二存储器,其中至少两个数据包首部值取自由下述值构成的组:接收数据包顺序号、数据包有效负载大小、数据包确认号、及数据包传送窗口大小;及
接收所述至少两个TCP状态值和所述至少两个数据包首部值并从其产生指示是否已出现异常条件的信号的硬件状态机,所述至少两个TCP状态值和所述至少两个数据包首部值均被同时提供给硬件状态机,其中硬件状态机由时钟信号计时,其中硬件状态机在大约一个时钟信号周期内从所述至少两个TCP状态值和所述至少两个数据包首部值产生所述信号。
12.根据权利要求11的TOE设备,其中硬件状态机使得第一存储器中的预期接收数据包顺序号和接收数据包顺序限制将在单一时钟信号周期内得以更新。
13.根据权利要求12的TOE设备,其中通过同时将预期接收数据包顺序号和接收数据包顺序限制写入第一存储器而更新预期接收数据包顺序号和接收数据包顺序限制。
14.根据权利要求11的TOE设备,其中异常条件是使得TCP连接的控制从TOE传给主机的条件。
15.根据权利要求11的TOE设备,其中第一存储器是具有第一接口和第二接口的双端口存储器,硬件状态机经第一接口读和写第一存储器,且其中信息经第二接口从主机传送和传入第一存储器。
16.根据权利要求15的TOE设备,其中第一存储器包括多个TCB缓冲区,其中TCB缓冲区之一与TCP连接相关联,且其中与所述TCP连接相关联的存储描述符列表条目被保存在与所述TCP连接相关联的所述TCB缓冲区中。
17.根据权利要求11的TOE设备,还包括:
保存多个套接字描述符的第三存储器,其中套接字描述符之一与TCP连接相关联。
18.根据权利要求11的TOE设备,其中第二存储器连同所述至少两个数据包首部值一起输出分析值,所述分析值指示关联数据包的传输和网络层协议是否是TCP和IP协议。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/729,111 US6996070B2 (en) | 2003-12-05 | 2003-12-05 | TCP/IP offload device with reduced sequential processing |
US10/729,111 | 2003-12-05 | ||
PCT/US2004/040897 WO2005057945A2 (en) | 2003-12-05 | 2004-12-03 | Tcp/ip offload device withg reduced sequential processing |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1910869A CN1910869A (zh) | 2007-02-07 |
CN1910869B true CN1910869B (zh) | 2011-11-23 |
Family
ID=34633852
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200480040030.XA Expired - Fee Related CN1910869B (zh) | 2003-12-05 | 2004-12-03 | 具有简化的顺序处理的tcp/ip卸载设备 |
Country Status (5)
Country | Link |
---|---|
US (2) | US6996070B2 (zh) |
EP (1) | EP1690387B1 (zh) |
JP (1) | JP5066707B2 (zh) |
CN (1) | CN1910869B (zh) |
WO (1) | WO2005057945A2 (zh) |
Families Citing this family (179)
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 |
US9098297B2 (en) | 1997-05-08 | 2015-08-04 | Nvidia Corporation | Hardware accelerator for an object-oriented programming language |
US6697868B2 (en) * | 2000-02-28 | 2004-02-24 | Alacritech, Inc. | Protocol processing stack for use with intelligent network interface device |
US7185266B2 (en) * | 2003-02-12 | 2007-02-27 | Alacritech, Inc. | Network interface device for error detection using partial CRCS of variable length message portions |
US8782199B2 (en) * | 1997-10-14 | 2014-07-15 | A-Tech Llc | Parsing a packet header |
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 |
US6658480B2 (en) * | 1997-10-14 | 2003-12-02 | Alacritech, Inc. | Intelligent network interface system and method for accelerated protocol processing |
US6226680B1 (en) | 1997-10-14 | 2001-05-01 | Alacritech, Inc. | Intelligent network interface system method for protocol processing |
US8621101B1 (en) | 2000-09-29 | 2013-12-31 | Alacritech, Inc. | Intelligent network storage interface device |
US8539112B2 (en) | 1997-10-14 | 2013-09-17 | Alacritech, Inc. | TCP/IP offload device |
US6434620B1 (en) * | 1998-08-27 | 2002-08-13 | Alacritech, Inc. | TCP/IP offload network interface device |
US7167927B2 (en) * | 1997-10-14 | 2007-01-23 | Alacritech, Inc. | TCP/IP offload device with fast-path TCP ACK generating and transmitting mechanism |
US7237036B2 (en) * | 1997-10-14 | 2007-06-26 | Alacritech, Inc. | Fast-path apparatus for receiving data corresponding a TCP connection |
US7174393B2 (en) | 2000-12-26 | 2007-02-06 | Alacritech, Inc. | TCP/IP offload network interface device |
US6765901B1 (en) | 1998-06-11 | 2004-07-20 | Nvidia Corporation | TCP/IP/PPP modem |
US7664883B2 (en) * | 1998-08-28 | 2010-02-16 | Alacritech, Inc. | Network interface device that fast-path processes solicited session layer read commands |
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 |
US8135842B1 (en) | 1999-08-16 | 2012-03-13 | Nvidia Corporation | Internet jack |
US8898340B2 (en) | 2000-04-17 | 2014-11-25 | Circadence Corporation | Dynamic network link acceleration for network including wireless communication devices |
AU2001253613A1 (en) * | 2000-04-17 | 2001-10-30 | Circadence Corporation | System and method for shifting functionality between multiple web servers |
US8065399B2 (en) | 2000-04-17 | 2011-11-22 | Circadence Corporation | Automated network infrastructure test and diagnostic system and method therefor |
US20110128972A1 (en) | 2000-04-17 | 2011-06-02 | Randy Thornton | Peer to peer dynamic network link acceleration |
US8996705B2 (en) | 2000-04-17 | 2015-03-31 | Circadence Corporation | Optimization of enhanced network links |
US8195823B2 (en) | 2000-04-17 | 2012-06-05 | Circadence Corporation | Dynamic network link acceleration |
US8510468B2 (en) | 2000-04-17 | 2013-08-13 | Ciradence Corporation | Route aware network link acceleration |
US8024481B2 (en) * | 2000-04-17 | 2011-09-20 | Circadence Corporation | System and method for reducing traffic and congestion on distributed interactive simulation networks |
US8019901B2 (en) * | 2000-09-29 | 2011-09-13 | Alacritech, Inc. | Intelligent network storage interface system |
US7039717B2 (en) * | 2000-11-10 | 2006-05-02 | Nvidia Corporation | Internet modem streaming socket method |
US7379475B2 (en) * | 2002-01-25 | 2008-05-27 | Nvidia Corporation | Communications processor |
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 |
US7535913B2 (en) * | 2002-03-06 | 2009-05-19 | Nvidia Corporation | Gigabit ethernet adapter supporting the iSCSI and IPSEC protocols |
US7496689B2 (en) * | 2002-04-22 | 2009-02-24 | Alacritech, Inc. | TCP/IP offload device |
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 |
US20070253430A1 (en) * | 2002-04-23 | 2007-11-01 | Minami John S | Gigabit Ethernet Adapter |
US7139679B1 (en) * | 2002-06-27 | 2006-11-21 | Cisco Technology, Inc. | Method and apparatus for cryptographic protection from denial of service attacks |
US7337241B2 (en) * | 2002-09-27 | 2008-02-26 | Alacritech, Inc. | Fast-path apparatus for receiving data corresponding to a TCP connection |
US20040088262A1 (en) * | 2002-11-06 | 2004-05-06 | Alacritech, Inc. | Enabling an enhanced function of an electronic device |
US7362772B1 (en) | 2002-12-13 | 2008-04-22 | Nvidia Corporation | Network processing pipeline chipset for routing and host packet processing |
US7324547B1 (en) | 2002-12-13 | 2008-01-29 | Nvidia Corporation | Internet protocol (IP) router residing in a processor chipset |
US7594002B1 (en) * | 2003-02-14 | 2009-09-22 | Istor Networks, Inc. | Hardware-accelerated high availability integrated networked storage system |
US7609696B2 (en) * | 2003-06-05 | 2009-10-27 | Nvidia Corporation | Storing and accessing TCP connection information |
US7420931B2 (en) * | 2003-06-05 | 2008-09-02 | Nvidia Corporation | Using TCP/IP offload to accelerate packet filtering |
US7899913B2 (en) | 2003-12-19 | 2011-03-01 | Nvidia Corporation | Connection management system and method for a transport offload engine |
US8176545B1 (en) | 2003-12-19 | 2012-05-08 | Nvidia Corporation | Integrated policy checking system and method |
US8065439B1 (en) * | 2003-12-19 | 2011-11-22 | Nvidia Corporation | System and method for using metadata in the context of a transport offload engine |
US8572289B1 (en) * | 2003-12-19 | 2013-10-29 | Nvidia Corporation | System, method and computer program product for stateless offloading of upper level network protocol operations |
US8549170B2 (en) | 2003-12-19 | 2013-10-01 | Nvidia Corporation | Retransmission system and method for a transport offload engine |
US7698361B2 (en) * | 2003-12-31 | 2010-04-13 | Microsoft Corporation | Lightweight input/output protocol |
US7298749B2 (en) * | 2004-01-07 | 2007-11-20 | International Business Machines Corporation | Completion coalescing by TCP receiver |
US20050195851A1 (en) * | 2004-02-12 | 2005-09-08 | International Business Machines Corporation | System, apparatus and method of aggregating TCP-offloaded adapters |
US7206872B2 (en) * | 2004-02-20 | 2007-04-17 | Nvidia Corporation | System and method for insertion of markers into a data stream |
US7249306B2 (en) * | 2004-02-20 | 2007-07-24 | Nvidia Corporation | System and method for generating 128-bit cyclic redundancy check values with 32-bit granularity |
US7562158B2 (en) * | 2004-03-24 | 2009-07-14 | Intel Corporation | Message context based TCP transmission |
US7668165B2 (en) * | 2004-03-31 | 2010-02-23 | Intel Corporation | Hardware-based multi-threading for packet processing |
US20050220128A1 (en) * | 2004-04-05 | 2005-10-06 | Ammasso, Inc. | System and method for work request queuing for intelligent adapter |
US20060067346A1 (en) * | 2004-04-05 | 2006-03-30 | Ammasso, Inc. | System and method for placement of RDMA payload into application memory of a processor system |
US7698413B1 (en) | 2004-04-12 | 2010-04-13 | Nvidia Corporation | Method and apparatus for accessing and maintaining socket control information for high speed network connections |
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 |
US7761529B2 (en) * | 2004-06-30 | 2010-07-20 | Intel Corporation | Method, system, and program for managing memory requests by devices |
US7533176B2 (en) * | 2004-07-14 | 2009-05-12 | International Business Machines Corporation | Method for supporting connection establishment in an offload of network protocol processing |
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 |
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 |
US7761608B2 (en) * | 2004-09-01 | 2010-07-20 | Qlogic, Corporation | Method and system for processing markers, data integrity fields and digests |
US7620050B2 (en) * | 2004-09-10 | 2009-11-17 | Canon Kabushiki Kaisha | Communication control device and communication control method |
JP4373887B2 (ja) * | 2004-09-30 | 2009-11-25 | Okiセミコンダクタ株式会社 | パケット処理方法 |
US8248939B1 (en) | 2004-10-08 | 2012-08-21 | Alacritech, Inc. | Transferring control of TCP connections between hierarchy of processing mechanisms |
US7957379B2 (en) * | 2004-10-19 | 2011-06-07 | Nvidia Corporation | System and method for processing RX packets in high speed network applications using an RX FIFO buffer |
KR100646858B1 (ko) * | 2004-12-08 | 2006-11-23 | 한국전자통신연구원 | Toe기반 소켓 정보의 생성 및 관리를 위한하드웨어 장치및 방법 |
US7403535B2 (en) * | 2004-12-14 | 2008-07-22 | Hewlett-Packard Development Company, L.P. | Aggregation of network resources providing offloaded connections between applications over a network |
US7551614B2 (en) * | 2004-12-14 | 2009-06-23 | Hewlett-Packard Development Company, L.P. | Aggregation over multiple processing nodes of network resources each providing offloaded connections between applications over a network |
US7643420B2 (en) * | 2005-03-11 | 2010-01-05 | Broadcom Corporation | Method and system for transmission control protocol (TCP) traffic smoothing |
US20060221946A1 (en) * | 2005-04-04 | 2006-10-05 | International Business Machines Corporation | Connection establishment on a tcp offload engine |
US7920584B2 (en) * | 2005-05-04 | 2011-04-05 | Arm Limited | Data processing system |
KR20080013993A (ko) * | 2005-05-04 | 2008-02-13 | 에이알엠 리미티드 | 데이터 처리장치 내의 데이터 엔진의 사용 |
US7630388B2 (en) * | 2005-05-04 | 2009-12-08 | Arm Limited | Software defined FIFO memory for storing a set of data from a stream of source data |
JP4182083B2 (ja) * | 2005-05-12 | 2008-11-19 | キヤノン株式会社 | ネットワークに接続されたネットワーク機器を管理する装置、方法、及びプログラム |
US7596144B2 (en) * | 2005-06-07 | 2009-09-29 | Broadcom Corp. | System-on-a-chip (SoC) device with integrated support for ethernet, TCP, iSCSI, RDMA, and network application acceleration |
US7764612B2 (en) * | 2005-06-16 | 2010-07-27 | Acme Packet, Inc. | Controlling access to a host processor in a session border controller |
US20080304481A1 (en) * | 2005-07-12 | 2008-12-11 | Paul Thomas Gurney | System and Method of Offloading Protocol Functions |
US7693138B2 (en) * | 2005-07-18 | 2010-04-06 | Broadcom Corporation | Method and system for transparent TCP offload with best effort direct placement of incoming traffic |
US7660264B1 (en) | 2005-12-19 | 2010-02-09 | Chelsio Communications, Inc. | Method for traffic schedulign in intelligent network interface circuitry |
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 |
US7724658B1 (en) | 2005-08-31 | 2010-05-25 | Chelsio Communications, Inc. | Protocol offload transmit traffic management |
US7660306B1 (en) | 2006-01-12 | 2010-02-09 | Chelsio Communications, Inc. | Virtualizing the operation of intelligent network interface circuitry |
US7715436B1 (en) | 2005-11-18 | 2010-05-11 | Chelsio Communications, Inc. | Method for UDP transmit protocol offload processing with traffic management |
US7506080B2 (en) | 2005-09-16 | 2009-03-17 | Inter Corporation | Parallel processing of frame based data transfers |
EP1935189B1 (en) * | 2005-10-11 | 2016-12-21 | Telcordia Technologies, Inc. | Packet loss prevention during handoff through managed buffer nodes |
US7826424B2 (en) * | 2005-10-11 | 2010-11-02 | Toshiba America Research, Inc. | Packet loss prevention during handoff through managed buffer nodes architecture |
US7760733B1 (en) | 2005-10-13 | 2010-07-20 | Chelsio Communications, Inc. | Filtering ingress packets in network interface circuitry |
KR100738339B1 (ko) * | 2005-12-01 | 2007-07-12 | 한국전자통신연구원 | 인터넷 프로토콜 오프로드의 패킷 전송 장치 및 방법 |
US7738500B1 (en) | 2005-12-14 | 2010-06-15 | Alacritech, Inc. | TCP timestamp synchronization for network connections that are offloaded to network interface devices |
US7675854B2 (en) | 2006-02-21 | 2010-03-09 | A10 Networks, Inc. | System and method for an adaptive TCP SYN cookie with time validation |
US20080040519A1 (en) * | 2006-05-02 | 2008-02-14 | Alacritech, Inc. | Network interface device with 10 Gb/s full-duplex transfer rate |
TWI326417B (en) * | 2006-06-01 | 2010-06-21 | Ind Tech Res Inst | System and method for recognizing offloaded packet |
US20070291791A1 (en) * | 2006-06-16 | 2007-12-20 | The Boeing Company. | Dynamic reconfigurable embedded compression common operating environment |
US8190698B2 (en) | 2006-06-30 | 2012-05-29 | Microsoft Corporation | Efficiently polling to determine completion of a DMA copy operation |
KR100823734B1 (ko) * | 2006-07-07 | 2008-04-21 | 한국전자통신연구원 | iSCSI를 위한 데이터 가속 장치 및 이를 이용한iSCSI 저장 시스템 |
US8621030B2 (en) * | 2006-09-28 | 2013-12-31 | Intel Corporation | Techniques to copy an operating system |
US9794378B2 (en) * | 2006-11-08 | 2017-10-17 | Standard Microsystems Corporation | Network traffic controller (NTC) |
JP2008134775A (ja) * | 2006-11-28 | 2008-06-12 | Hitachi Ltd | 記憶サブシステム及びこれを利用したリモートコピーシステム |
US7849214B2 (en) * | 2006-12-04 | 2010-12-07 | Electronics And Telecommunications Research Institute | Packet receiving hardware apparatus for TCP offload engine and receiving system and method using the same |
US9137212B2 (en) * | 2006-12-04 | 2015-09-15 | Oracle America, Inc. | Communication method and apparatus using changing destination and return destination ID's |
KR100898345B1 (ko) | 2006-12-04 | 2009-05-20 | 한국전자통신연구원 | Toe의 패킷 수신 하드웨어 장치 및 toe 패킷 수신하드웨어를 이용한 수신 시스템 및 수신 방법 |
US7975120B2 (en) * | 2006-12-27 | 2011-07-05 | Freescale Semiconductor, Inc. | Dynamic allocation of message buffers |
US7908364B2 (en) * | 2007-01-26 | 2011-03-15 | Bigfoot Networks, Inc. | Method storing socket state information in application space for improving communication efficiency of an application program |
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 |
US8806028B2 (en) * | 2007-04-26 | 2014-08-12 | Novatel Wireless, Inc. | System and method for accessing data and applications on a host when the host is in a dormant state |
US7813339B2 (en) * | 2007-05-02 | 2010-10-12 | Tehuti Networks Ltd. | Direct assembly of a data payload in an application memory |
US8589587B1 (en) | 2007-05-11 | 2013-11-19 | Chelsio Communications, Inc. | Protocol offload in intelligent network adaptor, including application level signalling |
US8060644B1 (en) * | 2007-05-11 | 2011-11-15 | Chelsio Communications, Inc. | Intelligent network adaptor with end-to-end flow control |
US7826350B1 (en) | 2007-05-11 | 2010-11-02 | Chelsio Communications, Inc. | Intelligent network adaptor with adaptive direct data placement scheme |
US7831720B1 (en) | 2007-05-17 | 2010-11-09 | Chelsio Communications, Inc. | Full offload of stateful connections, with partial connection offload |
US7843915B2 (en) * | 2007-08-01 | 2010-11-30 | International Business Machines Corporation | Packet filtering by applying filter rules to a packet bytestream |
US7885260B2 (en) * | 2007-11-20 | 2011-02-08 | Cisco Technology, Inc. | Determining packet forwarding information for packets sent from a protocol offload engine in a packet switching device |
US8103785B2 (en) * | 2007-12-03 | 2012-01-24 | Seafire Micros, Inc. | Network acceleration techniques |
EP2079203A1 (en) | 2008-01-08 | 2009-07-15 | Axis AB | Network offloading with reduced packet loss. |
US8539513B1 (en) | 2008-04-01 | 2013-09-17 | Alacritech, Inc. | Accelerating data transfer in a virtual computer system with tightly coupled TCP connections |
JP5028339B2 (ja) * | 2008-06-09 | 2012-09-19 | キヤノン株式会社 | 通信装置及び制御方法 |
US8898448B2 (en) * | 2008-06-19 | 2014-11-25 | Qualcomm Incorporated | Hardware acceleration for WWAN technologies |
US7751401B2 (en) * | 2008-06-30 | 2010-07-06 | Oracle America, Inc. | Method and apparatus to provide virtual toe interface with fail-over |
US20100008248A1 (en) * | 2008-07-08 | 2010-01-14 | Barry Constantine | Network tester for real-time measuring of tcp throughput |
US8341286B1 (en) | 2008-07-31 | 2012-12-25 | Alacritech, Inc. | TCP offload send optimization |
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 |
KR101221045B1 (ko) * | 2008-12-22 | 2013-01-10 | 한국전자통신연구원 | 패킷 처리 방법 및 이를 이용한 toe 장치 |
US8645596B2 (en) * | 2008-12-30 | 2014-02-04 | Intel Corporation | Interrupt techniques |
US7996548B2 (en) * | 2008-12-30 | 2011-08-09 | Intel Corporation | Message communication techniques |
US8363836B2 (en) * | 2009-01-16 | 2013-01-29 | Cisco Technology, Inc. | Using authentication tokens to authorize a firewall to open a pinhole |
JP5175773B2 (ja) * | 2009-02-27 | 2013-04-03 | 株式会社東芝 | 通信装置、方法及びプログラム |
US9960967B2 (en) | 2009-10-21 | 2018-05-01 | A10 Networks, Inc. | Determining an application delivery server based on geo-location information |
US9454325B2 (en) * | 2009-11-04 | 2016-09-27 | Broadcom Corporation | Method and system for offline data access on computer systems |
US9215275B2 (en) | 2010-09-30 | 2015-12-15 | A10 Networks, Inc. | System and method to balance servers based on server load status |
JP5204195B2 (ja) * | 2010-10-29 | 2013-06-05 | 株式会社東芝 | データ送信システムおよびデータ送信プログラム |
CN102098288B (zh) * | 2010-12-17 | 2014-01-22 | 曙光信息产业股份有限公司 | 一种采用静态链表构造tcp节点池优化tcp连接管理的方法 |
CN102098290A (zh) * | 2010-12-17 | 2011-06-15 | 天津曙光计算机产业有限公司 | 一种tcp流淘汰替换方法 |
CN102075525B (zh) * | 2010-12-17 | 2014-07-23 | 曙光信息产业(北京)有限公司 | 一种通过软件向硬件发送连接无效请求实现删除硬件中tcp连接的方法 |
CN102143218B (zh) * | 2011-01-24 | 2014-07-02 | 上海红神信息技术有限公司 | web接入云体系结构及接入方法 |
BR112014006948A2 (pt) * | 2011-07-25 | 2017-06-13 | Servergy Inc | sistema servidor de computador de uso geral de baixo consumo de energia |
US9246846B2 (en) * | 2011-09-02 | 2016-01-26 | Mediatek Co. | Network processor |
US8897154B2 (en) | 2011-10-24 | 2014-11-25 | A10 Networks, Inc. | Combining stateless and stateful server load balancing |
US9386088B2 (en) * | 2011-11-29 | 2016-07-05 | A10 Networks, Inc. | Accelerating service processing using fast path TCP |
US9094364B2 (en) | 2011-12-23 | 2015-07-28 | A10 Networks, Inc. | Methods to manage services over a service gateway |
US10044582B2 (en) | 2012-01-28 | 2018-08-07 | A10 Networks, Inc. | Generating secure name records |
CN103248605B (zh) * | 2012-02-02 | 2016-12-14 | 哈尔滨安天科技股份有限公司 | 一种基于ipv6的tcp流汇聚方法及系统 |
US8934332B2 (en) * | 2012-02-29 | 2015-01-13 | International Business Machines Corporation | Multi-threaded packet processing |
US8782221B2 (en) | 2012-07-05 | 2014-07-15 | A10 Networks, Inc. | Method to allocate buffer for TCP proxy session based on dynamic network conditions |
US9075953B2 (en) * | 2012-07-31 | 2015-07-07 | At&T Intellectual Property I, L.P. | Method and apparatus for providing notification of detected error conditions in a network |
US9674052B2 (en) * | 2012-09-20 | 2017-06-06 | Hewlett Packard Enterprise Development Lp | Data packet stream fingerprint |
CN108027805B (zh) | 2012-09-25 | 2021-12-21 | A10网络股份有限公司 | 数据网络中的负载分发 |
US10021174B2 (en) | 2012-09-25 | 2018-07-10 | A10 Networks, Inc. | Distributing service sessions |
US9843484B2 (en) | 2012-09-25 | 2017-12-12 | A10 Networks, Inc. | Graceful scaling in software driven networks |
JP6146088B2 (ja) * | 2012-09-28 | 2017-06-14 | 沖電気工業株式会社 | ゲートウェイ装置、通信装置、及び通信コネクション管理方法 |
US9531846B2 (en) | 2013-01-23 | 2016-12-27 | A10 Networks, Inc. | Reducing buffer usage for TCP proxy session based on delayed acknowledgement |
US9992107B2 (en) | 2013-03-15 | 2018-06-05 | A10 Networks, Inc. | Processing data packets using a policy based network path |
US10027761B2 (en) | 2013-05-03 | 2018-07-17 | A10 Networks, Inc. | Facilitating a secure 3 party network session by a network device |
US10038693B2 (en) | 2013-05-03 | 2018-07-31 | A10 Networks, Inc. | Facilitating secure network traffic by an application delivery controller |
JP6351363B2 (ja) * | 2013-08-01 | 2018-07-04 | キヤノン株式会社 | 通信装置およびそのデータ処理方法 |
KR101541349B1 (ko) * | 2013-11-19 | 2015-08-05 | 주식회사 윈스 | 고성능 네트워크 장비의 패킷 전달 시스템 및 그 전달 방법 |
US10230770B2 (en) | 2013-12-02 | 2019-03-12 | A10 Networks, Inc. | Network proxy layer for policy-based application proxies |
CN104883335B (zh) * | 2014-02-27 | 2017-12-01 | 王磊 | 一种全硬件tcp协议栈实现系统 |
US10020979B1 (en) | 2014-03-25 | 2018-07-10 | A10 Networks, Inc. | Allocating resources in multi-core computing environments |
US9942152B2 (en) | 2014-03-25 | 2018-04-10 | A10 Networks, Inc. | Forwarding data packets using a service-based forwarding policy |
US9942162B2 (en) | 2014-03-31 | 2018-04-10 | A10 Networks, Inc. | Active application response delay time |
US9806943B2 (en) | 2014-04-24 | 2017-10-31 | A10 Networks, Inc. | Enabling planned upgrade/downgrade of network devices without impacting network sessions |
US9906422B2 (en) | 2014-05-16 | 2018-02-27 | A10 Networks, Inc. | Distributed system to determine a server's health |
US9986061B2 (en) | 2014-06-03 | 2018-05-29 | A10 Networks, Inc. | Programming a data network device using user defined scripts |
US10129122B2 (en) | 2014-06-03 | 2018-11-13 | A10 Networks, Inc. | User defined objects for network devices |
US9992229B2 (en) | 2014-06-03 | 2018-06-05 | A10 Networks, Inc. | Programming a data network device using user defined scripts with licenses |
US9654483B1 (en) * | 2014-12-23 | 2017-05-16 | Amazon Technologies, Inc. | Network communication rate limiter |
CN104601484B (zh) * | 2015-01-20 | 2017-10-31 | 电子科技大学 | 一种tcp卸载引擎的发送单元 |
US10581976B2 (en) | 2015-08-12 | 2020-03-03 | A10 Networks, Inc. | Transmission control of protocol state exchange for dynamic stateful service insertion |
US10243791B2 (en) | 2015-08-13 | 2019-03-26 | A10 Networks, Inc. | Automated adjustment of subscriber policies |
JP6618330B2 (ja) * | 2015-10-28 | 2019-12-11 | キヤノン株式会社 | 通信装置及びその方法、コンピュータプログラム |
US10318288B2 (en) | 2016-01-13 | 2019-06-11 | A10 Networks, Inc. | System and method to process a chain of network applications |
CN106789708B (zh) * | 2016-12-06 | 2020-10-09 | 中国电子科技集团公司第三十二研究所 | Tcp/ip卸载引擎中的多通道处理方法 |
US10389835B2 (en) | 2017-01-10 | 2019-08-20 | A10 Networks, Inc. | Application aware systems and methods to process user loadable network applications |
CN113179327B (zh) * | 2021-05-14 | 2023-06-02 | 中兴通讯股份有限公司 | 基于大容量内存的高并发协议栈卸载方法、设备、介质 |
CN115460300A (zh) * | 2021-06-08 | 2022-12-09 | 中兴通讯股份有限公司 | 数据处理方法、toe硬件及计算机可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5937169A (en) * | 1997-10-29 | 1999-08-10 | 3Com Corporation | Offload of TCP segmentation to a smart adapter |
CN1272187A (zh) * | 1998-04-15 | 2000-11-01 | 布尔Cp8公司 | 带管理一个虚拟存储器装置的芯片卡及相应的通信方法和协议 |
Family Cites Families (170)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4366538A (en) | 1980-10-31 | 1982-12-28 | Honeywell Information Systems Inc. | Memory controller with queue control apparatus |
US4589063A (en) * | 1983-08-04 | 1986-05-13 | Fortune Systems Corporation | Data processing system having automatic configuration |
US5097442A (en) * | 1985-06-20 | 1992-03-17 | Texas Instruments Incorporated | Programmable depth first-in, first-out memory |
DE3701716C3 (de) * | 1987-01-22 | 1996-06-20 | Basf Magnetics Gmbh | Verfahren zum Schneiden von Magnetbändern |
US5212778A (en) * | 1988-05-27 | 1993-05-18 | Massachusetts Institute Of Technology | Message-driven processor in a concurrent computer |
US4991133A (en) * | 1988-10-07 | 1991-02-05 | International Business Machines Corp. | Specialized communications processor for layered protocols |
US5303344A (en) * | 1989-03-13 | 1994-04-12 | Hitachi, Ltd. | Protocol processing apparatus for use in interfacing network connected computer systems utilizing separate paths for control information and data transfer |
JP2986802B2 (ja) * | 1989-03-13 | 1999-12-06 | 株式会社日立製作所 | プロトコル高速処理方法 |
US5058110A (en) | 1989-05-03 | 1991-10-15 | Ultra Network Technologies | Protocol processor |
US5163131A (en) * | 1989-09-08 | 1992-11-10 | Auspex Systems, Inc. | Parallel i/o network file server architecture |
JP2945757B2 (ja) * | 1989-09-08 | 1999-09-06 | オースペックス システムズ インコーポレイテッド | 多重装置オペレーティングシステムのアーキテクチャ |
JPH077975B2 (ja) * | 1990-08-20 | 1995-01-30 | インターナショナル・ビジネス・マシーンズ・コーポレイション | データ伝送を制御するためのシステムおよび方法 |
JP2863295B2 (ja) * | 1990-10-04 | 1999-03-03 | 沖電気工業株式会社 | 通信機能付き情報処理装置 |
US5289580A (en) * | 1991-05-10 | 1994-02-22 | Unisys Corporation | Programmable multiple I/O interface controller |
JP2791236B2 (ja) | 1991-07-25 | 1998-08-27 | 三菱電機株式会社 | プロトコル並列処理装置 |
US5524250A (en) * | 1991-08-23 | 1996-06-04 | Silicon Graphics, Inc. | Central processing unit for processing a plurality of threads using dedicated general purpose registers and masque register for providing access to the registers |
JP3130609B2 (ja) * | 1991-12-17 | 2001-01-31 | 日本電気株式会社 | オンライン情報処理装置 |
JPH05260045A (ja) * | 1992-01-14 | 1993-10-08 | Ricoh Co Ltd | デ−タ端末装置の通信方法 |
DE69324508T2 (de) | 1992-01-22 | 1999-12-23 | Enhanced Memory Systems Inc | DRAM mit integrierten Registern |
JPH05252228A (ja) * | 1992-03-02 | 1993-09-28 | Mitsubishi Electric Corp | データ伝送装置及びその通信路管理方法 |
WO1993018461A1 (en) | 1992-03-09 | 1993-09-16 | Auspex Systems, Inc. | High-performance non-volatile ram protected write cache accelerator system |
US5742760A (en) * | 1992-05-12 | 1998-04-21 | Compaq Computer Corporation | Network packet switch using shared memory for repeating and bridging packets at media rate |
US6026452A (en) * | 1997-02-26 | 2000-02-15 | Pitts; William Michael | Network distributed site cache RAM claimed as up/down stream request/reply channel for storing anticipated data and meta data |
US5671355A (en) * | 1992-06-26 | 1997-09-23 | Predacomm, Inc. | Reconfigurable network interface apparatus and method |
US5412782A (en) * | 1992-07-02 | 1995-05-02 | 3Com Corporation | Programmed I/O ethernet adapter with early interrupts for accelerating data transfer |
US5280477A (en) * | 1992-08-17 | 1994-01-18 | E-Systems, Inc. | Network synchronous data distribution system |
FR2699706B1 (fr) * | 1992-12-22 | 1995-02-24 | Bull Sa | Système de transmission de données entre un bus d'ordinateur et un réseau. |
US5619650A (en) * | 1992-12-31 | 1997-04-08 | International Business Machines Corporation | Network processor for transforming a message transported from an I/O channel to a network by adding a message identifier and then converting the message |
GB9300942D0 (en) | 1993-01-19 | 1993-03-10 | Int Computers Ltd | Parallel computer system |
DE69320321T2 (de) * | 1993-02-05 | 1998-12-24 | Hewlett Packard Co | Verfahren und Gerät zum Nachprüfen von CRC-Koden, wobei CRC Teilkode kombiniert werden |
US5815646A (en) * | 1993-04-13 | 1998-09-29 | C-Cube Microsystems | Decompression processor for video applications |
JP3358254B2 (ja) * | 1993-10-28 | 2002-12-16 | 株式会社日立製作所 | 通信制御装置および通信制御用回路装置 |
US5448566A (en) * | 1993-11-15 | 1995-09-05 | International Business Machines Corporation | Method and apparatus for facilitating communication in a multilayer communication architecture via a dynamic communication channel |
US5758194A (en) * | 1993-11-30 | 1998-05-26 | Intel Corporation | Communication apparatus for handling networks with different transmission protocols by stripping or adding data to the data stream in the application layer |
JP2596718B2 (ja) * | 1993-12-21 | 1997-04-02 | インターナショナル・ビジネス・マシーンズ・コーポレイション | ネットワーク通信バッファを管理する方法 |
US5517668A (en) * | 1994-01-10 | 1996-05-14 | Amdahl Corporation | Distributed protocol framework |
US5485455A (en) * | 1994-01-28 | 1996-01-16 | Cabletron Systems, Inc. | Network having secure fast packet switching and guaranteed quality of service |
JPH08180001A (ja) * | 1994-04-12 | 1996-07-12 | Mitsubishi Electric Corp | 通信方式及び通信方法及びネットワークインタフェース |
US6047356A (en) * | 1994-04-18 | 2000-04-04 | Sonic Solutions | Method of dynamically allocating network node memory's partitions for caching distributed files |
US5485460A (en) * | 1994-08-19 | 1996-01-16 | Microsoft Corporation | System and method for running multiple incompatible network protocol stacks |
WO1996007139A1 (en) * | 1994-09-01 | 1996-03-07 | Mcalpine Gary L | A multi-port memory system including read and write buffer interfaces |
US5548730A (en) * | 1994-09-20 | 1996-08-20 | Intel Corporation | Intelligent bus bridge for input/output subsystems in a computer system |
US5634127A (en) * | 1994-11-30 | 1997-05-27 | International Business Machines Corporation | Methods and apparatus for implementing a message driven processor in a client-server environment |
US5634099A (en) * | 1994-12-09 | 1997-05-27 | International Business Machines Corporation | Direct memory access unit for transferring data between processor memories in multiprocessing systems |
US5583733A (en) * | 1994-12-21 | 1996-12-10 | Polaroid Corporation | Electrostatic discharge protection device |
US5598410A (en) * | 1994-12-29 | 1997-01-28 | Storage Technology Corporation | Method and apparatus for accelerated packet processing |
US5566170A (en) * | 1994-12-29 | 1996-10-15 | Storage Technology Corporation | Method and apparatus for accelerated packet forwarding |
US5758084A (en) * | 1995-02-27 | 1998-05-26 | Hewlett-Packard Company | Apparatus for parallel client/server communication having data structures which stored values indicative of connection state and advancing the connection state of established connections |
US5701434A (en) | 1995-03-16 | 1997-12-23 | Hitachi, Ltd. | Interleave memory controller with a common access queue |
US5592622A (en) * | 1995-05-10 | 1997-01-07 | 3Com Corporation | Network intermediate system with message passing architecture |
US5664114A (en) * | 1995-05-16 | 1997-09-02 | Hewlett-Packard Company | Asynchronous FIFO queuing system operating with minimal queue status |
US5558121A (en) * | 1995-06-07 | 1996-09-24 | Aeroquip Corporation | Fluid actuated ball check valve assembly |
US5629933A (en) * | 1995-06-07 | 1997-05-13 | International Business Machines Corporation | Method and system for enhanced communication in a multisession packet based communication system |
JPH096706A (ja) * | 1995-06-22 | 1997-01-10 | Hitachi Ltd | 疎結合計算機システム |
US5596574A (en) * | 1995-07-06 | 1997-01-21 | Novell, Inc. | Method and apparatus for synchronizing data transmission with on-demand links of a network |
US5752078A (en) * | 1995-07-10 | 1998-05-12 | International Business Machines Corporation | System for minimizing latency data reception and handling data packet error if detected while transferring data packet from adapter memory to host memory |
US5812775A (en) * | 1995-07-12 | 1998-09-22 | 3Com Corporation | Method and apparatus for internetworking buffer management |
US5742840A (en) * | 1995-08-16 | 1998-04-21 | Microunity Systems Engineering, Inc. | General purpose, multiple precision parallel operation, programmable media processor |
US5758186A (en) * | 1995-10-06 | 1998-05-26 | Sun Microsystems, Inc. | Method and apparatus for generically handling diverse protocol method calls in a client/server computer system |
US5913028A (en) * | 1995-10-06 | 1999-06-15 | Xpoint Technologies, Inc. | Client/server data traffic delivery system and method |
US6047323A (en) * | 1995-10-19 | 2000-04-04 | Hewlett-Packard Company | Creation and migration of distributed streams in clusters of networked computers |
US5758089A (en) * | 1995-11-02 | 1998-05-26 | Sun Microsystems, Inc. | Method and apparatus for burst transferring ATM packet header and data to a host computer system |
US5809328A (en) * | 1995-12-21 | 1998-09-15 | Unisys Corp. | Apparatus for fibre channel transmission having interface logic, buffer memory, multiplexor/control device, fibre channel controller, gigabit link module, microprocessor, and bus control device |
US5706514A (en) * | 1996-03-04 | 1998-01-06 | Compaq Computer Corporation | Distributed execution of mode mismatched commands in multiprocessor computer systems |
US6014557A (en) * | 1996-03-14 | 2000-01-11 | Bellsouth Intellectual Property Corporation | Apparatus and methods for providing wireless system fraud and visibility data |
US5668373A (en) * | 1996-04-26 | 1997-09-16 | Trustees Of Tufts College | Methods and apparatus for analysis of complex mixtures |
US5802258A (en) * | 1996-05-03 | 1998-09-01 | International Business Machines Corporation | Loosely coupled system environment designed to handle a non-disruptive host connection switch after detection of an error condition or during a host outage or failure |
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 |
US5878225A (en) * | 1996-06-03 | 1999-03-02 | International Business Machines Corporation | Dual communication services interface for distributed transaction processing |
US5742765A (en) * | 1996-06-19 | 1998-04-21 | Pmc-Sierra, Inc. | Combination local ATM segmentation and reassembly and physical layer device |
US5749095A (en) * | 1996-07-01 | 1998-05-05 | Sun Microsystems, Inc. | Multiprocessing system configured to perform efficient write operations |
US5878227A (en) * | 1996-07-01 | 1999-03-02 | Sun Microsystems, Inc. | System for performing deadlock free message transfer in cyclic multi-hop digital computer network using a number of buffers based on predetermined diameter |
US5751723A (en) * | 1996-07-01 | 1998-05-12 | Motorola, Inc. | Method and system for overhead bandwidth recovery in a packetized network |
US5870394A (en) * | 1996-07-23 | 1999-02-09 | Northern Telecom Limited | Method and apparatus for reassembly of data packets into messages in an asynchronous transfer mode communications system |
US5751715A (en) * | 1996-08-08 | 1998-05-12 | Gadzoox Microsystems, Inc. | Accelerator fiber channel hub and protocol |
US6038562A (en) * | 1996-09-05 | 2000-03-14 | International Business Machines Corporation | Interface to support state-dependent web applications accessing a relational database |
US5941696A (en) * | 1996-09-10 | 1999-08-24 | Embrex, Inc. | Peristaltic pump |
US5892903A (en) * | 1996-09-12 | 1999-04-06 | Internet Security Systems, Inc. | Method and apparatus for detecting and identifying security vulnerabilities in an open network computer communication system |
US6034963A (en) * | 1996-10-31 | 2000-03-07 | Iready Corporation | Multiple network protocol encoder/decoder and data processor |
US6523119B2 (en) * | 1996-12-04 | 2003-02-18 | Rainbow Technologies, Inc. | Software protection device and method |
US5930830A (en) * | 1997-01-13 | 1999-07-27 | International Business Machines Corporation | System and method for concatenating discontiguous memory pages |
US6094708A (en) * | 1997-05-06 | 2000-07-25 | Cisco Technology, Inc. | Secondary cache write-through blocking mechanism |
US5872919A (en) * | 1997-05-07 | 1999-02-16 | Advanced Micro Devices, Inc. | Computer communication network having a packet processor with an execution unit which is variably configured from a programmable state machine and logic |
US6049528A (en) * | 1997-06-30 | 2000-04-11 | Sun Microsystems, Inc. | Trunking ethernet-compatible networks |
US6014380A (en) * | 1997-06-30 | 2000-01-11 | Sun Microsystems, Inc. | Mechanism for packet field replacement in a multi-layer distributed network element |
US6044438A (en) * | 1997-07-10 | 2000-03-28 | International Business Machiness Corporation | Memory controller for controlling memory accesses across networks in distributed shared memory processing systems |
US6021446A (en) * | 1997-07-11 | 2000-02-01 | Sun Microsystems, Inc. | Network device driver performing initial packet processing within high priority hardware interrupt service routine and then finishing processing within low priority software interrupt service routine |
AU8490898A (en) * | 1997-07-18 | 1999-02-10 | Interprophet Corporation | Tcp/ip network accelerator system and method |
US6145017A (en) * | 1997-08-05 | 2000-11-07 | Adaptec, Inc. | Data alignment system for a hardware accelerated command interpreter engine |
US6370145B1 (en) * | 1997-08-22 | 2002-04-09 | Avici Systems | Internet switch router |
US5898713A (en) * | 1997-08-29 | 1999-04-27 | Cisco Technology, Inc. | IP checksum offload |
US6041058A (en) * | 1997-09-11 | 2000-03-21 | 3Com Corporation | Hardware filtering method and apparatus |
US5991299A (en) * | 1997-09-11 | 1999-11-23 | 3Com Corporation | High speed header translation processing |
US6172980B1 (en) * | 1997-09-11 | 2001-01-09 | 3Com Corporation | Multiple protocol support |
US6247173B1 (en) | 1997-09-24 | 2001-06-12 | Hewlett-Packard Company | Computer compiler optimizer for reducing computer resource consumption during dependence analysis after loop unrolling |
US6005849A (en) | 1997-09-24 | 1999-12-21 | Emulex Corporation | Full-duplex communication processor which can be used for fibre channel frames |
US6065096A (en) * | 1997-09-30 | 2000-05-16 | Lsi Logic Corporation | Integrated single chip dual mode raid controller |
US6658480B2 (en) * | 1997-10-14 | 2003-12-02 | Alacritech, Inc. | Intelligent network interface system and method for accelerated protocol processing |
US6226680B1 (en) * | 1997-10-14 | 2001-05-01 | Alacritech, Inc. | Intelligent network interface system method for protocol processing |
US7167927B2 (en) * | 1997-10-14 | 2007-01-23 | Alacritech, Inc. | TCP/IP offload device with fast-path TCP ACK generating and transmitting mechanism |
US6697868B2 (en) * | 2000-02-28 | 2004-02-24 | Alacritech, Inc. | Protocol processing stack for use with intelligent network interface device |
US6389479B1 (en) * | 1997-10-14 | 2002-05-14 | Alacritech, Inc. | Intelligent network interface device and system for accelerated communication |
US6434620B1 (en) * | 1998-08-27 | 2002-08-13 | Alacritech, Inc. | TCP/IP offload network interface device |
US7237036B2 (en) * | 1997-10-14 | 2007-06-26 | Alacritech, Inc. | Fast-path apparatus for receiving data corresponding a TCP connection |
US5941969A (en) | 1997-10-22 | 1999-08-24 | Auspex Systems, Inc. | Bridge for direct data storage device access |
US6122670A (en) * | 1997-10-30 | 2000-09-19 | Tsi Telsys, Inc. | Apparatus and method for constructing data for transmission within a reliable communication protocol by performing portions of the protocol suite concurrently |
US6057863A (en) * | 1997-10-31 | 2000-05-02 | Compaq Computer Corporation | Dual purpose apparatus, method and system for accelerated graphics port and fibre channel arbitrated loop interfaces |
US6009478A (en) | 1997-11-04 | 1999-12-28 | Adaptec, Inc. | File array communications interface for communicating between a host computer and an adapter |
US6219693B1 (en) * | 1997-11-04 | 2001-04-17 | Adaptec, Inc. | File array storage architecture having file system distributed across a data processing platform |
US6061368A (en) * | 1997-11-05 | 2000-05-09 | Xylan Corporation | Custom circuitry for adaptive hardware routing engine |
US5950203A (en) * | 1997-12-31 | 1999-09-07 | Mercury Computer Systems, Inc. | Method and apparatus for high-speed access to and sharing of storage devices on a networked digital data processing system |
US5941972A (en) * | 1997-12-31 | 1999-08-24 | Crossroads Systems, Inc. | Storage router and method for providing virtual local storage |
US6101555A (en) * | 1998-01-12 | 2000-08-08 | Adaptec, Inc. | Methods and apparatus for communicating between networked peripheral devices |
US5996024A (en) * | 1998-01-14 | 1999-11-30 | Emc Corporation | Method and apparatus for a SCSI applications server which extracts SCSI commands and data from message and encapsulates SCSI responses to provide transparent operation |
US6041381A (en) * | 1998-02-05 | 2000-03-21 | Crossroads Systems, Inc. | Fibre channel to SCSI addressing method and system |
US6016513A (en) * | 1998-02-19 | 2000-01-18 | 3Com Corporation | Method of preventing packet loss during transfers of data packets between a network interface card and an operating system of a computer |
US6246683B1 (en) * | 1998-05-01 | 2001-06-12 | 3Com Corporation | Receive processing with network protocol bypass |
US6070200A (en) * | 1998-06-02 | 2000-05-30 | Adaptec, Inc. | Host adapter having paged data buffers for continuously transferring data between a system bus and a peripheral bus |
US6202105B1 (en) * | 1998-06-02 | 2001-03-13 | Adaptec, Inc. | Host adapter capable of simultaneously transmitting and receiving data of multiple contexts between a computer bus and peripheral bus |
US6298403B1 (en) * | 1998-06-02 | 2001-10-02 | Adaptec, Inc. | Host adapter having a snapshot mechanism |
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 |
US6157955A (en) | 1998-06-15 | 2000-12-05 | Intel Corporation | Packet processing system including a policy engine having a classification unit |
US6452915B1 (en) * | 1998-07-10 | 2002-09-17 | Malibu Networks, Inc. | IP-flow classification in a wireless point to multi-point (PTMP) transmission system |
US7664883B2 (en) * | 1998-08-28 | 2010-02-16 | Alacritech, Inc. | Network interface device that fast-path processes solicited session layer read commands |
US6223242B1 (en) * | 1998-09-28 | 2001-04-24 | Sifera, Inc. | Linearly expandable self-routing crossbar switch |
KR100280642B1 (ko) * | 1998-11-18 | 2001-05-02 | 윤종용 | 이더넷 컨트롤러의 메모리 관리 장치 및 그 제어방법 |
US6389468B1 (en) * | 1999-03-01 | 2002-05-14 | Sun Microsystems, Inc. | Method and apparatus for distributing network traffic processing on a multiprocessor computer |
US6480489B1 (en) * | 1999-03-01 | 2002-11-12 | Sun Microsystems, Inc. | Method and apparatus for data re-assembly with a high performance network interface |
US6434651B1 (en) * | 1999-03-01 | 2002-08-13 | Sun Microsystems, Inc. | Method and apparatus for suppressing interrupts in a high-speed network environment |
US6453360B1 (en) * | 1999-03-01 | 2002-09-17 | Sun Microsystems, Inc. | High performance network interface |
US6356951B1 (en) * | 1999-03-01 | 2002-03-12 | Sun Microsystems, Inc. | System for parsing a packet for conformity with a predetermined protocol using mask and comparison values included in a parsing instruction |
US6678283B1 (en) * | 1999-03-10 | 2004-01-13 | Lucent Technologies Inc. | System and method for distributing packet processing in an internetworking device |
US6345301B1 (en) * | 1999-03-30 | 2002-02-05 | Unisys Corporation | Split data path distributed network protocol |
US6526446B1 (en) * | 1999-04-27 | 2003-02-25 | 3Com Corporation | Hardware only transmission control protocol segmentation for a high performance network interface card |
US6343360B1 (en) * | 1999-05-13 | 2002-01-29 | Microsoft Corporation | Automated configuration of computing system using zip code data |
US6768992B1 (en) * | 1999-05-17 | 2004-07-27 | Lynne G. Jolitz | Term addressable memory of an accelerator system and method |
US6542504B1 (en) * | 1999-05-28 | 2003-04-01 | 3Com Corporation | Profile based method for packet header compression in a point to point link |
US6427169B1 (en) * | 1999-07-30 | 2002-07-30 | Intel Corporation | Parsing a packet header |
US6449656B1 (en) * | 1999-07-30 | 2002-09-10 | Intel Corporation | Storing a frame header |
US6842896B1 (en) * | 1999-09-03 | 2005-01-11 | Rainbow Technologies, Inc. | System and method for selecting a server in a multiple server license management system |
US6681364B1 (en) * | 1999-09-24 | 2004-01-20 | International Business Machines Corporation | Cyclic redundancy check for partitioned frames |
US6421742B1 (en) * | 1999-10-29 | 2002-07-16 | Intel Corporation | Method and apparatus for emulating an input/output unit when transferring data over a network |
US6683851B1 (en) * | 2000-01-05 | 2004-01-27 | Qualcomm, Incorporated | Flow control of multiple entities sharing a common data link |
ATE550852T1 (de) | 2000-09-29 | 2012-04-15 | Alacritech Inc | Intelligentes netzwerkspeicherschnittstellensystem und solche einrichtungen |
US7149817B2 (en) * | 2001-02-15 | 2006-12-12 | Neteffect, Inc. | Infiniband TM work queue to TCP/IP translation |
US7065702B2 (en) * | 2001-04-12 | 2006-06-20 | Siliquent Technologies Ltd. | Out-of-order calculation of error detection codes |
US20030046330A1 (en) * | 2001-09-04 | 2003-03-06 | Hayes John W. | Selective offloading of protocol processing |
US6865264B2 (en) * | 2001-10-31 | 2005-03-08 | International Business Machines Corporation | Apparatus and method for providing conference call roster information with speaker voice identification |
JP2003229900A (ja) * | 2002-02-04 | 2003-08-15 | Mitsubishi Electric Corp | 中継処理装置及び中継処理方法 |
US7269661B2 (en) * | 2002-02-12 | 2007-09-11 | Bradley Richard Ree | Method using receive and transmit protocol aware logic modules for confirming checksum values stored in network packet |
US7016361B2 (en) * | 2002-03-02 | 2006-03-21 | Toshiba America Information Systems, Inc. | Virtual switch in a wide area network |
US7496689B2 (en) * | 2002-04-22 | 2009-02-24 | Alacritech, Inc. | TCP/IP offload device |
JP3757904B2 (ja) * | 2002-05-27 | 2006-03-22 | 日本電気株式会社 | 通信制御装置 |
US7181531B2 (en) * | 2002-04-30 | 2007-02-20 | Microsoft Corporation | Method to synchronize and upload an offloaded network stack connection with a network stack |
US7441262B2 (en) * | 2002-07-11 | 2008-10-21 | Seaway Networks Inc. | Integrated VPN/firewall system |
US7411959B2 (en) * | 2002-08-30 | 2008-08-12 | Broadcom Corporation | System and method for handling out-of-order frames |
US7426579B2 (en) * | 2002-09-17 | 2008-09-16 | Broadcom Corporation | System and method for handling frames in multiple stack environments |
US7313623B2 (en) * | 2002-08-30 | 2007-12-25 | Broadcom Corporation | System and method for TCP/IP offload independent of bandwidth delay product |
US7181544B2 (en) * | 2002-09-03 | 2007-02-20 | Intel Corporation | Network protocol engine |
US20040049580A1 (en) * | 2002-09-05 | 2004-03-11 | International Business Machines Corporation | Receive queue device with efficient queue flow control, segment placement and virtualization mechanisms |
US7519650B2 (en) * | 2002-09-05 | 2009-04-14 | International Business Machines Corporation | Split socket send queue apparatus and method with efficient queue flow control, retransmission and sack support mechanisms |
US20040059926A1 (en) * | 2002-09-20 | 2004-03-25 | Compaq Information Technology Group, L.P. | Network interface controller with firmware enabled licensing features |
US7337241B2 (en) * | 2002-09-27 | 2008-02-26 | Alacritech, Inc. | Fast-path apparatus for receiving data corresponding to a TCP connection |
US7324540B2 (en) * | 2002-12-31 | 2008-01-29 | Intel Corporation | Network protocol off-load engines |
US7389462B1 (en) * | 2003-02-14 | 2008-06-17 | Istor Networks, Inc. | System and methods for high rate hardware-accelerated network protocol processing |
US7609696B2 (en) * | 2003-06-05 | 2009-10-27 | Nvidia Corporation | Storing and accessing TCP connection information |
US20050060538A1 (en) * | 2003-09-15 | 2005-03-17 | Intel Corporation | Method, system, and program for processing of fragmented datagrams |
US7519699B2 (en) * | 2004-08-05 | 2009-04-14 | International Business Machines Corporation | Method, system, and computer program product for delivering data to a storage buffer assigned to an application |
US7533198B2 (en) * | 2005-10-07 | 2009-05-12 | International Business Machines Corporation | Memory controller and method for handling DMA operations during a page copy |
US7836220B2 (en) * | 2006-08-17 | 2010-11-16 | Apple Inc. | Network direct memory access |
-
2003
- 2003-12-05 US US10/729,111 patent/US6996070B2/en not_active Expired - Lifetime
-
2004
- 2004-12-03 JP JP2006542879A patent/JP5066707B2/ja not_active Expired - Fee Related
- 2004-12-03 CN CN200480040030.XA patent/CN1910869B/zh not_active Expired - Fee Related
- 2004-12-03 EP EP04813241A patent/EP1690387B1/en not_active Not-in-force
- 2004-12-03 WO PCT/US2004/040897 patent/WO2005057945A2/en active Application Filing
-
2006
- 2006-02-06 US US11/348,810 patent/US20060168281A1/en not_active Abandoned
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5937169A (en) * | 1997-10-29 | 1999-08-10 | 3Com Corporation | Offload of TCP segmentation to a smart adapter |
CN1272187A (zh) * | 1998-04-15 | 2000-11-01 | 布尔Cp8公司 | 带管理一个虚拟存储器装置的芯片卡及相应的通信方法和协议 |
Also Published As
Publication number | Publication date |
---|---|
JP5066707B2 (ja) | 2012-11-07 |
US20060168281A1 (en) | 2006-07-27 |
EP1690387A4 (en) | 2007-08-15 |
US20050122986A1 (en) | 2005-06-09 |
WO2005057945A2 (en) | 2005-06-23 |
US6996070B2 (en) | 2006-02-07 |
CN1910869A (zh) | 2007-02-07 |
JP2007517286A (ja) | 2007-06-28 |
EP1690387B1 (en) | 2012-09-19 |
WO2005057945A3 (en) | 2005-09-09 |
EP1690387A2 (en) | 2006-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1910869B (zh) | 具有简化的顺序处理的tcp/ip卸载设备 | |
US6389479B1 (en) | Intelligent network interface device and system for accelerated communication | |
US7644188B2 (en) | Distributing tasks in data communications | |
US8856379B2 (en) | Intelligent network interface system and method for protocol processing | |
US6658480B2 (en) | Intelligent network interface system and method for accelerated protocol processing | |
US6591302B2 (en) | Fast-path apparatus for receiving data corresponding to a TCP connection | |
US6427173B1 (en) | Intelligent network interfaced device and system for accelerated communication | |
CN101053234B (zh) | 用于越过具有进入的分组数据的dfa图像的方法和装置 | |
EP0572146B1 (en) | Insertion of network data check sums by a network adapter | |
US6807581B1 (en) | Intelligent network storage interface system | |
US7773599B1 (en) | Packet fragment handling | |
US7916632B1 (en) | Systems and methods for handling packet fragmentation | |
US20020161919A1 (en) | Fast-path processing for receiving data on TCP connection offload devices | |
US20080240111A1 (en) | Method and apparatus for writing network packets into computer memory | |
US20110170546A1 (en) | Logical separation and accessing of descriptor memories | |
EP2342872B1 (en) | Reliable reception of messages written via rdma using hashing | |
US7937495B2 (en) | System and method for modifying data transferred from a source to a destination | |
US8798085B2 (en) | Techniques to process network protocol units | |
US7466716B2 (en) | Reducing latency in a channel adapter by accelerated I/O control block processing | |
US8151278B1 (en) | System and method for timer management in a stateful protocol processing system | |
US5948079A (en) | System for non-sequential transfer of data packet portions with respective portion descriptions from a computer network peripheral device to host memory | |
US7158520B1 (en) | Mailbox registers for synchronizing header processing execution | |
CN1695363B (zh) | 为分组处理确定时钟信号的方法和系统 | |
JP3233353B2 (ja) | ヘッダ処理装置とそのヘッダ処理方法 | |
US7500239B2 (en) | Packet processing system |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111123 Termination date: 20181203 |