本發(fā)明屬于TCP卸載引擎技術(shù)領(lǐng)域,更為具體地講,涉及一種TCP卸載引擎的發(fā)送單元。
背景技術(shù):當今的網(wǎng)絡(luò)發(fā)展非常迅速,人們對網(wǎng)絡(luò)的質(zhì)量要求也越來越高。作為互聯(lián)網(wǎng)中最基本的網(wǎng)絡(luò)協(xié)議——TCP/IP協(xié)議的應(yīng)用也非常廣泛。但是隨著對網(wǎng)絡(luò)需求的增大和網(wǎng)絡(luò)應(yīng)用領(lǐng)域的擴大,應(yīng)用操作系統(tǒng)來執(zhí)行TCP/IP協(xié)議的方法已經(jīng)顯示出了它的不足。就目前網(wǎng)絡(luò)和設(shè)備的發(fā)展而言,CPU(CentralProcessingUnit,中央處理器)處理性能增加速度明顯小于網(wǎng)絡(luò)帶寬增加速度。隨著時間的推移,傳統(tǒng)采用CPU處理帶寬網(wǎng)絡(luò)應(yīng)用越來越捉襟見肘,功耗和成本大大增加,甚至根本無法支持寬帶網(wǎng)絡(luò)應(yīng)用。而且互聯(lián)網(wǎng)協(xié)議變得無處不在,從PC到非PC設(shè)備都需要采用TCP/IP連接,為了在這些設(shè)備上高效安全支持網(wǎng)絡(luò)多媒體應(yīng)用,需要支持分組分類和分組頭壓縮等特性,并支持IP安全協(xié)議等,這些新的需求大大也增加了互聯(lián)網(wǎng)協(xié)議處理的復雜度。傳統(tǒng)的TCP協(xié)議都是用軟件實現(xiàn)的,并且通常是由CPU來執(zhí)行數(shù)據(jù)包的封裝等相關(guān)操作的。在一些CPU性能較低的系統(tǒng)中,要實現(xiàn)TCP/IP協(xié)議的話就非常困難了。因為要實現(xiàn)TCP/IP協(xié)議,CPU必須具有很強的實時處理網(wǎng)絡(luò)數(shù)據(jù)包的能力,也就是說能夠快速地對網(wǎng)絡(luò)數(shù)據(jù)包進行打包和拆包。相對來說,CPU就得具有較高的系統(tǒng)資源,而像8051這類MCU(MicroControllerUnit,微控制單元)卻沒有這么高的系統(tǒng)資源。所以當要求在這樣的系統(tǒng)中實現(xiàn)網(wǎng)絡(luò)的連接的話,就變的十分困難了。然而目前像8051之類的MCU在許多應(yīng)用中還大量的存在;如果要在這樣的系統(tǒng)上實現(xiàn)網(wǎng)絡(luò)連接功能,就迫切需要一種解決這個矛盾的方案。此外,當前TCP協(xié)議的運行依賴體積龐大的操作系統(tǒng),一旦操作系統(tǒng)崩潰則整個通信進程將收到嚴重的影響,甚至出現(xiàn)大面積通信癱瘓。這對于關(guān)鍵應(yīng)用場合是十分致命的如軍事、航天、電力等領(lǐng)域。在這種情況下,硬件協(xié)議處理器也就應(yīng)運而生了(也叫做協(xié)議卸載引擎)。采用以硬件(如FPGA:FieldProgrammableGateArray,現(xiàn)場可編程邏輯門陣列)為基礎(chǔ)的TCP卸載引擎,可以有效提高通信效率和安全性。但是TCP卸載引擎目前雖然有許多理論分析,但是具體實現(xiàn)的難度較大。其中發(fā)送單元是TCP協(xié)議硬件化過程中最為關(guān)鍵、最為復雜的一個部分,目前仍然存在一些問題,例如數(shù)據(jù)的誤重傳引起的通信擁塞、連接關(guān)閉不完全所造成的資源浪費等。
技術(shù)實現(xiàn)要素:本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種TCP卸載引擎的發(fā)送單元,根據(jù)標準TCP協(xié)議的實現(xiàn)原理,并考慮到實際通信中的阻塞、連接關(guān)閉不完全等情況,基于硬件來實現(xiàn)TCP協(xié)議的發(fā)送單元。為實現(xiàn)上述發(fā)明目的,本發(fā)明TCP卸載引擎的發(fā)送單元包括發(fā)送處理模塊、發(fā)送控制器和計時/計數(shù)模塊,其中發(fā)送處理模塊包括校驗和產(chǎn)生模塊、數(shù)據(jù)封裝模塊和FIFO緩存模塊,計時/計數(shù)模塊包括2MSL計時器、超時重傳計時器、重傳次數(shù)計數(shù)器、連接請求計數(shù)器、探查次數(shù)計數(shù)器、關(guān)閉連接請求計數(shù)器和狀態(tài)計數(shù)器,其中:發(fā)送處理模塊在生成報文后,將數(shù)據(jù)就序信號syn_ok置為有效電平;發(fā)送控制器監(jiān)測到數(shù)據(jù)就序信號syn_ok為有效電平,從關(guān)閉狀態(tài)跳轉(zhuǎn)至連接等待狀態(tài),啟動連接請求連接計數(shù)器對連接請求次數(shù)進行計數(shù),控制發(fā)送處理模塊向接收端發(fā)送握手信號SYN,啟動超時重傳計時器;如果發(fā)送控制器接收到接收端返回的有效的確認信號ACK,有效的確認信號是指在規(guī)定往返時間RTT內(nèi)接收到接收端返回的確認信號,復位超時重傳計時器,跳轉(zhuǎn)至數(shù)據(jù)預裝載狀態(tài),否則復位超過重傳計時器,重新發(fā)送握手信號SYN;如果連接請求次數(shù)等于預設(shè)閾值,跳轉(zhuǎn)回關(guān)閉狀態(tài);在數(shù)據(jù)預裝載狀態(tài),發(fā)送控制器向發(fā)送處理模塊發(fā)送預加載指令,發(fā)送處理模塊開始加載數(shù)據(jù);判斷結(jié)束信號是否有效,如果是,進入關(guān)閉連接請求狀態(tài),否則進入數(shù)據(jù)發(fā)送狀態(tài);在數(shù)據(jù)發(fā)送狀態(tài),發(fā)送控制器向發(fā)送處理模塊發(fā)送數(shù)據(jù)發(fā)送指令,發(fā)送處理模塊向接收端發(fā)送數(shù)據(jù);然后判斷本地上層應(yīng)用發(fā)送給發(fā)送單元的復位信號和接收端發(fā)送給發(fā)送單元的復位信號是否都為無效,如果有任意一個有效,跳轉(zhuǎn)回關(guān)閉狀態(tài),否則繼續(xù)發(fā)送數(shù)據(jù);當該報文的數(shù)據(jù)包發(fā)送完畢,跳轉(zhuǎn)至數(shù)據(jù)超時檢測狀態(tài);在數(shù)據(jù)超時檢測狀態(tài),如果發(fā)送控制器接收到接收端返回的有效的確認信號ACK,跳轉(zhuǎn)回數(shù)據(jù)預裝載狀態(tài),否則跳轉(zhuǎn)至數(shù)據(jù)超時重傳狀態(tài);在數(shù)據(jù)超時重傳狀態(tài),發(fā)送控制器令發(fā)送處理模塊重傳報文,啟動重傳次數(shù)計數(shù)器對重傳次數(shù)進行計數(shù),如果在超時重傳計時器溢出前收到接收端返回的確認信號ACK,復位重傳次數(shù)計數(shù)器,跳轉(zhuǎn)回數(shù)據(jù)預裝載狀態(tài),否則再次重傳,如果重傳次數(shù)等于預設(shè)閾值,復位重傳次數(shù)計數(shù)器,跳轉(zhuǎn)至待機狀態(tài);在待機狀態(tài),采用試探機制對通信信道的質(zhì)量進行監(jiān)控,試探機制的具體過程為:啟動探查次數(shù)計數(shù)器對探查次數(shù)進行計數(shù),發(fā)送處理模塊每隔一段時間發(fā)送一個探查報文,如果接收到接收端返回的有效的確認信號ACK,探查結(jié)果置為有效,復位探查次數(shù)計數(shù)器,跳轉(zhuǎn)回數(shù)據(jù)預裝載狀態(tài),如果探查次數(shù)等于預設(shè)閾值,探查結(jié)果置為無效,跳轉(zhuǎn)回關(guān)閉狀態(tài);在關(guān)閉連接請求狀態(tài),啟動關(guān)閉連接請求計數(shù)器對發(fā)送關(guān)閉連接請求的次數(shù)進行計數(shù),發(fā)送控制器向發(fā)送處理模塊發(fā)送指令,向接收端發(fā)送關(guān)閉連接請求,啟動重傳超時計時器,跳轉(zhuǎn)至連接關(guān)閉確認狀態(tài)1,在連接關(guān)閉確認狀態(tài)1,如果發(fā)送控制器接收到接收端返回的有效的確認信號ACK,復位重傳超時計時器和關(guān)閉連接請求計數(shù)器,跳轉(zhuǎn)至連接關(guān)閉確認狀態(tài)2,否則復位重傳超時計時器,跳轉(zhuǎn)回關(guān)閉連接請求狀態(tài)再次發(fā)送關(guān)閉連接請求;如果發(fā)送關(guān)閉連接請求的次數(shù)大于預設(shè)閾值,跳轉(zhuǎn)回關(guān)閉狀態(tài);在連接關(guān)閉確認狀態(tài)2,如果接收到接收端返回的關(guān)閉連接請求信號,向接收端發(fā)送確認報文ACK,然后跳轉(zhuǎn)至2MSL狀態(tài),否則啟動狀態(tài)計數(shù)器對進入連接關(guān)閉確認狀態(tài)3的次數(shù)進行計數(shù),如果進入連接關(guān)閉確認狀態(tài)3的次數(shù)大于預設(shè)閾值,跳轉(zhuǎn)回關(guān)閉狀態(tài),否則跳轉(zhuǎn)至連接關(guān)閉確認狀態(tài)3;在連接關(guān)閉確認狀態(tài)3,啟動狀態(tài)機內(nèi)部計時器進行計時,如果計時值小于RTT,保持在連接關(guān)閉確認狀態(tài)3,否則復位內(nèi)部計時器,跳轉(zhuǎn)回連接關(guān)閉確認狀態(tài)2;在2MSL狀態(tài),啟動2MSL計時器,如果2MSL計時器計時值小于2倍RTT,保持在2MSL狀態(tài),否則判斷是否再次接收到接收端返回的關(guān)閉連接請求信號,如果是,跳轉(zhuǎn)回連接關(guān)閉確認狀態(tài)2,否則跳轉(zhuǎn)回關(guān)閉狀態(tài)。本發(fā)明TCP卸載引擎的發(fā)送單元,總共設(shè)定了12個狀態(tài),發(fā)送單元發(fā)起連接并進行數(shù)據(jù)發(fā)送,當進入數(shù)據(jù)超時重傳狀態(tài)后,如果重傳次數(shù)超過預設(shè)閾值,進行待機狀態(tài),在待機狀態(tài)下,采用試探機制對通信信道的質(zhì)量進行監(jiān)測,即周期性發(fā)送探查報文,如果能收到接收端的確認報文,則恢復至數(shù)據(jù)預裝載狀態(tài),如果探查次數(shù)超過預設(shè)閾值,則跳轉(zhuǎn)回關(guān)閉狀態(tài)。在關(guān)閉連接過程中,當進入連接關(guān)閉確認狀態(tài)2后,增加一個連接關(guān)閉確認狀態(tài)3來控制對接收端的關(guān)閉連接請求的等待時間,超出則跳轉(zhuǎn)回關(guān)閉狀態(tài)。本發(fā)明具有以下有益效果:(1)本發(fā)明采用了試探機制來解決通信阻塞問題,可以使通信的效率提高,避免出現(xiàn)“死鎖”現(xiàn)象的產(chǎn)生。相比于傳統(tǒng)的滑動窗口方式來減輕擁塞,具有效果明顯,容易實現(xiàn)的特點。(2)本發(fā)明在連接請求過程中增加了Setup_Wait連接等待狀態(tài),在關(guān)閉連接過程中增加了Fin_Wait3連接關(guān)閉確認狀態(tài)3,能夠全面的判斷連接是否已建立或者關(guān)閉,從而使連接的建立和關(guān)閉更為可靠。附圖說明圖1是本發(fā)明TCP卸載引擎的發(fā)送單元的結(jié)構(gòu)圖;圖2是發(fā)送控制器的狀態(tài)機示意圖;圖3是試探機制的流程示意圖。具體實施方式下面結(jié)合附圖對本發(fā)明的具體實施方式進行描述,以便本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明。需要特別提醒注意的是,在以下的描述中,當已知功能和設(shè)計的詳細描述也許會淡化本發(fā)明的主要內(nèi)容時,這些描述在這里將被忽略。實施例圖1是本發(fā)明TCP卸載引擎的發(fā)送單元的結(jié)構(gòu)圖。如圖1所示,本發(fā)明TCP卸載引擎的發(fā)送單元包括發(fā)送處理模塊1、發(fā)送控制器2和計時/計數(shù)模塊3。發(fā)送處理模塊1包括校驗和產(chǎn)生模塊11、數(shù)據(jù)封裝模塊12和FIFO緩存模塊13,校驗和產(chǎn)生模塊11用于產(chǎn)生校驗和,發(fā)送給數(shù)據(jù)封裝模塊12。本實施例中采用的校驗算法為:首先將校驗和字段設(shè)為0,然后將TCP數(shù)據(jù)包頭按16比特分成多個單元,如果包頭不是16比特的倍數(shù),則對各個單元采用反碼加法運算(即高位溢出位會加到低位,通常的補碼運算是直接丟掉溢出的高位),將得到的和的反碼填入到校驗和字段。數(shù)據(jù)封裝模塊12用于對檢驗和、頭部信息和發(fā)送數(shù)據(jù)進行封裝,即將源端口號、目的端口號、發(fā)送序列號、應(yīng)答序列號、控制標志位、窗口大小、緊急指針以及校驗和添加到數(shù)據(jù)字段的頭部信息形成完整的報文。FIFO緩存模塊13用于對數(shù)據(jù)封裝模塊12生成的報文信息進行緩存。數(shù)據(jù)封裝模塊12生成報文后,發(fā)送處理模塊1將數(shù)據(jù)就序信號syn_ok置為有效電平。計時/計數(shù)模塊3包括2MSL計時器31、超時重傳計時器32、重傳次數(shù)計數(shù)器33、連接請求計數(shù)器34、探查次數(shù)計數(shù)器35、關(guān)閉連接請求計數(shù)器36和狀態(tài)計數(shù)器37。其中2MSL計時器31也就是TIME_WAIT定時器,2MSL指兩倍的MSL,即最大報文段生存時間(MaximumSegmentLifetime)。超時重傳計時器32用于對對數(shù)據(jù)包發(fā)送時間進行計時,如果超過閾值則發(fā)送超時,需要重傳。重傳次數(shù)計數(shù)器33用于對數(shù)據(jù)重傳次數(shù)進行計數(shù)。連接請求計數(shù)器34用于對發(fā)起連接時的發(fā)送連接請求次數(shù)進行計數(shù)。探查次數(shù)計數(shù)器35用于對采用探查機制進行信道探查時發(fā)送探查報文的次數(shù)進行計數(shù)。關(guān)閉連接請求計數(shù)器36用于對關(guān)閉連接時發(fā)送的關(guān)閉連接請求次數(shù)進行計數(shù)。狀態(tài)計數(shù)器37用于關(guān)閉連接過程中對進入Fin_wait3連接關(guān)閉確認狀態(tài)3的次數(shù)進行計數(shù)。各個計時器和計數(shù)器的初始值均為0。發(fā)送控制器2用于負責產(chǎn)生各種控制信號以驅(qū)動其他各個模塊的正常工作。圖2是發(fā)送控制器的狀態(tài)機示意圖。如圖2所示,本發(fā)明發(fā)送控制器存在12個狀態(tài),分別為Closed(關(guān)閉狀態(tài))、Setup_Wait(連接等待狀態(tài))、Data_Load(數(shù)據(jù)預裝載狀態(tài))、Data_Send(數(shù)據(jù)發(fā)送狀態(tài))、Timeover_Check(數(shù)據(jù)超時檢查狀態(tài))、Data_Retransmit(數(shù)據(jù)超時重傳狀態(tài))、Halt(待機狀態(tài))、Close_Req(關(guān)閉連接請求狀態(tài))、Fin_Wait1(連接關(guān)閉確認狀態(tài)1)、Fin_Wait2(連接關(guān)閉確認狀態(tài)2)、Fin_Wait3(連接關(guān)閉確認狀態(tài)3)、Time_Wait(2MSL狀態(tài)),各狀態(tài)的具體遷移過程如下:S201:發(fā)送單元的初始狀態(tài)為Closed關(guān)閉狀態(tài),在此狀態(tài)下,所有的計數(shù)器或計時器都是初始值。S202:發(fā)送控制器2監(jiān)測數(shù)據(jù)序信息syn_ok是否有效。本實施例中所有有效狀態(tài)均為1,即高電平。如果有效,進入步驟S203,否則返回步驟S201,保持Closed關(guān)閉狀態(tài)。S203:發(fā)送單元跳轉(zhuǎn)至Setup_Wait連接等待狀態(tài),上層應(yīng)用通過發(fā)送控制器2向發(fā)送處理模塊1發(fā)送指令,向接收端發(fā)送握手信號SYN,啟動超時重傳計時器32,進入步驟S204。S204:發(fā)送控制器2判斷是否接收到接收端返回的有效的確認信號ACK(Acknowledgement,確認字符),ACK有效的含義是指在規(guī)定時間內(nèi)接收到接收端返回的ACK,規(guī)定時間即為RTT(往返時間),如果在超時重傳計時器32溢出仍未接收到ACK或ACK超時都表示無效。如果有效表示收到了接收端的數(shù)據(jù)應(yīng)答,進入步驟S207,否則進入步驟S205。S205:發(fā)送控制器2向連接請求計數(shù)器34發(fā)送計數(shù)信號,一般是一個脈沖,連接請求計數(shù)器34將連接請求次數(shù)Req_cnt=Req_cnt+1,連接請求次數(shù)也就是發(fā)送握手信號SYN的次數(shù)。S206:判斷連接請求次數(shù)Req_cnt是否等于預設(shè)閾值,本實施例中為3,如果是,返回步驟S201;否則發(fā)送控制器2向超時重傳計時器32發(fā)送復位信號,超時重傳計時器32復位,返回步驟S203。S207:發(fā)送控制器2向超時重傳計時器32和連接請求計數(shù)器34發(fā)送復位信號,跳轉(zhuǎn)至Data_Load數(shù)據(jù)預裝載狀態(tài),發(fā)送控制器2向發(fā)送處理模塊1發(fā)送預加載指令,發(fā)送處理模塊1開始加載數(shù)據(jù)。S208:判斷結(jié)束信號fin是否有效,如果是,進入步驟S220,跳轉(zhuǎn)至Close_Req關(guān)閉連接請求狀態(tài),否則進入步驟S209。S209:跳轉(zhuǎn)至Data_Send數(shù)據(jù)發(fā)送狀態(tài),發(fā)送控制器2向發(fā)送處理模塊1發(fā)送數(shù)據(jù)發(fā)送指令,發(fā)送處理模塊1向接收端發(fā)送數(shù)據(jù)。S210:發(fā)送控制器2判斷本地上層應(yīng)用發(fā)送給發(fā)送單元的復位信號rst和接收端發(fā)送給發(fā)送單元的復位信號rst_rx是否都為無效,如果均無效,進入步驟S211,否則返回步驟S201。S211:判斷數(shù)據(jù)包剩余數(shù)量send_count是否為0,如果為0,表示本次需要發(fā)送的報文數(shù)據(jù)已經(jīng)發(fā)送完畢,啟動超時重傳計時器32,進入步驟S212,否則返回步驟S207繼續(xù)發(fā)送。S212:跳轉(zhuǎn)至Timeover_Check數(shù)據(jù)超時檢查狀態(tài)。S213:發(fā)送控制器2判斷是否接收到接收端返回的有效的確認信號ACK,如果是,說明接收端已經(jīng)正確收到所發(fā)送的數(shù)據(jù),發(fā)送控制器2向超時重傳計時器32發(fā)送復位信號,向發(fā)送處理模塊1發(fā)送指令將已發(fā)送的報文數(shù)據(jù)從FIFO緩存模塊13刪除,返回步驟S207,否則發(fā)送控制器2向超時重傳計時器32發(fā)送復位信號,進入步驟S214。S214:跳轉(zhuǎn)至Data_Retransmit數(shù)據(jù)超時重傳狀態(tài),發(fā)送控制器2向發(fā)送處理模塊1發(fā)送數(shù)據(jù)重傳指令,發(fā)送處理模塊1進行數(shù)據(jù)重傳,數(shù)據(jù)重傳完畢后啟動超時重傳計時器32。S215:發(fā)送控制器2判斷是否在超時重傳計時器32溢出前接收到接收端返回的確認信號ACK,如果是,發(fā)送控制器2向超時重傳計時器32發(fā)送復位信號,向發(fā)送處理模塊1發(fā)送指令將已發(fā)送的報文數(shù)據(jù)從FIFO緩存模塊13刪除,返回步驟S207,否則進入步驟S216。S216:發(fā)送控制器2向重傳次數(shù)計數(shù)器34發(fā)送計數(shù)信號,重傳次數(shù)計數(shù)器34將重傳次數(shù)Retry_cnt=Retry_cnt+1。S217:判斷重傳次數(shù)Retry_cnt是否等于預設(shè)閾值,本實施例中為3,如果是,說明多次重傳均未成功,通信信道的質(zhì)量很差,發(fā)送控制器2向超時重傳計時器32和重傳次數(shù)計數(shù)器33發(fā)送復位信號,進入步驟S218,否則向超時重傳計時器32發(fā)送復位信號,返回步驟S214再次重傳??梢姡谥貍鬟^程中,如果重傳成功,將會轉(zhuǎn)入下一次正常數(shù)據(jù)發(fā)送流程。S218:跳轉(zhuǎn)至Halt待機狀態(tài)。在Halt待機狀態(tài)下,采用試探機制對通信信道的質(zhì)量進行監(jiān)控。圖3是試探機制的流程示意圖。如圖3所示,試探機制包括以下步驟:S301:發(fā)送控制器2控制發(fā)送處理模塊1每隔N個RTT發(fā)送一個detect探查報文,N為預設(shè)的常數(shù),本實施例中設(shè)置N=3。啟動重傳超時計時器32。S302:發(fā)送控制器2判斷是否接收到接收端返回的有效的確認信號ACK,如果有效,發(fā)送控制器2向超時重傳計時器32和重傳次數(shù)計數(shù)器33發(fā)送復位信號,進入步驟S303,否則進入步驟S304。S303:探查結(jié)果detect_result置為有效。S304:發(fā)送控制器2向探查次數(shù)計數(shù)器35發(fā)送計數(shù)信號,探查次數(shù)計數(shù)器35將探查次數(shù)detect_cnt=detect_cnt+1,進入步驟S305。S305:判斷探查計數(shù)detect_cnt是否等于預設(shè)閾值3,如果是,發(fā)送控制器2向重傳次數(shù)計數(shù)器33和探查次數(shù)計數(shù)器35發(fā)送復位信號,進入步驟S306,否則發(fā)送控制器2向超時重傳計時器32發(fā)送復位信號,返回步驟S302。S306:探查結(jié)果detect_result置為無效。S219:發(fā)送控制器2判斷探查結(jié)果detect_result是否為有效,如果是,說明當前通信信道已經(jīng)緩和,可以發(fā)送數(shù)據(jù),因此返回步驟S207,如果為無效,則說明當前信道擁塞已經(jīng)非常嚴重,需要暫時關(guān)閉本方的連接以緩解信道的壓力,此時返回步驟S201。S220:跳轉(zhuǎn)至Closed_Req關(guān)閉連接請求狀態(tài),發(fā)送控制器2向發(fā)送處理模塊1發(fā)送指令,向接收端發(fā)送關(guān)閉連接請求,即帶有fin標志的報文,啟動超時重傳計時器32。S221:跳轉(zhuǎn)至Fin_Wait1狀態(tài)。S222:發(fā)送控制器2判斷是否接收到接收端返回的有效的確認信號ACK,如果是,進入步驟S225,否則進入步驟S223。S223:發(fā)送控制器2向關(guān)閉連接請求計數(shù)器36發(fā)送計數(shù)信號,關(guān)閉連接請求計數(shù)器36將關(guān)閉連接請求次數(shù)Req_cnt_2=Req_cnt_2+1,進入步驟S224。S224:判斷關(guān)閉連接請求次數(shù)Req_cnt_2是否大于預設(shè)閾值3,如果是,發(fā)送控制器2向超時重傳計時器32和關(guān)閉連接請求計數(shù)器36發(fā)送復位信號,返回步驟S201,否則發(fā)送控制器2向超時重傳計時器32發(fā)送復位信號,返回步驟S220。S225:跳轉(zhuǎn)到Fin_Wait2狀態(tài)。S226:在Fin_Wati2狀態(tài)下,本方的連接已關(guān)閉,這時發(fā)送控制器2判斷是否接收到接收端返回的關(guān)閉連接請求信號,在本實施例中,每當收到關(guān)閉連接請求信號時,發(fā)送控制器將標志信號eof_req置為1。則直接判斷標志信號eof_req置是否為1即可,如果是,向接收端發(fā)送確認報文ACK,進入步驟S231,否則進入步驟S227。S227:發(fā)送控制器2向狀態(tài)計數(shù)器37發(fā)送計數(shù)信號,關(guān)閉連接請求計數(shù)器37將進入Fin_Wait3狀態(tài)次數(shù)Wait3_cnt=Wait3_cnt+1。S228:判斷進入Fin_Wait3狀態(tài)次數(shù)Wait3_cnt是否大于預設(shè)閾值3,如果是,返回步驟S201,否則進入步驟S229。S229:跳轉(zhuǎn)到Fin_Wait3狀態(tài),采用狀態(tài)機內(nèi)部計時器進行計時。S230:判斷狀態(tài)機內(nèi)部計時器的計時值Wait_cnt是否小于RTT,如果是,保持在連接關(guān)閉確認狀態(tài)3,否則復位內(nèi)部計時器,跳轉(zhuǎn)回Fin_Wait2。設(shè)置Fin_Wait3狀態(tài)的目的是為了控制對接收端的關(guān)閉連接請求信號的等待時間。S231:跳轉(zhuǎn)至Time_Wait狀態(tài),將標志信號強制置為0,啟動2MSL定時器31進行計時。S232:判斷2MSL定時器31的計時值2MSL_cnt是否小于2*RTT,如果是,保持在Time_wait狀態(tài),否則進入步驟S233。S233:發(fā)送控制器2判斷是否再次接收到接收端返回的關(guān)閉連接請求信號,即判斷標志信號標志信號eof_req是否為1,如果是,說明接收端因為沒有收到確認信號而再次發(fā)送了關(guān)閉連接請求,發(fā)送控制器2向2MSL定時器31發(fā)送復位信號,返回步驟S225,否則返回步驟S201,跳轉(zhuǎn)回Closed關(guān)閉狀態(tài)。如果本方至接收端的線路故障導致接收端無法收到確認報文ACK,但是本方可以正常接收到接收端的關(guān)閉連接請求信號,由于對于關(guān)閉連接請求信號,接收端是發(fā)起方,那么在多次發(fā)送得不到確認后,接收端會停止發(fā)送關(guān)閉連接請求,那么本方在步驟S233中就會跳轉(zhuǎn)回Closed關(guān)閉狀態(tài)了。在實際應(yīng)用中,如果本方和接收端之間的線路狀況發(fā)生變化,使正常的往返時間RTT增大,那么還是采用之前的往返時間RTT為標準,會增加重傳次數(shù),浪費網(wǎng)絡(luò)資源,因此本發(fā)明中,還可以對往返時間RTT進行自適應(yīng)管理。發(fā)送單元中還包括重傳時間計數(shù)器、平均重傳時間寄存器,初始值均為0,在數(shù)據(jù)超時重傳狀態(tài)下,如果在超時重傳計時器溢出前收到接收端返回的確認信號ACK,記重傳時間計數(shù)器當前值為K,平均重傳時間寄存器當前值為t0,根據(jù)超時重傳計時器的計時值得到本次確認信號ACK返回時間t,計算平均重傳時間tA=(Kt0+t)/(K+1),將平均重傳時間tA更新至平均重傳時間寄存器,重傳時間計數(shù)器計數(shù)值加1;如果此時重傳時間計數(shù)器計數(shù)值等于預設(shè)閾值,本實施例中為3,將平均重傳時間寄存器中存儲的平均重傳時間作為新的往返時間RTT,將重傳時間計數(shù)器和平均重傳時間寄存器復位。盡管上面對本發(fā)明說明性的具體實施方式進行了描述,以便于本技術(shù)領(lǐng)域的技術(shù)人員理解本發(fā)明,但應(yīng)該清楚,本發(fā)明不限于具體實施方式的范圍,對本技術(shù)領(lǐng)域的普通技術(shù)人員來講,只要各種變化在所附的權(quán)利要求限定和確定的本發(fā)明的精神和范圍內(nèi),這些變化是顯而易見的,一切利用本發(fā)明構(gòu)思的發(fā)明創(chuàng)造均在保護之列。