專利名稱:用于獨(dú)立于帶寬延遲產(chǎn)品的tcp/ip卸載的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明的某些實(shí)施例涉及TCP數(shù)據(jù)和相關(guān)TCP信息的處理。更具體地,本發(fā)明的某些實(shí)施例涉及用于獨(dú)立于帶寬延遲產(chǎn)品的TCP/IP卸載的系統(tǒng)和方法。
背景技術(shù):
傳輸控制協(xié)議(TCP)的初始開發(fā)是以當(dāng)前可用的連網(wǎng)和處理能力為基礎(chǔ)。因此,關(guān)于其操作的各種基本設(shè)想開始于那時(shí)存在的連網(wǎng)和處理技術(shù)。在此設(shè)想中(TCP開始于其上)中包括可為主處理器所使用的帶寬和部分無限制處理資源的缺乏和高價(jià)。隨著諸如吉比特以太網(wǎng)(GbE)技術(shù)的出現(xiàn),這些基本設(shè)想已經(jīng)根本上轉(zhuǎn)移到一個(gè)位置,在該位置上帶寬不再缺乏和昂貴,并且現(xiàn)在認(rèn)為主機(jī)處理資源是有限的而不是幾乎無限的。在這方面,瓶頸已從網(wǎng)絡(luò)帶寬轉(zhuǎn)移到主機(jī)處理帶寬。由于主機(jī)處理系統(tǒng)并不僅僅提供快速的網(wǎng)絡(luò)連接,轉(zhuǎn)移網(wǎng)絡(luò)資源以提供足夠快速的網(wǎng)絡(luò)連接對于獲得設(shè)想中的基本變化是微不足道的。需要注意的是,轉(zhuǎn)移網(wǎng)絡(luò)資源以提供足夠快速的網(wǎng)絡(luò)連接應(yīng)該以執(zhí)行系統(tǒng)應(yīng)用為代價(jià),因而導(dǎo)致系統(tǒng)性能的降低。
雖然能夠建立新的連網(wǎng)結(jié)構(gòu)和協(xié)議來實(shí)現(xiàn)設(shè)想中的基本轉(zhuǎn)移,新的系統(tǒng)結(jié)構(gòu)和協(xié)議仍需對現(xiàn)有系統(tǒng)和傳統(tǒng)系統(tǒng)提供支持。因此,需要解決為實(shí)現(xiàn)設(shè)想中的轉(zhuǎn)移并消除由主機(jī)處理系統(tǒng)而形成的任何瓶頸。可以利用傳輸控制協(xié)議卸載引擎(TOE)將來自專用處理器上的主系統(tǒng)的TCP處理重新分配,該專用處理器可以具有合適的軟件用于處理TCP處理??蓪CP卸載引擎配置為實(shí)現(xiàn)不同的TCP算法,用于處理快速網(wǎng)絡(luò)連接,從而使得可以將主系統(tǒng)處理資源分配或重新分配給應(yīng)用處理。
為了減少主機(jī)資源的消耗,可以將TCP連接從主機(jī)卸載到專用的TCP/IP卸載引擎(TOE)。這些主機(jī)資源中的一些主機(jī)資源可以包括CPU(中央處理器)周期和子系統(tǒng)存儲器帶寬。在卸載過程中,將TCP連接狀態(tài)信息從主機(jī)(例如從主機(jī)軟件棧)卸載到TOE。在給定時(shí)間那,TCP連接可以處于多個(gè)狀態(tài)中的任何一個(gè)狀態(tài)中。為了處理TCP連接,可采用TCP軟件來管理各種TCP定義狀態(tài)。能夠管理不同的TCP定義狀態(tài)可能需要TOE中結(jié)構(gòu)高度復(fù)雜。
用于處理連接到TOE的TCP連接的卸載狀態(tài)信息可能不一定是最佳的解決方案,這是由于諸如CLOSING、LAST_ACK和FIN_WAIT_2的許多狀態(tài)可能不是性能靈敏的。此外,許多這樣的非性能靈敏狀態(tài)可能消耗相當(dāng)多的處理資源以處理例如差錯(cuò)條件和潛在的惡意攻擊。這些僅僅是顯著增加建立并涉及TOE費(fèi)用的因素中的幾個(gè)。另外,來自主機(jī)、控制TCP連接的所有狀態(tài)變量的TOE可能相當(dāng)復(fù)雜,其可使用相當(dāng)多的能量,并可能需要和消耗許多板內(nèi)存儲器。此外,卸載到TOE的TCP連接(其是從主機(jī)傳送來,可控制TCP連接的所有狀態(tài)變量)對于連接損耗而言可以是不可改變的和可以接受的。
TCP分段是可允許將很小一部分TCP處理卸載到網(wǎng)絡(luò)接口卡(NIC)的技術(shù)。在這點(diǎn)上,支持TCP分段的NIC并不是真正結(jié)合完整的傳輸控制處理卸載引擎。相反,支持TCP分段地NIC僅僅有能力將出站TCP塊分割成與物理介質(zhì)所支持的包相同大小的包。每一個(gè)出站TCP塊小于允許的TCP窗口大小。例如,支持TCP分段的以太網(wǎng)絡(luò)接口卡可以將4KB的TCP數(shù)據(jù)塊分割成3個(gè)以太網(wǎng)包。以太網(wǎng)包的最大尺寸是1518字節(jié)(包括報(bào)頭和拖尾CRC)。
支持TCP分段的設(shè)備跟蹤某些TCP狀態(tài)信息(諸如與卸載NIC所分割的數(shù)據(jù)相關(guān)的TCP序列號)。然而,可支持TCP分段的設(shè)備并不跟蹤與入站業(yè)務(wù)相關(guān)的狀態(tài)信息或支持TCP確認(rèn)或流控制所需的任何狀態(tài)信息。在建立的狀態(tài)中支持完全TCP卸載的NIC負(fù)責(zé)處理TCP流控制、負(fù)責(zé)處理輸入TCP確認(rèn)并產(chǎn)生用于輸入數(shù)據(jù)的出站TCP確認(rèn)。
可將TCP分段看成是TCP卸載的子集。TCP分段允許協(xié)議棧或操作系統(tǒng)傳送信息到設(shè)備驅(qū)動器,該信息是以還沒有分割為單獨(dú)TCP包的TCP數(shù)據(jù)塊的形式。數(shù)據(jù)塊可以大于以太網(wǎng)包的大小。例如,索要分割的數(shù)據(jù)塊可以是4K字節(jié)或16K字節(jié)。與設(shè)備驅(qū)動器相關(guān)聯(lián)的網(wǎng)絡(luò)適配器可以獲得TCP數(shù)據(jù)塊,將獲得的TCP數(shù)據(jù)塊分為1518字節(jié)的以太網(wǎng)包并更新每個(gè)遞增產(chǎn)生的包中的某些字段。例如,網(wǎng)絡(luò)適配器可通過逐漸增加每一個(gè)包的TCP序列號來更新每個(gè)TCP包的對應(yīng)TCP序列號。在另一個(gè)示例中,也可以為每個(gè)包更新IP識別(IP ID)字段和標(biāo)識字段。TCP分段的一個(gè)限制是可能僅僅在小于TCP窗口大小的數(shù)據(jù)塊上實(shí)現(xiàn)TCP分段。這是由于實(shí)現(xiàn)TCP分段的設(shè)備對于TCP流控制沒有影響,相應(yīng)地,實(shí)現(xiàn)TCP流控制的設(shè)備僅僅分割出站數(shù)據(jù)。
TCP分段設(shè)備并不檢查輸入包,因此,TCP分段對于流控制沒有影響。將任何接收確認(rèn)包傳送到主機(jī)用于處理。在這點(diǎn)上,不是由TCP分段設(shè)備處理用于流控制的確認(rèn)包。此外,TCP分段設(shè)備并不執(zhí)行擁塞控制或“慢起動”,并且不計(jì)算或修改發(fā)送回操作系統(tǒng)和/或主系統(tǒng)處理器的任何變量。
TCP分段的另一個(gè)限制是TCP分段所跟蹤的信息只是對TCP數(shù)據(jù)的壽命而言恰當(dāng)?shù)男畔ⅰT谶@點(diǎn)上,例如,TCP分段設(shè)備可跟蹤TCP分段號,但不跟蹤TCP確認(rèn)(ACK)號。相應(yīng)地,TCP分段設(shè)備僅僅跟蹤與對應(yīng)TCP數(shù)據(jù)相關(guān)的信息的最小子集。這限制了TCP分段設(shè)備的能力和/或功能性。TCP分段的另一個(gè)限制是TCP分段設(shè)備并不將TCP處理信息傳送回操作系統(tǒng)和/或主處理器。缺乏反饋限制了TCP處理,否則,可通過操作系統(tǒng)和/或主系統(tǒng)處理器實(shí)現(xiàn)TCP處理。
通過將這種系統(tǒng)與參考附圖的本發(fā)明的剩余部分所闡述的本發(fā)明的一些方面比較,對于本領(lǐng)域的技術(shù)人員而言,常規(guī)和傳統(tǒng)方法的其它限制和缺點(diǎn)將變得顯而易見。
發(fā)明內(nèi)容
可在例如提供TCP/IP卸載的系統(tǒng)和方法中發(fā)現(xiàn)本發(fā)明的方面。在本發(fā)明的一個(gè)實(shí)施例中,用于TCP/IP卸載的系統(tǒng)可包括例如主機(jī)和TCP/IP卸載引擎(TOE)。該主機(jī)可連接到TOE。主機(jī)可將與TCP連接相關(guān)聯(lián)的至少一部分TCP連接變量的控制傳送到TOE。所述TOE可更新至少一部分TCP連接變量并將更新的TCP連接變量傳送或反饋回所述主機(jī)。
根據(jù)本發(fā)明的另一個(gè)實(shí)施例,提供了用于TCP連接卸載的系統(tǒng)。該系統(tǒng)包括例如主機(jī)和可連接到所述主機(jī)的網(wǎng)絡(luò)接口卡(NIC)。對于卸載到所述NIC的特定連接而言,在主機(jī)和NIC之間劃分狀態(tài)信息的控制。相應(yīng)地,可將信息傳送到NIC,NIC可更新至少一部分傳送的信息。隨后,NIC可將至少一部分更新信息傳送回主機(jī),其中主機(jī)可使用該信息來管理這一和/或另一個(gè)連接。
在另一個(gè)實(shí)施例中,本發(fā)明能夠可提供用于TCP/IP卸載的方法。該方法可包括以下步驟中的一個(gè)或多個(gè)確定將來自主機(jī)的特定TCP連接卸載到TOE;將與特定TCP連接相關(guān)聯(lián)的至少一部分連接變量的控制從主機(jī)傳送到TOE;發(fā)送剩余連接變量的快照(沒有將所述剩余連接變量的控制傳送到TOE);并且使用傳送到TOE的連接變量和/或使用快照經(jīng)由TOE管理特定TCP連接。可將與TCP連接相關(guān)聯(lián)的至少一部分更新連接變量和/或快照變量傳送回主機(jī),用于由主機(jī)處理。
TCP/IP卸載方法的另一個(gè)實(shí)施例可包括下面步驟中的一個(gè)或多個(gè)確定將建立的TCP連接從主機(jī)卸載到TOE;將段可變變量的控制從主機(jī)傳送到TOE;將段可變變量的快照和連接不變變量發(fā)送到TOE;以及基于段可變變量和快照經(jīng)由TOE獨(dú)立處理輸入TCP包。TOE可更新至少一部分段可變變量和快照并將至少一部分段可變變量和快照傳送回主機(jī)。在本發(fā)明的一個(gè)實(shí)施例中,主機(jī)可處理所有的TCP狀態(tài)(除了可將其卸載到TOE的的“建立”狀態(tài)以外)。
本發(fā)明還包括處理TCP連接的方法,該方法可包括下面步驟中的一個(gè)或多個(gè)建立TCP連接;共享用于主機(jī)和TOE之間的TCP連接的控制面;并且將更新的TCP連接變量從TOE傳送回主機(jī)。相應(yīng)地,可使用至少一部分更新的TCP連接變量來控制TCP連接和/或另一個(gè)TCP連接。
在本發(fā)明的另一個(gè)實(shí)施例中,用于TCP卸載的方法可包括獲得來自主機(jī)的TCP連接變量并使用獲得的TCP連接變量來管理至少一個(gè)TCP連接??筛轮辽僖徊糠肢@得的TCP連接變量,并可將至少一部分更新的TCP連接變量傳送回主機(jī)。TCP連接變量可獨(dú)立于帶寬延遲產(chǎn)品。可由主機(jī)使用至少一部分更新的TCP連接變量以處理TCP連接或另一個(gè)TCP連接??墒褂脳韨魉椭辽僦鳈C(jī)和TOE之間的TCP連接變量。在這點(diǎn)上,TOE可從棧移去TCP連接變量,并且主機(jī)可將TCP連接變量加到棧上。同樣,可由TOE將更新的TCP連接變量置于棧上,并且主機(jī)可隨后從移去更新的TCP連接變量。
本發(fā)明還可提供機(jī)器可讀存儲,將具有至少一個(gè)代碼段的計(jì)算機(jī)程序存儲在該機(jī)器可讀介質(zhì)上,用于提供TCP卸載。可由機(jī)器執(zhí)行至少一個(gè)代碼段,用于使機(jī)器執(zhí)行步驟,該步驟可包括從主機(jī)獲得TCP連接變量并使用獲得的TCP連接變量管理至少一個(gè)TCP連接??筛轮辽僖徊糠肢@得的TCP連接變量并將其傳送回主機(jī)。TCP連接變量可以獨(dú)立于帶寬延遲產(chǎn)品。機(jī)器可讀存儲還可包括代碼,用于使用至少一部分更新的TCP連接變量來處理TCP連接或另一個(gè)TCP連接。在本發(fā)明的另一方面,機(jī)器可讀存儲可包括用于從棧移去TCP連接變量的代碼,用于將更新的TCP連接變量加到棧上的代碼,以及用于從棧移去連接變量的代碼。
通過以下描述和附圖,將更加全面地理解本發(fā)明的這些和其它優(yōu)點(diǎn)、方面和新穎性特征以及本發(fā)明圖示實(shí)施例的細(xì)節(jié)。
圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的提供TCP/IP卸載的系統(tǒng)的框圖;圖2是流程圖,示出根據(jù)本發(fā)明一個(gè)實(shí)施例的用于TCP/IP卸載的示例性步驟;圖3是流程圖,示出根據(jù)本發(fā)明一個(gè)實(shí)施例的用于提供TCP/IP卸載的示例性步驟;圖4是流程圖,示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的可用于TCP卸載的示例性步驟。
具體實(shí)施例方式
本發(fā)明的某些實(shí)施例可提供用于TCP卸載的方法,該方法可包括從主機(jī)獲得TCP連接變量并使用獲得的TCP連接變量管理至少一個(gè)TCP連接??梢愿轮辽僖徊糠肢@得的TCP連接變量并可將至少一些更新的TCP連接變量傳送回主機(jī)。根據(jù)本發(fā)明的一個(gè)方面,TCP連接變量可以是獨(dú)立于帶寬延遲產(chǎn)品(product)的變量??捎芍鳈C(jī)使用至少一部分更新的TCP連接變量來處理TCP連接或另一個(gè)TCP連接??墒褂脳韨魉椭辽僦鳈C(jī)和TOE之間的TCP連接變量。在這點(diǎn)上,主機(jī)可將TCP連接變量推入(push)棧中,TOE可從棧取出(pull)TCP連接變量。同樣,可由TOE將更新的TCP連接變量置于棧上,主機(jī)隨后可從棧取出更新的TCP連接變量。
關(guān)于TCP分段,每一個(gè)出站TCP塊小于TCP分段所使用的允許TCP窗口大小。然而,本發(fā)明并不局限在這種考慮中。相應(yīng)地,在本發(fā)明的一個(gè)方面中,TOE設(shè)備可具有提供比支持TCP分段的設(shè)備更進(jìn)一步的TCP處理和卸載能力。本發(fā)明能夠的不同方面可以克服TCP分段限制,在所述限制中僅僅可以在小于TCP窗口大小的數(shù)據(jù)塊上執(zhí)行TCP分段。在這點(diǎn)上,為了克服這種限制,根據(jù)本發(fā)明的一個(gè)方面,由于TOE支持TCP流控制管理,TOE可適用于將大的數(shù)據(jù)塊分割為單獨(dú)的包。TOE可確認(rèn)安排了傳輸以使發(fā)送者發(fā)送數(shù)據(jù)永遠(yuǎn)不會超出TCP窗口。此外,可超出TCP窗口大小來實(shí)現(xiàn)根據(jù)本發(fā)明一個(gè)實(shí)施例的分包。TOE接收輸入接收包(它們是用于出站TCP數(shù)據(jù)流的確認(rèn)包)并確認(rèn)那些出站包。如果確認(rèn)包使窗口大小增加,那么可由TOE設(shè)備根據(jù)本發(fā)明的一個(gè)方面發(fā)送更多的包。
雖然TCP分段僅僅是與發(fā)射相關(guān)的技術(shù),該技術(shù)并不限制傳送包的TCP處理,根據(jù)本發(fā)明不同實(shí)施例的TOE并非如此有限。在這點(diǎn)上,根據(jù)本發(fā)明一個(gè)實(shí)施例的TOE可處理并管理發(fā)送和接收包。此外,可由根據(jù)本發(fā)明的TOE而非TCP分段設(shè)備實(shí)現(xiàn)更大范圍上的TCP處理和管理。例如,使用TOE,可以以將NIC看成TCP連接的所有者的方式將TCP信息從操作系統(tǒng)和/或主系統(tǒng)處理器傳送到NIC。然后NIC可管理并更新TCP狀態(tài)信息,該TCP狀態(tài)信息可包括,但不局限于TCP段號和確認(rèn)號。在處理和/或更新TCP狀態(tài)信息之后,可將處理和/或更新的信息傳送回操作系統(tǒng)和/或主系統(tǒng)處理器。然后主機(jī)和系統(tǒng)處理器可使用從NIC傳送回的信息。需要注意的是,TCP分段并不提供將信息反饋到主系統(tǒng)處理器和/或操作系統(tǒng)。
本發(fā)明的某些實(shí)施例還可包括增強(qiáng)和高效的傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(TCP/IP)卸載方案,該方案適用于允許劃分TCP/IP卸載引擎(TOE)和主TCP/IP實(shí)現(xiàn)之間的TCP處理。主TCP/IP實(shí)現(xiàn)可包括一個(gè)或多個(gè)主TCP/IP應(yīng)用以及一個(gè)或多個(gè)主處理器。例如,在本發(fā)明的一個(gè)方面中,TCP卸載方案可將處于“建立”狀態(tài)的連接卸載到TOE。換而言之,本發(fā)明的方面可包括在“建立”狀態(tài)期間使用的對應(yīng)的TCP狀態(tài)變量的卸載。相應(yīng)地,TCP/IP卸載調(diào)度可將主機(jī)軟件和TOE間的TCP控制面劃開??蓪OE設(shè)計(jì)為實(shí)現(xiàn)TCP控制面的子集或最小子集,其實(shí)現(xiàn)可能不復(fù)雜,并且可使用更少的存儲器。可以以經(jīng)濟(jì)的方式實(shí)現(xiàn)適用于這種卸載方案的TOE??梢杂芍鳈C(jī)軟件處理TCP連接管理的更復(fù)雜的方面,并且TCP連接管理的更復(fù)雜的方面可提供更好的可靠性和靈活性。
圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的提供TCP/IP卸載的系統(tǒng)的框圖。參考圖1,系統(tǒng)可包括主機(jī)1、主機(jī)應(yīng)用軟件12和TOE 20。主機(jī)10可包括主CPU30和主存儲器40。主存儲器40可適用于包括應(yīng)用緩沖器50。應(yīng)用緩沖器50可適用于包括傳輸應(yīng)用緩沖器(TxBuf)60和接收應(yīng)用緩沖器(RxBuf)70。TOE 20可包括直接存儲器存取(DMA)引擎25和FIFO緩沖器70。
可經(jīng)由主機(jī)接口80將主機(jī)10連接到TOE 20。主機(jī)接口可包括但不局限于外部組件互連(PCI)總線、PCI-X總線、ISA、SCSI和任何其它合適的總線??蓪OE 20連接到物理通信介質(zhì)90。物理通信介質(zhì)90可以是有線介質(zhì)、無線介質(zhì)或二者的組合。物理通信介質(zhì)90可以包括,但不局限于以太網(wǎng)和光纖信道。雖然在主機(jī)接口80的另一側(cè)上示出了主機(jī)10,可至少部分地將主機(jī)10布置在網(wǎng)絡(luò)接口卡(NIC),網(wǎng)絡(luò)接口卡包括TOE 20。相應(yīng)地,在本發(fā)明的一個(gè)方面中,可以在主機(jī)10和TOE 20之間劃分TCP狀態(tài)平面。
在一個(gè)實(shí)施例中,可通過例如三組不同的變量完整地描述TCP連接。三組變量可以是例如連接不變變量、段不變變量和段可變變量。在TCP連接的壽命期間,連接不變變量可以是恒定的。在TCP連接的壽命期間,段不變變量不可以從TCP段變?yōu)門CP段,但可以經(jīng)常變化。段可變變量可以從TCP段變?yōu)門CP段。
連接不變變量可包括例如源IP地址、目的IP地址、IP使用期限(TTL)、IP服務(wù)類型(TOS)、源TCP端口號、目的TCP端口號、初始發(fā)送序列號、初始接收序列號、發(fā)送窗口比例因數(shù)和接收窗口比例因數(shù)。
段不變變量可包括,但不局限于源MAC地址、下一跳變MAC地址、MAC層封裝、有效最大段大小、保活間隔和最大公差和標(biāo)志(例如內(nèi)戈?duì)?Nagle)算法起動和?;钇饎?。
段可變變量可包括,但不局限于IP包標(biāo)識符、發(fā)送和接收序列變量(諸如第一未確認(rèn)數(shù)據(jù)(SND_UNA)的序列號、發(fā)送的最大序列號(SND_MAX)、下一發(fā)送的序列號(SND_NXT)、已發(fā)送的最大序列號(SND_MAX)、最大發(fā)送窗口(MAX_WIN)、下一接收的序列號(RCV_NXT)和接收窗口大小(RCV_WND))。附加的示例性段可變變量可包括擁塞窗口變量(諸如擁塞窗口(SND_CWIN))和慢起動閾值(SSTHRESH)往返時(shí)間變量(其可包括但不局限于平滑往返時(shí)間(RTT)和平滑增量(DELTA))。其它示例性段可變變量可包括用于重傳的剩余時(shí)間、用于延遲確認(rèn)的剩余時(shí)間、用于?;畹氖S鄷r(shí)間、用于推入(PUSH)和TCP狀態(tài)和時(shí)間戳的剩余時(shí)間。
在操作期間,如果沒有卸載TCP連接,那么主機(jī)10的主機(jī)軟件可擁有三組變量(包括連接不變變量、段不變變量和段可變變量)中的至少一些。如果沒有卸載TCP連接,則TOE20不可訪問這些變量。然而,一旦卸載了變量,可將TOE 20配置為更新與傳輸和接收相關(guān)聯(lián)的變量并將更新的傳輸和接收變量傳送回主機(jī)10。在這點(diǎn)上,TOE可更新獨(dú)立與TCP延遲帶寬產(chǎn)品的變量并將這些更新的變量傳送回主機(jī)10用于處理。
圖2是流程圖,其示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于TCP/IP卸載的示例性步驟。參考圖2,如果將連接卸載到TOE 20,那么在步驟202中,主機(jī)軟件可將段可變變量的控制傳送到TOE 20。在一個(gè)示例中,可以將一部分主機(jī)軟件協(xié)議控制塊或TCP控制塊傳送到TOE 20。在步驟204中,主機(jī)軟件可獲得剩余變量(諸如連接不變變量和/或段不變變量)的快照并將該快照發(fā)送到TOE 20。在一個(gè)示例中,可以有TOE 20一再反復(fù)使用快照。在步驟206中,主機(jī)軟件可以將緩沖器附著在主存儲器40中。例如,主機(jī)軟件可以在主存儲器40中附著應(yīng)用緩沖器50并可在應(yīng)用緩沖器50中建立發(fā)射應(yīng)用緩沖器(TxBuf)60和接收應(yīng)用緩沖器(RxBuf)70。在步驟208中,TOE 20負(fù)責(zé)管理整個(gè)TCP連接(包括例如分段、確認(rèn)處理、開窗和擁塞避免)。在步驟210中,可將已經(jīng)更新的至少一部分變量傳送回主機(jī)用于處理。
例如,通過控制段可變變量并使用剩余變量的快照,TOE 20可處理和獨(dú)立處理來自物理通信介質(zhì)90的輸入TCP段,并可經(jīng)由DMA引擎25將輸入TCP段的至少一部分(諸如負(fù)載)置于主存儲器40中。在這點(diǎn)上,可經(jīng)由DMA引擎25將輸入TCP段負(fù)載置于應(yīng)用緩沖器50的RX應(yīng)用緩沖器70部分。
在本發(fā)明的一個(gè)實(shí)施例中,雖然TOE 20可適用于管理整個(gè)TCP連接,TOE20可對卸載段可變變量進(jìn)行完整的讀—寫存取,并且可完整地對卸載段可變變量進(jìn)行更新。主機(jī)軟件和主機(jī)應(yīng)用軟件12可對段不變變量進(jìn)行讀—寫存取。TOE 20可對段不變變量進(jìn)行讀—寫存取。如果主機(jī)應(yīng)用軟件12改變變量(諸如下一跳變的MAC地址),主機(jī)應(yīng)用軟件12可通過例如將消息發(fā)送到TOE 20的方式來通知TOE 20。TOE 20然后可更新該變量。可將更新的變量反饋給主機(jī)應(yīng)用軟件12,在主機(jī)應(yīng)用軟件上這些軟件可用于例如TCP處理。相應(yīng)地,連接不變變量可存在于主機(jī)軟件和TOE 20中。
圖3是流程圖,示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于提供TCP/IP卸載的示例性步驟。參考圖3,在步驟302中,主機(jī)10可確定主機(jī)10所控制的一個(gè)或多個(gè)連接變量(諸如段不變變量)是否已經(jīng)改變。例如,主機(jī)軟件可改變一個(gè)或多個(gè)變量(諸如下一跳變MAC地址)。如果主機(jī)10所控制的一個(gè)或多個(gè)連接變量沒有改變,那么過程可能是完整的。如果主機(jī)10所控制的一個(gè)或多個(gè)連接變量改變,那么在步驟304中,主機(jī)軟件可將主機(jī)10所控制的一個(gè)或多個(gè)連接變量的改變通知TOE 20。在步驟306中,TOE 20可相應(yīng)地更新一個(gè)或多個(gè)變量。在步驟308中,TOE可將更新的變量傳送回主機(jī)10。
根據(jù)本發(fā)明的一些實(shí)施例可包括以下優(yōu)點(diǎn)中的一個(gè)或多個(gè)。一些實(shí)施例可能是更可靠的,并且可以在任何時(shí)間提供從TOE到主機(jī)的連接的上載,以及從主機(jī)到TOE的連接的卸載。由于TOE硬件可維持少量狀態(tài)信息,可以加速選擇連接的更新和卸載??赏ㄟ^對段可變變量的返回控制將卸載連接上載回主機(jī)10,該段可變變量與卸載連接對應(yīng)。隨后可通過將與上載的連接對應(yīng)的段可變變量的控制傳送到TOE 20的方式來卸載上載的連接。
圖4是流程圖,示出根據(jù)本發(fā)明一個(gè)實(shí)施例的可用于TCP卸載的示例性步驟。參考圖4,在步驟402中,TOE可從主機(jī)系統(tǒng)獲得或接收獨(dú)立于帶寬延遲產(chǎn)品的變量。在步驟404中,TOE可使用獲得的或接收的獨(dú)立于帶寬延遲產(chǎn)品的變量來管理連接。在步驟406中,TOE可更新接收變量(獨(dú)立于帶寬延遲產(chǎn)品)的至少一部分。在步驟408中,可以將獨(dú)立于帶寬的至少一部分更新的變量傳送回主機(jī)。在步驟410中,主機(jī)可使用傳送給它的獨(dú)立于帶寬延遲產(chǎn)品的更新的變量,用于TCP處理。
根據(jù)本發(fā)明的一個(gè)方面,可使用棧14來實(shí)現(xiàn)獨(dú)立于帶寬延遲產(chǎn)品的變量的傳送??梢杂糜布?、軟件或硬件軟件的結(jié)合來實(shí)現(xiàn)棧14。雖然TOE可適用于從棧14取出消息并將更新的信息推入棧14中。主機(jī)也可適用于將TCP信息推入棧14中并從棧14取出更新的信息。相應(yīng)地,參考步驟402,TOE可從棧14取出獨(dú)立于帶寬延遲產(chǎn)品的變量。參考步驟406,在TOE更新了獲得的獨(dú)立于帶寬延遲產(chǎn)品的變量之后,可將更新的獨(dú)立于帶寬延遲產(chǎn)品的變量推入棧14中。在這點(diǎn)上,參考步驟408,然后主機(jī)可從棧14取出更新的獨(dú)立于帶寬延遲產(chǎn)品的變量。
與TCP分段卸載設(shè)備相比,TOE可提供更靈活的TCP處理方法,因?yàn)門CP設(shè)備可實(shí)現(xiàn)在接收側(cè)和發(fā)射側(cè)上的TCP處理。附加地,由于TOE可適用于處理接收和發(fā)射變量,TOE提供更加靈活和高效的方法,用于支持網(wǎng)絡(luò)連接的高效建立和拆除。
本發(fā)明的某些實(shí)施例可更好地抵抗拒絕服務(wù)(DoS)攻擊或其它攻擊,這是由于可由比TOE NIC更加靈活和更加強(qiáng)大的主機(jī)處理連接建立。在DoS攻擊中,攻擊者嘗試在目標(biāo)和受攻擊的系統(tǒng)中消耗更多的資源,從而防止目標(biāo)系統(tǒng)為其它網(wǎng)絡(luò)設(shè)備提供服務(wù)。新的攻擊的頻繁引入可以為具有足夠存儲器和CPU功率的靈活的主機(jī)提供更好的運(yùn)行連接建立的選擇。靈活的主機(jī)可能是比特定硬件TOE更好的選擇,特定硬件TOE具有有限的代碼空間、計(jì)算機(jī)功率、系統(tǒng)知識和靈活性。此外,接收連接請求的決定經(jīng)??赡芑诶鐝?fù)雜和動態(tài)的直觀推斷。
本發(fā)明的方面也可提供更好的綜合系統(tǒng)性能和效率。在處理處于TCP狀態(tài)機(jī)的性能靈敏狀態(tài)中的連接期間,TOE NIC可能是更高效的。具體地,當(dāng)TOE NIC僅僅處理處于TCP狀態(tài)機(jī)的性能靈敏狀態(tài)中的連接時(shí),附加的有限硬件資源可能變?yōu)榭捎玫摹O鄳?yīng)地,TOE NIC可適用于上載不再處于性能靈敏狀態(tài)中的連接并且卸載處于性能靈敏狀態(tài)中的連接。這種動作確實(shí)可以影響這樣的特征形態(tài),諸如硬件TOE效率。本發(fā)明的其它方面可能是更加高效的并且可以提供更好的綜合全系統(tǒng)性能,這是由于主機(jī)可以使用靈活的、變化的、易于更新的、易于升級的和更加復(fù)雜的算法來確定卸載或者上載哪個(gè)連接。
本發(fā)明的一些實(shí)施例可以為主機(jī)提供與資源利用相關(guān)的統(tǒng)計(jì)。該統(tǒng)計(jì)可包括以下的一個(gè)或多個(gè)有效資源;每個(gè)卸載連接的帶寬的使用;每個(gè)卸載連接的幀的數(shù)量;每個(gè)卸載連接的差錯(cuò);傳輸層協(xié)議(TLP)(例如TCP)和高層協(xié)議(ULP)的狀態(tài)的改變;使用傾向(例如以攝入(以百分率表示)、減速);以及每個(gè)卸載連接的資源消耗。由主機(jī)隨意決定使用統(tǒng)計(jì)信息以幫助驅(qū)動上載或卸載決定過程。例如,當(dāng)卸載其它連接時(shí),主機(jī)可使用統(tǒng)計(jì)信息來上載一些連接。主機(jī)也可考慮其它的標(biāo)準(zhǔn),例如操作模式、計(jì)算或網(wǎng)絡(luò)負(fù)載分布、當(dāng)前執(zhí)行的應(yīng)用以及網(wǎng)絡(luò)中的任務(wù)。這些標(biāo)準(zhǔn)中的一些可以是動態(tài)標(biāo)準(zhǔn)。
本發(fā)明的某些實(shí)施例也可提供從發(fā)生故障的TOE NIC到操作中的TOENIC的故障切換支持。故障切換可以包括例如,當(dāng)從網(wǎng)絡(luò)拔除網(wǎng)絡(luò)電纜或者現(xiàn)有網(wǎng)絡(luò)鏈路發(fā)生任何故障時(shí),將NIC指定為具有故障。這樣,即使一個(gè)TOE NIC的硬件發(fā)生故障,仍然可以通過將與發(fā)生故障的TOE NIC相關(guān)聯(lián)的狀態(tài)信息傳送到另一個(gè)功能TOE NIC來維持連接。可通過由主機(jī)所維持的一部分連接狀態(tài)信息以及TOE NIC所維持的一部分連接狀態(tài)信息來進(jìn)一步增強(qiáng)傳送的穩(wěn)健性。
相應(yīng)地,本發(fā)明可以用硬件、軟件或硬件和軟件的結(jié)合來實(shí)現(xiàn)。可以用一個(gè)計(jì)算機(jī)系統(tǒng)中的集中方式或者用分布方式(其中不同的元件散布在若干個(gè)互連的計(jì)算機(jī)系統(tǒng)上)來實(shí)現(xiàn)本發(fā)明。適用于執(zhí)行本文所述方法的任何種類的計(jì)算機(jī)系統(tǒng)和其它裝置都是適合的。典型的硬件和軟件的結(jié)合可以是具有計(jì)算機(jī)程序的通用計(jì)算機(jī),當(dāng)加載并執(zhí)行該計(jì)算機(jī)程序時(shí),其控制計(jì)算機(jī)系統(tǒng)以使其執(zhí)行本文所述的方法。
也可將本發(fā)明嵌入計(jì)算機(jī)產(chǎn)品中,該計(jì)算機(jī)產(chǎn)品包括能執(zhí)行本文所述方法的所有特征,當(dāng)在計(jì)算機(jī)系統(tǒng)中加載該計(jì)算機(jī)程序時(shí)可執(zhí)行這些方法。本發(fā)明內(nèi)容中的計(jì)算機(jī)程序可以是用任何語言、代碼或符號的指令集的表達(dá)式,該指令集用于使具有信息處理能力的系統(tǒng)直接、在以下過程的任意一個(gè)之后或者在以下兩個(gè)過程之后執(zhí)行特定功能a)轉(zhuǎn)換為另一種語言,代碼或者符號;b)以不同物質(zhì)形式再現(xiàn)。
雖然已經(jīng)參考某些實(shí)施例描述了本發(fā)明,本領(lǐng)域技術(shù)人員應(yīng)該理解在不脫離本發(fā)明范圍的前提下可以作出各種改變和等價(jià)替換。此外,在不脫離該范圍的前提下可以作出一些修改以使特定環(huán)境或者物質(zhì)適用于本發(fā)明的教學(xué)。因此,本發(fā)明并不打算局限于所公開的具體實(shí)施例,然而本發(fā)明將包括落入附屬權(quán)利要求保護(hù)范圍中的所有實(shí)施例。
權(quán)利要求
1.一種用于提供TCP/IP卸載的系統(tǒng),其特征在于,包括主機(jī);以及連接到所述主機(jī)的TCP/IP卸載引擎,其中所述主機(jī)將至少一部分TCP連接變量的控制傳送到所述TOE并且所述TOE將更新的TCP變量提供回給所述主機(jī)。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于所述主機(jī)將段可變TCP連接變量的控制傳送到所述TOE,所述TOE將更新的段可變TCP連接變量提供回給所述主機(jī)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于所述TCP段可變TCP連接變量還包括IP包標(biāo)識符;用于重傳的剩余時(shí)間;用于延遲確認(rèn)的剩余時(shí)間;用于?;畹氖S鄷r(shí)間;擁塞窗口變量包括擁塞窗口;以及慢起動閾值;往返時(shí)間變量包括平滑往返時(shí)間;平滑增量;以及用于推入的剩余時(shí)間;以及TCP狀態(tài)和時(shí)間戳發(fā)送并接收序列變量,所述序列變量包括用于第一未確認(rèn)序列號數(shù)據(jù);用于下一發(fā)送的序列號;已發(fā)送的最大序列號;最大發(fā)送窗口;用于下一接收的序列號;以及接收窗口大小。
4.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主機(jī)為所述TOE提供連接不變TCP連接變量和段不變TCP連接變量中的至少一個(gè)的快照,所述TOE將更新的連接不變TCP連接變量和段不變TCP連接變量中至少一個(gè)傳送回所述主機(jī);并且其中所述TOE使用傳送的段可變TCP連接變量和所述連接不變TCP連接變量和所述段不變TCP連接變量中的所述至少一個(gè)的所述快照以處理輸入和輸出TCP段中的至少一個(gè)。
5.根據(jù)權(quán)利要求4所述的系統(tǒng),其特征在于,所述TOE使用所述傳送的段可變TCP連接變量以及連接不變TCP連接變量和段不變TCP連接變量中的至少一個(gè)的快照以獨(dú)立處理輸入TCP段。
6.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主機(jī)為所述TOE提供連接不變TCP連接變量和段不變TCP連接變量的快照。
7.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主機(jī)為所述TOE提供不是段可變TCP連接變量的TCP連接變量的快照。
8.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主機(jī)存儲由任何TCP連接所使用的至少一個(gè)緩沖器、專門用于一個(gè)或多個(gè)TCP連接的緩沖其和應(yīng)用緩沖器。
9.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述TOE管理所述TCP連接。
10.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述TOE管理分段、確認(rèn)處理、窗口和擁塞避免中的至少一個(gè)。
11.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述TOE維持對卸載段可變變量進(jìn)行完整的讀-寫存取。
12.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述TOE可完整地對卸載段可變變量進(jìn)行更新。
13.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主機(jī)維持對段不變變量進(jìn)行讀寫存取。
14.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述TOE對段不變變量進(jìn)行只讀存取。
15.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主機(jī)發(fā)送消息到涉及特定TCP連接變量的改變的所述TOE,所述特定連接變量的控制沒有傳送到所述TOE;并且所述TOE更新所述特定TCP連接變量。
16.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述TCP連接是“建立”狀態(tài)。
17.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述TCP連接變量是獨(dú)立于帶寬延遲產(chǎn)品的TCP連接變量。
18.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主機(jī)提供連接建立。
19.根據(jù)權(quán)利要求18所述的系統(tǒng),其特征在于,所述系統(tǒng)通過使所述主機(jī)可以管理所述連接建立來提供對DoS攻擊的抵抗。
20.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主機(jī)管理除“建立”狀態(tài)以外的所有TCP狀態(tài),所述“建立”狀態(tài)可被卸載到所述TOE。
21.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述TOE僅僅處理處于性能靈敏狀態(tài)的連接。
22.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主機(jī)在幫助確定卸載哪一條連接和上載哪一條連接的過程中處理資源使用統(tǒng)計(jì)。
23.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主機(jī)確定卸載哪一條連接和上載哪一條連接。
24.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述TOE和用于所述TOE的設(shè)備驅(qū)動程序軟件中的至少一個(gè)確定所要卸載的TCP連接和所要上載的TCP連接中的至少一個(gè)。
25.一種用于提供連接卸載的系統(tǒng),其特征在于,包括主機(jī);以及連接所述主機(jī)的網(wǎng)絡(luò)接口卡,其中,對于卸載到所述網(wǎng)絡(luò)接口卡的特定連接而言,在所述主機(jī)與所述網(wǎng)絡(luò)接口卡之間劃分狀態(tài)信息的控制,并且所述NIC將用于所述特定連接的至少一部分更新的連接變量上載到所述主機(jī)。
26.根據(jù)權(quán)利要求25所述的系統(tǒng),其特征在于,所述特定連接采用面向連接的傳輸層協(xié)議。
27.根據(jù)權(quán)利要求26所述的系統(tǒng),其特征在于,所述面向連接的傳輸層協(xié)議包括TCP。
28.根據(jù)權(quán)利要求25所述的系統(tǒng),其特征在于,所述主機(jī)將對應(yīng)于所述特定連接的段可變變量的控制傳送到所述NIC。
29.一種用于提供TCP/IP卸載的方法,其特征在于,包括決定將特定TCP連接從主機(jī)卸載到TOE;將所述特定TCP連接的連接變量的控制從所述主機(jī)傳送到所述TOE,并且將剩余連接變量的快照傳送到所述TOE,所述剩余連接變量的控制沒有傳送到所述TOE;使用傳送到所述TOE的所述至少一部分所述連接變量和至少一部分所述快照經(jīng)由所述TOE管理所述特定TCP連接;以及更新至少一部分所述連接變量和一部分所述映象,并將所述更新的至少所述一部分所述連接變量和所述一部分所述快照傳送回所述主機(jī)。
30.根據(jù)權(quán)利要求29所述的方法,其特征在于,傳送到所述TOE的所述特定TCP連接的所述一個(gè)或多個(gè)連接變量包括所述特定TCP連接中的至少一個(gè)段可變變量。
31.根據(jù)權(quán)利要求29所述的方法,其特征在于,傳送到所述TOE的所述特定TCP連接的所述連接變量缺少所述特定TCP連接的段不變變量。
32.根據(jù)權(quán)利要求29所述的方法,其特征在于,傳送到所述TOE的所述特定TCP連接的所述連接變量缺少所述特定TCP連接的段不變變量和連接不變變量。
33.根據(jù)權(quán)利要求29所述的方法,其特征在于,還包括確定所述主機(jī)控制的所述連接變量中的至少一個(gè)是否已經(jīng)改變;通知所述TOE由所述主機(jī)控制并已經(jīng)改變的所述至少一個(gè)連接變量的改變;根據(jù)所述通知的改變在所述TOE中更新所述連接變量。
34.一種用于提供TCP/IP卸載的方法,其特征在于,包括決定將建立的TCP連接從主機(jī)卸載到TOE;將段可變變量的控制從所述主機(jī)傳送到所述TOE;將段可變變量的快照和連接不變變量發(fā)送到所述TOE;基于所述段可變變量和所述快照經(jīng)由所述TOE獨(dú)立處理輸入TCP包;以及更新至少一部分所述發(fā)送快照和至少一部分所述段可變變量,并將至少一部分所述更新的至少所述一部分所述發(fā)送快照和至少所述一部分所述更新的段可變變量傳送回所述主機(jī)。
35.一種用于處理TCP連接的方法,其特征在于,包括建立所述TCP連接;以及共享用于主機(jī)和TOE之間的所述TCP連接的控制面;并且將更新的TCP連接變量從所述TOE傳送回所述主機(jī)。
36.根據(jù)權(quán)利要求35所述的方法,其特征在于,所述控制面板的所述共享包括將與所述TCP連接對應(yīng)的段可變變量的控制傳送到所述TOE。
37.根據(jù)權(quán)利要求35所述的方法,還包括將所述TCP連接從所述TOE上載到所述主機(jī)。
38.根據(jù)權(quán)利要求37所述的方法,其特征在于,上載所述TCP連接包括將與所述TCP連接對應(yīng)的段可變變量的控制傳送到所述主機(jī)。
39.根據(jù)權(quán)利要求37所述的方法,其特征在于,還包括將所述上載的TCP連接從所述主機(jī)卸載到所述TOE。
40.根據(jù)權(quán)利要求37所述的方法,其特征在于,卸載所述上載的TCP連接包括將與所述上載的TCP連接對應(yīng)的所述段可變變量的所述控制傳送到所述TOE。
41.一種用于TCP卸載的方法,其特征在于,所述方法包括獲得來自主機(jī)的TCP連接變量;使用所述獲得的TCP連接變量來管理至少一個(gè)TCP連接;更新至少一部分所述獲得的TCP連接變量;并且將所述更新的至少一部分所述獲得的TCP連接變量傳送回所述主機(jī)。
42.根據(jù)權(quán)利要求41所述的方法,其特征在于,所述TCP連接變量獨(dú)立于帶寬延遲產(chǎn)品。
43.根據(jù)權(quán)利要求41所述的方法,其特征在于,還包括由主機(jī)使用至少一部分所述更新的至少所述一部分所述獲得的TCP連接變量以處理所述至少所述至少一個(gè)TCP連接。
44.根據(jù)權(quán)利要求41所述的方法,其特征在于,還包括從棧取出所述TCP連接變量。
45.根據(jù)權(quán)利要求41所述的方法,其特征在于,還包括將所述更新的至少一部分所述獲得的TCP連接變量推入棧中。
46.一種機(jī)器可讀存儲,其特征在于,將具有至少一個(gè)代碼段的計(jì)算機(jī)程序存儲在所述機(jī)器可讀介質(zhì)上,用于提供TCP卸載,可由機(jī)器執(zhí)行至少一個(gè)代碼段,用于使機(jī)器執(zhí)行步驟,包括從主機(jī)獲得TCP連接變量;使用所述獲得的TCP連接變量管理至少一個(gè)TCP連接;更新至少一部分所述獲得的TCP連接變量;并且將所述更新的至少一部分所述獲得的TCP連接變量傳送回所述主機(jī)。
47.根據(jù)權(quán)利要求46所述的機(jī)器可讀存儲,其特征在于,所述TCP連接變量獨(dú)立于帶寬延遲產(chǎn)品。
48.根據(jù)權(quán)利要求46所述的機(jī)器可讀存儲,其特征在于,還包括代碼,所述代碼用于使用至少一部分所述更新的至少所述一部分所述獲得的TCP連接變量來處理所述至少所述至少一個(gè)TCP連接。
49.根據(jù)權(quán)利要求46所述的機(jī)器可讀存儲,其特征在于,還包括代碼,所述代碼用于從棧取出所述TCP連接變量。
50.根據(jù)權(quán)利要求46所述的機(jī)器可讀存儲,其特征在于,還包括代碼,所述代碼用于將所述更新的至少一部分所述獲得的TCP連接變量加到棧上。
全文摘要
本發(fā)明的方面可包括TCP卸載,該卸載可包括從至少一個(gè)TCP連接獲得TCP連接變量并且使用獲得的TCP連接變量管理至少一個(gè)TCP連接??梢愿轮辽僖徊糠肢@得的TCP連接變量,并可將至少一部分更新的TCP連接變量傳送回主機(jī)。在本發(fā)明的一個(gè)方面中,TCP連接變量可以是獨(dú)立于帶寬延遲產(chǎn)品的變量??捎芍鳈C(jī)使用至少一部分更新的TCP連接變量以處理該TCP連接或另一個(gè)TCP連接。主機(jī)可將變量推入棧中,TOE可從棧取出變量。同樣,可由TOE將更新的TCP連接變量推入棧中,并由主機(jī)從棧取出變量。
文檔編號H04L12/46GK1679015SQ03820357
公開日2005年10月5日 申請日期2003年8月29日 優(yōu)先權(quán)日2002年8月30日
發(fā)明者尤里·埃爾朱, 弗蘭克·凡, 史蒂夫·林賽, 斯科特·S·麥克丹尼爾 申請人:美國博通公司