專利名稱:一種軟硬件結(jié)合實現(xiàn)tcp連接數(shù)據(jù)緩存的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)數(shù)據(jù)處理領(lǐng)域,具體涉及一種軟硬件結(jié)合實現(xiàn)TCP連接數(shù)據(jù)緩存 的方法。
背景技術(shù):
TCP卸載技術(shù)是把主機軟件中的TCP/IP網(wǎng)絡(luò)協(xié)議棧處理固化到網(wǎng)卡硬件中實現(xiàn), 以便降低系統(tǒng)CPU負載,增大網(wǎng)絡(luò)IO帶寬的技術(shù)。TCP卸載系統(tǒng)一般包括兩部分功能,第一 部分是TCP連接狀態(tài)管理,用TCP連接表來維護每個TCP連接開始、數(shù)據(jù)傳輸、關(guān)閉的狀態(tài)。 第二部分是TCP數(shù)據(jù)管理,用來把亂序的TCP報文的數(shù)據(jù)進行重新排序,把TCP傳輸?shù)臄?shù)據(jù) 提取出來提交給主機。一般在TCP卸載系統(tǒng)中,硬件在進行TCP數(shù)據(jù)管理時,一般在TCP卸載系統(tǒng)中使用 一個數(shù)據(jù)緩存器,把每個TCP連接的數(shù)據(jù)提取出來,用緩沖器完成TCP數(shù)據(jù)的重排序和拼 接,然后以緩沖區(qū)為單位向主機系統(tǒng)提交。在有些需要對TCP數(shù)據(jù)實時處理的系統(tǒng)中,主機不僅需要及時拿到TCP傳輸?shù)臄?shù) 據(jù),有時還需要把上一個數(shù)據(jù)包的末尾的數(shù)據(jù)和下一個數(shù)據(jù)包的開頭的數(shù)據(jù)連起來處理, 也就是說需要緩存上一個數(shù)據(jù)包的部分數(shù)據(jù)到下一個數(shù)據(jù)包中,如果在硬件中進行緩存, 就需要硬件消耗大量的存儲。
發(fā)明內(nèi)容
本發(fā)明的目的是在軟件中對指定tcp連接的當前報文的末尾數(shù)據(jù)緩存,避免硬件 的增加存儲成本。一種軟硬件結(jié)合實現(xiàn)TCP連接數(shù)據(jù)緩存的方法,步驟如下A、網(wǎng)卡接收報文,啟動TCP卸載功能,對TCP連接狀態(tài)管理,對發(fā)生亂序的TCP數(shù) 據(jù)進行重排序,并以報文為單位上傳至主機軟件;B、接口庫為每個新建的TCP連接構(gòu)造TCP節(jié)點結(jié)構(gòu),包括該TCP當前數(shù)據(jù)緩存和 指向數(shù)據(jù)開始位置的指針;C、接口庫收到一個TCP連接的數(shù)據(jù)包時,根據(jù)該報文查找對應(yīng)的TCP節(jié)點結(jié)構(gòu),然 后提取出報文中包含的TCP數(shù)據(jù),放入節(jié)點結(jié)構(gòu)中當前報文的數(shù)據(jù)緩存區(qū)域;D、應(yīng)用軟件需要緩存當前TCP報文中的數(shù)據(jù)時,則調(diào)用接口庫提供的API,傳入緩 存數(shù)據(jù)的長度,接口庫響應(yīng)調(diào)用,在TCP節(jié)點中記錄緩存數(shù)據(jù)長度,把當前TCP數(shù)據(jù)末尾的 指定長度內(nèi)容拷貝到TCP節(jié)點結(jié)構(gòu)的數(shù)據(jù)緩存的預(yù)留空間中;E、當該TCP節(jié)點的下一個報文到來時,接口庫把報文中的TCP數(shù)據(jù)放入TCP節(jié)點 結(jié)構(gòu)中當前報文的數(shù)據(jù)緩存區(qū)域,并根據(jù)TCP節(jié)點中記錄的上次緩存的上一個報文的數(shù)據(jù) 長度,向前偏移當前TCP數(shù)據(jù)的指針,使指針指向上一個包的末尾數(shù)據(jù),提交應(yīng)用處理。本發(fā)明的一種優(yōu)選技術(shù)方案在于所述主機軟件主要是在應(yīng)用軟件API接口庫 中,對表示一個TCP連接的TCP節(jié)點結(jié)構(gòu)進行擴展,在每個包TCP數(shù)據(jù)的內(nèi)存之前,預(yù)留出一塊緩存區(qū)域,用來緩存上一個包中的末尾數(shù)據(jù),同時記錄緩存數(shù)據(jù)的長度,并使用一個指 針,表示當前要處理的數(shù)據(jù)的起始位置。本發(fā)明的另一優(yōu)選技術(shù)方案在于TCP數(shù)據(jù)緩存包括兩部分,一部分是當前報文 的數(shù)據(jù)緩存,另一部分是根據(jù)系統(tǒng)預(yù)設(shè)的需要緩存的上一個包的末尾數(shù)據(jù)的大小,在當前 報文數(shù)據(jù)緩存之前,預(yù)留的一塊空間。本發(fā)明不需要在TCP卸載系統(tǒng)的網(wǎng)卡硬件中緩存數(shù)據(jù),降低網(wǎng)卡硬件成本。
圖1是本發(fā)明系統(tǒng)組成原理圖
具體實施例方式本發(fā)明是一個軟硬件結(jié)合的系統(tǒng),硬件是可以對網(wǎng)絡(luò)報文進行TCP連接管理和亂 序重排的TCP卸載設(shè)備。軟件主要是在應(yīng)用軟件API接口庫中,對表示一個TCP連接的TCP 節(jié)點結(jié)構(gòu)進行擴展,在每個包TCP數(shù)據(jù)的內(nèi)存之前,預(yù)留出一塊緩存區(qū)域,用來緩存上一個 包中的末尾數(shù)據(jù),同時記錄緩存數(shù)據(jù)的長度,并使用一個指針,表示當前要處理的數(shù)據(jù)的起 始位置。該發(fā)明的實現(xiàn)方法和過程如下(1)硬件網(wǎng)卡接收報文,進行TCP連接管理和排序。網(wǎng)卡啟動TCP卸載功能,對TCP連接狀態(tài)管理,對發(fā)生亂序的TCP數(shù)據(jù)進行重排 序,以報文為單位上傳給主機軟件。(2)接口庫為新建連接構(gòu)造TCP節(jié)點結(jié)構(gòu)。接口庫為每個新建的TCP連接構(gòu)造TCP節(jié)點結(jié)構(gòu),其中包括該TCP連接當前數(shù)據(jù) 的緩存和指向數(shù)據(jù)開始位置的指針。TCP數(shù)據(jù)緩存包括兩部分,一部分是當前報文的數(shù)據(jù)緩 存,另一部分是根據(jù)系統(tǒng)預(yù)設(shè)的需要緩存的上一個包的末尾數(shù)據(jù)的大小,在當前報文數(shù)據(jù) 緩存之前,預(yù)留的一塊空間。(3)接口庫從數(shù)據(jù)報文中提取TCP數(shù)據(jù),更新TCP節(jié)點結(jié)構(gòu)當接口收到一個TCP連接的數(shù)據(jù)包時,首先根據(jù)該報文查找到對應(yīng)的TCP節(jié)點結(jié) 構(gòu),然后提取出報文中包含的TCP數(shù)據(jù),放入TCP節(jié)點結(jié)構(gòu)中當前報文的數(shù)據(jù)緩存區(qū)域。(4)接口庫在TCP節(jié)點中緩存數(shù)據(jù)。應(yīng)用軟件需要緩存當前TCP報文中的數(shù)據(jù)時,則調(diào)用接口庫提供的API,傳入緩存 數(shù)據(jù)的長度。接口庫響應(yīng)調(diào)用,在TCP節(jié)點中記錄緩存數(shù)據(jù)長度,把當前TCP數(shù)據(jù)末尾的指 定長度的內(nèi)容,拷貝到TCP節(jié)點結(jié)構(gòu)的數(shù)據(jù)緩存的預(yù)留空間中。(5)接口庫使用緩存數(shù)據(jù)拼接報文。當該TCP節(jié)點的下一個報文到來時,接口庫把報文中的TCP數(shù)據(jù)放入TCP節(jié)點結(jié) 構(gòu)中當前報文的數(shù)據(jù)緩存區(qū)域,并根據(jù)TCP節(jié)點中記錄的上次緩存的上一個報文的數(shù)據(jù)長 度,向前偏移當前TCP數(shù)據(jù)的指針,使指針指向上一個包的末尾數(shù)據(jù),提交應(yīng)用處理。
權(quán)利要求
1.一種軟硬件結(jié)合實現(xiàn)TCP連接數(shù)據(jù)緩存的方法,其特征在于步驟如下A、網(wǎng)卡接收報文,啟動TCP卸載功能,對TCP連接狀態(tài)管理,對發(fā)生亂序的TCP數(shù)據(jù)進 行重排序,并以報文為單位上傳至主機軟件;B、接口庫為每個新建的TCP連接構(gòu)造TCP節(jié)點結(jié)構(gòu),包括該TCP連接的當前數(shù)據(jù)緩存 和指向數(shù)據(jù)開始位置的指針;C、接口庫收到一個TCP連接的數(shù)據(jù)包時,根據(jù)該報文查找對應(yīng)的TCP節(jié)點結(jié)構(gòu),然后提 取出報文中包含的TCP數(shù)據(jù),放入節(jié)點結(jié)構(gòu)中當前報文的數(shù)據(jù)緩存區(qū)域;D、應(yīng)用軟件需要緩存當前TCP報文中的數(shù)據(jù)時,則調(diào)用接口庫提供的API,傳入緩存數(shù) 據(jù)的長度,接口庫響應(yīng)調(diào)用,在TCP節(jié)點中記錄緩存數(shù)據(jù)長度,把當前TCP數(shù)據(jù)末尾的指定 長度內(nèi)容拷貝到TCP節(jié)點結(jié)構(gòu)的數(shù)據(jù)緩存的預(yù)留空間中;E、當該TCP節(jié)點的下一個報文到來時,接口庫把報文中的TCP數(shù)據(jù)放入TCP節(jié)點結(jié) 構(gòu)中當前報文的數(shù)據(jù)緩存區(qū)域,并根據(jù)TCP節(jié)點中記錄的上次緩存的上一個報文的數(shù)據(jù)長 度,向前偏移當前TCP數(shù)據(jù)的指針,使指針指向上一個包的末尾數(shù)據(jù),提交應(yīng)用處理。
2.如權(quán)利要求1所述一種軟硬件結(jié)合實現(xiàn)TCP連接數(shù)據(jù)緩存的方法,其特征在于所 述主機軟件主要是在應(yīng)用軟件API接口庫中,對表示一個TCP連接的TCP節(jié)點結(jié)構(gòu)進行擴 展,在每個包TCP數(shù)據(jù)的內(nèi)存之前,預(yù)留出一塊緩存區(qū)域,用來緩存上一個包中的末尾數(shù) 據(jù),同時記錄緩存數(shù)據(jù)的長度,并使用一個指針,表示當前要處理的數(shù)據(jù)的起始位置。
3.如權(quán)利要求2所述一種軟硬件結(jié)合實現(xiàn)TCP連接數(shù)據(jù)緩存的方法,其特征在于TCP 數(shù)據(jù)緩存包括兩部分,一部分是當前報文的數(shù)據(jù)緩存,另一部分是根據(jù)系統(tǒng)預(yù)設(shè)的需要緩 存的上一個包的末尾數(shù)據(jù)的大小,在當前報文數(shù)據(jù)緩存之前,預(yù)留的一塊空間。
全文摘要
本發(fā)明提供了一種軟硬件結(jié)合實現(xiàn)TCP連接數(shù)據(jù)緩存的方法。硬件網(wǎng)卡接收報文,進行TCP連接管和排序,接口庫為新建連接構(gòu)造TCP節(jié)點結(jié)構(gòu),在每個包TCP數(shù)據(jù)的內(nèi)存之前,預(yù)留出一塊緩存區(qū)域,用來緩存上一個包中的末尾數(shù)據(jù),同時記錄緩存數(shù)據(jù)的長度,并使用一個指針,表示當前要處理的數(shù)據(jù)的起始位置。接口庫收到tcp數(shù)據(jù)包后,從數(shù)據(jù)報文中提取TCP數(shù)據(jù),更新TCP節(jié)點結(jié)構(gòu),如果應(yīng)用需要緩存報文,接口庫通過數(shù)據(jù)拷貝和移動指針在TCP節(jié)點中緩存數(shù)據(jù),當下一個tcp數(shù)據(jù)包達到后,接口庫使用緩存數(shù)據(jù)拼接前后兩個報文。本發(fā)明不需要在TCP卸載系統(tǒng)的網(wǎng)卡硬件中緩存數(shù)據(jù),降低網(wǎng)卡硬件成本。
文檔編號H04L29/08GK102075416SQ20101061175
公開日2011年5月25日 申請日期2010年12月17日 優(yōu)先權(quán)日2010年12月17日
發(fā)明者劉朝輝, 劉燦, 張磊, 李鋒偉, 白宗元, 竇曉光, 紀奎 申請人:曙光信息產(chǎn)業(yè)(北京)有限公司