内網穿透

内網穿透

外網訪問局域網絡
所謂内網就是内部建立的局域網絡或辦公網絡。舉個例:一家公司或一個家庭有多台計算機,他們利用不同網絡布局将這一台或多台計算機或其它設備連接起來構成一個局部的辦公或者資源共享網絡,我們就稱它為内部網絡,也叫内網。所謂外網就是通過一個網關或網橋與其它網絡系統連接,相對于自己的内網來說,連接的其它網絡系統就稱為外部網絡,也叫外網。舉例說明:當一家公司或一個家庭的所有電腦網絡想要與公司或家庭以外的網絡連接(比如連接互連網),相對于這家公司或家庭,其它網絡(或互連網)就稱為外網!
    中文名:内網穿透 外文名: 别名: 釋義:内部建立的局域網絡或辦公網絡 如何進行:端口映射 問題:數據傳輸不穩定問題

名詞解釋

内網是内部建立的局域網絡或辦公網絡,外網是通過一個網關或網橋與其他網絡系統連接,相對于自己的内網來說,其他網絡系統稱為外網。内網穿透即NAT穿透,在處于使用了NAT設備的私有TCP/IP網絡中的主機之間建立連接的問題。通過映射端口,讓外網的電腦找到處于内網的電腦。内網穿透動态域名解析服務,簡稱NAT-DDNS,是一種基于動态域名服務(DDNS)和網絡地址轉換(NAT)的服務器内外網動态映射方法。

如何進行

端口映射,其實就是常說的NAT地址轉換的一種,其功能就是把在公網的地址轉翻譯成私有地址,采用路由方式的ADSL寬帶路由器擁有一個動态或固定的公網IP,ADSL直接接在HUB或交換機上,所有的電腦共享上網。

問題介紹

利用P2P點對點技術實現,需解決的兩個問題。

1.實現内網之間機器的網絡通信。

2.需要解決UDP出現的數據傳輸不穩定問題。

假設一台在NAT211.133.*後的192.168.1.77:8000要向NAT211.134.*後的192.168.1.88:9000發送數據,假設你向211.134.*這個IP地址的9000端口直接發送數據包,則數據包在到達NAT211.134.*之後,會被當做無效非法的數據包被丢棄,NAT在此時相當于一個防火牆,會對沒有建立起有效SESSION的數據包進行拒絕轉遞。當然,你也不能直接用内網地址192.168.1.88進行發送數據包,這就好比你在廣州要打電話到上海的某個地方,如果你不加區号,直接撥打區域内電話是件很愚蠢的事。

首先我們要認識NAT設備,NAT英文全拼是Network Address Translator(網絡地址轉換器),說白了就是凡是經過NAT發出去的數據包,都會通過一定的端口轉換(而非使用原端口)再發出去,也就是說内網和外網之間的通信不是直接由内網機器與外網NAT進行,而是利用内網對外網的NAT建立起SESSION與外網NAT的SESSION進行。

根據SESSION的不同,NAT主要分成兩種:SymmetricNAPT以及CONE NAPT。簡單的說,Symmetric NAPT是屬于動态端口映射的NAT,而CONE NAPT是屬于靜态端口映射的NAT。而市場上目前大多屬于後者,CONE的意思就是一個端口可以對外部多台NAT設備通信。這個也正是我們做點對點穿透的基本,是我們所希望的,否則現在的大部分點對點軟件将無法正常使用。

像上面的例子,NAT211.133.*和NAT211.134.*之間需要進行通信,但開始不能直接就發數據包,我們需要一個中間人,這個就是外部索引服務器(我們假設是211.135.*:7000),當NAT211.133.*向211.135.*:7000發送數據包,211.135.*:7000是可以正常接收到數據,因為它是屬于對外型開放的服務端口。當211.135.*:7000收到數據包後可以獲知NAT211.133.*對外通信的臨時SESSION信息(這個臨時的端口,假設是6000會過期,具體的時間不同,但我個人的測試是每30秒發送一個心跳包keep住連接以保證端口維持住通信連接不斷開),索引服務器此時應将此信息保存起來。

而同時,NAT211.134.*也在時刻向索引服務器發送心跳包,索引服務器就向NAT211.134.*發送一個通知,讓它向NAT211.133.*:6000發送探測包(這個數據包最好多發幾個),NAT211.134.*在收到通知包之後再向索引服務器發送反饋包,說明自己已經向NAT211.133.*:6000發送了探測包,索引服務器在接收到反饋包之後再向NAT211.133.*轉發反饋包,NAT211.133.*在接收到數據包之後再向原本要請求的NAT211.134.*發送數據包,此時連接已經打通,實現穿透,NAT211.134.*會将信息轉發給192.168.1.88的9000端口。

對于Symmetric NAPT的情況,網上有人說可以通過探測端口的方式,不過成功率并不高,我建議可用服務器進行中轉。另外,最好在數據包發送前先檢測是否進行的是同個NAT的情況,也就是内網發内網,如果是,直接發送即可,而無需通過外網再繞回來。

其次關于第二點,解決UDP傳輸的不穩定問題,其實這裡涉及到另一個方面的知識,就是滑動窗口的東西,可以開一個緩沖區用于循環接收數據以及重組,另外加上超時重發機制以及确認發送機制,有點像TCP的傳輸原理,不過如果處理的好,效率絕對比采用TCP的方式要高。

相關詞條

相關搜索

其它詞條