1. 程式人生 > >NAT區域網對映公網原理簡述

NAT區域網對映公網原理簡述

這裡不討論繁瑣的概念,主要討論一下,一個區域網怎樣利用一個IP地址和公網互聯。

涉及兩個難點問題:

1.區域網中的一臺主機 A(192.168.1.110)如何與外網伺服器(20.173.12.22)通訊?

2.伺服器的返回資料包,是如何找到內網的客戶端電腦A,並將資料傳給電腦A上執行的程式p呢?

1.第一個問題:區域網中的主機A,如何與外網伺服器(20.173.12.22)通訊?

區域網中的主機A,想要訪問外網伺服器時,是通過NAT,將地址轉換成外網地址。然後與伺服器通訊的。

這樣問題自然就來了

2.第二個問題:那麼伺服器返回的訊息之後,是如何知道是內網中那一臺電腦傳送的請求呢?

答案:通過埠來區分。

埠號是從0~65535的一個數字,每個區域網內的電腦在發出請求時,要帶上自己的埠號,這樣就可以區分了。帶自己的埠,就是為了伺服器在返回訊息時,知道要給誰。

問題又來了:

3.第三個問題:但是,區域網內的電腦發的請求,埠號會重複嗎?允許重複嗎?

答案:會重複。允許重複。

4.第四個問題:怎麼辦?

答案:區域網內的電腦發的請求,帶的是區域網內部的"IP+埠號",在向外發請求時,NAT會重新給一個IP和埠號。這個IP就是整個區域網共用的IP,而埠則是臨時生成一個,給這個請求。NAT裝置內部,記錄這個轉換的對映表。到時候,可以根據這張表,來倒推原來的請求的內網IP和埠。雖然埠一樣,但是IP不一樣,是可以區分清楚的。

5.第五個問題:那麼同一臺電腦上,不同的軟體訪問相同的網站,是否"IP+埠"會出現重複?

比如用谷歌瀏覽器,和IE瀏覽器訪問同一個網站?

答案:不會。首先有個概念要澄清。"IP+埠",有兩對:一個是客戶端,一般是我們自己區域網內的電腦;一個是服務端,一般是網站。我們客戶端的“IP+埠”稱為“源IP和源埠”,服務端的稱為“目的IP和目的埠”。我們自己電腦上的軟體佔用的埠是“源”埠。“源”埠用於在伺服器返回響應時,尋找目標程式所使用的埠。不同的程式,在執行時,如果要訪問網路,電腦會分配不同的埠。當兩個軟體同時使用相同的埠時,後開啟的的那個軟體會被電腦提示:“埠已被佔”用而出錯。因此,不同的軟體,軟體自身始終是不同的埠。這個和訪問的網站是否一樣沒有關係。

以上總結一下:

區域網內的主機發請求時,會帶上自己的 IP+埠,走到NAT時,會將IP替換成公網IP,並重新分配一個埠給這個請求。當有了這個新的IP+埠之後,就可以訪問外網伺服器。伺服器返回訊息時,返回到NAT,NAT根據IP+埠找到當時區域網內的IP和埠,併發送到區域網內的目標機器上,併發給對應的程式。

6.那麼問題又來了:區域網內電腦太多時,是否NAT的埠不夠分配?

比如,區域網內有70000臺電腦,大於65535了。

答:不錯。這個時候,埠就不夠了。一般情況下,是需要另一個公網IP的。這個時候,如果電腦的同一個程式,比方說大家都登陸QQ,傳送請求時,源埠都是4000,傳送到NAT時,大家都用同一個IP,埠都一樣,需要重新給埠時,就不夠用了。

不過,如果可以實現分時複用的話,應該還是可以的。