專利名稱:網(wǎng)絡(luò)協(xié)議引擎的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)協(xié)議引擎。
背景技術(shù):
本申請(qǐng)涉及下述共同待審的申請(qǐng)“基于分組的時(shí)鐘信號(hào)(PACKET-BASED CLOCK SIGNAL)”、代理律師文檔號(hào)42.P14951;以及“跟蹤亂序的分組(TRACKING OUT-OF-ORDER PACKETS)”,代理律師文檔號(hào)42.P14792。這些申請(qǐng)與本申請(qǐng)?jiān)谕惶焯峤徊⒅付ㄏ嗤陌l(fā)明人姓名。
本申請(qǐng)中所包括的微代碼指令,作者對(duì)這一材料保留適當(dāng)?shù)陌鏅?quán)。
網(wǎng)絡(luò)使計(jì)算機(jī)和其他電子設(shè)備能夠交換數(shù)據(jù),諸如電子郵件消息、網(wǎng)頁(yè)、音頻數(shù)據(jù)、視頻數(shù)據(jù)等等。在通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸之前,通常通過(guò)分組集合來(lái)分發(fā)數(shù)據(jù)。接收器在接收分組后,能將該數(shù)據(jù)重組到其原始形式。
除了正在發(fā)送中的數(shù)據(jù)(“有效載荷”)外,分組還包括“首部”信息。網(wǎng)絡(luò)協(xié)議能定義在首部中存儲(chǔ)的信息、分組結(jié)構(gòu)以及過(guò)程應(yīng)當(dāng)如何處理分組。
不同的網(wǎng)絡(luò)協(xié)議處理網(wǎng)絡(luò)通信的不同方面。許多網(wǎng)絡(luò)通信模型將這些協(xié)議組織成不同的層。例如,諸如,傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)模型和開(kāi)放式軟件協(xié)會(huì)(open software institute)(OSI)的模型定義如下層“物理層”,用于處理在物理介質(zhì)上的比特級(jí)別傳輸;“鏈路層”,用于處理在物理連接上提供可靠數(shù)據(jù)通信的低級(jí)別細(xì)節(jié);“網(wǎng)絡(luò)層”,諸如網(wǎng)際協(xié)議,用于處理在通過(guò)網(wǎng)絡(luò)查找連接源和目的地的路徑的過(guò)程中所涉及的任務(wù);以及“傳輸層”,用于協(xié)調(diào)源和目的地設(shè)備間的通信,同時(shí)使“應(yīng)用層”程序擺脫網(wǎng)絡(luò)通信的復(fù)雜性。
在ATM網(wǎng)絡(luò)中,使用不同的網(wǎng)絡(luò)通信模型,異步傳輸模式(ATM)模型。ATM模型不僅定義物理層,而且還定義ATM和ATM適配層(AAL)層,來(lái)代替TCP/IP和OSI模型的網(wǎng)絡(luò)、傳輸和應(yīng)用層。
通常,為在網(wǎng)絡(luò)上發(fā)送數(shù)據(jù),為不同的通信層生成不同的首部。例如,在TCP/IP中,傳輸層過(guò)程通過(guò)將傳輸層首部添加到由應(yīng)用提供的一組數(shù)據(jù)上來(lái)生成傳輸層分組(有時(shí)稱為“段”);然后,網(wǎng)絡(luò)層過(guò)程通過(guò)將網(wǎng)絡(luò)層首部添加到傳輸層分組上來(lái)生成網(wǎng)絡(luò)層分組(例如,IP分組);然后,鏈路層過(guò)程通過(guò)將鏈路層首部增加到網(wǎng)絡(luò)分組上來(lái)生成鏈路層分組(也稱為“幀”)。這一過(guò)程稱為封裝。用類推法,封裝過(guò)程非常像將一系列信封在相互之間填塞在分組行進(jìn)通過(guò)網(wǎng)絡(luò)后,接收器能拆封分組(例如,“拆開(kāi)”信封)。例如,接收器的鏈路層過(guò)程可以驗(yàn)證所接收的幀,并將內(nèi)封的網(wǎng)絡(luò)層分組傳遞給網(wǎng)絡(luò)層過(guò)程。網(wǎng)絡(luò)層過(guò)程能使用網(wǎng)絡(luò)首部來(lái)驗(yàn)證分組的正確傳遞并將內(nèi)封的傳輸段傳遞給傳輸層過(guò)程。最后,傳輸層過(guò)程能根據(jù)傳輸首部處理傳輸分組,并將結(jié)果數(shù)據(jù)傳遞給應(yīng)用。
如上所述,發(fā)送器和接收器均要進(jìn)行相當(dāng)多的處理以便處理分組。另外,網(wǎng)絡(luò)連接速度持續(xù)快速增長(zhǎng)。例如,能每秒傳送10千兆比特、甚至更快的網(wǎng)絡(luò)連接,可能不久就變得很平常。網(wǎng)絡(luò)連接速度的這一增加給提供這種連接的設(shè)備提出了重要的設(shè)計(jì)問(wèn)題。即,以這種速度,設(shè)備就非??赡軣o(wú)法應(yīng)對(duì)迅猛增長(zhǎng)的網(wǎng)絡(luò)通信量。
圖1是網(wǎng)絡(luò)協(xié)議引擎的框圖。
圖2是網(wǎng)絡(luò)協(xié)議引擎的示意圖。
圖3是網(wǎng)絡(luò)協(xié)議引擎的處理器的示意圖。
圖4是用于編程網(wǎng)絡(luò)協(xié)議操作的指令集的圖。
圖5是TCP(傳輸控制協(xié)議)狀態(tài)機(jī)的圖。
圖6-10示例說(shuō)明跟蹤亂序分組的方案的操作。
圖11是跟蹤亂序分組的過(guò)程的流程圖。
圖12-13是用于跟蹤亂序且包括內(nèi)容可尋址存儲(chǔ)器的系統(tǒng)的示意圖。
圖14是具有不同時(shí)鐘信號(hào)的特征的網(wǎng)絡(luò)協(xié)議引擎的圖。
圖15是具有根據(jù)一個(gè)或多個(gè)分組特征使時(shí)鐘信號(hào)特征化的網(wǎng)絡(luò)協(xié)議引擎的圖。
圖16是用于根據(jù)一個(gè)或多個(gè)分組特征提供時(shí)鐘信號(hào)的機(jī)制的圖。
具體實(shí)施例方式
許多計(jì)算機(jī)系統(tǒng)和其他主機(jī)設(shè)備具有用于處理各種任務(wù)的處理器(例如通用中央處理單元(CPU))的特征。通常這些處理器具有處理網(wǎng)絡(luò)通信量的額外的責(zé)任。網(wǎng)絡(luò)通信量和連接速度的增加已經(jīng)對(duì)主處理器資源提出了更高的要求。為至少部分地降低主處理器上的網(wǎng)絡(luò)通信負(fù)擔(dān),圖1描述能為主機(jī)執(zhí)行網(wǎng)絡(luò)協(xié)議操作的網(wǎng)絡(luò)協(xié)議“卸載”引擎106的例子。系統(tǒng)106能執(zhí)行對(duì)應(yīng)各種協(xié)議的操作。例如,能將系統(tǒng)配置成執(zhí)行對(duì)應(yīng)傳輸層協(xié)議(例如TCP和用戶數(shù)據(jù)報(bào)協(xié)議(UDP))、網(wǎng)絡(luò)層協(xié)議(例如IP)以及應(yīng)用層協(xié)議(例如套接字編程)的操作。類似地,在ATM網(wǎng)絡(luò)中,能將系統(tǒng)106配置成提供針對(duì)ATM分組(也稱為“信元”)的ATM層或AAL層操作。能將該系統(tǒng)配置成提供其他協(xié)議操作,諸如與網(wǎng)際控制報(bào)文協(xié)議(ICMP)相關(guān)聯(lián)的那些協(xié)議操作。
除通過(guò)處理協(xié)議操作節(jié)約主處理器資源外,系統(tǒng)106可以提供“線速”處理,即使對(duì)于非??斓倪B接,諸如每秒10千兆比特和每秒40千兆比特的連接也可以提供“線速”處理。換句話說(shuō),系統(tǒng)106通??梢栽诹硪粋€(gè)分組到達(dá)之前完成一個(gè)分組的處理。通過(guò)跟上高速連接,系統(tǒng)106能潛在地避免或降低與排隊(duì)大量積壓的分組相關(guān)聯(lián)的成本和復(fù)雜性。
所示的示例系統(tǒng)106包括用于接收在一個(gè)或多個(gè)主機(jī)和網(wǎng)絡(luò)102之間穿行的數(shù)據(jù)的接口108。對(duì)出去的數(shù)據(jù),系統(tǒng)106接口108例如經(jīng)提供網(wǎng)絡(luò)連接(例如,以太網(wǎng)或無(wú)線連接)媒體訪問(wèn)控制(MAC)設(shè)備和PHY(未示出),從主機(jī)接收數(shù)據(jù)并生成用于網(wǎng)絡(luò)傳輸?shù)姆纸M。對(duì)所接收的分組(例如經(jīng)PHY和MAC接收的分組),系統(tǒng)106接口108能將分組處理結(jié)果遞送到主機(jī)。例如,系統(tǒng)106可以經(jīng)小型計(jì)算機(jī)系統(tǒng)接口(SCSI)或外圍部件互連(PCI)型總線(例如PCI-X總線系統(tǒng))與主機(jī)通信。
除接口108外,系統(tǒng)106還包括用于實(shí)現(xiàn)協(xié)議操作的處理邏輯110。與接口108一樣,可以使用各種技術(shù)設(shè)計(jì)邏輯110。例如,可以將系統(tǒng)106設(shè)計(jì)成硬布線ASIC(專用集成電路)、FPGA(現(xiàn)場(chǎng)可編程門陣列)和或數(shù)字邏輯門的另一組合。
如所示,邏輯110也可以由系統(tǒng)106來(lái)實(shí)現(xiàn),系統(tǒng)106包括處理器122(例如微控制器或微處理器)和用于處理器122能執(zhí)行來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議操作的指令的RAM(隨機(jī)訪問(wèn)存儲(chǔ)器))或存儲(chǔ)器126(例如ROM(只讀存儲(chǔ)器)?;谥噶畹南到y(tǒng)106提供高度靈活性。例如,當(dāng)網(wǎng)絡(luò)協(xié)議經(jīng)歷改變或被替換時(shí),能夠通過(guò)替換指令而不是替換系統(tǒng)106本身來(lái)更新系統(tǒng)106。例如,主機(jī)可以通過(guò)如下方式來(lái)更新系統(tǒng)106,所述方式是例如當(dāng)主機(jī)啟動(dòng)時(shí),將指令從母板上的外部閃速存儲(chǔ)器或ROM中加載到存儲(chǔ)器126。
盡管圖1描述了為主機(jī)執(zhí)行操作的單一系統(tǒng)106,但是也可以使用多個(gè)卸載引擎106來(lái)為主機(jī)處理網(wǎng)絡(luò)操作,以便提供處理日益增加的通信量的可伸縮方法。例如,系統(tǒng)可以包括引擎106和用于將連接分配到不同的引擎106的邏輯的集合。為節(jié)約功率,可以執(zhí)行這種分配來(lái)降低在指定時(shí)間有效支持進(jìn)行中的連接的引擎106的數(shù)量。
圖2是系統(tǒng)106的樣例實(shí)施例。總體來(lái)看,在這一實(shí)施例中,系統(tǒng)106將對(duì)應(yīng)不同連接的上下文數(shù)據(jù)(context data)存儲(chǔ)在存儲(chǔ)器112中。例如,對(duì)于TCP協(xié)議而言,這一數(shù)據(jù)被稱為TCB(傳輸控制塊)數(shù)據(jù)。對(duì)指定的分組,系統(tǒng)106在這一例子中經(jīng)工作寄存器118查找存儲(chǔ)器112中的對(duì)應(yīng)的連接上下文并使這一數(shù)據(jù)可用于處理器122。使用上下文數(shù)據(jù),處理器122執(zhí)行一組相應(yīng)的協(xié)議實(shí)現(xiàn)指令126。上下文數(shù)據(jù),潛在地被處理器122加以修改,然后被返回給上下文存儲(chǔ)器112。
更詳細(xì)地說(shuō),所示的系統(tǒng)106包括用于解析所接收的分組首部(例如TCP/IP分組的TCP和IP首部)并暫時(shí)緩沖所解析的數(shù)據(jù)的輸入序列發(fā)生器116。輸入序列發(fā)生器116也可以啟動(dòng)將分組的有效載荷存儲(chǔ)在主機(jī)可訪問(wèn)的存儲(chǔ)器(例如經(jīng)DMA(直接存儲(chǔ)器訪問(wèn)))中。如下所述,輸入序列發(fā)生器116可以以對(duì)應(yīng)于網(wǎng)絡(luò)連接的速度的速率被同步。
如上所述,系統(tǒng)106存儲(chǔ)對(duì)應(yīng)不同網(wǎng)絡(luò)連接的上下文數(shù)據(jù)112。為了快速地從存儲(chǔ)器112檢索對(duì)應(yīng)指定分組的上下文數(shù)據(jù),所述的系統(tǒng)106包括內(nèi)容可尋址存儲(chǔ)器114(CAM),用于存儲(chǔ)對(duì)應(yīng)例如按分組的IP源和目的地地址以及源和目的地端口所標(biāo)識(shí)的不同連接的不同連接標(biāo)識(shí)符(例如索引號(hào))。CAM能以比數(shù)據(jù)庫(kù)根據(jù)關(guān)鍵字檢索記錄更快的方式根據(jù)內(nèi)容值來(lái)快速檢索所存儲(chǔ)的數(shù)據(jù)。因此,根據(jù)由輸入序列發(fā)生器116解析的分組數(shù)據(jù),CAM114能快速檢索連接標(biāo)識(shí)符并將這一標(biāo)識(shí)符饋送到上下文數(shù)據(jù)存儲(chǔ)器112。接著,將對(duì)應(yīng)于該標(biāo)識(shí)符的連接上下文數(shù)據(jù)從存儲(chǔ)器112傳送到工作寄存器118,以供處理器122使用。
在分組表示新連接開(kāi)始(例如CAM114搜索連接失敗)的情況下,初始化工作寄存器118(例如,在TCP中設(shè)置成“偵聽(tīng)”態(tài)),以及例如使用LRU(最近最少使用)算法或其他分配方案,為該連接分配CAM114和上下文數(shù)據(jù)112條目。
可以選擇連接系統(tǒng)106的不同部件的數(shù)據(jù)線的數(shù)量,以允許在單個(gè)時(shí)鐘周期中在所連接的部件112-128之間傳送數(shù)據(jù)。例如,如果對(duì)應(yīng)連接的上下文數(shù)據(jù)包括n位數(shù)據(jù),則可將系統(tǒng)106設(shè)計(jì)成連接數(shù)據(jù)存儲(chǔ)器112可以向工作寄存器118提供n條數(shù)據(jù)線。
因此,所示的實(shí)施例至多使用三個(gè)處理周期來(lái)通過(guò)連接數(shù)據(jù)加載工作寄存器118一個(gè)周期用來(lái)查詢CAM114;一個(gè)周期用來(lái)訪問(wèn)連接數(shù)據(jù)112;以及一個(gè)周期用來(lái)加載該工作寄存器118。這一設(shè)計(jì)不僅能節(jié)約處理時(shí)間而且能節(jié)約在訪問(wèn)存儲(chǔ)器結(jié)構(gòu)112、114上的功耗。
在為分組檢索連接數(shù)據(jù)后,系統(tǒng)106能通過(guò)如下方式來(lái)為該分組執(zhí)行協(xié)議操作,所述方式例如是處理器122執(zhí)行在存儲(chǔ)器126中存儲(chǔ)的協(xié)議實(shí)現(xiàn)指令。當(dāng)不使用時(shí),為了節(jié)省功率,可以將處理器122編程為“空閑”。在接收(例如,當(dāng)檢索到或正檢索連接上下文時(shí)來(lái)自輸入序列發(fā)生器116的)“喚醒”信號(hào)之后,處理器112可以確定當(dāng)前連接的狀態(tài),并標(biāo)識(shí)指令的起始地址以便處理這一狀態(tài)。然后,處理器122執(zhí)行以該起始地址開(kāi)始的指令。根據(jù)這些指令,處理器122能夠(例如,通過(guò)修改工作寄存器118)修改上下文數(shù)據(jù),將消息裝配到發(fā)送緩沖器128中,以便后續(xù)地進(jìn)行網(wǎng)絡(luò)傳輸,和/或可使已經(jīng)處理過(guò)的分組數(shù)據(jù)可用于主機(jī)(未示出)。再次,上下文數(shù)據(jù),潛在地由處理器122加以修改,被返回到上下文數(shù)據(jù)存儲(chǔ)器112中。
圖3更詳細(xì)地描述處理器122。如所示,處理器122可以包括ALU(算術(shù)邏輯單元)132,用于譯碼和執(zhí)行已被加載到指令寄存器134中的微代碼指令。指令126可以被從存儲(chǔ)器126以順序連續(xù)性的方式加載136到指令寄存器134中,除了轉(zhuǎn)移指令和開(kāi)始地址初始化以外。指令126可以指定對(duì)存儲(chǔ)所解析的分組數(shù)據(jù)的接收緩沖器130、工作寄存器118、發(fā)送緩沖器128和/或主存儲(chǔ)器(未示出)的訪問(wèn)(例如讀或?qū)懺L問(wèn))。這些指令也可以指定對(duì)暫時(shí)存儲(chǔ)器、混雜寄存器(例如寄存器dubbed R0、cond、statusok)、移位寄存器等等(未示出)的訪問(wèn)。為方便編程,可對(duì)發(fā)送緩沖器128和工作寄存器118的不同字段分配供指令使用的標(biāo)記。另外,例如可以為不同連接狀態(tài)定義各種常數(shù)。例如,“加載TCB[狀態(tài)]、偵聽(tīng)”指示處理器122將工作寄存器118中的連接上下文狀態(tài)的狀態(tài)改變成“偵聽(tīng)”狀態(tài)。
圖4描述可被用來(lái)編程處理器以執(zhí)行協(xié)議操作的微代碼指令集的例子。如所示,指令集包括如下操作在系統(tǒng)內(nèi)移動(dòng)數(shù)據(jù)(例如,LOAD和MOV)、執(zhí)行算術(shù)和布爾運(yùn)算(例如AND、OR、NOT、ADD、SUB)、比較數(shù)據(jù)(例如CMP和EQUAL)、操縱數(shù)據(jù)(例如SHL(向左移位)以及提供在程序內(nèi)的轉(zhuǎn)移(例如BREQZ(如果在前操作的結(jié)果等于0,則條件性轉(zhuǎn)移)、BRNEQZ(如果在前操作的結(jié)果不等于0,則條件性轉(zhuǎn)移)以及JMP(無(wú)條件跳轉(zhuǎn)))。
指令集還包括特別適合于用在通過(guò)系統(tǒng)106資源實(shí)現(xiàn)協(xié)議操作的操作。這些指令包括用于清除CAM114用于連接的條目(例如,CAM1CLR)和用于將上下文數(shù)據(jù)保存到上下文數(shù)據(jù)存儲(chǔ)器112中(例如TCBWR)的操作。其他實(shí)現(xiàn)也可以包括讀取并將標(biāo)識(shí)符信息寫到存儲(chǔ)與連接相關(guān)聯(lián)的數(shù)據(jù)的CAM114中的指令(例如,CAM1READ key-->index和CAM1WRITE key->index)和讀取上下文數(shù)據(jù)112的指令(例如,TCBRD index-->destination)。另外,這些指令可實(shí)現(xiàn)為硬布線邏輯。
盡管可能缺少由傳統(tǒng)的通用CPU提供的許多指令(例如處理器122可以不具有用于浮點(diǎn)運(yùn)算的指令的特征),但是該指令集為開(kāi)發(fā)者提供了便于訪問(wèn)適合于網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)的系統(tǒng)106資源。程序員可以使用微代碼指令來(lái)直接編程協(xié)議操作。另外,程序員可使用各種代碼開(kāi)發(fā)工具(例如編譯器或匯編器)。
如上所述,系統(tǒng)106指令能實(shí)現(xiàn)用于各種網(wǎng)絡(luò)協(xié)議的操作。例如,系統(tǒng)106可以實(shí)現(xiàn)用于傳輸層協(xié)議諸如TCP的操作。能在RFC(征求意見(jiàn)文件)793、1122和1323中找到TCP和可選擴(kuò)展的完整說(shuō)明。
簡(jiǎn)單地說(shuō),TCP向應(yīng)用提供面向連接的服務(wù)。即,非常像收聽(tīng)電話和假定電話公司將使一切工作一樣,TCP為應(yīng)用提供用于建立連接(例如CONNECT和CLOSE)和傳送數(shù)據(jù)(例如,SEND和RECEIVE)的簡(jiǎn)單的原語(yǔ)。TCP透明地處理諸如數(shù)據(jù)重傳、擁塞和流量控制的通信問(wèn)題。
為向應(yīng)用程序提供這些服務(wù),TCP對(duì)稱為段的分組進(jìn)行操作。TCP段包括了跟隨著一個(gè)或多個(gè)數(shù)據(jù)字節(jié)的TCP首部。接收器能從所接收的段重新裝配數(shù)據(jù)。如果段完全可以到達(dá)的話,則段可能不以它們的正確次序到達(dá)它們的目的地。例如,不同段可以穿過(guò)網(wǎng)絡(luò)上的非常不同的路徑。因此,TCP為傳送的每個(gè)數(shù)據(jù)字節(jié)分配序號(hào)。由于對(duì)每個(gè)字節(jié)排序,所以能確認(rèn)每個(gè)字節(jié)以便肯定成功傳送。確認(rèn)機(jī)制是累積的,從而使得特定序號(hào)的確認(rèn)表示已經(jīng)成功地遞送達(dá)到那個(gè)序號(hào)的字節(jié)。
排序方案為TCP提供用于管理連接的強(qiáng)大的工具。例如,TCP能使用稱為“滑動(dòng)窗口”的技術(shù)來(lái)確定發(fā)送器應(yīng)當(dāng)何時(shí)重傳一個(gè)段。在“滑動(dòng)窗口”方案中,發(fā)送器在傳送一個(gè)段后啟動(dòng)定時(shí)器。在接收后,接收器向回發(fā)送具有等于接收器期望接收的下一序號(hào)的確認(rèn)號(hào)的確認(rèn)段。如果在所傳送的字節(jié)的確認(rèn)到達(dá)之前,發(fā)送器的定時(shí)器時(shí)間已到,則發(fā)送器再次發(fā)送該段。定序方案也使發(fā)送器和接收器能夠根據(jù)網(wǎng)絡(luò)性能和發(fā)送器和接收器的容量,動(dòng)態(tài)地協(xié)商用于調(diào)整發(fā)送給接收器的數(shù)據(jù)量的窗口大小。
除排序信息外,TCP首部還包括使發(fā)送器和接收器能夠控制一個(gè)連接的標(biāo)志的集合。這些標(biāo)志包括SYN(同步)位、ACK(確認(rèn))位、FIN(完成)位、RST(復(fù)位)位。包括SYN位“1”和SCK位“0”的消息(SYN消息)表示連接請(qǐng)求。包括SYN位“1”和ACK位“1”的應(yīng)答消息(SYN+ACK消息)表示接受請(qǐng)求。包括FIN位“1”的消息表示發(fā)送器試圖釋放該連接。最后,具有RST位“1”的消息表示由于出現(xiàn)問(wèn)題(例如無(wú)效段或連接請(qǐng)求拒絕),而應(yīng)當(dāng)終止連接。
圖5描述表示在建立和斷開(kāi)TCP連接中的不同狀態(tài)的狀態(tài)圖。該圖描述不同狀態(tài)140和160和這些狀態(tài)140-160間的變遷(用箭頭線表示)。用標(biāo)識(shí)移動(dòng)到后續(xù)狀態(tài)140-160所需的事件和動(dòng)作的相應(yīng)的事件/動(dòng)作的標(biāo)示來(lái)標(biāo)記這些變遷。例如,在接收SYN消息和用SYN+ACK消息應(yīng)答后,連接從偵聽(tīng)狀態(tài)142變遷到SYN RCVD狀態(tài)144。
在圖5的狀態(tài)圖中,用實(shí)線變遷表示用于發(fā)送器(請(qǐng)求連接的TCP實(shí)體)的典型路徑,而用虛線變遷表示用于接收器的典型路徑。為示例說(shuō)明狀態(tài)機(jī)的操作,接收器通常以表示目前沒(méi)有活動(dòng)或掛起的連接的已關(guān)閉狀態(tài)140開(kāi)始。在移向偵聽(tīng)142狀態(tài)以等待連接請(qǐng)求后,接收器將接收請(qǐng)求連接的SYN消息和將用SYN+ACK消息確認(rèn)SYN消息并進(jìn)入SYN RCVD狀態(tài)144。在接收SYN+ACK消息的確認(rèn)后,連接進(jìn)入對(duì)應(yīng)于正常進(jìn)行中的數(shù)據(jù)傳送的已建立狀態(tài)148。已建立狀態(tài)148將持續(xù)一些時(shí)間。最后,假定沒(méi)有復(fù)位消息到達(dá)和沒(méi)有錯(cuò)誤發(fā)生,則服務(wù)器將接收和確認(rèn)FIN消息并進(jìn)入關(guān)閉等待狀態(tài)150。在發(fā)出它自己的FIN和進(jìn)入最后的確認(rèn)狀態(tài)160后,服務(wù)器將接收它的FIN的確認(rèn)和最后返回到最初的已關(guān)閉140狀態(tài)。
而且,狀態(tài)圖還管理TCP發(fā)送器的狀態(tài)。發(fā)送器和接收器路徑共享許多如上所述的相同的狀態(tài)。然而,發(fā)送器在請(qǐng)求連接后,還可以進(jìn)入SYN發(fā)出狀態(tài)146,在請(qǐng)求釋放連接后,進(jìn)入FIN等待1狀態(tài)152,在接收來(lái)自接收器的用于釋放連接的許可后,進(jìn)入FIN WAIT2狀態(tài)156,在發(fā)送器和接收器同時(shí)請(qǐng)求釋放時(shí)進(jìn)入關(guān)閉中狀態(tài)154以及在先前發(fā)送的連接段到期時(shí)進(jìn)入定時(shí)等待狀態(tài)158。
系統(tǒng)106的協(xié)議指令可以實(shí)現(xiàn)如上所述和RFC中的許多TCP操作,即使不是全部。例如,指令可包括用于選擇處理、窗口管理、流量控制、擁塞控制、ACK消息生成和驗(yàn)證、數(shù)據(jù)分段、專用標(biāo)志處理(例如設(shè)置和讀取URGENT和PUSH標(biāo)志)、校驗(yàn)和計(jì)算等等的過(guò)程。協(xié)議指令也可以包括與TCP有關(guān)的其他操作,諸如安全性支持、隨機(jī)數(shù)生成、TCP上的RDMA(遠(yuǎn)程直接存儲(chǔ)器訪問(wèn))等等。
在配置成提供TCP操作的系統(tǒng)106中,上下文數(shù)據(jù)可以包括每個(gè)連接的264位信息,包括對(duì)于如下的各項(xiàng)均是32位,用于PUSH(由微代碼標(biāo)記“TCB[pushseq]”標(biāo)識(shí))、FIN(“TCB[finseq]”)和URGENT(“TCB[rupseq]”)序號(hào)、下一期望的段號(hào)(“TCB[rnext]”)、用于當(dāng)前通知窗口(“TCB[cwin]”)的序號(hào)、最后一個(gè)未確認(rèn)的序號(hào)(“TCB[suna]”)的序號(hào),以及用于將作為下一個(gè)的下一段(“TCB[snext]”)的序號(hào)。其余位存儲(chǔ)各種TCB狀態(tài)標(biāo)志(“TCB[flags]”)、TCP段代碼(“TCB[code]”)、狀態(tài)(“TCB[tcbstate]”)和錯(cuò)誤標(biāo)記(“TCB[error]”)。
為示例說(shuō)明用于配置成執(zhí)行TCP操作的系統(tǒng)106的編程,代碼段A公開(kāi)了用于TCP接收器的源微代碼的例子。
代碼段A
<pre listing-type="program-listing"><![CDATA[ ENDTCBWR index IDLEJMP IDLE LBLLISTENSUB rcv[len],HEADERLEN-->seglen AND rcv[code],RST-->cond BRNEQZ IDLE AND rcv[code],ACK-->cond BRNEQZ TCPRST AND rcv[code],SYN-->cond BRNEQZ TCPINITWIN JMP TCPRST LBLLISTEN1LOAD wkreg[state]<--SYNRCVD JMP END LBLSYNRCVDJMP TCPSEQOK LBLSYNRCVD1AND rcv[code],ACK-->cond BREQZ IDLE CMP wkreg[suna],rcv[ack]-->cond BRNEQZ TCPRST CMP rcv[ack],wkreg[snext]-->cond BRNEQZ TCPRST ADD wkreg[suna],1-->wkreg[suna] JMP TCPDATAPROC LBLSYNRCVD4AND wkreg[flags],RDONE-->R0 EQUAL R0,0-->cond BRNEQZ LBLSYNRCVD5 LOAD wkreg[state]<--CLOSEWAIT JMP END LBLSYNRCVD5LOAD wkreg[state]<--ESTABLISHED JMP END LBLESTABLISHEDJMP TCPSEQOK LBLESTABLISHED4CMP wkreg[rbcount],75RBSIZE-->cond BREQZ LBLESTABLISHED5 LOAD wkreg[rbcount]<--0 LBLESTABLISHED5AND wkreg[flags],RDONE-->R0 EQUAL R0,0-->cond BRNEQZ END LOAD wkreg[state]<--CLOSEWAIT JMP END LBLCLOSEWAITJMP TCPSEQOK LBLLASTACKJMP TCPSEQOK LBLLASTACK2AND rcv[code],ACK-->con BREQZ END CMP wkreg[suna],rcv[ack]-->condBRNEQZ END CMP rcv[ack],wkreg[snext]-->cond BRNEQZ END JMP TCBDEALLOCATE TCPRSTLOAD snd[window]<--0 AND rcv[code],SYN-->cond BREQZ LBL02 ADD seglen,1-->seglen LBL02AND rcv[code],F(xiàn)IN-->cond BREQZ LBL03 ADD seglen,1-->seglen LBL03AND rcv[code],ACK-->cond BRNEQZ LBL00 LOAD snd[seq]<--0 LOAD snd[code]<--RST|ACK JMP LBL01 LBL00MOV rcv[ack]-->snd[seq] LOAD snd[code]<--RST LBL01ADD rcv[seq],seglen-->snd[ack] EQUAL wkreg[state],LISTEN-->cond BRNEQZ IDLE EQUAL wkreg[state],SYNRCVD-->cond BREQZ TCBDEALLOCATE AND rcv[code],SYN-->cond BRNEQZ TCBDEALLOCATE JMP IDLE TCBDEALLOCATECAM1CLR index JMP IDLE TCPINITWINLOAD wkreg[code]<--SYN MOV rcv[window]-->wkreg[swindow] MOV rcv[seq]-->wkreg[lwseq] MOV rcv[seq]-->wkreg[rnext] ADD rcv[seq],RBSIZE-->wkreg[cwin] JMP TCPDATAPROC TCPSENDWINCMP wkreg[lwseq],rcv[seq]-->cond BRNEQZ LBL11 EQUAL rcv[seq],wkreg[lwseq]-->cond BREQZ LBL10 CMP wkreg[lwack],rcv[ack]-->cond BRNEQZ LBL11 LBL10MOV rcv[window]-->wkreg[swindow] MOV rcv[seq]-->wkreg[lwseq] MOV rcv[ack]-->wkreg[lwack] LBL11EQUAL wkreg[state],ESTABLISHED-->cond BRNEQZ LBLESTABLISHED4 OR wkreg[flags],SNDFIN-->wkreg[flags]JMP TCPACK TCPSEQOKLOAD statusok<--0 SUB rcv[len],HEADERLEN-->seglen AND rcv[code],SYN-->cond BREQZ LBL20 ADD seglen,1-->seglen LBL20AND rcv[code],F(xiàn)IN-->cond BREQZ LBL21 ADD seglen,1-->seglen LBL21SUB RBSIZE,wkreg[rbcount]-->rwindow EQUAL rwindow,0-->cond BREQZ LBL22 EQUAL seglen,0-->cond BREQZ LBL22 EQUAL wkreg[rnext],rcv[seq]-->cond BREQZ LBL25 LOAD statusok<--1 JMP LBL25 LBL22EQUAL rwindow,0-->cond BRNEQZ LBL25 ADD wkreg[rnext],rwindow-->seqwin ADD rcv[seq],seglen-->seqlast EQUAL seglen,0-->cond BRNEQZ LBL23 CMP seqlast,wkreg[rnext]-->cond MOV cond-->statusok CMP seqlast,seqwin-->cond NOT cond-->cond AND cond,statusok-->statusok LBL23CMP wkreg[rnext],rcv[seq]-->cond BRNEQZ LBL25 CMP seqwin,rcv[seq]-->cond OR statusok,cond-->statusok LBL25AND rcv[code],SYN-->cond BREQZ LBL26 SUB seglen,1-->seglen LBL26AND rcv[code],F(xiàn)IN-->cond BREQZ LBL27 SUB seglen,1-->seglen LBL27EQUAL statusok,0-->cond BRNEQZ TCPACKOUT AND rcv[code],RST-->cond BRNEQZ TCBDEALLOCATE AND rcv[code],SYN-->cond BRNEQZ TCPRST EQUAL wkreg[state],SYNRCVD-->condBRNEQZ LBLSYNRCVD1 JMP TCPACKIN TCPACKOUTCMP seglen,0-->cond BRNEQZ LBL30 AND rcv[code],SYN|FIN-->cond BREQZ IDLE LBL30LOAD snd[code]<--ACK MOV wkreg[snext]-->snd[seq] MOV wkreg[rnext]-->snd[ack] SUB RBSIZE,wkreg[rbcount]-->rwindow CMP wkreg[state],SYNRCVD-->cond BREQZ LBL35 SHL2 rwindow-->R0 CMP RBSIZE,R0-->cond BRNEQZ LBL32 CMP RMSS,rwindow-->cond BREQZ LBL33 LBL32LOAD rwindow<--0 LBL33CMP wkreg[cwin],wkreg[rnext]-->cond BREQZ LBL34 SUB wkreg[cwin],wkreg[rnext]-->R0 CMP rwindow,R0-->cond BRNEQZ LBL34 MOV R0-->rwindow LBL34ADD wkreg[rnext],rwindow-->wkreg[cwin] LBL35MOV rwindow-->snd[window] JMP END TCPACKAND wkreg[flags],SNDFIN-->R0 EQUAL R0,0-->cond BRNEQZ LBL60 OR wkreg[code],F(xiàn)IN-->wkreg[code] LBL60OR wkreg[code],ACK-->snd[code] AND wkreg[flags],~NEEDOUT-->wkreg[flags] MOV wkreg[snext]-->snd[seq] AND wkreg[code],SYN|FIN-->cond BREQZ LBL61 ADD wkreg[snext],1-->wkreg[snext] LBL61MOV wkreg[rnext]-->snd[ack] SUB RBSIZE,wkreg[rbcount]-->rwindow CMP wkreg[state],SYNRCVD-->cond BREQZ LBL65 SHL2 rwindow-->R0 CMP RBSIZE,R0-->cond BRNEQZ LBL62 CMP RMSS,rwindow-->cond BREQZ LBL63LBL62LOAD rwindow<--0 LBL63SUB wkreg[cwin],wkreg[rnext]-->R0 CMP rwindow,R0-->cond BRNEQZ LBL64 MOV R0-->rwindow LBL64ADD wkreg[rnext],rwindow-->wkreg[cwin] LBL65MOV rwindow-->snd[window] AND wkreg[code],0-->wkreg[code] EQUAL wkreg[state],LISTEN-->cond BRNEQZ LBLLISTEN1 EQUAL wkreg[state],SYNRCVD-->cond BRNEQZ LBLSYNRCVD4 EQUAL wkreg[state],ESTABLISHED-->cond BRNEQZ TCPSENDWIN EQUAL wkreg[state],CLOSEWAIT-->cond BREQZ END LOAD wkreg[state]<--LASTACK JMP END TCPACKINAND rcv[code],ACK-->cond BREQZ LBL41 CMP rcv[ack],wkreg[suna]-->cond BREQZ IDLE CMP rcv[ack],wkreg[snext]-->cond BRNEQZ TCPACKOUT MOV rcv[ack]-->wkreg[suna] AND wkreg[code],SYN-->cond BREQZ LBL40 AND wkreg[code],~SYN-->wkreg[code] AND wkreg[flags],~FIRSTSEND-->wkreg[flags] LBL40AND wkreg[code],F(xiàn)IN-->cond BREQZ LBL41 EQUAL wkreg[snext],rcv[ack]-->cond BREQZ LBL41 AND wkreg[code],~FIN-->wkreg[code] AND wkreg[flags],~SNDFIN-->wkreg[flags] LBL41EQUAL wkreg[state],CLOSEWAIT-->cond BRNEQZ TCPSENDWIN EQUAL wkreg[state],ESTABLISHED-->cond BRNEQZ TCPDATAPROC EQUAL wkreg[state],LASTACK-->cond BRNEQZ LBLLASTACK2 JMP END TCPDATAPROCMOV rcv[code]-->statusok MOV rcv[seq]-->seqfirst AND statusok,URG-->cond BREQZ LBL51ADD seqfirst,rcv[urgptr]-->R0 AND wkreg[flags],RUPOK-->rwindow EQUAL rwindow,0-->cond BRNEQZ LBL50 CMP R0,wkreg[rupseq]-->cond BREQZ LBL51 LBL50MOV R0-->wkreg[rupseq] OR wkreg[flags],RUPOK-->wkreg[flags] LBL51AND statusok,SYN-->cond BREQZ LBL52 ADD wkreg[rnext],1-->wkreg[rnext] OR wkreg[flags],NEEDOUT-->wkreg[flags] ADD seqfirst,1-->seqfirst LBL52SUB RBSIZE,wkreg[rbcount]-->rwindow ADD wkreg[rnext],rwindow-->seqwin ADD seqfirst,seglen-->seqlast CMP wkreg[rnext],seqfirst-->cond BREQZ LBL53 SUB wkreg[fnext],seqfirst-->R0 SUB seglen,R0-->seglen MOV wkreg[rnext]-->seqfirst LBL53CMP seqlast,seqwin-->cond BREQZ LBL54 SUB seqlast,seqwin-->R0 SUB seglen,R0-->seglen AND statusok,~FIN-->statusok LBL54EQUAL seqfirst,wkreg[rnext]-->cond BREQZ LBL55 CMP seglen,0-->cond BREQZ LBL56 ADD wkreg[rnext],seglen-->wkreg[rnext] ADD wkreg[rbcount],seglen-->wkreg[rbcount] LBL512CAM2EMPTY cond BRNEQZ LBL511 CAM2LLKUP seqlast BREQZ LBL511 CAM2CLR[cam2_idx] ADD wkreg[rnext],seglen-->wkreg[rnext] ADD wkreg[rbcount],seglen-->wkreg[rbcount] LBL511EQUAL wkreg[finseq],wkreg[rnext]-->cond BRNEQZ ALLDONE CMP wkreg[pushseq],wkreg[rnext]-->cond BRNEQZ NEXT OR statusok,PSH-->statusok LOAD wkreg[pushseq]<--0 JMP NEXTALLDONEOR statusok,F(xiàn)IN-->statusok NEXTOR wkreg[flags],NEEDOUT-->wkreg[flags] LBL56AND statusok,F(xiàn)IN-->cond BREQZ LBL58 OR wkreg[flags],RDONE|NEEDOUT-->wkreg[flags] ADD wkreg[rnext],1-->wkreg[rnext] LBL58AND statusok,PSH|URG-->cond BREQZ NEXTP1 OR wkreg[flags],PUSH-->wkreg[flags] JMP NEXTP1 LBL55AND statusok,F(xiàn)IN-->cond BREQZ LBL59 ADD seqfirst,seglen-->wkreg[finseq] LBL59AND statusok,PSH|URG-->cond BREQZ LBL510 ADD seqfirst,seglen-->wkreg[pushseq] LBL510AND statusok,~(FIN|PSH)-->statusok CAM2LLKUP seqlast BREQZ LBL515 CAM2CLR[cam2_idx] ADD seqlast,seglen-->seqlast SUB seqlast,seqfirst-->seglen LBL515CAM2RLKUP seqfirst BREQZ LBL516 CAM2CLR[cam2_idx] SUB seqfirst,seglen-->seqfirst SUB seqlast,seqfirst-->seglen LBL516CAM2WR seglen OR wkreg[flags],NEEDOUT-->wkreg[flags] NEXTP1AND wkreg[flags],NEEDOUT-->R0 EQUAL R0,0-->cond BREQZ TCPACK EQUAL wkreg[state],LISTEN-->cond BRNEQZ LBLLISTEN1 EQUAL wkreg[state],SYNRCVD-->cond BRNEQZ LBLSYNRCVD4 EQUAL wkreg[state],ESTABLISHED-->cond BRNEQZ TCPSENDWIN JMP END]]></pre>簡(jiǎn)單地說(shuō),例程TCPRST檢查TCP ACK位,初始化發(fā)送緩沖器,并初始化發(fā)送消息的ACK號(hào)。例程TCPACKIN處理輸入的ACK消息并檢查ACK是無(wú)效還是復(fù)本。TCPACKOUT響應(yīng)一個(gè)輸入消息,根據(jù)所接收和所期望的序號(hào),生成ACK消息。TCPSEQ確定輸入數(shù)據(jù)的第一和最后一個(gè)序號(hào),計(jì)算輸入數(shù)據(jù)的大小并檢查輸入序號(hào)是否有效以及是否處于接收窗口中。TCPINITCB初始化在工作寄存器中的TCB字段。TCPINITWIN用窗口信息初始化工作寄存器。TCPSENDWIN計(jì)算要包括在發(fā)送消息中的窗口長(zhǎng)度。最后,TCBDATAPROC檢查輸入標(biāo)記,處理“UGENT”、“PUSH”和“FINISH”標(biāo)志,響應(yīng)消息設(shè)置標(biāo)志以及將數(shù)據(jù)轉(zhuǎn)發(fā)給應(yīng)用或用戶。
由系統(tǒng)106執(zhí)行的另一操作可以是分組重定序。例如,與許多網(wǎng)絡(luò)協(xié)議一樣,TCP假定TCP分組(“段”)將不按照次序到達(dá)。為正確地重組分組,一個(gè)接收器能跟蹤所接收的最后一個(gè)序號(hào)并等待接收被指定給下一序號(hào)的字節(jié)。能夠緩沖亂序到達(dá)的分組,直到干預(yù)字節(jié)到達(dá)為止。只要所等待的字節(jié)到達(dá),就能夠從緩沖的數(shù)據(jù)快速檢索出序列中的接著的字節(jié)。
圖6-10示例說(shuō)明能夠由系統(tǒng)106實(shí)現(xiàn)的跟蹤亂序分組的方案的操作。該方案允許分組的快速“實(shí)時(shí)”定序,而不采用傳統(tǒng)的排序算法。該方案可以使用另一組內(nèi)容可尋址存儲(chǔ)器510、512來(lái)實(shí)現(xiàn),不過(guò)這是不要求的。因此,使用這一技術(shù)的系統(tǒng)106可以包括兩個(gè)不同組的內(nèi)容可尋址存儲(chǔ)器—用來(lái)檢索連接上下文數(shù)據(jù)的內(nèi)容可尋址存儲(chǔ)器114和用來(lái)跟蹤亂序分組的內(nèi)容可尋址存儲(chǔ)器。
為了說(shuō)明的目的,在實(shí)現(xiàn)TCP的情況下討論圖6-10。然而,該方案可廣泛地適合于各種分組重定序方案,諸如編號(hào)的分組(例如協(xié)議數(shù)據(jù)單位段)。因此,雖然下述的說(shuō)明討論TCP序號(hào)的存儲(chǔ),但是用于編號(hào)的分組的實(shí)施例也能替代地存儲(chǔ)分組號(hào)。
簡(jiǎn)單地說(shuō),當(dāng)分組到達(dá)時(shí),分組跟蹤子系統(tǒng)確定所接收的分組是否是按次序的。如果不是,子系統(tǒng)參考存儲(chǔ)器來(lái)標(biāo)識(shí)以最新到達(dá)的分組為邊界的先前接收的亂序分組的鄰近組,并能修改在存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù),以便將該分組添加到所述組中。當(dāng)分組按序到達(dá)時(shí),子系統(tǒng)能夠訪問(wèn)存儲(chǔ)器以便快速地標(biāo)識(shí)在最新接收的分組后的在前接收的分組的一個(gè)鄰近鏈。
更詳細(xì)地說(shuō),如圖6所示,協(xié)議504(例如TCP)將一組數(shù)據(jù)502劃分成用于在網(wǎng)絡(luò)508上傳輸?shù)姆纸M506a-506d的集合。在所示的例子中,15字節(jié)的原始數(shù)據(jù)組502分布在分組506a-506d上。例如,分組506d包括指定序號(hào)“1”至“3”的字節(jié)。
如所示,跟蹤子系統(tǒng)500包括存儲(chǔ)有關(guān)所接收的亂序分組的信息的內(nèi)容可尋址存儲(chǔ)器510、512。存儲(chǔ)器510存儲(chǔ)一個(gè)或多個(gè)亂序分組的鄰近鏈的第一序號(hào)和該鏈的長(zhǎng)度。因此,當(dāng)新分組到達(dá)預(yù)先存在的鏈開(kāi)始的那個(gè)終點(diǎn)時(shí),能將該新分組添加到預(yù)先存在的鏈的頂部。類似地,存儲(chǔ)器512也存儲(chǔ)一個(gè)或多個(gè)分組的鄰近分組鏈的尾部(最后一個(gè)序號(hào)+1)和該鏈的長(zhǎng)度。因此,當(dāng)新分組到達(dá)在先前存在的鏈的尾部的那個(gè)起始點(diǎn)時(shí),將該新分組追加到先前存在的鏈的尾部,以形成更大的鄰近分組鏈。為示例說(shuō)明這些操作,圖7-10描述當(dāng)分組506a-506d到達(dá)時(shí)發(fā)生的一系列示例操作。
如圖7所示,分組506b攜帶具有序號(hào)“8”至“12”的字節(jié)到達(dá)。假定子系統(tǒng)500目前等待序號(hào)“1”,分組506b已經(jīng)亂序到達(dá)。因此,如所示,設(shè)備500通過(guò)修改在其內(nèi)容可尋址存儲(chǔ)器510、512中存儲(chǔ)的數(shù)據(jù)來(lái)跟蹤亂序分組506b。分組506b不以先前所接收的分組鏈作為邊界,因?yàn)樵谶@一例子中還沒(méi)有鏈存在。因此,子系統(tǒng)500存儲(chǔ)起始序號(hào)“8”,和分組中的字節(jié)數(shù)“4”。子系統(tǒng)500還存儲(chǔ)分組的尾部的標(biāo)識(shí)。在所示的例子中,設(shè)備500通過(guò)將所接收的分組的最后一個(gè)序號(hào)加1(例如,12+1=13)來(lái)存儲(chǔ)結(jié)尾邊界。除修改或添加內(nèi)容可尋址存儲(chǔ)器510、512中的條目外,設(shè)備500能存儲(chǔ)分組511b或分組511b的引用(例如指針)來(lái)反映分組的相對(duì)次序。這允許當(dāng)將分組最后發(fā)送給應(yīng)用時(shí),快速檢索分組。
如圖8所示,子系統(tǒng)500接著接收帶有字節(jié)“13”至“15”的分組506a。同樣,子系統(tǒng)500仍然等待序號(hào)“1”。因此,分組506a也是亂序到達(dá)。子系統(tǒng)500檢查存儲(chǔ)器510、512,以便確定所接收的分組506a是否鄰近任何在前存儲(chǔ)的分組鏈。在這種情況下,該新到達(dá)的分組506a不在先前鏈開(kāi)始的地方結(jié)尾,但卻開(kāi)始于先前鏈結(jié)尾的地方。換句話說(shuō),分組506a與分組506b的“底部”鄰近。如所示,設(shè)備500通過(guò)增加鏈的長(zhǎng)度和由此修改它的第一和最后一個(gè)序號(hào)數(shù)據(jù),將分組506a合并到內(nèi)容可尋址存儲(chǔ)器數(shù)據(jù)的先前存在的鏈中。因此,新鏈的第一序號(hào)仍然保持為“8”,不過(guò)長(zhǎng)度從“4”增加到“7”,而該鏈的尾部序號(hào)從“13”增加到“16”,以反映新接收的分組506a的字節(jié)。設(shè)備500還存儲(chǔ)新的分組511a,或該新分組的引用以反映該分組的相對(duì)次序。
如圖9所示,設(shè)備500接著接收帶有字節(jié)“4”至“7”的分組506c。由于這一分組506c不包括下一個(gè)所期望的序號(hào)“1”,所以設(shè)備500重復(fù)如上所述的過(guò)程。即,設(shè)備500確定新接收的分組506c在跨越分組506b、506a的分組鏈的“頂部”。因此,設(shè)備500修改存儲(chǔ)在內(nèi)容可尋址存儲(chǔ)器數(shù)據(jù)510、512中的數(shù)據(jù)以便包括用于該鏈的新起始序號(hào)“4”,以及用于該鏈的新長(zhǎng)度數(shù)據(jù)“11”。設(shè)備500再次存儲(chǔ)分組511c數(shù)據(jù)的引用來(lái)反映分組511c的相對(duì)次序。
如圖10所示,設(shè)備500最后接收包括下一所期望的序號(hào)“1”的分組506d。設(shè)備500能立即將這一分組506d傳送給應(yīng)用。設(shè)備500也能檢查它的內(nèi)容可尋址存儲(chǔ)器510,以查看是否還能將其他分組發(fā)送給應(yīng)用。在這種情況下,所接收的分組506d與已經(jīng)跨越分組506a-506c的分組鏈相鄰。因此,設(shè)備500能立即將鏈狀分組的數(shù)據(jù)以正確的次序轉(zhuǎn)發(fā)給應(yīng)用。
如圖7-10所示的示例序列突出該方案的幾個(gè)方面。第一,該方案能防止亂序分組被發(fā)送器丟下和重傳。這能提高整體吞吐量。該方案還使用非常少的內(nèi)容可尋址存儲(chǔ)器操作來(lái)處理亂序分組,節(jié)約時(shí)間和功率。另外,當(dāng)分組以正確次序到達(dá)時(shí),單個(gè)內(nèi)容可尋址存儲(chǔ)器操作能識(shí)別還能發(fā)送給應(yīng)用的一系列鄰近分組。
圖11描述用于實(shí)現(xiàn)如上所述的方案的過(guò)程520的流程圖。如所示,在接收522分組后,過(guò)程520確定524分組是否是按次序(例如,分組是否包括下一所期望的序號(hào))。如果不是,過(guò)程520確定532所接收的分組的尾部是否與現(xiàn)有的分組鏈的起始鄰近。如果是,過(guò)程52能修改534存儲(chǔ)在內(nèi)容可尋址存儲(chǔ)器中的數(shù)據(jù),以反映以所接收的分組開(kāi)始和以在前現(xiàn)有的分組鏈的尾部結(jié)束的更大的、合并的分組鏈。過(guò)程520還確定536所接收的分組的起始是否在現(xiàn)有的分組鏈的尾部。如果是,過(guò)程520能修改538存儲(chǔ)在內(nèi)容可尋址存儲(chǔ)器中的數(shù)據(jù)以反映以所接收的分組結(jié)束的更大的、合并的分組鏈。
潛在地,所接收的分組可以將預(yù)先存在的分組鏈的兩端作為邊界。換句話說(shuō),新接收的分組填充兩個(gè)之鏈間的空白處。由于過(guò)程520檢查所接收的分組的起始532和尾部536的邊界,新接收的分組可以使過(guò)程520將兩個(gè)不同的鏈結(jié)合在一起以形成單個(gè)整體鏈。
如所示,如果所接收的分組不與一個(gè)分組鏈相鄰,過(guò)程520將數(shù)據(jù)存儲(chǔ)540在至少初始地僅包括所接收的分組的新分組鏈的內(nèi)容可尋址存儲(chǔ)器中。
如果所接收的分組是按次序的,過(guò)程520能查詢526內(nèi)容可尋址存儲(chǔ)器以便識(shí)別在所接收的分組后的相鄰分組鏈。如果存在這樣的一個(gè)鏈,過(guò)程520能將新接收的分組連同鄰近的分組鏈中的其他分組數(shù)據(jù)輸出到應(yīng)用。
這一過(guò)程可以使用各種硬件、固件和/或軟件來(lái)實(shí)現(xiàn)。例如,圖12和13描述以上所述方案的硬件實(shí)現(xiàn)。如這些圖中所示,該實(shí)現(xiàn)具有兩個(gè)內(nèi)容可尋址存儲(chǔ)器560、562—一個(gè)560存儲(chǔ)亂序分組鏈的第一序號(hào)作為關(guān)鍵字以及另一個(gè)562存儲(chǔ)該鏈的最后一個(gè)+1序號(hào)作為關(guān)鍵字。如所示,CAM560、562還存儲(chǔ)鏈的長(zhǎng)度。
其他實(shí)施例可以使用單個(gè)CAM。同樣,其他實(shí)施例實(shí)現(xiàn)使用根據(jù)地址的存儲(chǔ)器或其他數(shù)據(jù)存儲(chǔ)器而不是內(nèi)容可尋址存儲(chǔ)器。
潛在地,能使用相同的CAM來(lái)跟蹤許多不同連接的分組。在這些情況下,可以將連接ID追加到每個(gè)CAM條目上作為關(guān)鍵字的一部分,以便區(qū)別不同連接的條目。將分組信息與CAM560、562中的鏈合并允許通過(guò)更小的CAM560、562處理更多的連接。
如圖12所示,該實(shí)施例包括存儲(chǔ)起始序號(hào)550、結(jié)尾序號(hào)552和數(shù)據(jù)長(zhǎng)度554的寄存器。如圖2所示的處理器122可以存儲(chǔ)這些寄存器550、552、554來(lái)與子系統(tǒng)500通信。例如,處理器122能將新接收的分組的數(shù)據(jù)加載到子系統(tǒng)500數(shù)據(jù)中。處理器122還可以請(qǐng)求下一所期望的序號(hào)以便包括在向回發(fā)送到發(fā)送器的確認(rèn)消息中。
如所示,該實(shí)現(xiàn)對(duì)控制信號(hào)進(jìn)行操作,以便從CAM560、562讀取(CAMREAD)、寫入CAM560、562(CAMWRITE)和清除CAM560、562條目(CAMCLR)。如圖12所示,可以將硬件配置成當(dāng)寄存器550、552、554被加載數(shù)據(jù)時(shí),同時(shí)將寄存器值寫到CAM560、562中。如圖13所示,對(duì)“命中”指定起始或結(jié)尾序號(hào),電路將“seglen”寄存器設(shè)置為匹配CAM條目的長(zhǎng)度。電路(未示出)也可以在成功的CAM560、562讀取操作后,設(shè)置“seqfirst”550和“seqlast”552寄存器的值。電路也可以提供標(biāo)識(shí)CAM560、562中的特定“命中”條目的“CamIndex”信號(hào)。
為實(shí)現(xiàn)如上所述的分組跟蹤方法,子系統(tǒng)500可以具有執(zhí)行實(shí)現(xiàn)該方案的指令的其自己的獨(dú)立控制器的特征或可能具有硬布線邏輯的特征。另外,處理器122(圖1)可以包括該方案的指令。潛在地,可擴(kuò)展處理器122的指令集(圖4)以包括訪問(wèn)子系統(tǒng)500 CAM560、562的命令。這些指令可以包括將數(shù)據(jù)寫入CAM560、562的指令(例如,用于CAM510的CAM2FirstWR key<--data和用于CAM562的CAM2LastWR key<--data);從CAM讀取數(shù)據(jù)的指令(例如,CAM2FirstRD key-->data和CAM2LastRD key-->data);清除CAM條目的指令(例如CAM2CLR key),和/或如果查找失敗,生成條件值的指令(例如CAM2EMPTY-->cond)。
參考圖14,潛在地,可以以相同的速度對(duì)接口108和處理110邏輯部件同步。時(shí)鐘信號(hào)基本決定了邏輯網(wǎng)絡(luò)將以多快操作。不幸地是,由于對(duì)指定分組可以執(zhí)行許多指令的事實(shí),為了以線速操作,系統(tǒng)106可以以遠(yuǎn)超過(guò)連接速率的非??斓乃俾时煌?。以單獨(dú)的非常快的時(shí)鐘運(yùn)行整個(gè)系統(tǒng)106不僅會(huì)浪費(fèi)大量功率而且會(huì)產(chǎn)生可以影響熱敏硅的行為的高溫。
相反,如圖14所示,可以以不同速度來(lái)同步接口108和處理110邏輯中的部件。例如,接口108部件可以對(duì)應(yīng)于網(wǎng)絡(luò)連接的速度的速率“1x”同步。由于可以編程處理邏輯110以便執(zhí)行多條指令來(lái)實(shí)現(xiàn)用于指定分組的適當(dāng)?shù)木W(wǎng)絡(luò)協(xié)議操作,所以可以以快于接口108的速率對(duì)處理邏輯110部件同步。例如,處理邏輯110中的部件可以接口108時(shí)鐘頻率的幾倍“k”同步,其中“k”足夠高以便為處理器122提供足夠的時(shí)間來(lái)完成執(zhí)行用于分組的指令而不會(huì)落后于線速。使用“雙時(shí)鐘”方法的系統(tǒng)106可以具有允許不同時(shí)鐘的部件來(lái)通信的稱為“同步器”(未示出)的設(shè)備的特征。
作為“雙時(shí)鐘”系統(tǒng)的例子,對(duì)具有16位寬的接口108數(shù)據(jù)系統(tǒng)106來(lái)說(shuō),為了實(shí)現(xiàn)每秒10千兆比特,應(yīng)當(dāng)以625MHz的頻率對(duì)接口108同步(例如[每個(gè)周期16位]×[每秒625,000,000周期]=每秒10,000,000,000位)。假定最小分組為64字節(jié)(例如,僅具有IP和TCP首部、幀校驗(yàn)序列以及硬件資源和目的地地址的分組),會(huì)花費(fèi)16位/625MHz接口108 32周期來(lái)接收分組位。潛在地,分組間的間隙在下一分組到達(dá)之前可以提供另外的時(shí)間。如果使用最大為n的一組指令來(lái)處理分組和每個(gè)周期可以執(zhí)行不同的指令,則可以以k·(625MHz)的頻率對(duì)處理塊110同步,其中k=n-指令數(shù)/32周期。為方便實(shí)現(xiàn),k的值可以四舍五入為整數(shù)值或2n值,不過(guò)這些中的任何一個(gè)均不是嚴(yán)格要求。
由于按更快的時(shí)鐘運(yùn)行的部件通常比以較慢的時(shí)鐘運(yùn)行的相同部件消耗更多的功率和產(chǎn)生更多的熱,所以根據(jù)它們的需要以不同速度同步不同部件108、110能允許系統(tǒng)106節(jié)省功率和保持較低溫。這不僅能降低系統(tǒng)106的功率需求并且能降低對(duì)昂貴的冷卻系統(tǒng)的需要。
能更進(jìn)一步降低功率消耗和熱生成。即,圖14中所述的系統(tǒng)106具有以由“最糟糕”情況下確定的不同的、固定速度同步的系統(tǒng)106邏輯部件的特征,以確保處理塊110跟上線速。同樣地,需要最快處理的最小分組充當(dāng)過(guò)對(duì)處理塊110時(shí)鐘速度的約束。然而,實(shí)際上,大多數(shù)分組,幾乎95%具有較大分組大小的特征,并為系統(tǒng)106提供更多的時(shí)間來(lái)在下一分組到達(dá)之前進(jìn)行處理。
因此,代替使系統(tǒng)106永久地適合處理困難的情況,圖15描述了一個(gè)系統(tǒng)106,該系統(tǒng)106能夠根據(jù)一個(gè)或多個(gè)分組特征動(dòng)態(tài)改變的頻率為處理邏輯110部件提供時(shí)鐘信號(hào)。例如,系統(tǒng)106可能使用標(biāo)識(shí)分組大小的數(shù)據(jù)(例如,IP數(shù)據(jù)報(bào)首部中的長(zhǎng)度字段)來(lái)縮放時(shí)鐘頻率。例如,對(duì)更大的分組,處理器122使用更多的時(shí)間來(lái)在下一分組到達(dá)之前處理分組,從而可以降低頻率而不會(huì)落后于線速。同樣地,對(duì)更小的分組,可增加頻率。當(dāng)處理較大分組時(shí),對(duì)不同的輸入分組“實(shí)時(shí)”適應(yīng)性地縮放時(shí)鐘頻率,能夠通過(guò)降低操作頻率來(lái)減小功率。反過(guò)來(lái),這會(huì)導(dǎo)致可以避免產(chǎn)生硅“熱點(diǎn)”和/或昂貴系統(tǒng)的冷卻系統(tǒng)的冷卻器運(yùn)行系統(tǒng)。
如圖15所示,縮放邏輯124接收分組數(shù)據(jù)并相應(yīng)地調(diào)整提供給處理邏輯110的頻率。盡管如上所述在分組大小上操作,但可使用各種其他的量度來(lái)調(diào)整頻率,諸如有效載荷大小、服務(wù)質(zhì)量(例如,更高的優(yōu)先級(jí)分組可以接收更高的頻率)、協(xié)議類型等等。另外,代替單個(gè)分組的特性,可使用總的特性來(lái)調(diào)整時(shí)鐘速率(例如,所接收的分組的平均大小)。為節(jié)約另外的功率,當(dāng)網(wǎng)絡(luò)空閑時(shí),可暫時(shí)禁止時(shí)鐘。
可用各種硬件和/或軟件方案來(lái)實(shí)現(xiàn)縮放邏輯124。例如,圖16描述使用除法器408a-408c來(lái)提供可用頻率(例如,32x、16x、8x和4x)范圍的硬件方案。將不同頻率信號(hào)饋送到多路復(fù)用器410,用于根據(jù)分組特征來(lái)選擇。例如,選擇器412可具有將分組大小與不同預(yù)先計(jì)算的閾值進(jìn)行比較的幅值比較器的特征。例如,比較器可以對(duì)達(dá)到大小64字節(jié)(32x)、64和88字節(jié)(16x)間、88和126字節(jié)(8x)間和126至236字節(jié)(4x)的分組使用不同的頻率。可以確定這些閾值,以便處理邏輯塊頻率滿足下述等式[(塊大小/數(shù)據(jù)寬度)/接口時(shí)鐘頻率]>=(接口時(shí)鐘周期/接口時(shí)鐘頻率)+(指令的最大數(shù)/處理時(shí)鐘頻率)。
盡管圖16示例說(shuō)明了四種不同同步信號(hào),但是其他實(shí)施例可具有n個(gè)同步信號(hào)。另外,所提供的不同頻率間的關(guān)系未必是如圖16所示的另一個(gè)的統(tǒng)一分?jǐn)?shù)。
能將結(jié)果時(shí)鐘信號(hào)發(fā)送到處理邏輯110內(nèi)的不同部件。然而,并非處理邏輯110和接口10塊內(nèi)的所有部件都需要以相同時(shí)鐘頻率運(yùn)行。例如,在圖2中,盡管輸入序列發(fā)生器接收“1x”時(shí)鐘信號(hào)和處理器122接收“kx”時(shí)鐘信號(hào),但是根據(jù)該實(shí)施例,連接數(shù)據(jù)存儲(chǔ)器112和CAM114可以接收“1x”或“kx”時(shí)鐘信號(hào)。
將縮放邏輯124物理地放在頻率源附近能降低功率消耗。另外,以全局時(shí)鐘分布點(diǎn)調(diào)整頻率不僅節(jié)約功率而且降低用于提供時(shí)鐘分布的邏輯需要。
另外,各種實(shí)施例可以使用如上所述的一種或多種技術(shù)。另外,系統(tǒng)106可以各種形式出現(xiàn)。例如,可以將系統(tǒng)106設(shè)計(jì)成單個(gè)芯片。潛在地,這種芯片可以包括在芯片組中或在母板上。另外,系統(tǒng)106可以被集成到部件中,諸如網(wǎng)絡(luò)適配器、NIC(網(wǎng)絡(luò)接口卡)或MAC(媒體訪問(wèn)設(shè)備)。潛在地,在此描述的技術(shù)可集成到微處理器中。
系統(tǒng)106也可以提供用于不止一種協(xié)議的操作。例如,系統(tǒng)106可以提供用于網(wǎng)絡(luò)和傳輸層協(xié)議的操作??墒褂孟到y(tǒng)106來(lái)執(zhí)行用于各種主機(jī),諸如存儲(chǔ)開(kāi)關(guān)和應(yīng)用服務(wù)器的網(wǎng)絡(luò)操作。
其他實(shí)施例在下述權(quán)利要求書(shū)的范圍內(nèi)。
權(quán)利要求
1.一種網(wǎng)絡(luò)協(xié)議卸載系統(tǒng),所述系統(tǒng)包括用于接收分組的至少一部分的接口,所述接口耦合到具有第一頻率的第一時(shí)鐘信號(hào)的源上;以及處理邏輯,用于處理所述接口為至少一個(gè)主機(jī)接收的所述分組的至少一部分,所述處理邏輯根據(jù)至少一種網(wǎng)絡(luò)協(xié)議執(zhí)行至少一個(gè)操作,所述處理邏輯的至少一個(gè)部件耦合到具有不同于所述第一頻率的第二頻率的第二時(shí)鐘信號(hào)的源上。
2.如權(quán)利要求1所述的系統(tǒng),其中,所述第二頻率包括比所述第一頻率更高的頻率。
3.如權(quán)利要求1所述的系統(tǒng),其中,所述網(wǎng)絡(luò)協(xié)議包括傳輸層協(xié)議和網(wǎng)絡(luò)層協(xié)議中的至少一種協(xié)議。
4.如權(quán)利要求1所述的系統(tǒng),其中,所述網(wǎng)絡(luò)協(xié)議包括TCP(傳輸控制協(xié)議)。
5.如權(quán)利要求4所述的系統(tǒng),其中,所述處理邏輯包括用于執(zhí)行下述操作中的至少一個(gè)操作的邏輯為不同連接維護(hù)TCP狀態(tài)機(jī),生成TCP ACK消息,和確定TCP窗口。
6.如權(quán)利要求1所述的系統(tǒng),進(jìn)一步包括至外圍部件接口(PCI)總線的接口,所述外圍部件接口(PCI)總線將系統(tǒng)連接到所述至少一個(gè)主機(jī)。
7.如權(quán)利要求1所述的系統(tǒng),其中,所述處理邏輯包括一處理器,并且其中,所述第二頻率包括根據(jù)所述處理器為一分組要執(zhí)行的指令的數(shù)目而選擇的頻率。
8.如權(quán)利要求1所述的系統(tǒng),其中,所述第二頻率根據(jù)一個(gè)或多個(gè)分組特征加以確定。
9.如權(quán)利要求8所述的系統(tǒng),其中,所述第二頻率根據(jù)分組大小加以確定。
10.如權(quán)利要求1所述的系統(tǒng),進(jìn)一步包括用于存儲(chǔ)對(duì)應(yīng)不同連接的標(biāo)識(shí)符的內(nèi)容可尋址存儲(chǔ)器。
11.如權(quán)利要求10所述的系統(tǒng),進(jìn)一步包括用于存儲(chǔ)連接上下文數(shù)據(jù)的存儲(chǔ)器,所述存儲(chǔ)器耦合到所述內(nèi)容可尋址存儲(chǔ)器上。
12.如權(quán)利要求1所述的系統(tǒng),其中,所述接口接收經(jīng)媒體訪問(wèn)控制(MAC)設(shè)備接收的分組數(shù)據(jù)。
13.如權(quán)利要求1所述的系統(tǒng),其中,所述處理邏輯包括算術(shù)邏輯單元和用于存儲(chǔ)由控制器執(zhí)行的指令的存儲(chǔ)器。
14.如權(quán)利要求13所述的系統(tǒng),其中,所述指令包括根據(jù)所述網(wǎng)絡(luò)協(xié)議處理所述分組的指令。
15.如權(quán)利要求13所述的系統(tǒng),其中,所述指令包括來(lái)自微代碼指令集的指令,所述微代碼指令集包括用于訪問(wèn)連接數(shù)據(jù)的至少一條指令。
16.如權(quán)利要求13所述的系統(tǒng),其中,所述指令包括來(lái)自微代碼指令集的指令,所述微代碼指令集包括指定內(nèi)容可尋址存儲(chǔ)器操作的至少一條指令。
17.如權(quán)利要求1所述的系統(tǒng),其中,所述第一頻率包括以每秒10千兆比特的速率處理接收數(shù)據(jù)的網(wǎng)絡(luò)連接而選擇的頻率。
18.如權(quán)利要求1所述的系統(tǒng),其中,所述處理邏輯進(jìn)一步包括至少一個(gè)內(nèi)容可尋址存儲(chǔ)器,以便跟蹤亂序接收的數(shù)據(jù)分組。
19.一種網(wǎng)絡(luò)協(xié)議卸載系統(tǒng),所述系統(tǒng)包括至少一個(gè)內(nèi)容可尋址存儲(chǔ)器的組,用于存儲(chǔ)與網(wǎng)絡(luò)連接相關(guān)聯(lián)的數(shù)據(jù);以及處理邏輯,用于根據(jù)由所述至少一個(gè)內(nèi)容可尋址存儲(chǔ)器的組標(biāo)識(shí)的連接上下文數(shù)據(jù)依照至少一種網(wǎng)絡(luò)協(xié)議來(lái)處理連接的分組。
20.如權(quán)利要求19所述的系統(tǒng),其中,所述連接上下文數(shù)據(jù)包括TCP(傳輸控制協(xié)議)連接的TCB(傳輸控制塊)。
21.如權(quán)利要求19所述的系統(tǒng),其中,所述內(nèi)容可尋址存儲(chǔ)器數(shù)據(jù)存儲(chǔ)連接上下文數(shù)據(jù)。
22.如權(quán)利要求19所述的系統(tǒng),其中,所述內(nèi)容可尋址存儲(chǔ)器數(shù)據(jù)存儲(chǔ)與不同的、各個(gè)連接相關(guān)聯(lián)的連接標(biāo)識(shí)符。
23.如權(quán)利要求22所述的系統(tǒng),進(jìn)一步包括與所述至少一個(gè)內(nèi)容可尋址存儲(chǔ)器的組相耦合的不同存儲(chǔ)器,所述不同存儲(chǔ)器用于存儲(chǔ)與所述不同連接標(biāo)識(shí)符相關(guān)聯(lián)的不同連接上下文數(shù)據(jù),
24.如權(quán)利要求19所述的系統(tǒng),其中,所述處理邏輯與所述至少一個(gè)內(nèi)容可尋址存儲(chǔ)器的組接收不同頻率的時(shí)鐘信號(hào)。
25.如權(quán)利要求24所述的系統(tǒng),其中,根據(jù)一個(gè)或多個(gè)分組特征,確定由所述處理邏輯接收的時(shí)鐘信號(hào)的頻率。
26.如權(quán)利要求19所述的系統(tǒng),其中,所述處理邏輯包括用于實(shí)現(xiàn)協(xié)議操作的指令和算術(shù)邏輯單元。
27.如權(quán)利要求19所述的系統(tǒng),其中,所述系統(tǒng)進(jìn)一步包括內(nèi)容可尋址存儲(chǔ)器的不同組,以便跟蹤亂序接收的分組。
28.一種分組處理系統(tǒng),所述系統(tǒng)包括至主機(jī)的第一接口;用于提供訪問(wèn)網(wǎng)絡(luò)連接的第二接口;用于存儲(chǔ)如下指令的存儲(chǔ)器,所述指令實(shí)現(xiàn)至少一種傳輸層網(wǎng)絡(luò)協(xié)議的不同操作;以及一處理器,用于根據(jù)經(jīng)所述第二接口接收的分組數(shù)據(jù)執(zhí)行所述指令并用于經(jīng)所述第一接口將結(jié)果提供給所述主機(jī)。
29.如權(quán)利要求28所述的系統(tǒng),其中,所述處理器提供包括一個(gè)或多個(gè)微代碼指令的指令集,所述一個(gè)或多個(gè)微代碼指令指定對(duì)內(nèi)容可尋址存儲(chǔ)器的訪問(wèn)。
30.如權(quán)利要求28所述的系統(tǒng),其中,所述至少一種網(wǎng)絡(luò)協(xié)議包括傳輸控制協(xié)議(TCP)。
31.如權(quán)利要求28所述的系統(tǒng),其中,所述處理器和第一接口的至少一個(gè)部件接收具有不同頻率的時(shí)鐘信號(hào)。
32.如權(quán)利要求31所述的系統(tǒng),其中,根據(jù)一個(gè)或多個(gè)分組特征,確定所述不同頻率。
33.如權(quán)利要求28所述的系統(tǒng),進(jìn)一步包括一個(gè)或多個(gè)內(nèi)容可尋址存儲(chǔ)器的第一組,以便存儲(chǔ)與不同網(wǎng)絡(luò)連接相關(guān)聯(lián)的數(shù)據(jù)。
34.如權(quán)利要求28所述的系統(tǒng),進(jìn)一步包括一個(gè)或多個(gè)內(nèi)容可尋址存儲(chǔ)器的第二組,以便跟蹤亂序接收的分組。
35.一種系統(tǒng),所述系統(tǒng)包括至少一個(gè)主處理器;以連接速度提供網(wǎng)絡(luò)連接的以太網(wǎng)媒體訪問(wèn)控制(MAC)設(shè)備;耦合到所述MAC設(shè)備和所述至少一個(gè)主處理器的網(wǎng)絡(luò)協(xié)議卸載引擎,用于為所述至少一個(gè)主處理器執(zhí)行網(wǎng)絡(luò)協(xié)議操作,所述網(wǎng)絡(luò)協(xié)議卸載引擎包括至外圍部件互連(PCI)總線的第一接口,所述外圍部件互連(PCI)總線連接所述網(wǎng)絡(luò)協(xié)議卸載引擎和所述至少一個(gè)主處理器;第二接口,用于從所述MAC設(shè)備接收網(wǎng)絡(luò)分組的至少一部分,所述第二接口耦合到具有第一頻率的第一時(shí)鐘信號(hào)的源,所述第一頻率對(duì)應(yīng)于所述連接速度;以及處理邏輯,用于根據(jù)網(wǎng)絡(luò)協(xié)議處理由所述第二接口接收的網(wǎng)絡(luò)分組的所述至少一部分,所述處理邏輯的至少一部分耦合到具有不同于所述第一頻率的第二頻率的第二時(shí)鐘信號(hào)的源。
36.如權(quán)利要求35所述的系統(tǒng),其中,第二頻率包括基于至少一個(gè)分組的一個(gè)或多個(gè)特征的頻率。
37.如權(quán)利要求35所述的系統(tǒng),其中,所述網(wǎng)絡(luò)協(xié)議包括TCP(傳輸控制協(xié)議)。
38.如權(quán)利要求35所述的系統(tǒng),其中,所述處理邏輯包括用于實(shí)現(xiàn)至少一種網(wǎng)絡(luò)協(xié)議的操作的指令和處理器。
39.如權(quán)利要求35所述的系統(tǒng),其中,所述系統(tǒng)包括至少一個(gè)內(nèi)容可尋址存儲(chǔ)器的第一組,用于存儲(chǔ)與不同網(wǎng)絡(luò)連接相關(guān)聯(lián)的數(shù)據(jù);以及至少一個(gè)內(nèi)容可尋址存儲(chǔ)器的第二組,用于跟蹤亂序接收的分組。
40.如權(quán)利要求35所述的系統(tǒng),其中,至所述PCI總線的接口包括至PCI-X總線的接口。
41.一種網(wǎng)絡(luò)協(xié)議卸載系統(tǒng),所述系統(tǒng)包括用于至少接收在分組中包括的首部數(shù)據(jù)的電路;耦合到所述電路的一個(gè)或多個(gè)內(nèi)容可尋址存儲(chǔ)器的第一組,用于存儲(chǔ)對(duì)應(yīng)不同網(wǎng)絡(luò)連接的連接標(biāo)識(shí)符;耦合到所述第一內(nèi)容可尋址存儲(chǔ)器的第一存儲(chǔ)器,用于檢索對(duì)應(yīng)由所述第一內(nèi)容可尋址存儲(chǔ)器標(biāo)識(shí)的連接標(biāo)識(shí)符的連接上下文數(shù)據(jù);用于存儲(chǔ)如下指令的存儲(chǔ)器,所述指令實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議的不同操作;算術(shù)邏輯單元,用于訪問(wèn)由所述第一存儲(chǔ)器檢索的連接上下文數(shù)據(jù)和用于執(zhí)行在所述存儲(chǔ)器中存儲(chǔ)的指令;以及到至少一個(gè)主機(jī)的接口。
42.如權(quán)利要求41所述的系統(tǒng),其中,所述網(wǎng)絡(luò)協(xié)議包括傳輸控制協(xié)議(TCP)。
43.如權(quán)利要求41所述的系統(tǒng),其中,所述存儲(chǔ)器包括只讀存儲(chǔ)器。
44.如權(quán)利要求41所述的系統(tǒng),其中,所述到至少一個(gè)主機(jī)的接口包括外圍部件互連(PCI)總線接口。
45.如權(quán)利要求41所述的系統(tǒng),進(jìn)一步包括耦合到所述算術(shù)邏輯單元的一個(gè)或多個(gè)內(nèi)容可尋址存儲(chǔ)器的第二組,用于跟蹤亂序接收的分組。
46.如權(quán)利要求41所述的系統(tǒng),進(jìn)一步包括給輸入序列發(fā)生器提供的第一時(shí)鐘頻率,和給所述算術(shù)邏輯單元提供的第二不同的時(shí)鐘頻率。
47.如權(quán)利要求46所述的系統(tǒng),其中,根據(jù)包括在分組首部中的數(shù)據(jù),確定所述第二時(shí)鐘頻率。
48.一種卸載網(wǎng)絡(luò)協(xié)議操作的方法,所述方法包括在由具有第一頻率的第一時(shí)鐘信號(hào)同步的電路,接收分組的至少一部分;以及根據(jù)用于至少一個(gè)主機(jī)的至少一種網(wǎng)絡(luò)協(xié)議,在處理電路處理所接收的分組的所述至少一部分,所述處理電路的至少一部分由具有不同于所述第一頻率的第二頻率的第二時(shí)鐘信號(hào)的源加以同步。
49.如權(quán)利要求48所述的方法,其中,所述網(wǎng)絡(luò)協(xié)議包括傳輸層協(xié)議和網(wǎng)絡(luò)層協(xié)議中的至少一種協(xié)議。
50.如權(quán)利要求48所述的方法,其中,所述網(wǎng)絡(luò)協(xié)議包括TCP(傳輸控制協(xié)議)。
51.如權(quán)利要求48所述的方法,進(jìn)一步包括經(jīng)外圍部件互連(PCI)總線與所述至少一個(gè)主機(jī)進(jìn)行通信。
52.如權(quán)利要求48所述的方法,進(jìn)一步包括確定所述第二頻率。
53.如權(quán)利要求48所述的方法,進(jìn)一步包括訪問(wèn)內(nèi)容可尋址存儲(chǔ)器以檢索對(duì)應(yīng)所述分組的連接的標(biāo)識(shí)符。
54.如權(quán)利要求48所述的方法,進(jìn)一步包括訪問(wèn)內(nèi)容可尋址存儲(chǔ)器以跟蹤亂序接收的分組。
全文摘要
本發(fā)明公開(kāi)的內(nèi)容描述可由例如網(wǎng)絡(luò)協(xié)議卸載引擎使用的分組處理技術(shù)。例如,這些技術(shù)可以用在針對(duì)所接收的分組為主機(jī)執(zhí)行傳輸控制協(xié)議(TCP)操作的引擎中。
文檔編號(hào)H04L29/06GK1612566SQ20031012036
公開(kāi)日2005年5月4日 申請(qǐng)日期2003年10月27日 優(yōu)先權(quán)日2003年10月27日
發(fā)明者S·R·范加爾, Y·霍斯科特, N·Y·波爾卡, J·徐, V·K·埃拉貢特拉, S·Y·波爾卡 申請(qǐng)人:英特爾公司