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,端口都一樣,需要重新給端口時,就不夠用了。

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

 

 

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