NAT穿透相關知識

相關知識都摘抄來自網上

http://bbs.csdn.net/topics/290081559


問題1: 
  既然內網的是需要打洞才能通信的,那QQ,msn,甚至是瑞星的升級程序,要TCP通信的,它們都會打洞的? 
------------------------------------------------------------------------------------
回答1:不是內網需要打洞,是在非同一路由的局域網之間通信需要打洞。

回答2:升級程序是內網TCP發起鏈接連公網 IP 不需要打洞


問題2: 
  ping包,既ICMP包,發出去,能夠收回,爲什麼ping包不需要打洞?很奇怪啊,還有http,ftp它們爲什麼就不需要打洞? 
-------------------------------------------------------------------------------------------------
回答1:ping包能收回是因爲在和公網固定IP通信或同一局域網內機器通信,http和ftp也是同理,這些都不滿足需要打洞的條件,因此根本不需要打洞。
回答2:ICMP UDP TCP 內網發起通信通向公網 IP 都不需要打洞,應爲服務端收到包裏你的地址是 NAT 裝換後的虛公網地址

問題3: 
  實現TCP打洞,或者讓內網的用戶能和外網的完全正常通信,有沒有稍微簡單點的方法?
-------------------------------------------------------------------
回答1:打洞的原理並不複雜,在弄懂原理後用什麼語言和什麼方法實現根本不成問題。
回答2:你的服務器跑在公網上,客戶端連上來,服務端使用客戶端的公網地址轉發消息即可
附帶提醒:如果路由不支持UPNP的話,軟件實現了打洞也沒用。


TCP打洞看下那個開源代碼XSTUN ,是C++寫的



問題1: 
  既然內網的是需要打洞才能通信的,那QQ,msn,甚至是瑞星的升級程序,要TCP通信的,它們都會打洞的? 
============================================================================================
  首先要弄明白什麼樣的情況下需要打洞(這個詞實在是@#$@$@!),內網裏的QQ/MSN/瑞星升級等程序,一般情況下(QQ應該分開來說,他的一些功能是有做內網穿透的)是內網IP與公網IP通信,這種情況不需要我們通常所說的打洞,我們通常說的打洞,是內網IP與內網IP跨越公網直接互連時的一個動作.是兩個洞,在兩個內網網段各自的NAT設備上分別有一個針對自身的端口映射,而內網IP對公網IP這種情況,擁有公網IP的一端是可以直接被路由到的,不需要IP地址的轉換.但是,有一點要明確,這種情況下也是有"洞"的存在的,不過只有一個,就是在內網IP這一端的NAT設備(一般就是帶NAT功能的路由器)上,要知道,共享一個公網IP給內網用戶上網並不是路由協議的功勞,NAT纔是.

問題2: 
  ping包,既ICMP包,發出去,能夠收回,爲什麼ping包不需要打洞?很奇怪啊,還有http,ftp它們爲什麼就不需要打洞? 
===================================================================================================
  ICMP也是基於IP的,他雖然沒有PORT段,但是IP頭內有標識字段,所以洞依舊是打了的,只是不再依端口來做映射,這也是爲什麼在同一臺機器上,開兩個DOS窗口,PING同一個IP時,同一時間只有一個PING得到返回,另一個丟包的原因.至於HTTP/FTP,他們都是基於TCP的,連的是公網IP地址,還是那句話,不是不打"洞",是隻打了一個"洞"

問題3; 
實現TCP打洞,或者讓內網的用戶能和外網的完全正常通信,有沒有稍微簡單點的方法?
===================================================================================================
  TCP實現打洞的說法我也關注過一段時間,沒見過成品,有基於端口預測的做法,太不靠譜,基於TCP的內網互連有一個最簡單的問題,當內網中的SERVER端bind一個端口並ACCEPT時,並沒有和本地的NAT設備有任何通信,NAT如何知道內網中有個應用需要一個端口映射,因爲一直覺得要實現TCP穿透不如實現個可靠的UDP協議來穿透更實際,所以也沒太關注,感覺還是老老實實的用uPNP更好吧.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章