一種tcp連接熱備份的實現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,具體涉及一種TCP連接熱備份的實現(xiàn)方法。
【背景技術(shù)】
[0002]TCP (Transmiss1n Control Protocol,傳輸控制協(xié)議)是當(dāng)今網(wǎng)絡(luò)世界使用最為普遍的傳輸層協(xié)議,目前流行的協(xié)議如FTP、HTTP等都是基于TCP實現(xiàn)。隨著路由器使用場景越來越復(fù)雜,越來越多樣化,對基于TCP技術(shù)的服務(wù)提出了更高標(biāo)準(zhǔn)的要求,因此TCP高可靠性應(yīng)運而生。
[0003]TCP NSR(Non-Stop Routing)是實現(xiàn)TCP高可靠性的實現(xiàn)方式之一,是指為分布式設(shè)備提供熱備份的機制,又稱多主控技術(shù)。為分布式設(shè)備配備兩塊或多塊主控盤,一塊為主用盤(以下簡稱主盤)、其它為備用盤(以下簡稱備盤),當(dāng)主盤發(fā)生故障時,系統(tǒng)自動進行主備倒換,由備盤無縫、平滑地接替主盤的工作。
[0004]如圖1所示,Node A和Node B之間建立一條TCP連接。Node B是一臺分布式的設(shè)備,有主盤和備盤。正常工作時由主盤完成這個TCP連接,主盤出現(xiàn)問題由備盤接替。這個簡單的備份,在使用TCP協(xié)議時遇到難題:由于備盤無法獲知主盤上TCP連接運行狀態(tài),緩存數(shù)據(jù)以及已使用的序列號,發(fā)生切換時必須重新建立一條新的TCP連接,而這將會導(dǎo)致嚴(yán)重的問題。比如Node B和Node A是兩臺路由器,之間運行BGP路由協(xié)議,一旦重建TCP,就要重新交換路由信息,因此產(chǎn)生路由震蕩。
[0005]為解決該問題,目前業(yè)界采用兩種方案:
[0006]如圖2所示的第一種方案中,通過修改TCP狀態(tài)機來實現(xiàn)TCP的備份。圖中的ESTAB是TCP狀態(tài)機中固有的穩(wěn)定狀態(tài),本方案在在ESTAB之前新增了 SYN RCVD*和SYNSENT* 兩個 TCP 狀態(tài)。各個狀態(tài)變迀中的 Rec ACK,Rec SYNC,Send SYN、Rec SYN、ACK、SendACK、Need Synchronizat1n均為報文格式,這種方案能解決TCP備份的難點,但致命的問題在于,該方案只適用于同一家廠商的路由器,其他廠商路由器上的TCP/IP協(xié)議棧并不感知SYN RCVD*和SYN SENT*這兩個狀態(tài),從而導(dǎo)致丟棄報文。
[0007]如圖3所示的第二種方案中,是把主盤接收或發(fā)送的packet報文都復(fù)制一份給備盤,如果主盤和備盤采用相同算法,則可以保持一致的TCP狀態(tài)。而本方案中,主盤和備盤是獨立的,雖然算法一致,但實際上各進程的調(diào)度順序可能存在差異,要做到完全一致很困難。在實際使用中,也會導(dǎo)致丟棄報文。
【發(fā)明內(nèi)容】
[0008]針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種TCP連接熱備份的實現(xiàn)方法,保證TCP連接主備倒換不斷連,防止報文丟失。
[0009]為達到以上目的,本發(fā)明采取的技術(shù)方案是:一種TCP連接熱備份的實現(xiàn)方法,基于發(fā)送端和接收端,發(fā)送端和接收端均包括主盤和備盤,主盤和備盤均包括TCP/IP協(xié)議棧和報文緩存隊列,TCP/IP協(xié)議棧又包括TCP模塊,所述實現(xiàn)方法包括:對于發(fā)送端發(fā)送報文,經(jīng)過該端TCP模塊處理后,在傳遞給網(wǎng)絡(luò)層處理之前,將報文備份到備盤,收到備盤回復(fù)的確認(rèn)報文后,繼續(xù)處理報文并發(fā)送給接收端;對于接收端接收報文,經(jīng)鏈路層和網(wǎng)絡(luò)層處理后,傳遞給傳輸層處理之前,將報文備份到備盤,收到備盤回復(fù)的確認(rèn)報文后,主盤才繼續(xù)處理報文,并將報文上送到接收端應(yīng)用程序。
[0010]在上述技術(shù)方案的基礎(chǔ)上,發(fā)送端的應(yīng)用程序創(chuàng)建socket控制塊,主盤TCP/IP協(xié)議棧將相關(guān)的socket控制塊備份到備盤,備盤創(chuàng)建對應(yīng)的socket控制塊。
[0011]在上述技術(shù)方案的基礎(chǔ)上,在發(fā)送端,主盤的應(yīng)用程序發(fā)送報文后阻塞在發(fā)送函數(shù)中,主盤TCP/IP協(xié)議棧收到報文,調(diào)用TCP模塊處理后,在發(fā)送給網(wǎng)絡(luò)層之前,將報文、報文的開始序列號和結(jié)束序列號備份到發(fā)送端的備盤,備盤收到主盤備份的報文后,緩存到報文緩存隊列中,并向主盤發(fā)送確認(rèn)報文,主盤接收到備盤的確認(rèn)報文后,通知阻塞在發(fā)送函數(shù)中的應(yīng)用程序返回;主盤繼續(xù)調(diào)用網(wǎng)絡(luò)層和鏈路層相關(guān)處理函數(shù),按正常流程將報文傳送給接收端。
[0012]在上述技術(shù)方案的基礎(chǔ)上,對于發(fā)送端,當(dāng)主盤有報文未發(fā)送出去,則發(fā)生主備倒換,備盤升級為主盤,將報文緩存隊列中的報文重新組織發(fā)送出去。
[0013]在上述技術(shù)方案的基礎(chǔ)上,接收端的用戶創(chuàng)建socket控制塊時,主盤TCP/IP協(xié)議棧將相關(guān)的socket控制塊備份到備盤,備盤創(chuàng)建相應(yīng)的socket控制塊。
[0014]在上述技術(shù)方案的基礎(chǔ)上,接收端通過其主盤TCP/IP協(xié)議棧的物理接口接收報文,報文經(jīng)過鏈路層及網(wǎng)絡(luò)層處理后,傳遞至主盤傳輸層入口時,主盤TCP模塊緩存該報文到緩存隊列中,并透傳至備盤的TCP模塊,備盤收到報文后向主盤回復(fù)確認(rèn)報文;主盤TCP模塊收到確認(rèn)報文后,從主盤的報文緩存隊列中找出相應(yīng)的報文,經(jīng)過處理后向發(fā)送端回復(fù)ACK報文,并將接收到的由發(fā)送端發(fā)來的報文上傳至主盤應(yīng)用程序。
[0015]在上述技術(shù)方案的基礎(chǔ)上,所述發(fā)送端或接收端,其備盤插入瞬間,主盤檢測到備盤上線,如果主盤的TCP緩沖區(qū)中有緩存報文,主盤TCP模塊將報文上送至主盤應(yīng)用程序,并通知主盤應(yīng)用程序開始收方向定界,主盤應(yīng)用程序進行相關(guān)數(shù)據(jù)備份。
[0016]在上述技術(shù)方案的基礎(chǔ)上,所述主盤應(yīng)用程序進行相關(guān)數(shù)據(jù)備份具體為,主盤應(yīng)用程序通知主盤TCP模塊進行發(fā)送方向的定界,TCP模塊將相關(guān)數(shù)據(jù)備份到備盤的TCP模塊。
[0017]本發(fā)明的有益效果在于:將TCP狀態(tài)信息從主盤備份到備盤,同時將該TCP連接的報文以及序列號一起備份到備盤,當(dāng)主盤發(fā)生故障時,系統(tǒng)自動進行主備倒換,倒換后,基于備份的報文做平滑處理,由備盤無縫、平滑地接替主盤的工作,從而保證TCP連接不斷連。
【附圖說明】
[0018]圖1為【背景技術(shù)】中雙節(jié)點通訊圖;
[0019]圖2為【背景技術(shù)】中第一種方案示意圖;
[0020]圖3為【背景技術(shù)】中第二種方案示意圖;
[0021]圖4為本發(fā)明TCP連接熱備份的實現(xiàn)方法的原理圖;
[0022]圖5為本發(fā)明實施例發(fā)送報文處理流程圖;
[0023]圖6為本發(fā)明實施例接收報文處理流程圖。
【具體實施方式】
[0024]以下結(jié)合附圖及實施例對本發(fā)明作進一步詳細說明。
[0025]本發(fā)明TCP連接熱備份的實現(xiàn)方法,基于發(fā)送端和接收端,發(fā)送端和接收端均包括主盤和備盤,如圖4所示,為發(fā)送端或接收端的主盤和備盤。主盤和備盤均包括BGP(Border Gateway Protocol,邊界網(wǎng)關(guān)協(xié)議)模塊、TCP/IP協(xié)議棧和報文緩存隊列,BGP模塊是一個通過sokcet控制塊的接口使用TCP服務(wù)的APP(應(yīng)用程序),TCP/IP協(xié)議棧包括socket控制塊、TCP模塊(傳輸層)和IP模塊(網(wǎng)絡(luò)層),共同對外提供服務(wù)。所述實現(xiàn)方法包括:對于發(fā)送端發(fā)送報文,經(jīng)過該端TCP模塊處理后,在傳遞給IP模塊(網(wǎng)絡(luò)層)處理之前,將報文備份到備盤,收到備盤回復(fù)的確認(rèn)報文后,繼續(xù)處理報文并發(fā)送給接收端;對于接收端接收報