專利名稱:一種主備用雙機進行tcp連接倒換的方法
技術領域:
本發明設計屬于通信技術領域,涉及一種主備用雙機運用傳輸控制協議(TCP,Transmission Control Protocol)與遠端機通信時進行TCP連接倒換的方法。
背景技術:
在計算機網絡的通信中,本地計算機與遠端計算機常采用TCP協議進行消息傳遞。本地計算機出于穩定性等其它考慮,經常采用主備用雙機來進行保障。主備用雙機的工作方式的好處在于主用機因為某種原因需要停止工作,或者主用機因為故障死機的情況下,備用機可以接替主用機繼續與遠端計算機保持通信。
TCP協議是一種有連接的可靠傳輸協議,兩臺計算機之間使用TCP傳輸消息時,必須先建立好一條TCP連接,連接的建立需要一個3次握手的連接過程,只有連接建立好了,才能通過它來傳輸消息。如果連接中斷了,則不能再繼續傳輸消息,必須重新建立連接后才能繼續通信。所以在倒機時,主用機一旦降為備用停止工作,例如計算機重啟、計算機死機,這些勢必會引起與遠端機的原有TCP連接的中斷,從而導致原有通信的中斷。備用機升為主用后首先要跟遠端機建立新的TCP連接,才能跟遠端機進行通信。在這個倒機過程中,原有的通信發生了中斷,影響的通信的連續性;并且遠端機可以查覺原有TCP連接的中斷以及新的連接建立,在一定程度上可以認為對端進行了主備用雙機倒換。
發明內容
本發明的主要目的是設計一種主備用雙機進行TCP連接倒換的方法,從而有效的實現主備用雙機倒換時不引起與遠端機TCP連接的連接中斷,不影響與遠端機通信的連續性,并且不讓遠端機察覺倒機過程。
本發明包含對傳統的TCP協議棧進行了一定的小范圍改造,以適應實現本發明目的的需要。
上述發明的目的一種使用TCP進行通信的主備用雙機進行TCP連接倒換的方法,其特點是TCP連接切換對另一端的透明性。
技術解決方案包含以下內容A.主用機A、備用機B作為雙機利用TCP與遠端機C進行通信。主、備用機用來與遠端機C通信時使用相同的IP地址d.d.d.d,相同的物理地址(物理地址也可以不同,此時應設置網卡工作在混雜模式下并且禁止備用機發送數據包)。啟動時都需要禁止目的地址是遠端機C的TCP包流出本機,同時禁止源地址是遠端機C且目的地址是d.d.d.d的TCP包進入本機的TCP協議棧。
B.主用機A工作時,首先允許目的地址是遠端機的TCP包流出本機,同時允許源地址是遠端機且目的地址是d.d.d.d的TCP包進入本機的TCP協議棧。然后建立與遠端機C的TCP連接一,實現與遠端機C的正常通信,主用機A的TCP連接一工作在正常模式下。
C.備用機B啟動后,在需要建立備用TCP連接的時候,建立備用TCP連接二。參照主用機A同遠端機C建立的TCP連接一,該備用TCP連接二與主用機A和遠端機C之間的TCP連接一具有相同的TCP本地端口和遠端端口。這個備用連接二工作在一種特殊模式下。
D.備用機B的備用TCP連接二建立成功后,允許源地址是遠端機C且目的地址是d.d.d.d的TCP包進入備用機B的TCP協議棧。備用機B設法接收遠端機C發送給主用機A的各種TCP包。備用機B的TCP協議棧用接收到的遠端機C利用TCP連接一發送給主用機A的ACK包來更新備用TCP連接二的發送序號、接收序號等相關參數,從而使得備用機B建立的備用TCP連接二與主用機建立的TCP連接一的參數同步。在備用TCP連接二經過5次有效的參數更新后,其工作在準正常模式下。
E.倒機時,主用機A禁止目的地址是遠端機C的TCP包流出本機,A降為備用,其與遠端機之間的TCP連接一工作在特殊模式下。備用機B允許目的地址是遠端機的TCP包流出本機,備用TCP連接二轉變為實際的連接,并且允許利用TCP連接二與遠端機C繼續通信。備用機B升為主用,在利用連接二發送5包數據以后,連接二工作在正常模式下。主備用雙機與遠端機的TCP連接成功進行了倒換。
F.如果需要再一次倒機,主用機、備用機重復前面提到的D、E過程。
G.倒機前后,遠端機C原有的TCP連接沒有中斷的感覺,始終保持連接,始終可以通信。遠端機C感覺不到主備用雙機TCP連接的倒換。
H.如果遠端機主動放棄原有TCP連接,重新建立新的到地址d.d.d.d的TCP連接。則主用機依然作為主用。如果備用機已經建立了備用TCP連接二,則工作在特殊模式下。隨后主用機、備用機重復前面提到的D、E過程。如果備用機沒有建立備用TCP連接二,主用機、備用機重復前面提到的C、D、E過程。
主備用雙機第一次啟動時,都沒有與遠端機建立過連接。主用機按照一般正常方式與遠端機完成TCP連接的建立,然后進行通信,隨后的主用機都是由備用機轉換而來的。
本發明的其它一些特點是所述的禁止目的地址是遠端機C的TCP包流出本機的實現可以通過使用防火墻軟件屏蔽掉目的地址是遠端機的TCP包;可以在TCP協議棧中增加開關變量S1,由上層應用程序來關閉此開關。此開關的關閉使得TCP層發送數據給IP層的接口函數失效,TCP層不能向IP層發送數據;只要能實現此功能,也可以采用其它任何等同的手段。
所述的禁止源地址是遠端機C且目的地址是d.d.d.d的TCP包進入本機的TCP協議棧的實現可以通過使用防火墻軟件屏蔽掉源地址是遠端機C且目的地址是d.d.d.d的TCP包;也可以在TCP協議棧中增加開關變量S2,由上層應用程序來關閉此開關。此開關的關閉使得TCP層從IP層接收數據的接口函數失效,TCP層不能從IP層接收數據;只要能實現此功能,也可以采用其它任何等同的手段。
所述的允許目的地址是遠端機C的TCP包流出本機實現可以通過使用防火墻軟件取消對目的地址是遠端機的TCP包的屏蔽;也可以在TCP協議棧中打開開關變量S1,使得TCP層發送數據給IP層的接口函數有效,TCP層可以向IP層發送數據;只要能實現此功能,也可以采用其它任何等同的手段。
所述的允許源地址是遠端機C且目的地址是d.d.d.d的TCP包進入本機的TCP協議棧的實現可以通過使用防火墻軟件取消對源地址是遠端機C且目的地址是d.d.d.d的TCP包的屏蔽;也可以在TCP協議棧中打開開關變量S2,使得TCP層從IP層接收數據的接口函數有效,TCP層可以從IP層接收數據;只要能實現此功能,也可以采用其它任何等同的手段。
所述的備用機B設法接收遠端機C發送給主用機A的各種TCP包的實現可以設置主用機A、備用機B用來與遠端機C通信時使用的網卡具備相同的物理地址,這樣備用機B就可以收到遠端機C發送給主用機A的各種TCP包。只要能實現此功能,也可以采用其它任何等同的手段。
當備用機B轉為主用后,要保證發送給遠端機C的以太網包含有與原主用機A相同的本地物理地址,可以設置主用機A、備用機B用來與遠端機C通信時使用的網卡具備相同的物理地址。只要能實現此功能,也可以采用其它任何等同的手段。
所述的正常模式指的是TCP協議棧的按照傳統的TCP協議所規定的處理流程來處理某一TCP連接上的接收發送過程,以及維護。
特殊模式是跟主用機A與遠端機C的TCP連接一的正常模式相對而言的。備用TCP連接二特殊模式下的工作方式不同于主用機A的TCP連接一的正常模式的工作方式。特殊模式的選擇通過與TCP連接關聯的開關變量S3來控制,上層應用程序可以來控制這個開關。開關S3打開時,TCP連接按照特殊模式工作。連接建立過程,TCP協議棧依靠上層應用程序或其它模擬遠端機C的程序構造協商包來完成連接建立的3次握手。TCP協議棧對于IP層送到TCP層的TCP包,如果是針對備用連接的TCP包,備用機TCP協議棧判斷出此連接是工作在特殊模式下,則處理方式會不同于正常模式的TCP連接。備用機B通過上層應用程序在二初始化時,打開與之關聯的S3,使其工作在特殊模式。
準正常模式十分接近正常模式,模式的選擇切換依靠與TCP連接關聯的開關S4來控制。上層應用程序和TCP協議棧都可以來控制這個開關。當開關S4打開時,TCP連接工作在準正常模式。
這三種工作模式都是單一存在的。
所述的內容C中參照主用機A同遠端機C建立的TCP連接按照以下處理如果主用機作為TCP連接的客戶端,遠端機作為TCP連接的服務器端,則備用機也作為TCP連接的客戶端。如果主用機作為TCP連接的服務器端,遠端機作為TCP連接的客戶端,則備用機也作為TCP連接的服務器端。備用機建立TCP連接時用到的本地端口、遠端端口、遠端地址等參數與主用機建立TCP連接時用到的本地端口、遠端端口、遠端地址等參數相同。
所述的內容C中備用機B啟動后,在需要建立備用TCP連接的時候,建立備用TCP連接二按照以下處理如果備用機B作為TCP連接的客戶端,如圖1所示。備用機的上層應用程序向TCP協議棧發出TCP連接請求,TCP協議棧將發送同步(SYN,Synchronizesequence numbers)包給遠端機C。TCP協議棧根據備用連接二關聯的S3判斷出此連接工作在特殊模式下,這個SYN包實際沒有流出備用機B。TCP協議棧在完成SYN包的發送處理后,上層應用程序或其它模擬遠端機C的程序構造一個對于該包的確認(ACK,Acknowledgment field significant)包,并由鏈路層或IP層的接口函數交給TCP層。在TCP協議棧看來,這就是遠端機C的應答包。TCP協議棧處理完這個SYN/ACK后發送ACK包給遠端機C。這個ACK包實際沒有流出備用機B。此時建立TCP連接的3次握手完成,備用機B與遠端機C的備用連接建立。
如果備用機B作為服務器端,如圖2所示。備用機的上層應用程序向TCP協議棧告知需要建立的備用連接二。當TCP協議棧開始監聽連接請求后,TCP協議棧根據備用連接二關聯的S3判斷出此連接工作在特殊模式下,上層應用程序或其它模擬遠端機的程序構造一個SYN包,并由鏈路層或IP層的接口函數交給TCP層。在TCP層看來,這就是遠端機C的TCP連接請求包。TCP層處理完這個SYN后發送SYN/ACK應答包給遠端機C。這個SYN/ACK包實際沒有流出備用機。緊接著,上層應用程序或其它模擬遠端機的程序構造一個ACK包,并由鏈路層或IP層的接口函數交給TCP層。在TCP層看來,這就是遠端機C的應答包。TCP層處理完這個ACK后,此時建立TCP連接的3次握手完成,備用機與遠端機備用連接建立。
所述內容中構造SYN/ACK按照以下處理TCP數據包頭中的SYN標志、ACK標志均置為1;TCP包頭中的目的端口項置為備用機TCP監聽連接請求的端口;TCP數據包頭中源端口項置為遠端機TCP發起連接的端口;TCP數據包頭中的序列號項取32bits任意無符號整數;TCP數據包頭中的確認序列號項取備用機上層應用程序或模擬遠端機的程序發送的TCP連接請求SYN包中的序列號值加1;TCP數據包頭中的窗口項取任意無符號整數;TCP數據包頭中添加最大數據段長項(MSS,Maximum Segment Size),值取1460;TCP數據包頭中的數據偏移項取6;TCP數據包頭中的校驗和項取按照正常計算TCP包頭校驗和的方法算出的此TCP數據包的校驗和;其它參數置0。
所述內容中構造SYN包按照以下處理TCP數據包頭中的SYN標志置為1;TCP數據包頭中的目的端口項置為備用機TCP發起連接的端口;TCP數據包頭中源端口項置為遠端機TCP監聽連接請求的端口;TCP數據包頭中的序列號項取32bits任意無符號整數;TCP數據包頭中的確認序列號項置0;TCP數據包頭中的窗口項取任意無符號整數;TCP數據包頭中添加最大數據段長項(MSS,Maximum Segment Size),值取1460;TCP數據包頭中的數據偏移項取6;TCP數據包頭中的校驗和項取按照正常計算TCP包頭校驗和的方法算出的此TCP數據包的校驗和;其它參數置0。
所述內容中的構造ACK包按照以下處理TCP數據包頭中的ACK標志置為1;TCP數據包頭中的目的端口項置為備用機TCP監聽連接請求的端口;TCP數據包頭中源端口項置為遠端機TCP發起連接請求的端口;TCP數據包頭中的序列號項取備用機TCP協議棧發送的SYN/ACK包中的確認序列號項的值;TCP數據包頭中的確認序列號項取備用機TCP協議棧發送的SYN/ACK包中的序列號項的值加1;TCP數據包頭中的窗口項取任意無符號整數;TCP包頭中的數據偏移項取5;TCP數據包頭中的校驗和項取按照正常計算TCP包頭校驗和的方法算出的此TCP數據包的校驗和;其它參數置0。
所述內容中特殊模式按照以下處理(如圖3)TCP協議棧根據TCP連接關聯的開關S3,判斷此連接的工作模式。對于工作在特殊模式下的TCP連接,TCP協議棧特殊處理。而備用機上其它工作在正常模式下的TCP連接,TCP協議棧按照正常處理。
TCP協議棧通過連接二的關聯開關S3,知道連接二工作在特殊模式下,因此對連接二特殊處理。
TCP層收到的與備用TCP連接二相關的TCP包實際上是遠端機C通過TCP連接一發送給主用機A的。
TCP層收到第一包與連接二相關的ACK包時,立即用ACK包中的有用信息更新連接二的發送序號、接收序號等相關參數。
對于隨后收到的與連接二相關的ACK包,如果ACK包中的序列號大于前面收到的ACK包中的序列號,或者ACK包中的序列號小于前面收到的ACK包中的序列號且之差大于1000000000。則立即使用ACK包中的有用信息更新發送序號、接收序號等相關參數。否則,不用更新。
更新參數以后ACK包不作進一步處理,直接丟棄。其它的與連接二相關的TCP不作任何處理,直接丟棄。
備用連接二在特殊模式工作下經過5次參數更新后,打開自身的開關S4,同時關閉自身的開關S3。TCP協議棧根據S4得知連接二工作在準特殊模式下。
所述的內容準正常模式按照以下處理(如圖4)TCP協議棧根據TCP連接關聯的開關S4,判斷此連接的工作模式。對于工作在準特殊模式下的TCP連接,TCP協議棧特殊處理。而備用機上其它工作在正常模式下的TCP連接,TCP協議棧按照正常處理。
TCP層對于接收到的與連接二相關ACK包,首先強行更新連接二的發送序號,接著按照正常模式進一步處理。這樣,如果ACK包中帶有實際的數據消息,備用機B的備用TCP連接二就可以接收并處理,從而備用機B的上層應用程序通過備用連接二就可以接收到遠端機C通過一發送給主用機A的消息。
備用機B的TCP協議棧產生的連接二相關的TCP應答包被禁止流出備用機B。
所述的內容E中主用機降為備用,并且上層應用不再通過原有的與遠端機建立的TCP連接向遠端機發送消息。
所述的內容E中備用機升為主用,備用TCP連接二轉為實際使用連接。上層應用程序通過連接二接收到遠端機C消息,并且通過連接二向遠端機C發送消息。從而接替已降為備用的原主用機開始工作。
所述的內容E中在利用連接二發送5包數據以后,連接二工作在正常模式下。TCP協議棧在發送與連接二相關的5包含數據消息的TCP包后,關閉連接二自身的開關S4。自此,TCP連接二工作在正常模式下。
所述的內容G中倒機前后,主備用TCP連接倒換為上層應用程序與遠端機的通信提供不間斷通信。主用機、備用機與遠端機通信所使用的不同TCP連接一,二具有相同的參數,備用機升為主用后發送消息時TCP包頭所帶的參數是無縫接替原主用機發送的最后一包ACK包頭中的參數的,在遠端機看來說一切都是正常的。遠端機覺察不出有TCP連接倒換現象。
所述的主備用雙機不僅限于兩臺計算機,也可以是主備用的兩個系統。并且可以擴展到多機系統。
上述的遠端機是一邏輯概念,它本身也可能是采用本專利構成的一個多機系統。
本發明的方法可以廣泛地運用于采用TCP進行通信的主備用雙機網絡通信應用中。
本發明的技術的關鍵思想是在備用機上模擬建立與遠端機的TCP連接,并且保證連接的參數與主用機的同步吻合。這樣當備用機升為主用后,原先模擬建立起來的連接就可以接替原主用機的TCP連接。
通過實踐得出的結論是本發明的方法可以保證采用TCP進行通信主備用雙機倒換過程中通信使用的TCP連接不發生中斷,保證通信的連貫性;可以保證主備用雙機倒換時的隱蔽性,使得遠端機不能覺察出倒機過程。
四
圖1是備用機建立備用TCP連接的TCP層流程圖(備用機是TCP客戶端)。
圖2是備用機建立備用TCP連接的TCP層流程圖(備用機是TCP服務器端)。
圖3是備用連接在特殊模式下TCP層處理流程圖。
圖4是備用連接在準正常模式下TCP層處理流程圖。
圖5是本發明的一種應用實例的網絡示意圖。
五具體實施例方式
以下結合實施例對本發明作進一步的詳細說明。
參見圖5,圖中示出的是本發明的一種應用實例的網絡示意圖。這是一種簡單的網絡組建服務器即為TCP服務器端,擁有一塊網卡(標記為Eth0),配置IP地址202.100.100.10。
客戶機A,客戶機B即為TCP客戶端主備用雙機,分別擁有兩塊網卡。配置相同的IP地址202.100.100.3,與服務器的IP地址在一個網段;客戶機A,客戶機B各自的Eth0配置相同的物理地址。
客戶機A,客戶機B的Eth0與先通過集線器再通過以太網交換機與服務器的Eth0連接,集線器的運用是為了使客戶機A,客戶機B的Eth0可以共享服務器發送過來的TCP包。
客戶機A,客戶機B的之間有其它通信方式聯系。
主備用雙機倒機時TCP連接倒換過程如下(1)主用機啟動。
客戶機A,客戶機B的啟動總會有先后的,先起動的我們認為是主用。我們假設客戶機A先為主用。客戶機A允許源地址是服務器的TCP包進入,允許目的地址是服務器的TCP包流出。
(2)主用機連接。
客戶機A與服務器進行一個正常的TCP連接一。
(3)主用機通信。
客戶機A與服務器通過連接一進行正常的數據傳遞。
(4)備用機啟動。
客戶機B啟動,狀態為備用,通過設置防火墻禁止源地址是服務器的TCP包進入,禁止目的地址是服務器的TCP包流出。
(5)備用機連接。
需要的時候,客戶機B初始化備用TCP連接二,并且打開與之關聯的開關S3,使得備用連接工作在特殊模式下。然后發起與服務器的連接,建立好連接。
(6)備用機參數調整。
客戶機B通過設置防火墻,允許服務器的TCP包進入,備用TCP連接參數調整完成后關閉開關S3,打開開關S4,備用TCP連接二開始工作在準正常模式下。
(7)正常倒機。
如果客戶機B已經處于可以倒機的狀態,即客戶機B上的備用TCP連接二已經工作在準正常模式下,可以進行倒機。客戶機A上層應用程序不再通過TCP連接一與服務器繼續通信。客戶機A設置防火墻,禁止源地址是服務器的TCP包進入,禁止目的地址是服務器的TCP包流出。然后通知客戶機B要求其升為主用。客戶機B設置防火墻,允許目的地址是服務器的TCP流出。客戶機B上層應用程序使用連接二繼續跟服務器通信,TCP連接不斷。此時,客戶機A已降為備用,打開連接一的關聯開關S3,使其工作在特殊模式下。客戶機B已升為主用。如需再次倒機,完成步驟(6),(7)。
(8)死機后倒機。
客戶機A因故障死機。客戶機B檢測到后,如果自身處于可以倒機的狀態,則設置防火墻,允許目的地址是服務器的TCP流出,從而接替客戶機A繼續跟服務器通信,TCP連接不斷。此時,客戶機A已降為備用,客戶機B已升為主用。如需再次倒機,客戶機A重起后完成步驟(4),(5),(6),(7)。
權利要求
1.一種使用TCP進行通信的主備用雙機進行TCP連接倒換的方法,其特征在于保證倒換過程中TCP通信的連續性。包含以下內容A.主用機A、備用機B作為雙機利用TCP與遠端機C進行通信;主、備用機用來與遠端機C通信時使用相同的IP地址d.d.d.d,相同的物理地址(物理地址也可以不同,此時應設置網卡工作在混雜模式下并且禁止備用機發送數據包)。啟動時都需要禁止目的地址是遠端機C的TCP包流出本機,同時禁止源地址是遠端機C且目的地址是d.d.d.d的TCP包進入本機的TCP協議棧。B.主用機A工作時,首先允許目的地址是遠端機的TCP包流出本機,同時允許源地址是遠端機且目的地址是d.d.d.d的TCP包進入本機的TCP協議棧;然后建立與遠端機C的TCP連接一,實現與遠端機C的正常通信,主用機A的TCP連接一工作在正常模式下;C.備用機B啟動后,在需要建立備用TCP連接的時候,建立備用TCP連接二。參照主用機A同遠端機C建立的TCP連接一,該備用TCP連接二與主用機A和遠端機C之間的TCP連接一具有相同的TCP本地端口和遠端端口。這個備用連接二工作在一種特殊模式下。D.備用機B的備用TCP連接二建立成功后,允許源地址時遠端機C且目的地址是d.d.d.d的TCP包進入備用機B的TCP協議棧;備用機B設法接收遠端機C發送給主用機A的各種TCP包;備用機B的TCP協議棧用接收到的遠端機C利用TCP連接一發送給主用機A的ACK包來更新備用TCP連接二的發送序號、接收序號等相關參數,從而使得備用機B建立的備用TCP連接二與主用機建立的TCP連接一的參數同步;在備用TCP連接二經過5次有效的參數更新后,其工作在準正常模式下;E.倒機時,主用機A禁止目的地址是遠端機C的TCP包流出本機,A降為備用,其與遠端機之間的TCP連接一工作在特殊模式下。備用機B允許目的地址是遠端機的TCP包流出本機,備用TCP連接二轉變為實際的連接,并且允許利用TCP連接二與遠端機C繼續通信;備用機B升為主用,在利用而二發送5包數據以后,二工作在正常模式下主備用雙機與遠端機的TCP連接成功進行了倒換;F.如果需要再一次倒機,主用機、備用機重復前面提到的D、E過程;G.倒機前后,遠端機C原有的TCP連接沒有中斷的感覺,始終保持連接,始終可以通信;遠端機C感覺不到主備用雙機TCP連接的倒換;H.如果遠端機主動放棄原有TCP連接,重新建立新的到地址d.d.d.d的TCP連接,則主用機依然作為主用;如果備用機已經建立了備用TCP連接二,則工作在特殊模式下;隨后主用機、備用機重復前面提到的D、E過程;如果備用機沒有建立備用TCP連接二,主用機、備用機重復前面提到的C、D、E過程;對于主備用雙機第一次啟動時,都沒有與遠端機建立過連接,主用機按照一般正常方式與遠端機完成TCP連接的建立,然后進行通信,隨后的主用機都是由備用機轉換而來的。
2.如權利要求1所述的主備用雙機進行TCP連接倒換的方法,其特征在于,所述的禁止目的地址是遠端機C的TCP包流出本機的實現可以通過使用防火墻軟件屏蔽掉目的地址是遠端機的TCP包;可以在TCP協議棧中增加開關變量S1,由上層應用程序來關閉此開關;此開關的關閉使得TCP層發送數據給IP層的接口函數失效,TCP層不能向IP層發送數據;只要能實現此功能,也可以采用其它任何等同的手段;所述的禁止源地址是遠端機C且目的地址是d.d.d.d的TCP包進入本機的TCP協議棧的實現可以通過使用防火墻軟件屏蔽掉源地址是遠端機C且目的地址是d.d.d.d的TCP包;也可以在TCP協議棧中增加開關變量S2,由上層應用程序來關閉此開關。此開關的關閉使得TCP層從IP層接收數據的接口函數失效,TCP層不能從IP層接收數據;只要能實現此功能,也可以采用其它任何等同的手段。
3.如權利要求1所述的主備用雙機進行TCP連接倒換的方法,其特征在于,所述的允許目的地址是遠端機C的TCP包流出本機實現可以通過使用防火墻軟件取消對目的地址是遠端機的TCP包的屏蔽;也可以在TCP協議棧中打開開關變量S1,使得TCP層發送數據給IP層的接口函數有效,TCP層可以向IP層發送數據;只要能實現此功能,也可以采用其它任何等同的手段。所述的允許源地址是遠端機C且目的地址是d.d.d.d的TCP包進入本機的TCP協議棧的實現可以通過使用防火墻軟件取消對源地址是遠端機C且目的地址是d.d.d.d的TCP包的屏蔽;也可以在TCP協議棧中打開開關變量S2,使得TCP層從IP層接收數據的接口函數有效,TCP層可以從IP層接收數據;只要能實現此功能,也可以采用其它任何等同的手段。
4.如權利要求1所述的主備用雙機進行TCP連接倒換的方法,其特征在于,所述的備用機B設法接收遠端機C發送給主用機A的各種TCP包的實現可以設置主用機A、備用機B用來與遠端機C通信時使用的網卡具備相同的物理地址,這樣備用機B就可以收到遠端機C發送給主用機A的各種TCP包;只要能實現此功能,也可以采用其它任何等同的手段;當備用機B轉為主用后,要保證發送給遠端機C的以太網包含有與原主用機A相同的本地物理地址,可以設置主用機A、備用機B用來與遠端機C通信時使用的網卡具備相同的物理地址。只要能實現此功能,也可以采用其它任何等同的手段。
5.如權利要求1所述的主備用雙機進行TCP連接倒換的方法,其特征在于,所述的正常模式指的是TCP協議棧的按照傳統的TCP協議所規定的處理流程來處理某一TCP連接上的接收發送過程,以及維護;所述特殊模式是跟主用機A與遠端機C的TCP連接一的正常模式相對而言的;備用TCP連接二特殊模式下的工作方式不同于主用機A的TCP連接一的正常模式的工作方式;特殊模式的選擇通過與TCP連接關聯的開關變量S3來控制,上層應用程序可以來控制這個開關;開關S3打開時,TCP連接按照特殊模式工作;連接建立過程,TCP協議棧依靠上層應用程序或其它模擬遠端機C的程序構造協商包來完成連接建立的3次握手;TCP協議棧對于IP層送到TCP層的TCP包,如果是針對備用連接的TCP包,備用機TCP協議棧判斷出此連接是工作在特殊模式下,則處理方式會不同于正常模式的TCP連接。備用機B通過上層應用程序在二初始化時,打開與之關聯的S3,使其工作在特殊模式;準正常模式十分接近正常模式,模式的選擇切換依靠與TCP連接關聯的開關S4來控制;上層應用程序和TCP協議棧都可以來控制這個開關,當開關S4打開時,TCP連接工作在準正常模式;這三種工作模式都是單一存在的。
6.如權利要求1所述的主備用雙機進行TCP連接倒換的方法,其特征在于,所述的內容C中參照主用機A同遠端機C建立的TCP連接按照以下處理如果主用機作為TCP連接的客戶機端,遠端機作為TCP連接的服務器端,則備用機也作為TCP連接的客戶機端。如果主用機作為TCP連接的服務器端,遠端機作為TCP連接的客戶機端,則備用機也作為TCP連接的服務器端。備用機建立TCP連接時用到的本地端口、遠端端口、遠端地址等參數與主用機建立TCP連接時用到的本地端口、遠端端口、遠端地址等參數相同;所述的內容C中備用機B工作時,在需要建立備用TCP連接的時候,建立備用TCP連接二按照以下處理如果備用機B作為TCP連接的客戶機端,備用機的上層應用程序向TCP協議棧發出TCP連接請求,TCP協議棧發送SYN包給遠端機C;TCP協議棧根據備用連接二關聯的S3判斷出此連接工作在特殊模式下,這個SYN包實際沒有流出備用機B;TCP協議棧在完成SYN包的發送處理后,上層應用程序或其它模擬遠端機C的程序構造一個SYN/ACK包,并由鏈路層或IP層的的接口函數交給TCP層。在TCP協議棧看來,這就是遠端機C的應答包;TCP協議棧處理完這個SYN/ACK后發送ACK包給遠端機C;這個ACK包實際沒有流出備用機B,此時建立TCP連接的3次握手完成,備用機B與遠端機C的備用連接建立;如果備用機B作為服務器端,備用機的上層應用程序向TCP協議棧告知需要建立的備用連接二。當TCP協議棧完成監聽連接請求后,TCP協議棧根據備用連接二關聯的S3判斷出此連接工作在特殊模式下,上層應用程序或其它模擬遠端機的程序構造一個SYN包,并由鏈路層或IP層的的接口函數交給TCP層,在TCP層看來,這就是遠端機C的TCP連接請求包;TCP層處理完這個SYN后發送SYN/ACK應答包給遠端機C,這個SYN/ACK包實際沒有流出備用機;緊接著,上層應用程序或其它模擬遠端機的程序構造一個ACK包,并由鏈路層或IP層的的接口函數交給TCP層,在TCP層看來,這就是遠端機C的應答包;TCP層處理完這個ACK后,此時建立TCP連接的3次握手完成,備用機與遠端機備用連接建立。
7.如權利要求6所述的主備用雙機進行TCP連接倒換的方法,其特征在于所述內容中構造SYN/ACK按照以下處理TCP數據包頭中的SYN標志、ACK標志均置為1;TCP包頭中的目的端口項置為備用機TCP監聽連接請求的端口;TCP數據包頭中源端口項置為遠端機TCP發起連接的端口;TCP數據包頭中的序列號項取32bits任意無符號整數;TCP數據包頭中的確認序列號項取備用機上層應用程序或模擬遠端機的程序發送的TCP連接請求SYN包中的序列號值加1;TCP數據包頭中的窗口項取任意無符號整數;TCP數據包頭中添加最大數據段長項(MSS,Maximum Segment Size),值取1460;TCP數據包頭中的數據偏移項取6;TCP數據包頭中的校驗和項取按照正常計算TCP包頭校驗和的方法算出的此TCP數據包的校驗和;其它參數置0。所述內容中構造SYN包按照以下處理TCP數據包頭中的SYN標志置為1;TCP數據包頭中的目的端口項置為備用機TCP發起連接的端口;TCP數據包頭中源端口項置為遠端機TCP監聽連接請求的端口;TCP數據包頭中的序列號項取32bits任意無符號整數;TCP數據包頭中的確認序列號項置0;TCP數據包頭中的窗口項取任意無符號整數;TCP數據包頭中添加最大數據段長項(MSS,Maximum Segment Size),值取1460;TCP數據包頭中的數據偏移項取6;TCP數據包頭中的校驗和項取按照正常計算TCP包頭校驗和的方法算出的此TCP數據包的校驗和;其它參數置0。所述內容中的構造ACK包按照以下處理TCP數據包頭中的ACK標志置為1;TCP數據包頭中的目的端口項置為備用機TCP監聽連接請求的端口;TCP數據包頭中源端口項置為遠端機TCP發起連接請求的端口;TCP數據包頭中的序列號項取備用機TCP協議棧發送的SYN/ACK包中的確認序列號項的值;TCP數據包頭中的確認序列號項取備用機TCP協議棧發送的SYN/ACK包中的序列號項的值加1;TCP數據包頭中的窗口項取任意無符號整數;TCP包頭中的數據偏移項取5;TCP數據包頭中的校驗和項取按照正常計算TCP包頭校驗和的方法算出的此TCP數據包的校驗和;其它參數置0。
8.如權利要求1所述的主備用雙機進行TCP連接倒換的方法,其特征在于,所述內容中特殊模式按照以下方式處理TCP協議棧根據TCP連接關聯的開關S3,判斷此連接的工作模式;對于工作在特殊模式下的TCP連接,TCP協議棧特殊處理;而備用機上其它工作在正常模式下的TCP連接,TCP協議棧按照正常處理;TCP協議棧通過連接二的關聯開關S3,知道連接二工作在特殊模式下,因此對連接二特殊處理;TCP層收到的與備用TCP連接二相關的TCP包實際上是遠端機C通過TCP連接一發送給主用機A的;TCP層收到第一包與連接二相關的ACK包時,立即用ACK包中的有用信息更新連接二的發送序號、接收序號等相關參數;對于隨后收到的與連接二相關的ACK包,如果ACK包中的序列號大于前面收到的ACK包中的序列號,或者ACK包中的序列號小于前面收到的ACK包中的序列好且之差大于1000000000,則立即使用ACK包中的有用信息更新連接的發送序號、接收序號等相關參數;否則,不用更新;更新參數以后ACK包不作進一步處理,直接丟棄。其它的與連接二相關的TCP不作任何處理,直接丟棄;備用連接二在特殊模式工作下經過5次參數更新后,打開自身的開關S4,同時關閉自身的開關S3。TCP協議棧根據S4得知連接二工作在準特殊模式下。
9.如權利要求1所述的主備用雙機進行TCP連接倒換的方法,其特征在于,所述的內容準正常模式按照以下處理TCP協議棧根據TCP連接關聯的開關S4,判斷此連接的工作模式。對于工作在準特殊模式下的TCP連接,TCP協議棧特殊處理。而備用機上其它工作在正常模式下的TCP連接,TCP協議棧按照正常處理;TCP層對于接收到的與連接二相關ACK包,首先強行更新連接二的發送序號,接著按照正常模式進一步處理。這樣,如果ACK包中帶有實際的數據消息,備用機B的備用TCP連接二就可以接收并處理,從而備用機B的上層應用程序通過備用連接二就可以接收到遠端機C通過連接一發送給主用機A的消息;備用機B的TCP協議棧產生的連接二相關的TCP應答包被禁止流出備用機B。
10.如權利要求1所述的主備用雙機進行TCP連接倒換的方法,其特征在于,所述的內容E中主用機降為備用,并且上層應用不再通過原有的與遠端機建立的TCP連接向遠端機發送消息;所述的內容E中備用機升為主用,備用TCP連接二轉為實際使用連接;上層應用程序通過連接二接收到遠端機C消息,并且通過連接二向遠端機C發送消息。從而接替已降為備用的原主用機開始工作;所述的內容E中在利用連接二發送5包數據以后,連接二工作在正常模式下;TCP協議棧在發送與連接二相關的5包含數據消息的TCP包后,關閉連接二自身的開關S4,自此,TCP連接二工作在正常模式下;所述的內容G中倒機前后,主備用TCP連接倒換為上層應用程序與遠端機的通信提供不間斷通信;主用機、備用機與遠端機通信所使用的不同TCP連接一,連接二具有相同的參數,備用機升為主用后發送消息時TCP包頭所帶的參數是無縫接替原主用機發送的最后一包ACK包頭中的參數的,在遠端機看來說一切都是正常的,遠端機覺察不出有TCP連接倒換現象;所述的主備用雙機不僅限于兩臺計算機,也可以是主備用的兩個系統;并且可以擴展到多機系統。
全文摘要
本發明公開了一種主備用雙機運用TCP與遠端機通信時進行TCP連接倒換的方法,從而有效的實現主備用雙機倒換時不引起與遠端機TCP連接的連接中斷,不影響與遠端機通信的連續性,并且不讓遠端機察覺倒機過程。本發明包含對傳統的TCP協議棧進行了一定的小范圍改造,以適應實現本發明的需要。本發明的方法可以廣泛的運用于采用TCP進行通信的主備用雙機網絡通信應用中。
文檔編號H04L29/06GK1567919SQ0313434
公開日2005年1月19日 申請日期2003年7月2日 優先權日2003年7月2日
發明者楊國巍, 段云龍, 劉軍鵬 申請人:西安大唐電信有限公司