專利名稱:基于arq信息的基站tcp代理確認(rèn)方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于無線數(shù)據(jù)通信系統(tǒng)中TCP/IP協(xié)議的數(shù)據(jù)傳輸技術(shù)領(lǐng)域,具體涉及一種基于ARQ(自動請求重傳)信息的基站TCP代理確認(rèn)方法及其系統(tǒng)。
背景技術(shù):
TCP/IP協(xié)議在Internet中廣泛使用,已經(jīng)成為網(wǎng)絡(luò)互聯(lián)的首先協(xié)議。但當(dāng)前使用的TCP協(xié)議是為有線網(wǎng)絡(luò)設(shè)計的,有線信道的誤幀率很低并且時延很小,當(dāng)TCP協(xié)議檢測到發(fā)送的報文段丟失時,即認(rèn)為在有線網(wǎng)絡(luò)上發(fā)生了擁塞,TCP協(xié)議進(jìn)入慢啟動,擁塞窗口變成等于1個最大報文段的大小,從而降低TCP的發(fā)送速率。無線網(wǎng)絡(luò)中無線信道的誤幀率較高并且時延較大,報文段丟失大部分是由無線信道的誤幀引起的,而TCP中還沒有機(jī)制來區(qū)分丟包是由誤碼造成的還是擁塞造成的,所以TCP協(xié)議檢測到發(fā)送的報文段丟失時就誤以為發(fā)生了擁塞從而進(jìn)入慢啟動,因而降低了無線信道的利用率。由于無線信道的時延較大,TCP協(xié)議的擁塞窗口從1個最大報文段的大小恢復(fù)到最大窗口大小需很長時間。在高速的無線網(wǎng)絡(luò)中,仿真顯示TCP協(xié)議的吞吐率只有20%到30%,因此需要改善無線IP接入網(wǎng)絡(luò)的TCP協(xié)議,提高在無線IP接入網(wǎng)絡(luò)中TCP協(xié)議的吞吐率。
目前國外提出的解決辦法主要有兩段TCP技術(shù)、SNOOP技術(shù)和通過數(shù)據(jù)鏈路層ARQ避免數(shù)據(jù)幀的丟失等解決辦法,兩段TCP技術(shù)存在產(chǎn)生TCP語義歧義的問題且實(shí)現(xiàn)難度相當(dāng)大,基站需同時為很多對邏輯TCP連接建立兩段TCP連接,對數(shù)據(jù)進(jìn)行緩存,對基站的CPU處理能力和存儲要求非常的高;SNOOP技術(shù)由于要求中間節(jié)點(diǎn)基站對移動主機(jī)和遠(yuǎn)端有線網(wǎng)絡(luò)上的固定主機(jī)間的分組進(jìn)行檢測及操作,在網(wǎng)絡(luò)層的IP業(yè)務(wù)流較密、發(fā)送窗口較小、丟失率較高的情況下,SNOOP技術(shù)的性能會惡化;通過數(shù)據(jù)鏈路層ARQ技術(shù)將不可靠、存在差錯的物理鏈路改造成可靠的數(shù)據(jù)邏輯鏈路,TCP連接不會因?yàn)闊o線鏈路上的丟失數(shù)據(jù)幀而進(jìn)入慢啟動,對TCP的性能有較大的提高,但數(shù)據(jù)鏈路層ARQ會增加傳輸時延造成TCP超時而進(jìn)入慢啟動。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種基于ARQ信息的基站TCP代理確認(rèn)方法及其系統(tǒng),本發(fā)明能夠改善無線接入網(wǎng)絡(luò)中TCP協(xié)議的吞吐率低的狀況,并可提高其反向無線鏈路的利用率。
本發(fā)明提供的一種基于ARQ信息的基站TCP代理確認(rèn)方法,包括下行數(shù)據(jù)處理和上行數(shù)據(jù)處理,其中下行數(shù)據(jù)處理包括下行數(shù)據(jù)的發(fā)送和接收,其處理過程為(A)下行數(shù)據(jù)發(fā)送(A1)基站判斷上層數(shù)據(jù)包是否為TCP/IP包,如果是,進(jìn)入步驟(A2),否則進(jìn)入步驟(A5);(A2)基站判斷所述TCP/IP包是否已經(jīng)被確認(rèn)過,如果是,進(jìn)入步驟(A3),否則進(jìn)入步驟(A4);(A3)基站丟棄該TCP/IP包,該數(shù)據(jù)包處理完成;(A4)基站給該TCP/IP包編號,提取源IP地址、目的IP地址、發(fā)送序號、確認(rèn)序號、源端口號和目的端口號,并將信息存入幀記錄節(jié)點(diǎn)中,然后按序插入到幀記錄節(jié)點(diǎn)鏈表中;(A5)基站判斷該TCP/IP包是否需要分割或合并,如果需要,則進(jìn)行分割或者合并,然后對數(shù)據(jù)進(jìn)行封裝和發(fā)送,否則基站直接對數(shù)據(jù)進(jìn)行封裝和發(fā)送;(B)下行數(shù)據(jù)的接收(B1)移動站接收基站發(fā)送來的數(shù)據(jù),判斷此數(shù)據(jù)是TCP數(shù)據(jù)還是鏈路層ACK信息,如果是鏈路層ACK信息則進(jìn)入步驟(B2),否則進(jìn)入步驟(B3);(B2)移動站根據(jù)鏈路層ACK信息移動發(fā)送窗口;(B3)移動站將接收的PDU放入接收窗口并對接收窗口的PDU進(jìn)行重組或解合并;(B4)移動站將重組后完整的數(shù)據(jù)提交給上層;上行數(shù)據(jù)處理包括上行數(shù)據(jù)的發(fā)送和接收,其處理過程為(C)上行數(shù)據(jù)的發(fā)送(C1)移動站從上層接收數(shù)據(jù)包,并判斷該數(shù)據(jù)包是否為TCP/IP包,如果是,進(jìn)入步驟(C2),否則進(jìn)入步驟(C8);(C2)移動站判斷該TCP/IP包的ACK標(biāo)志位是否為1,如果是,進(jìn)入步驟(C3),否則進(jìn)入步驟(C8);(C3)移動站判斷該TCP/IP包中SYN,RST和FIN字段是否全部為0,如果是,進(jìn)入步驟(C4),否則進(jìn)入步驟(C8);(C4)移動站搜索現(xiàn)有的過濾跟蹤表項(xiàng),判斷是否已為該TCP/IP包所在的TCP鏈路建立過濾跟蹤表項(xiàng),如果是,進(jìn)入步驟(C5),否則進(jìn)入步驟(C6);(C5)移動站先檢查該TCP/IP包數(shù)據(jù)長度是否為零,長度不為零進(jìn)入步驟(C7);對于數(shù)據(jù)長度為零的包再判斷是否需要進(jìn)行過濾,如果需要,移動站把該TCP/IP包所在的TCP連接對應(yīng)的過濾跟蹤表項(xiàng)中的過濾計數(shù)器加1,把無輸入數(shù)據(jù)的時間計數(shù)器清零,并丟棄該TCP/IP包,該數(shù)據(jù)包處理完畢;否則進(jìn)入步驟(C7);(C6)移動站為該TCP/IP包建立相應(yīng)的TCP過濾跟蹤表,進(jìn)入步驟(C8);(C7)移動站將該TCP/IP包所在的TCP鏈路對應(yīng)的過濾跟蹤表項(xiàng)中的過濾計數(shù)器和時間計數(shù)器清零;(C8)移動站判斷該TCP/IP包是否需要分割或合并,如果需要,則進(jìn)行分割或合并,再進(jìn)入步驟(C9),否則直接進(jìn)入步驟(C9);(C9)移動站對數(shù)據(jù)進(jìn)行封裝和發(fā)送,該數(shù)據(jù)包處理完畢;(D)上行數(shù)據(jù)的接收(D1)基站接收移動站發(fā)送的數(shù)據(jù),并判斷該數(shù)據(jù)是否為鏈路層ACK信息,如果是,進(jìn)入步驟(D7),否則進(jìn)入步驟(D2);(D2)基站判斷該數(shù)據(jù)包是否為TCP/IP包,如果是,進(jìn)入步驟(D3),否則基站將該數(shù)據(jù)包交給上層,上行數(shù)據(jù)處理完成;(D3)基站根據(jù)TCP端口和IP地址,在TCP連接跟蹤表項(xiàng)中進(jìn)行查詢,判斷該TCP/IP包是否有相應(yīng)的TCP連接跟蹤表項(xiàng),如果有,進(jìn)入步驟(D4),否則,基站根據(jù)其TCP端口,IP地址等信息為這個TCP連接建立TCP連接跟蹤表項(xiàng),進(jìn)入步驟(D6);(D4)基站判斷該TCP/IP包的發(fā)送序號是否大于對應(yīng)的該TCP對應(yīng)的連接跟蹤表項(xiàng)中的發(fā)送序號,如果是,基站把該TCP/IP包對應(yīng)TCP連接跟蹤表項(xiàng)的發(fā)送序號替換為此TCP/IP包的發(fā)送序號,進(jìn)入步驟(D5),否則直接進(jìn)入步驟(D5);(D5)基站判斷該TCP/IP包的確認(rèn)序號是否大于對應(yīng)的該TCP對應(yīng)的連接跟蹤表項(xiàng)中的確認(rèn)序號,如果是,基站把該TCP/IP包對應(yīng)TCP連接跟蹤表項(xiàng)的確認(rèn)序號替換為此TCP/IP包的確認(rèn)序號,進(jìn)入步驟(D6);否則,基站對該TCP進(jìn)行復(fù)位或直接進(jìn)入步驟(D6);(D6)基站把此TCP/IP包交給上層,對上行數(shù)據(jù)處理完成;(D7)基站根據(jù)鏈路層ACK信息移動基站的發(fā)送窗口;(D8)基站判斷移出發(fā)送窗口的數(shù)據(jù)能否重組為一個完整TCP發(fā)送包或者能否解合并為數(shù)個TCP/IP包,如果是,進(jìn)入步驟(D9),否則對此次上行數(shù)據(jù)處理完成;(D9)基站根據(jù)這個重組后的完整的TCP/IP包,或者解合并后的TCP/IP包的幀序號找到幀記錄節(jié)點(diǎn);(D10)基站根據(jù)幀記錄節(jié)點(diǎn)的內(nèi)容判斷能否找到相應(yīng)的TCP連接跟蹤表項(xiàng),如果能,進(jìn)入步驟(D11),否則,釋放相應(yīng)的幀記錄節(jié)點(diǎn);(D11)基站判斷此TCP發(fā)送包是否為順序包,如果是,基站根據(jù)此TCP/IP包的發(fā)送和確認(rèn)序號更新TCP連接跟蹤表,進(jìn)入步驟(D12);否則,基站把這個TCP/IP包的幀記錄節(jié)點(diǎn)插入相應(yīng)的TCP連接跟蹤表項(xiàng)的亂序包記錄節(jié)點(diǎn)鏈表中,直到這個亂序包之前所有的包都正確接收了才能從亂序包記錄節(jié)點(diǎn)鏈表里面刪除它,此次上行數(shù)據(jù)接收處理完畢;(D12)基站根據(jù)更新過的TCP連接跟蹤表判斷亂序包記錄節(jié)點(diǎn)鏈表中是否有包可以成為順序包,如果是,把這些包的幀記錄節(jié)點(diǎn)從亂序包記錄節(jié)點(diǎn)中刪除,更新TCP連接跟蹤表項(xiàng)并生成相應(yīng)的TCP連接的ACK并發(fā)送,此次上行數(shù)據(jù)包處理完成;否則根據(jù)(D11)中為順序包的TCP發(fā)送包生成TCP/IP包的ACK進(jìn)行發(fā)送,此次上行數(shù)據(jù)處理完成。
上述步驟(A2)中,基站采用下述方法進(jìn)行判斷根據(jù)該包的發(fā)送序號與包長度之和同TCP連接跟蹤表項(xiàng)中的確認(rèn)序號相比較來判斷所述TCP/IP包是否已經(jīng)被確認(rèn)過。
上述步驟(C5)中,移動站按照下述步驟判斷該TCP/IP包是否需要進(jìn)行過濾①移動站判斷是否已經(jīng)過濾了n個該TCP/IP包所在的TCP連接的包,5≤n≤15,如果是,進(jìn)入步驟(C7),否則進(jìn)入步驟②;②移動站判斷是否對該TCP/IP包所在的TCP鏈路連續(xù)過濾了kms,50≤k≤300,如果是,進(jìn)入步驟(C7),否則進(jìn)入步驟③;③移動站把該TCP/IP包所在的TCP連接對應(yīng)的過濾跟蹤表項(xiàng)中的過濾計數(shù)器加1,把無輸入數(shù)據(jù)的時間計數(shù)器清零,并且丟棄該TCP/IP包,該數(shù)據(jù)包處理完畢。
上述基于ARQ信息的基站TCP代理確認(rèn)系統(tǒng)包括采用無線鏈路連接的基站和移動站,其鏈路層采用自動請求重傳機(jī)制(ARQ);其中基站包括基站啟動控制模塊、發(fā)送分析模塊、基站分割重組模塊、代理確認(rèn)模塊和接收分析模塊;移動站包括移動站啟動控制模塊、移動站分割重組模塊和過濾模塊;基站啟動控制模塊用于完成用戶級的初始化與重置,并啟動選定的TCP連接的代理確認(rèn)過程;發(fā)送分析模塊用于對下行數(shù)據(jù)幀進(jìn)行分析,如果該幀中封裝的是TCP/IP包,則進(jìn)行分析過濾,否則給該數(shù)據(jù)幀賦予一個0值作為幀編號直接交給分割重組模塊發(fā)送;基站分割重組模塊根據(jù)PDU最大發(fā)送長度將下行的數(shù)據(jù)幀分割為多個PDU緩存于數(shù)據(jù)鏈路層發(fā)送窗口發(fā)送,它與移動站分割重組模塊采用自動請求重傳(ARQ)機(jī)制配合處理數(shù)據(jù)鏈路層的數(shù)據(jù)收發(fā);基站代理確認(rèn)模塊在TCP連接跟蹤表項(xiàng)為運(yùn)行狀態(tài)的時候,根據(jù)基站分割重組模塊發(fā)送的可確認(rèn)代理指示生成TCP連接的ACK幀并發(fā)送給上層;基站代理確認(rèn)模塊檢測到封裝RST或FIN報文段的數(shù)據(jù)幀發(fā)送到移動站,表明該TCP連接已經(jīng)重置或者斷開,基站代理確認(rèn)模塊清空連接跟蹤表中對應(yīng)該連接的表項(xiàng),結(jié)束對該TCP連接的代理確認(rèn);基站接收分析模塊用于分析通過基站的上行數(shù)據(jù)幀,負(fù)責(zé)對基站代理確認(rèn)模塊所管理的TCP連接跟蹤表項(xiàng)進(jìn)行修改,或者將上行數(shù)據(jù)幀直接交給上層;移動站啟動控制模塊負(fù)責(zé)控制移動站過濾模塊的開啟或者關(guān)閉;移動站分割重組模塊將下行的數(shù)據(jù)幀分割為多個PDU緩存于數(shù)據(jù)鏈路層發(fā)送窗口發(fā)送,它與基站分割重組模塊之間采用自動請求重傳機(jī)制配合處理數(shù)據(jù)鏈路層的數(shù)據(jù)收發(fā);移動站分割重組模塊將移動站過濾模塊給自己的數(shù)據(jù)按照PDU最大長度進(jìn)行分割,然后編號按照ARQ協(xié)議進(jìn)行發(fā)送,同時也對基站分割重組模塊發(fā)送的鏈路層ACK進(jìn)行分析進(jìn)行ARQ協(xié)議操作;移動站過濾模塊用于對從IP層來的所有封裝TCP/IP報文段的TCP/IP包進(jìn)行分析,對建立了過濾跟蹤表項(xiàng)并且狀態(tài)為運(yùn)行的TCP鏈接的TCP/IP包進(jìn)行過濾。
本發(fā)明克服了現(xiàn)有技術(shù)中存在的無線鏈路高誤碼引起的TCP協(xié)議的吞吐率降低的問題,具體而言,本發(fā)明具有以下技術(shù)效果(1)本發(fā)明由基站基于ARQ信息來代理移動站發(fā)送TCP確認(rèn)報文段,省去了確認(rèn)應(yīng)答在無線鏈路上發(fā)送的時間,能夠大大降低有線上的網(wǎng)絡(luò)服務(wù)器發(fā)送TCP數(shù)據(jù)報文段到接收到確認(rèn)報文段的往返時延RTT。本發(fā)明一方面可以大大提高TCP發(fā)送窗口的移動速度,另一方面由于數(shù)據(jù)鏈路層ARQ增加傳輸時延造成TCP超時的概率大大降低,從而進(jìn)入慢啟動的次數(shù)大大下降,此外當(dāng)TCP進(jìn)入慢啟動,TCP協(xié)議的擁塞窗口從1個最大報文段的大小恢復(fù)到最大窗口大小需要的時間大大降低。
(2)基站對下行數(shù)據(jù)幀不是全部緩存,而是將源IP地址、目的IP地址、發(fā)送序號、確認(rèn)序號、源端口號、目的端口號、TCP標(biāo)志信息和該數(shù)據(jù)幀的編號等信息存入到一個幀記錄節(jié)點(diǎn)中緩存,通過數(shù)據(jù)幀的編號在幀記錄節(jié)點(diǎn)和數(shù)據(jù)幀之間建立一一對應(yīng)的關(guān)系,改善了SNOOP、兩段TCP技術(shù)對基站的CPU處理能力和存儲要求非常的高的問題。
(3)基站基于ARQ信息,僅在下行數(shù)據(jù)幀確實(shí)到達(dá)移動站后才會代理移動站發(fā)送TCP確認(rèn)報文段,避免了兩段TCP技術(shù)容易產(chǎn)生TCP語義歧義的問題。通過對移動站上行確認(rèn)報文段的過濾可以大大降低反向無線鏈路上的TCP連接的ACK報文段產(chǎn)生的數(shù)據(jù)負(fù)載。目前的數(shù)據(jù)業(yè)務(wù)絕大部分為TCP業(yè)務(wù),而移動站的TCP報文段絕大部分又為TCP確認(rèn)報文段,通過對移動站確認(rèn)報文段過濾可以將移動站發(fā)送數(shù)據(jù)幀的數(shù)目減小到20%到40%,從而極大地提高反向無線鏈路的利用率,適應(yīng)無線IP網(wǎng)絡(luò)中的業(yè)務(wù)非對稱特性,留出上行數(shù)據(jù)帶寬以支持各種實(shí)時業(yè)務(wù)。
圖1、2為下行數(shù)據(jù)處理流程示意圖,其中圖1為基站數(shù)據(jù)發(fā)送流程,圖2為移動站數(shù)據(jù)接收流程;圖3、4為上行數(shù)據(jù)處理流程示意圖,其中圖3為移動站數(shù)據(jù)發(fā)送流程示意圖,圖4為基站數(shù)據(jù)接收流程示意圖;圖5為基于ARQ信息的基站TCP代理確認(rèn)方法的邏輯結(jié)構(gòu)圖;圖6為基站的代理狀態(tài)轉(zhuǎn)換圖;圖7為移動站的代理狀態(tài)轉(zhuǎn)換圖。
具體實(shí)施例方式
下面結(jié)合附圖和實(shí)例對本發(fā)明作進(jìn)一步詳細(xì)的說明。
基站分析TCP/IP包,得到充分的信息后判斷可以啟動代理確認(rèn),即將包括發(fā)送序號,確認(rèn)序號,源IP地址,目的IP地址,源端口,目的端口等當(dāng)前TCP連接的信息記錄在TCP連接跟蹤表中,每個連接對應(yīng)一個表項(xiàng)。并給移動站發(fā)送連接允許啟動指示信息,之后執(zhí)行代理確認(rèn),而移動站在收到指示信息后開始過濾工作。
本發(fā)明由基站主控,移動站總是在基站執(zhí)行代理確認(rèn)后開始過濾工作,容易實(shí)現(xiàn)同步,而且由于不需要跟蹤TCP的連接建立過程,因而可以方便的隨時啟動。
本發(fā)明包括上行數(shù)據(jù)和下行數(shù)據(jù)處理二部分,下面分別對各部分作進(jìn)一步詳細(xì)的說明。
一、下行數(shù)據(jù)處理包括下行數(shù)據(jù)的發(fā)送和接收,其處理過程為(A)下行數(shù)據(jù)的發(fā)送,如圖1所示,其過程為(A1)基站判斷上層數(shù)據(jù)包是否為TCP/IP包,如果是,進(jìn)入步驟(A2),否則進(jìn)入步驟(A5);(A2)基站判斷所述TCP/IP包是否已經(jīng)被確認(rèn)過,如果是,進(jìn)入步驟(A3),否則進(jìn)入步驟(A4);基站可以采用多種方式進(jìn)行判斷,其中比較簡單的方式是根據(jù)該包的發(fā)送序號與包長度之和同TCP鏈接跟蹤表項(xiàng)中的確認(rèn)序號相比較來判斷所述TCP/IP包是否已經(jīng)被確認(rèn)過。
(A3)基站丟棄該TCP/IP包,該數(shù)據(jù)包處理完成;(A4)基站給該TCP/IP包編號,提取源IP地址、目的IP地址、發(fā)送序號、確認(rèn)序號、源端口號和目的端口號,并將這些信息存入到一個幀記錄節(jié)點(diǎn)中,然后按序插入到幀記錄節(jié)點(diǎn)鏈表中。
(A5)基站判斷該TCP/IP包是否需要分割或合并(如根據(jù)PDU最大長度),如果需要,則進(jìn)行分割或者合并,然后對數(shù)據(jù)進(jìn)行封裝和發(fā)送,否則基站直接對數(shù)據(jù)進(jìn)行封裝和發(fā)送。
(B)下行數(shù)據(jù)的接收,如圖2所示,其過程為(B1)移動站接收基站發(fā)送來的數(shù)據(jù),判斷此數(shù)據(jù)是TCP數(shù)據(jù)還是鏈路層ACK信息,如果是鏈路層ACK信息則進(jìn)入步驟(B2),否則進(jìn)入步驟(B3);(B2)移動站根據(jù)鏈路層ACK信息移動發(fā)送窗口;(B3)移動站將接收的PDU放入接收窗口并對接收窗口的PDU進(jìn)行重組或解合并;(B4)移動站將重組后完整的數(shù)據(jù)提交給上層;二、上行數(shù)據(jù)處理包括上行數(shù)據(jù)的發(fā)送和接收,其處理過程為(C)上行數(shù)據(jù)的發(fā)送,如圖3所示,其過程為
(C1)移動站從上層接收數(shù)據(jù)包,并判斷該數(shù)據(jù)包是否為TCP/IP包,如果是,進(jìn)入步驟(C2),否則進(jìn)入步驟(C8);(C2)移動站判斷該TCP/IP包的ACK標(biāo)志位是否為1,如果是,進(jìn)入步驟(C3),否則進(jìn)入步驟(C8);(C3)移動站判斷該TCP/IP包中SYN,RST和FIN字段是否全部為0,如果是,進(jìn)入步驟(C4),否則進(jìn)入步驟(C8);(C4)移動站搜索現(xiàn)有的過濾跟蹤表項(xiàng),判斷是否已為該TCP/IP包所在的TCP鏈路建立過濾跟蹤表項(xiàng),如果是,進(jìn)入步驟(C5),否則進(jìn)入步驟(C6);(C5)移動站先檢查該TCP/IP包數(shù)據(jù)長度是否為零,長度不為零進(jìn)入步驟(C7);對于數(shù)據(jù)長度為零的包再判斷是否需要進(jìn)行過濾,如果需要,移動站把該TCP/IP包所在的TCP連接對應(yīng)的過濾跟蹤表項(xiàng)中的過濾計數(shù)器加1,把無輸入數(shù)據(jù)的時間計數(shù)器清零,并丟棄該TCP/IP包,該數(shù)據(jù)包處理完畢;否則進(jìn)入步驟(C7)。
移動站可以采用多種方式判斷該TCP/IP包是否需要進(jìn)行過濾,如根據(jù)已過濾個數(shù)進(jìn)行判斷,或根據(jù)已過濾時間進(jìn)行判斷,或采用過濾個數(shù)和時間相結(jié)合的方法進(jìn)行判斷。下面具體說明第三種方法①移動站判斷是否已經(jīng)過濾了n(n的取值范圍應(yīng)該在5到15之間,其中8到12比較理想,這里取10)個該TCP/IP包所在的TCP連接的包,如果是,進(jìn)入步驟(C7),否則進(jìn)入步驟②;②移動站判斷是否對該TCP/IP包所在的TCP鏈路連續(xù)過濾了k(k的取值范圍應(yīng)該在50到300之間,其中80到120比較理想,這里取100)ms,如果是,進(jìn)入步驟(C7),否則進(jìn)入步驟③;③移動站把該TCP/IP包所在的TCP連接對應(yīng)的過濾跟蹤表項(xiàng)中的過濾計數(shù)器(Filter_counter)加1,把無輸入數(shù)據(jù)的時間計數(shù)器(time_without_input)清零,并且丟棄該TCP/IP包,該數(shù)據(jù)包處理完畢;(C6)移動站為該TCP/IP包建立相應(yīng)的TCP過濾跟蹤表,進(jìn)入步驟(C8);(C7)移動站將該TCP/IP包所在的TCP鏈路對應(yīng)的過濾跟蹤表項(xiàng)中的過濾計數(shù)器和時間計數(shù)器清零;(C8)移動站判斷該TCP/IP包是否需要分割或合并,如果需要,則進(jìn)行分割或合并,再進(jìn)入步驟(C9),否則直接進(jìn)入步驟(C9);(C9)移動站對數(shù)據(jù)進(jìn)行封裝和發(fā)送,該數(shù)據(jù)包處理完畢;上述上行數(shù)據(jù)的發(fā)送步驟中,移動站也可以先判斷該TCP/IP包是否需要分割或合并再判斷該TCP/IP包是否需要過濾。
(D)上行數(shù)據(jù)的接收,如圖4所示,其過程為(D1)基站接收移動站發(fā)送的數(shù)據(jù),并判斷該數(shù)據(jù)是否為鏈路層ACK信息,如果是,進(jìn)入步驟(D7),否則進(jìn)入步驟(D2);(D2)基站判斷該數(shù)據(jù)包是否為TCP/IP包,如果是,進(jìn)入步驟(D3),否則基站將該數(shù)據(jù)包交給上層,上行數(shù)據(jù)處理完成;(D3)基站根據(jù)TCP端口和IP地址,在TCP連接跟蹤表項(xiàng)中進(jìn)行查詢,判斷該TCP/IP包是否有相應(yīng)的TCP連接跟蹤表項(xiàng),如果有,進(jìn)入步驟(D4),否則,基站根據(jù)其TCP端口,IP地址等信息為這個TCP連接建立TCP連接跟蹤表項(xiàng),進(jìn)入步驟(D6);(D4)基站判斷該TCP/IP包的發(fā)送序號是否大于對應(yīng)的該TCP對應(yīng)的連接跟蹤表項(xiàng)中的發(fā)送序號,如果是,基站把該TCP/IP包對應(yīng)TCP連接跟蹤表項(xiàng)的發(fā)送序號替換為此TCP/IP包的發(fā)送序號,進(jìn)入步驟(D5),否則直接進(jìn)入步驟(D5);(D5)基站判斷該TCP/IP包的確認(rèn)序號是否大于對應(yīng)的該TCP對應(yīng)的連接跟蹤表項(xiàng)中的確認(rèn)序號,如果是,基站把該TCP/IP包對應(yīng)TCP連接跟蹤表項(xiàng)的確認(rèn)序號替換為此TCP/IP包的確認(rèn)序號,進(jìn)入步驟(D6);否則,基站根據(jù)具體情況對該TCP進(jìn)行復(fù)位或直接進(jìn)入步驟(D6);如果基站發(fā)現(xiàn)該TCP/IP包的確認(rèn)序號小于對應(yīng)的該TCP對應(yīng)的連接跟蹤表項(xiàng)中的確認(rèn)序號,并且它們之間的差值大于某個值A(chǔ)時,對該TCP進(jìn)行復(fù)位(A一般達(dá)到256就應(yīng)該復(fù)位,我們系統(tǒng)使用的是2048),否則把此TCP/IP包交給上層,對該上行數(shù)據(jù)處理完成。
(D6)基站把此TCP/IP包交給上層,對上行數(shù)據(jù)處理完成;(D7)基站根據(jù)鏈路層ACK信息移動基站的發(fā)送窗口;(D8)基站判斷移出發(fā)送窗口的數(shù)據(jù)能否重組為一個完整TCP發(fā)送包或者能否解合并為數(shù)個TCP/IP包,如果是,進(jìn)入步驟(D9),否則對此次上行數(shù)據(jù)處理完成;(D9)基站根據(jù)這個重組后的完整的TCP/IP包,或者解合并后的TCP/IP包的幀序號找到幀記錄節(jié)點(diǎn);(D10)基站根據(jù)幀記錄節(jié)點(diǎn)的內(nèi)容判斷能否找到相應(yīng)的TCP連接跟蹤表項(xiàng),如果能,進(jìn)入步驟(D11),否則,釋放相應(yīng)的幀記錄節(jié)點(diǎn);(D11)基站判斷此TCP發(fā)送包是否為順序包,如果是,基站根據(jù)此TCP/IP包的發(fā)送和確認(rèn)序號更新TCP連接跟蹤表,進(jìn)入步驟(D12);否則,基站把這個TCP/IP包的幀記錄節(jié)點(diǎn)插入相應(yīng)的TCP連接跟蹤表項(xiàng)的亂序包記錄節(jié)點(diǎn)鏈表中,直到這個亂序包之前所有的包都正確接收了才能從亂序包記錄節(jié)點(diǎn)鏈表里面刪除它,此次上行數(shù)據(jù)接收處理完畢;(D12)基站根據(jù)更新過的TCP連接跟蹤表判斷亂序包記錄節(jié)點(diǎn)鏈表中是否有包可以成為順序包,如果是,把這些包的幀記錄節(jié)點(diǎn)從亂序包記錄節(jié)點(diǎn)中刪除,更新TCP連接跟蹤表項(xiàng)并生成相應(yīng)的TCP連接的ACK并發(fā)送,此次上行數(shù)據(jù)包處理完成;否則根據(jù)(D11)中為順序包的TCP發(fā)送包生成TCP/IP包的ACK進(jìn)行發(fā)送,此次上行數(shù)據(jù)處理完成。
在移動站切換,偵測到RST或者FIN不為零的TCP/IP包,長時間沒有上下行數(shù)據(jù)這三種情況下停止TCP代理確認(rèn)。
基于ARQ信息的基站TCP代理確認(rèn)系統(tǒng)的邏輯結(jié)構(gòu)圖如圖5所示,系統(tǒng)包括基站和移動站兩個部分,基站和移動站之間是無線鏈路,其鏈路層采用可靠的自動請求重傳機(jī)制(ARQ)?;纠肁RQ提供的確認(rèn)信息,對數(shù)據(jù)鏈路層的幀中封裝TCP報文段進(jìn)行分析處理來代理移動站發(fā)送TCP確認(rèn)報文段,過濾已經(jīng)被確認(rèn)過的下行數(shù)據(jù)包,而移動站負(fù)責(zé)過濾這些TCP確認(rèn)報文段?;景ɑ締涌刂颇K1、發(fā)送分析模塊2、基站分割重組模塊3、代理確認(rèn)模塊4和接收分析模塊5。移動站包括移動站啟動控制模塊6、移動站分割重組模塊7和移動站過濾模塊8。
下面對各模塊的功能作進(jìn)一步詳細(xì)的說明。
基站啟動控制模塊1用于完成用戶級的初始化與重置,并啟動選定的TCP連接的代理確認(rèn)過程。
當(dāng)移動站接入基站且移動站發(fā)送代理確認(rèn)允許信息時,基站初始化對應(yīng)于該移動站的連接跟蹤表,設(shè)置允許使用TCP代理,并根據(jù)接收到的上行TCP/IP包建立相應(yīng)的TCP連接跟蹤表項(xiàng)。每一個連接對應(yīng)連接跟蹤表中的一個表項(xiàng),記錄了連接的代理狀態(tài)、源IP地址、目的IP地址、源端口號、目的端口號、發(fā)送序號、確認(rèn)序號等信息。
當(dāng)移動站PPP連接斷掉時,基站重置對應(yīng)該移動站的連接跟蹤表,釋放掉對應(yīng)于該移動站所有連接代理占用的資源,并禁止代理工作。
基站定時檢查移動站的歸屬情況,如果移動站切換到另一個基站,則原有基站將該移動站的代理確認(rèn)暫停,如果移動站已經(jīng)更新歸屬于其它基站,則原有基站結(jié)束對該移動站的所有TCP代理確認(rèn)。
移動站在切換前停止過濾上行確認(rèn),切換到拜訪基站后再按代理確認(rèn)的啟動過程響應(yīng)新基站的TCP代理確認(rèn)。
圖6是基站對應(yīng)于某一個TCP連接的的代理狀態(tài)轉(zhuǎn)換圖,每一個TCP連接對應(yīng)的代理在基站代理確認(rèn)模塊4內(nèi)都有三個狀態(tài),空閑,暫停,運(yùn)行。
初始狀態(tài)是空閑,當(dāng)收到一個指示接收窗口不為0且RST、FIN為0的上行TCP/IP包后,轉(zhuǎn)為暫停狀態(tài),根據(jù)對該TCP/IP包的分析初始化跟蹤表中的該連接表項(xiàng),并給此移動站發(fā)送一個啟動此連接TCP代理的指示。具體實(shí)施中啟動代理指示的結(jié)構(gòu)如表1。
表1基站啟動代理指示的結(jié)構(gòu)在暫停狀態(tài)內(nèi),T_BS_PAUSE時間內(nèi)還未收到一個指示接收窗口不為0的上行TCP/IP包,轉(zhuǎn)移到空閑狀態(tài)。如果收到,轉(zhuǎn)移到運(yùn)行狀態(tài)。基站的代理確認(rèn)模塊4只會在TCP連接跟蹤表項(xiàng)為運(yùn)行狀態(tài)的時候工作。
在運(yùn)行狀態(tài)內(nèi),如果持續(xù)T_BS_NO_DATA_TIMEOUT時間內(nèi)未收到任何上下行數(shù)據(jù),轉(zhuǎn)移到空閑。如果收到指示接收窗口為0的上行TCP/IP包,轉(zhuǎn)移到暫停狀態(tài)。收到其他上行TCP/IP包,按照基站接收分析模塊5中生成TCP應(yīng)答策略來生成上行的TCP應(yīng)答。
如果在T_MIN_PURE_ACK時間內(nèi)連續(xù)收到對應(yīng)于某個TCP連接的指示接收窗口不為0且RST、FIN為0的TCP應(yīng)答報文段大于30個,則表明移動站沒有響應(yīng)基站的代理確認(rèn)對該TCP連接啟動過濾策略,需要再次給移動站發(fā)送一個啟動此連接TCP的代理確認(rèn)的命令。
基站發(fā)送分析模塊2用于對下行數(shù)據(jù)幀進(jìn)行分析,如果該幀中封裝的是TCP/IP包,則進(jìn)行分析過濾,否則給該數(shù)據(jù)幀賦予一個0值作為幀編號直接交給分割重組模塊3發(fā)送。
如果該幀中封裝TCP/IP包已經(jīng)被基站代理確認(rèn),則該幀中封裝的是屬于不必要的重傳TCP數(shù)據(jù)報文段,可以進(jìn)行過濾不用發(fā)送。具體實(shí)施中,讀取該幀中封裝TCP報文段的發(fā)送序號和TCP報文段數(shù)據(jù)長度,如果發(fā)送序號和數(shù)據(jù)長度的和小于和等于連接跟蹤表中該連接表項(xiàng)的確認(rèn)序號,則過濾該下行數(shù)據(jù)幀不提交給分割重組模塊發(fā)送。
如果該幀中封裝不是重傳的TCP數(shù)據(jù)報文段,則給該數(shù)據(jù)幀賦予一個遞加的值作為幀編號,幀編號的范圍為1到65535,循環(huán)使用,相鄰兩個封裝TCP/IP包的數(shù)據(jù)幀的編號連續(xù),發(fā)送給每個移動站的數(shù)據(jù)幀分別賦予幀編號。將分析得到的源IP地址、目的IP地址、發(fā)送序號、確認(rèn)序號、源端口號、目的端口號、TCP標(biāo)志信息和該數(shù)據(jù)包的幀編號等信息存入到一個幀記錄節(jié)點(diǎn)中,按序插入到記錄節(jié)點(diǎn)鏈表中。最后將該數(shù)據(jù)幀和賦予的幀編號一起提交給分割重組模塊發(fā)送。
基站分割重組模塊3用于根據(jù)PDU最大發(fā)送長度將下行的數(shù)據(jù)幀分割為多個PDU緩存于數(shù)據(jù)鏈路層發(fā)送窗口發(fā)送,它與移動站分割重組模塊8采用自動請求重傳機(jī)制(ARQ)配合處理數(shù)據(jù)鏈路層的數(shù)據(jù)收發(fā)。
具體實(shí)施中采用將幀編號記錄于尾PDU中,當(dāng)基站收到移動站數(shù)據(jù)鏈路層發(fā)送的數(shù)據(jù)鏈路層確認(rèn),判斷是否可以移動數(shù)據(jù)鏈路層發(fā)送窗口。如果可以移動發(fā)送窗口,則判斷是否移動了尾PDU,如果移動了且尾PDU中的幀編號非0則可斷定移動站已經(jīng)正確接收一個封裝TCP報文段的數(shù)據(jù)幀,基站分割重組模塊記錄各個移動站當(dāng)前已正確接收的幀編號。基站分割重組模塊定時檢查記錄的幀編號,如果幀編號有變化,則給基站代理確認(rèn)模塊發(fā)送可確認(rèn)代理指示消息。
表2可確認(rèn)代理指示基站代理確認(rèn)模塊4在TCP連接跟蹤表項(xiàng)為運(yùn)行狀態(tài)的時候,根據(jù)基站分割重組模塊3發(fā)送的可確認(rèn)代理指示生成TCP連接的ACK幀并發(fā)送?;敬泶_認(rèn)模塊4根據(jù)該可確認(rèn)代理指示可以知道已經(jīng)到達(dá)該移動站數(shù)據(jù)鏈路層的包含TCP確認(rèn)報文段的數(shù)據(jù)幀的最大編號,表明幀記錄鏈表中小于等于該最大編號的幀記錄節(jié)點(diǎn)對應(yīng)的數(shù)據(jù)幀都已經(jīng)正確發(fā)送給移動站。將這些數(shù)據(jù)幀記錄節(jié)點(diǎn)依次從記錄鏈表中移出,并查找該數(shù)據(jù)幀中封裝TCP/IP包對應(yīng)的連接跟蹤表中連接表項(xiàng)記錄,判斷該數(shù)據(jù)幀中封裝TCP/IP包是否順序包。如果TCP/IP包的發(fā)送序號小于等于連接跟蹤表中記錄的確認(rèn)序號,則該TCP/IP包是順序包,否則是亂序包。
如果該TCP/IP包是順序包,可以根據(jù)已發(fā)送的順序TCP/IP包的幀記錄節(jié)點(diǎn)的記錄修正連接跟蹤表中該連接的記錄。如果該TCP/IP包的發(fā)送序號和TCP報文段長度的和值大于連接跟蹤表中記錄的確認(rèn)序號,修正連接跟蹤表中記錄的確認(rèn)序號為該和值,如果該TCP/IP包的確認(rèn)序號大于連接跟蹤表中記錄的發(fā)送序號,修正連接跟蹤表中記錄的發(fā)送序號為該TCP/IP包的確認(rèn)序號。
如果是順序包,在修正連接跟蹤表中該連接的記錄后可以發(fā)送代理確認(rèn)。封裝TCP的ACK報文段的TCP/IP包的源IP地址為移動站IP地址,目的地址為該連接的網(wǎng)絡(luò)應(yīng)用服務(wù)器的IP地址,TCP源端口號為該TCP連接的移動站端口,TCP目的端口號為該TCP連接的網(wǎng)絡(luò)應(yīng)用服務(wù)器端口,通告窗口大小等于移動站接收緩沖區(qū)的大小,發(fā)送序號等于被確認(rèn)TCP/IP包的確認(rèn)序號,確認(rèn)序號等于被確認(rèn)TCP/IP包的發(fā)送序號和發(fā)送數(shù)據(jù)大小值的和。
處理完上述順序包后,檢查連接表項(xiàng)中的亂序隊(duì)列,看目前是否有包成為順序包,如果有,則將該包從亂序隊(duì)列中刪除,并對其進(jìn)行TCP代理確認(rèn)。
如果幀中封裝TCP/IP包是亂序包,應(yīng)該將該亂序包的幀記錄節(jié)點(diǎn)插入到該連接表項(xiàng)的亂序隊(duì)列中去,同時發(fā)送對期望的順序包的確認(rèn),以使基站快速重發(fā)丟失的位于該亂序包之前的數(shù)據(jù)包。在位于該亂序包序號前的數(shù)據(jù)包都被成功發(fā)送給移動站后,可以將該亂序包的幀記錄節(jié)點(diǎn)從該連接表項(xiàng)的亂序隊(duì)列中移出,按照對順序包的處理發(fā)送代理確認(rèn)。
基站代理確認(rèn)模塊4如果檢測到封裝RST報文段的數(shù)據(jù)幀發(fā)送到移動站,表明該TCP連接已經(jīng)重置,基站代理確認(rèn)模塊清空連接跟蹤表中對應(yīng)該連接的表項(xiàng),結(jié)束對該TCP連接的代理確認(rèn)。
基站代理確認(rèn)模塊4如果檢測到封裝FIN報文段的數(shù)據(jù)幀發(fā)送到移動站,表明該TCP連接已經(jīng)斷開,基站代理確認(rèn)模塊可以代理對該FIN報文段的確認(rèn),完成FIN過程后清空連接跟蹤表中對應(yīng)該連接的表項(xiàng),結(jié)束對該TCP連接的代理確認(rèn)。
基站接收分析模塊5用于分析通過基站的上行數(shù)據(jù)幀,負(fù)責(zé)對基站代理確認(rèn)模塊4所管理的TCP連接跟蹤表項(xiàng)進(jìn)行修改,或者將上行數(shù)據(jù)幀直接交給上層。
如果該上行數(shù)據(jù)幀不封裝TCP報文段則直接將該數(shù)據(jù)幀提交給上層,否則對該包含TCP報文段的數(shù)據(jù)幀分析處理,可以修改代理生成的TCP確認(rèn)報文段的序號字段,或者發(fā)現(xiàn)極端情況下的錯誤并進(jìn)行恢復(fù)。
如果該封裝的TCP報文段的確認(rèn)序號字段大于對應(yīng)的連接跟蹤表中該連接表項(xiàng)的確認(rèn)序號字段,則將該TCP連接在TCP連接跟蹤表的表項(xiàng)的確認(rèn)序號修改為該TCP數(shù)據(jù)報文段的確認(rèn)序號字段的值。如果該TCP數(shù)據(jù)報文段的發(fā)送序號字段大于該TCP連接在TCP連接跟蹤表的表項(xiàng)的發(fā)送序號字段,則將該TCP連接在TCP連接跟蹤表的表項(xiàng)的發(fā)送序號修改為該TCP數(shù)據(jù)報文段的發(fā)送序號字段的值。該TCP連接跟蹤表的表項(xiàng)的發(fā)送序號和確認(rèn)序號將是下一次基站代理確認(rèn)的發(fā)送序號和確認(rèn)序號。
如果該封裝的TCP報文段的確認(rèn)序號字段小于對應(yīng)的連接跟蹤表中該連接表項(xiàng)的確認(rèn)序號字段,并且差值大于一定的數(shù)值,則可能有下行數(shù)據(jù)幀在分割重組模塊上丟失,應(yīng)該允許TCP協(xié)議使用原有恢復(fù)功能進(jìn)行恢復(fù)。當(dāng)出現(xiàn)數(shù)據(jù)包丟失時,TCP協(xié)議重發(fā)功能可以進(jìn)行恢復(fù)。但是當(dāng)丟包發(fā)生在分割重組模塊時,基站發(fā)送分析模塊認(rèn)為數(shù)據(jù)幀已經(jīng)正確發(fā)送出去,并且過濾下行重發(fā)包,這就造成了丟包的不可恢復(fù)。改進(jìn)的方法是記錄該上行TCP報文段的確認(rèn)序號,并且不過濾下行重發(fā)數(shù)據(jù)報文段中發(fā)送序號等于該確認(rèn)序號的數(shù)據(jù)幀,這樣就允許了TCP協(xié)議對錯誤的恢復(fù)。
如果該封裝的TCP報文段的確認(rèn)序號字段小于對應(yīng)的連接跟蹤表中該連接表項(xiàng)的確認(rèn)序號字段,并且差值大于一定的數(shù)值,且該情況在一段時間持續(xù),這種極端情況下表明出現(xiàn)了不可恢復(fù)的錯誤,就只能復(fù)位TCP連接。分別生成發(fā)往TCP連接的服務(wù)方和客戶方的封裝RST報文段的數(shù)據(jù)幀,發(fā)送給TCP連接的服務(wù)方和客戶方,復(fù)位兩邊的連接。
移動站啟動控制模塊6負(fù)責(zé)控制移動站過濾模塊8的開啟或者關(guān)閉。
移動站啟動控制模塊按照圖6描述的流程對過濾進(jìn)行控制,每一個TCP連接對應(yīng)的代理都有四個狀態(tài)空閑,準(zhǔn)備,暫停,運(yùn)行。
過濾連接跟蹤表項(xiàng)在收到第一個上行TCP/IP包之后被創(chuàng)建并且初始狀態(tài)為空閑,當(dāng)收到一個指示接收窗口不為0的上行TCP/IP包后,狀態(tài)轉(zhuǎn)為準(zhǔn)備。
在準(zhǔn)備狀態(tài),移動站等待基站的啟動指示,如果過了T_LOCAL_PREPARE時間終端還沒有收到基站啟動代理的指示,轉(zhuǎn)到空閑狀態(tài)。收到基站代理確認(rèn)指示后,轉(zhuǎn)到暫停狀態(tài)。
在暫停狀態(tài)內(nèi),如果在T_LOCAL_PAUSE時間內(nèi)未收到指示接收窗口不為0的上行TCP/IP包,轉(zhuǎn)到空閑狀態(tài),否則轉(zhuǎn)移到運(yùn)行狀態(tài)。
在運(yùn)行狀態(tài)內(nèi),如果持續(xù)T_LOCAL_NO_DATA_TIMEOUT時間內(nèi)未收到任何上下行的TCP數(shù)據(jù)包,轉(zhuǎn)移到空閑狀態(tài)。如果收到指示接收窗口為0的上行TCP/IP包,轉(zhuǎn)移到暫停狀態(tài)。收到純粹的上行TCP應(yīng)答包,移動站過濾模塊8按照過濾算法決定是否過濾。
移動站分割重組模塊7將下行的數(shù)據(jù)幀分割為多個PDU緩存于數(shù)據(jù)鏈路層發(fā)送窗口發(fā)送,它與基站分割重組模塊3之間采用自動請求重傳(ARQ)機(jī)制配合處理數(shù)據(jù)鏈路層的數(shù)據(jù)收發(fā)。
移動站分割重組模塊7將移動站過濾模塊8給自己的數(shù)據(jù)按照PDU最大長度進(jìn)行分割,然后編號按照ARQ協(xié)議進(jìn)行發(fā)送。同時也對基站分割重組模塊3發(fā)送的鏈路層ACK進(jìn)行分析進(jìn)行ARQ協(xié)議操作。
移動站過濾模塊8用于對從IP層來的所有封裝TCP/IP報文段的TCP/IP包進(jìn)行分析,對建立了過濾跟蹤表項(xiàng)并且狀態(tài)為運(yùn)行的TCP鏈接的TCP/IP包按照下述規(guī)則進(jìn)行過濾。
移動站過濾模塊8對于那些沒有連接記錄或數(shù)據(jù)長度不為0的包不進(jìn)行過濾,直接通過;對于數(shù)據(jù)長度為0的包,通過過濾算法判斷是否可以過濾該TCP/IP包,如果封裝TCP報文段是確認(rèn)報文段,并且RST、SYN、FIN標(biāo)志為0,則按照時間和個數(shù)共同確定的策略過濾該TCP/IP包,并由基站的代理確認(rèn)模塊代理發(fā)送TCP的ACK報文段,對于其余的TCP/IP包則不過濾,提交給移動站分割重組模塊7發(fā)送。上述過濾算法具體說明如下filter_count字段記錄某個TCP連接連續(xù)過濾的數(shù)據(jù)幀個數(shù),采用time_without_pass字段用于記錄某個TCP連接連續(xù)過濾包含TCP確認(rèn)信息的TCP/IP包的時間。time_without_input表示連續(xù)無TCP/IP包進(jìn)入時間,用于記錄連續(xù)沒有TCP/IP包進(jìn)入移動站過濾模塊8進(jìn)行分析的時間。只要有包含TCP確認(rèn)信息的TCP/IP包提交給移動站分割重組模塊7發(fā)送,就將filter_count字段和time_without_pass字段清0。只要有TCP/IP包進(jìn)入移動站過濾模塊8,就將time_without_input字段清0。
如果TCP報文段首部的標(biāo)志字段的ACK位不為1,表示連接還未建立,過濾跟蹤表中不會有該連接的表項(xiàng),不對該TCP/IP包進(jìn)行過濾分析,直接通過移動站分割重組模塊7發(fā)送。
如果TCP報文段首部的標(biāo)志字段的ACK位為1,表示連接已經(jīng)建立,則在過濾跟蹤表中查找是否有該連接的記錄,如果沒有連接表項(xiàng),則建立新的連接表項(xiàng)。如果過濾跟蹤表中有此表項(xiàng)存在,且TCP報文段數(shù)據(jù)部分的長度不為0,則不過濾該TCP/IP包,僅根據(jù)通告窗口的大小修改連接的狀態(tài)如果此TCP/IP包封裝的TCP報文段的通告窗口為0,并且該TCP報文段在過濾跟蹤表中對應(yīng)表項(xiàng)的狀態(tài)為運(yùn)行,則將狀態(tài)修改為暫停;如果收到TCP/IP包封裝的TCP報文段的通告窗口不為0,并且該TCP報文段在過濾跟蹤表中對應(yīng)表項(xiàng)的狀態(tài)為暫停,則將狀態(tài)改為運(yùn)行。
如果過濾跟蹤表中有此表項(xiàng)存在,且TCP報文段數(shù)據(jù)部分的長度為0,過濾算法首先需要考慮通告窗口變化的TCP報文段的處理。對通告窗口由非0變?yōu)?的TCP報文段和通告窗口由0變?yōu)榉?的TCP報文段都不應(yīng)該過濾。其次考慮那些不會改變連接狀態(tài)的TCP報文段,進(jìn)行如下操作如果RST、SYN、FIN標(biāo)志不全為0,則該TCP/IP包不過濾,提交給移動站分割重組模塊7發(fā)送;如果ACK為1,RST、SYN、FIN標(biāo)志全為0,除開不過濾處于連接建立過程和連接結(jié)束過程中的包,其他的TCP/IP包按照時間和個數(shù)共同確定的策略進(jìn)行過濾,即(1)如果該表項(xiàng)的filter_count字段的值大于等于10,則(1.1)將該TCP/IP包提交給移動站分割重組模塊8發(fā)送;(1.2)將filter_count、time_without_pass、time_without_input字段清0。
(2)如果該表項(xiàng)的filter_count字段的值小于10,則(2.1)查詢time_without_pass字段的值,如果該字段大于等于100ms,則將該TCP/IP包提交給移動站分割重組模塊8發(fā)送;且將filter_count、time_without_pass、time_without_input字段清0;(2.2)如果該字段小于100ms,則對time_without_input字段清0,filter_count字段增加1個單位,并對該TCP/IP包進(jìn)行過濾。
(3)定時查詢time_without_input字段的值,如果該字段大于500ms,則釋放出代理連接占用的資源。
權(quán)利要求
1.一種基于ARQ信息的基站TCP代理確認(rèn)方法,包括下行數(shù)據(jù)處理和上行數(shù)據(jù)處理,其中下行數(shù)據(jù)處理包括下行數(shù)據(jù)的發(fā)送和接收,其處理過程為(A)下行數(shù)據(jù)發(fā)送(A1)基站判斷上層數(shù)據(jù)包是否為TCP/IP包,如果是,進(jìn)入步驟(A2),否則進(jìn)入步驟(A5);(A2)基站判斷所述TCP/IP包是否已經(jīng)被確認(rèn)過,如果是,進(jìn)入步驟(A3),否則進(jìn)入步驟(A4);(A3)基站丟棄該TCP/IP包,該數(shù)據(jù)包處理完成;(A4)基站給該TCP/IP包編號,提取源IP地址、目的IP地址、發(fā)送序號、確認(rèn)序號、源端口號和目的端口號,并將信息存入幀記錄節(jié)點(diǎn)中,然后按序插入到幀記錄節(jié)點(diǎn)鏈表中;(A5)基站判斷該TCP/IP包是否需要分割或合并,如果需要,則進(jìn)行分割或者合并,然后對數(shù)據(jù)進(jìn)行封裝和發(fā)送,否則基站直接對數(shù)據(jù)進(jìn)行封裝和發(fā)送;(B)下行數(shù)據(jù)的接收(B1)移動站接收基站發(fā)送來的數(shù)據(jù),判斷此數(shù)據(jù)是TCP數(shù)據(jù)還是鏈路層ACK信息,如果是鏈路層ACK信息則進(jìn)入步驟(B2),否則進(jìn)入步驟(B3);(B2)移動站根據(jù)鏈路層ACK信息移動發(fā)送窗口;(B3)移動站將接收的PDU放入接收窗口并對接收窗口的PDU進(jìn)行重組或解合并;(B4)移動站將重組后完整的數(shù)據(jù)提交給上層;上行數(shù)據(jù)處理包括上行數(shù)據(jù)的發(fā)送和接收,其處理過程為(C)上行數(shù)據(jù)的發(fā)送(C1)移動站從上層接收數(shù)據(jù)包,并判斷該數(shù)據(jù)包是否為TCP/IP包,如果是,進(jìn)入步驟(C2),否則進(jìn)入步驟(C8);(C2)移動站判斷該TCP/IP包的ACK標(biāo)志位是否為1,如果是,進(jìn)入步驟(C3),否則進(jìn)入步驟(C8);(C3)移動站判斷該TCP/IP包中SYN,RST和FIN字段是否全部為0,如果是,進(jìn)入步驟(C4),否則進(jìn)入步驟(C8);(C4)移動站搜索現(xiàn)有的過濾跟蹤表項(xiàng),判斷是否已為該TCP/IP包所在的TCP鏈路建立過濾跟蹤表項(xiàng),如果是,進(jìn)入步驟(C5),否則進(jìn)入步驟(C6);(C5)移動站先檢查該TCP/IP包數(shù)據(jù)長度是否為零,長度不為零進(jìn)入步驟(C7);對于數(shù)據(jù)長度為零的包再判斷是否需要進(jìn)行過濾,如果需要,移動站把該TCP/IP包所在的TCP連接對應(yīng)的過濾跟蹤表項(xiàng)中的過濾計數(shù)器加1,把無輸入數(shù)據(jù)的時間計數(shù)器清零,并丟棄該TCP/IP包,該數(shù)據(jù)包處理完畢;否則進(jìn)入步驟(C7);(C6)移動站為該TCP/IP包建立相應(yīng)的TCP過濾跟蹤表,進(jìn)入步驟(C8);(C7)移動站將該TCP/IP包所在的TCP鏈路對應(yīng)的過濾跟蹤表項(xiàng)中的過濾計數(shù)器和時間計數(shù)器清零;(C8)移動站判斷該TCP/IP包是否需要分割或合并,如果需要,則進(jìn)行分割或合并,再進(jìn)入步驟(C9),否則直接進(jìn)入步驟(C9);(C9)移動站對數(shù)據(jù)進(jìn)行封裝和發(fā)送,該數(shù)據(jù)包處理完畢;(D)上行數(shù)據(jù)的接收(D1)基站接收移動站發(fā)送的數(shù)據(jù),并判斷該數(shù)據(jù)是否為鏈路層ACK信息,如果是,進(jìn)入步驟(D7),否則進(jìn)入步驟(D2);(D2)基站判斷該數(shù)據(jù)包是否為TCP/IP包,如果是,進(jìn)入步驟(D3),否則基站將該數(shù)據(jù)包交給上層,上行數(shù)據(jù)處理完成;(D3)基站根據(jù)TCP端口和IP地址,在TCP連接跟蹤表項(xiàng)中進(jìn)行查詢,判斷該TCP/IP包是否有相應(yīng)的TCP連接跟蹤表項(xiàng),如果有,進(jìn)入步驟(D4),否則,基站根據(jù)其TCP端口,IP地址等信息為這個TCP連接建立TCP連接跟蹤表項(xiàng),進(jìn)入步驟(D6);(D4)基站判斷該TCP/IP包的發(fā)送序號是否大于對應(yīng)的該TCP對應(yīng)的連接跟蹤表項(xiàng)中的發(fā)送序號,如果是,基站把該TCP/IP包對應(yīng)TCP連接跟蹤表項(xiàng)的發(fā)送序號替換為此TCP/IP包的發(fā)送序號,進(jìn)入步驟(D5),否則直接進(jìn)入步驟(D5);(D5)基站判斷該TCP/IP包的確認(rèn)序號是否大于對應(yīng)的該TCP對應(yīng)的連接跟蹤表項(xiàng)中的確認(rèn)序號,如果是,基站把該TCP/IP包對應(yīng)TCP連接跟蹤表項(xiàng)的確認(rèn)序號替換為此TCP/IP包的確認(rèn)序號,進(jìn)入步驟(D6);否則,基站對該TCP進(jìn)行復(fù)位或直接進(jìn)入步驟(D6);(D6)基站把此TCP/IP包交給上層,對上行數(shù)據(jù)處理完成;(D7)基站根據(jù)鏈路層ACK信息移動基站的發(fā)送窗口;(D8)基站判斷移出發(fā)送窗口的數(shù)據(jù)能否重組為一個完整TCP發(fā)送包或者能否解合并為數(shù)個TCP/IP包,如果是,進(jìn)入步驟(D9),否則對此次上行數(shù)據(jù)處理完成;(D9)基站根據(jù)這個重組后的完整的TCP/IP包,或者解合并后的TCP/IP包的幀序號找到幀記錄節(jié)點(diǎn);(D10)基站根據(jù)幀記錄節(jié)點(diǎn)的內(nèi)容判斷能否找到相應(yīng)的TCP連接跟蹤表項(xiàng),如果能,進(jìn)入步驟(D11),否則,釋放相應(yīng)的幀記錄節(jié)點(diǎn);(D11)基站判斷此TCP發(fā)送包是否為順序包,如果是,基站根據(jù)此TCP/IP包的發(fā)送和確認(rèn)序號更新TCP連接跟蹤表,進(jìn)入步驟(D12);否則,基站把該TCP/IP包的幀記錄節(jié)點(diǎn)插入相應(yīng)的TCP連接跟蹤表項(xiàng)的亂序包記錄節(jié)點(diǎn)鏈表中,直到該亂序包之前所有的包都正確接收,再從亂序包記錄節(jié)點(diǎn)鏈表里面刪除它,此次上行數(shù)據(jù)接收處理完畢;(D12)基站根據(jù)更新過的TCP連接跟蹤表判斷亂序包記錄節(jié)點(diǎn)中是否有包可以成為順序包,如果是,把這些包從亂序包記錄節(jié)點(diǎn)鏈表中刪除,更新TCP連接跟蹤表項(xiàng)并生成相應(yīng)的TCP連接的ACK并發(fā)送,此次上行數(shù)據(jù)包處理完成;否則根據(jù)(D11)中為順序包的TCP發(fā)送包生成TCP/IP包的ACK進(jìn)行發(fā)送,此次上行數(shù)據(jù)處理完成。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于步驟(A2)中,基站采用下述方法進(jìn)行判斷根據(jù)該包的發(fā)送序號與包長度之和同TCP鏈接跟蹤表項(xiàng)中的確認(rèn)序號相比較來判斷所述TCP/IP包是否已經(jīng)被確認(rèn)過。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于步驟(C5)中,移動站按照下述步驟判斷該TCP/IP包是否需要進(jìn)行過濾①移動站判斷是否已經(jīng)過濾了n個該TCP/IP包所在的TCP連接的包,5≤n≤15,如果是,進(jìn)入步驟(C7),否則進(jìn)入步驟②;②移動站判斷是否對該TCP/IP包所在的TCP鏈路連續(xù)過濾了kms,50≤k≤300,如果是,進(jìn)入步驟(C7),否則進(jìn)入步驟③;③移動站把該TCP/IP包所在的TCP連接對應(yīng)的過濾跟蹤表項(xiàng)中的過濾計數(shù)器加1,把無輸入數(shù)據(jù)的時間計數(shù)器清零,并且丟棄該TCP/IP包,該數(shù)據(jù)包處理完畢。
4.一種實(shí)現(xiàn)權(quán)利要求1所述方法的系統(tǒng),其特征在于系統(tǒng)包括采用無線鏈路連接的基站和移動站,其鏈路層采用自動請求重傳機(jī)制;其中基站包括基站啟動控制模塊(1)、發(fā)送分析模塊(2)、基站分割重組模塊(3)、代理確認(rèn)模塊(4)和接收分析模塊(5);移動站包括移動站啟動控制模塊(6)、移動站分割重組模塊(7)和過濾模塊(8);基站啟動控制模塊(1)用于完成用戶級的初始化與重置,并啟動選定的TCP連接的代理確認(rèn)過程;發(fā)送分析模塊(2)用于對下行數(shù)據(jù)幀進(jìn)行分析,如果該幀中封裝的是TCP/IP包,則進(jìn)行分析過濾,否則給該數(shù)據(jù)幀賦予一個0值作為幀編號直接交給分割重組模塊(3)發(fā)送;基站分割重組模塊(3)根據(jù)PDU最大發(fā)送長度將下行的數(shù)據(jù)幀分割為多個PDU緩存于數(shù)據(jù)鏈路層發(fā)送窗口發(fā)送,它與移動站分割重組模塊(8)采用自動請求重傳機(jī)制(ARQ)配合處理數(shù)據(jù)鏈路層的數(shù)據(jù)收發(fā);基站代理確認(rèn)模塊(4)在TCP連接跟蹤表項(xiàng)為運(yùn)行狀態(tài)的時候,根據(jù)基站分割重組模塊(3)發(fā)送的可確認(rèn)代理指示生成TCP連接的ACK幀并發(fā)送;基站代理確認(rèn)模塊(4)檢測到封裝RST或FIN報文段的數(shù)據(jù)幀發(fā)送到移動站,表明該TCP連接已經(jīng)重置或者斷開,基站代理確認(rèn)模塊(4)清空連接跟蹤表中對應(yīng)該連接的表項(xiàng),結(jié)束對該TCP連接的代理確認(rèn);基站接收分析模塊(5)用于分析通過基站的上行數(shù)據(jù)幀,負(fù)責(zé)對基站代理確認(rèn)模塊(4)所管理的TCP連接跟蹤表項(xiàng)進(jìn)行修改,或者將上行數(shù)據(jù)幀直接交給上層;移動站啟動控制模塊(6)負(fù)責(zé)控制移動站過濾模塊(8)的開啟或者關(guān)閉;移動站分割重組模塊(7)將下行的數(shù)據(jù)幀分割為多個PDU緩存于數(shù)據(jù)鏈路層發(fā)送窗口發(fā)送,它與基站分割重組模塊(3)之間采用自動請求重傳機(jī)制(ARQ)配合處理數(shù)據(jù)鏈路層的數(shù)據(jù)收發(fā);移動站分割重組模塊(7)將移動站過濾模塊(8)給自己的數(shù)據(jù)按照PDU最大長度進(jìn)行分割,然后編號按照ARQ協(xié)議進(jìn)行發(fā)送,同時也對基站分割重組模塊(3)發(fā)送的鏈路層ACK進(jìn)行分析進(jìn)行ARQ協(xié)議操作;移動站過濾模塊(8)用于對從IP層來的所有封裝TCP/IP報文段的TCP/IP包進(jìn)行分析,對建立了過濾跟蹤表項(xiàng)并且狀態(tài)為運(yùn)行的TCP鏈接的TCP/IP包進(jìn)行過濾。
全文摘要
本發(fā)明公開了一種基于ARQ信息的基站TCP代理確認(rèn)方法及其系統(tǒng)。其方法包括上、下行數(shù)據(jù)接收和發(fā)送處理過程。系統(tǒng)包括采用無線鏈路連接的基站和移動站,基站包括基站啟動控制模塊、發(fā)送分析模塊、基站分割重組模塊、代理確認(rèn)模塊和接收分析模塊;移動站包括移動站啟動控制模塊、移動站分割重組模塊和過濾模塊。本發(fā)明提高了TCP發(fā)送窗口的移動速度,大大降低由于數(shù)據(jù)鏈路層ARQ增加傳輸時延造成TCP超時的概率,通過對移動站上行確認(rèn)報文段的過濾可以大大降低反向無線鏈路上的TCP連接的ACK報文段產(chǎn)生的數(shù)據(jù)負(fù)載。本發(fā)明極大地提高反向無線鏈路的利用率,適應(yīng)無線IP網(wǎng)絡(luò)中的業(yè)務(wù)非對稱特性,留出上行數(shù)據(jù)帶寬以支持各種實(shí)時業(yè)務(wù)。
文檔編號H04L12/56GK1753354SQ20051001966
公開日2006年3月29日 申請日期2005年10月25日 優(yōu)先權(quán)日2005年10月25日
發(fā)明者吳偉民, 朱光喜, 王玲, 周楠 申請人:華中科技大學(xué)