專利名稱:一種基于nat穿透的共享方法
技術領域:
本發明涉及計算機網絡領域,特別涉及一種基于NAT穿透的共享方法。
背景技術:
隨著hternet的普及和網絡設備的飛速發展,接入互聯網的用戶和設備正在呈幾何級數地增長著,然而依照現行的IPv4協議,每個hternet的主機都有一個唯一的IP 地址,IP地址用一個32位二進制的數來表示。由于32位的二進制數僅僅是十億級別的數值,隨著接入hternet的計算機數量的不斷猛增,IP地址資源也就愈加顯得捉襟見肘。事實上,除了中國教育和科研計算機網(CERNET)外,一般用戶幾乎申請不到整段的C類1 地址。在其他ISP那里,即使是擁有幾百臺計算機的大型局域網用戶,當申請IP地址時,所分配的地址也不過只有幾個或十幾個IP地址。顯然,這樣少的IP地址根本無法滿足網絡用戶的需求。與此同時,雖然下一代互聯網協議IPv6已經被討論制定,但由于新的協議需要眾多的設備廠商的支持,同時需要對現有的基礎網絡設施進行大規模地升級或換代,所需的時間和成本都難以估量,因而短期內也無法大規模地實施。于是,目前的互聯網企業普遍采用網絡地址轉換(NAT,Network Address Translation)方式來解決這一問題,網絡地址轉換屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化為合法IP地址的轉換技術,被廣泛應用于各種類型hternet接入方式和各種類型的網絡中。NAT設備允許處于同一 NAT后的多臺主機共享一個公網(處于同一 NAT后的網絡稱為私網,處于NAT前的網絡稱為公網)IP地址。一個私網IP地址通過NAT 設備與公網的其他主機通信。NAT不僅完美地解決了 IP地址不足的問題,而且還能夠有效地避免來自網絡外部的攻擊,隱藏并保護網絡內部的計算機。一個通常的基于NAT技術的公網和私網IP地址域構成如圖1所示,一般來說都是由私網內主機,如圖1中的設備A-01,主動發起連接,數據包經過NAT地址轉換后送給公網上的服務器krver,連接建立以后可雙向傳送數據。NAT設備允許私網內主機主動向公網內主機發送數據,但卻禁止反方向的主動傳遞,使得一些特殊場合需要不同私網內的主機進行互聯的活動(例如P2P軟件、網絡會議、視頻傳輸等)無法進行,這明顯制約了互聯網應用的發展。盡管通常使用UDP協議就能夠穿透NAT,但是UDP數據雖然速度快,卻沒有保障,而且NAT為UDP準備的臨時端口號有生命周期的限制,使用起來不夠方便。在需要保證傳輸質量的應用上(如文件傳輸等)TCP連接還是首選,基于TCP協議的眾多網絡應用,尤其是不同私網內主機之間的共享應用無法在NAT環境中實施,極大地影響了互聯網企業中的用戶使用。因而目前,TCP穿透NAT的問題亟待解決。
發明內容
(一)要解決的技術問題
針對現有技術的缺點,本發明為了解決基于TCP協議穿透NAT進行共享應用的問題,通過互聯網中服務器主機的協助,在兩不同私網中的客戶端之間建立直接的TCP連接, 使得不同私網內客戶端的共享應用可以穿透NAT進行實施。( 二 )技術方案為此解決上述技術問題,本發明具體地采用如下技術方案進行首先,本發明提供一種基于NAT穿透的共享方法,私網中客戶端A通過NAT路由器 NAT-A與公網上服務器S通信,另一私網中客戶端B通過NAT路由器NAT-B與服務器S通信,所述方法包括步驟Si,服務器S開啟兩個網絡端口,主連接端口和隧道協助端口 ;S2,客戶端A和客戶端B分別與服務器S的主連接端口保持聯系;S3,當客戶端A需要和客戶端B建立直接的TCP連接時,首先連接服務器S的隧道協助端口,并發送協助連接請求,同時在該端口上啟動監聽;S4,服務器S的隧道協助端口接收到客戶端A的連接請求后通過主連接端口通知客戶端B,并將客戶端A經過路由器NAT-A轉換后的公網IP地址和端口信息告訴客戶端B ;S5,客戶端B收到服務器S的通知后首先與服務器S的隧道協助端口連接,發送一些隨機數據后立即斷開;S6,客戶端B嘗試與客戶端A經過路由器NAT-A轉換后的公網IP地址和端口進行連接;S7,客戶端B建立隧道的同時在相同的端口上啟動監聽,客戶端B在一切準備就緒以后向服務器S的主連接端口回復“準備就緒”消息,服務器S在收到該消息后將客戶端B 經過路由器NAT-B轉換后的公網IP和端口號告訴給A ;S8,客戶端A收到服務器S回復的客戶端B的公網IP和端口號等信息以后,開始連接到客戶端B的公網IP和端口號,在客戶端A和客戶端B之間建立起直接的TCP連接;S9,基于所述直接的TCP連接在客戶端A和客戶端B之間進行共享應用。優選地,步驟S9中,所述共享應用為共享桌面,具體包括步驟客戶端A發送共享桌面請求,客戶端B接收;客戶端A將壓縮的桌面字節流通過TCP連接實時發送;客戶端B接收并顯示。優選地,步驟S9中,所述共享應用為共享畫板,具體包括步驟客戶端A發送共享畫板請求,客戶端B接收;客戶端A和客戶端B各自顯示一個畫板,用來進行操作;任意一方在畫板的變化通過TCP連接發送到對方的畫板上,實時進行顯示。(三)有益效果本發明通過利用公網上的服務器協助在不同私網中的兩個客戶端之間建立基于 TCP協議的隧道,使得客戶端可以穿透各自的NAT設備,而進行穩定可靠的數據傳輸。
圖1為現有技術中常見的基于NAT技術的組網方式示意圖;圖2為本發明中基于TCP協議穿透NAT的示意圖3為本發明中基于TCP協議穿透NAT進行共享的方法流程圖。
具體實施例方式下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明的一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動的前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。首先,參見圖2,服務器S在公網上有一個IP,兩個私網分別通過NAT路由器NAT-A 和NAT-B連接到公網,NAT-A后面的私網中有一臺客戶端A,NAT-B后面的私網中有一臺客戶端B,現在,我們需要借助服務器S在客戶端A和客戶端B之間建立直接的TCP連接,即由客戶端B向客戶端A建立一個隧道,讓客戶端A可以沿這個隧道直接連接到客戶端B,就好像路由器NAT-B不存在一樣。其方法具體的流程圖如圖3所示Si,服務器S開啟兩個網絡端口,主連接端口和隧道協助端口。S2,客戶端A和客戶端B分別與服務器S的主連接端口保持聯系。S3,當客戶端A需要和客戶端B建立直接的TCP連接時,首先連接服務器S的隧道協助端口,并發送協助連接請求,同時在該端口上啟動監聽;注意由于要在相同的網絡終端上綁定到不同的套接字上,所以必須為這些套接字設置S0_REUSEADDR屬性(即允許重用), 否則監聽會失敗。S4,服務器S的隧道協助端口接收到客戶端A的連接請求后通過主連接端口通知客戶端B,并將客戶端A經過路由器NAT-A轉換后的公網IP地址和端口等信息告訴客戶端 B0S5,客戶端B收到服務器S的通知后首先與服務器S的隧道協助端口連接,發送一些隨機數據后立即斷開,使服務器S獲知客戶端B經過路由器NAT-B轉換后的公網IP和端口號。S6,客戶端B嘗試與客戶端A經過路由器NAT-A轉換后的公網IP地址和端口進行連接;此步驟根據不同的路由器會有不同的結果,某些路由器(如TP-Link R402)在此步驟能夠建立連接,但絕大多數路由器會直接丟棄這類并非由自身網絡內部首先發起的SYN請求包,進而導致客戶端B此次嘗試連接失敗;但路由器NAT-A會記錄此次連接的源地址和端口號,這為接下來真正的連接做好了準備,這就是所謂的隧道,即由客戶端B向客戶端A打通了一個隧道,下次客戶端A就能直接連接到客戶端B剛才使用的IP地址和端口號。S7,客戶端B建立隧道的同時在相同的端口上啟動監聽,客戶端B在一切準備就緒以后向服務器S的主連接端口回復“準備就緒”(I’ m Ready)消息,服務器S在收到該消息后將客戶端B經過路由器NAT-B轉換后的公網IP和端口號告訴給A。S8,客戶端A收到服務器S回復的客戶端B的公網IP和端口號等信息以后,開始連接到客戶端B的公網IP和端口號,由于在步驟S6中客戶端B曾經嘗試連接過客戶端A 的公網IP地址和端口,且路由器NAT-A已記錄了此次連接的信息,所以當客戶端A主動連接客戶端B時,路由器NAT-B會認為是合法的SYN數據,并允許通過,從而在客戶端A和客戶端B之間建立起了直接的TCP連接。S9,基于所述直接的TCP連接在客戶端A和客戶端B之間進行共享應用。
更進一步地,通過已經建立的TCP的連接,可以利用此隧道來傳輸具體的數據或文件,實現客戶端A和客戶端B之間的共享應用。客戶端A和客戶端B之間共享桌面(通過此功能不同用戶可以查看對方的電腦桌面,觀察對方的操作)的實現方法為1)首先客戶端A和客戶端B之間建立連接;2)客戶端A發送共享桌面請求,客戶端B接收;3)客戶端A將壓縮的桌面字節流通過TCP連接實時發送;4)客戶端B接收并顯示。客戶端A和客戶端B之間共享畫板(通過此功能不同客戶端可以實時協作繪畫, 增強客戶端之間的互動性)的實現方法為1)首先客戶端A和客戶端B之間建立連接;2)客戶端A發送共享畫板請求,客戶端B接收;3)客戶端A和客戶端B都會顯示一個畫板,用來進行操作;4)任意一方在畫板的變化都會及時通過TCP連接發送到對方的畫板上,達到雙方的操作互動性。本發明通過上述方案可以很靈活地實現不同網絡間的數據發送,使得客戶可以不僅與在同一網段的客戶通信,也可實現不同網段間的通信,使用TCP協議增強了數據發送的可靠性,穩定性。以上實施方式僅用于說明本發明,而并非對本發明的限制,有關技術領域的普通技術人員,在不脫離本發明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術方案也屬于本發明的范疇,本發明的發明保護范圍應由權利要求限定。
權利要求
1.一種基于NAT穿透的共享方法,私網中客戶端A通過NAT路由器NAT-A與公網上服務器S通信,另一私網中客戶端B通過NAT路由器NAT-B與服務器S通信,其特征在于,所述方法包括步驟Si,服務器S開啟兩個網絡端口,主連接端口和隧道協助端口 ; S2,客戶端A和客戶端B分別與服務器S的主連接端口保持聯系; S3,當客戶端A需要和客戶端B建立直接的TCP連接時,首先連接服務器S的隧道協助端口,并發送協助連接請求,同時在該端口上啟動監聽;S4,服務器S的隧道協助端口接收到客戶端A的連接請求后通過主連接端口通知客戶端B,并將客戶端A經過路由器NAT-A轉換后的公網IP地址和端口信息告訴客戶端B ;S5,客戶端B收到服務器S的通知后首先與服務器S的隧道協助端口連接,發送一些隨機數據后立即斷開;S6,客戶端B嘗試與客戶端A經過路由器NAT-A轉換后的公網IP地址和端口進行連接;S7,客戶端B建立隧道的同時在相同的端口上啟動監聽,客戶端B在一切準備就緒以后向服務器S的主連接端口回復“準備就緒”消息,服務器S在收到該消息后將客戶端B經過路由器NAT-B轉換后的公網IP和端口號告訴給A;S8,客戶端A收到服務器S回復的客戶端B的公網IP和端口號等信息以后,開始連接到客戶端B的公網IP和端口號,在客戶端A和客戶端B之間建立起直接的TCP連接; S9,基于所述直接的TCP連接在客戶端A和客戶端B之間進行共享應用。
2.根據權利要求1所述的方法,其特征在于,步驟S9中,所述共享應用為共享桌面,具體包括步驟客戶端A發送共享桌面請求,客戶端B接收; 客戶端A將壓縮的桌面字節流通過TCP連接實時發送; 客戶端B接收并顯示。
3.根據權利要求1所述的方法,其特征在于,步驟S9中,所述共享應用為共享畫板,具體包括步驟客戶端A發送共享畫板請求,客戶端B接收;客戶端A和客戶端B各自顯示一個畫板,用來進行操作;任意一方在畫板的變化通過TCP連接發送到對方的畫板上,實時進行顯示。
全文摘要
本發明涉及計算機網絡領域,提供了一種基于NAT穿透的共享方法,通過建立基于TCP協議的隧道,使得分別位于不同私網中的兩個客戶端可以穿透各自的NAT設備,而進行穩定可靠的數據傳輸。本發明的方法不僅可以很靈活地實現不同網絡間的數據收發,實現不同網段間的通信,更進一步地還可支持不同私網用戶之間安全可靠地共享應用。
文檔編號H04L29/12GK102231763SQ20111016661
公開日2011年11月2日 申請日期2011年6月20日 優先權日2011年6月20日
發明者萬雪松, 于曉軍, 趙辰清 申請人:北京思創銀聯科技股份有限公司