一篇搞懂 NAT 和 PAT

NAT

為什麼要有 NAT ?

回憶一下,之前在網絡層中提到 IP 地址時提到了私有的 IP 地址。若不清楚或忘記了,可以先去看看 OSI Network Layer 網絡層。私有 IP 地址的設備是不能夠上網的, 而 NAT 的出現就是為了使這些私有 IP 地址也能上網。

什麼是 NAT ?

NAT 的全稱是 Network Address Translation。接下來馬上來看看 NAT 的概念和機制。

NAT 基本概念


如圖,左手邊是一個局域網,且其上的設備的 ip 地址都是 10 網段,是私有 ip 地址。本來這些私有 ip 地址的設備的數據報在路由器上是會被丟棄,所以上不了網的,所以應用 NAT 技術。

注意到,我們在路由器上配置了一個 NAT table。而這個 NAT table 為私有 ip 的主機一一配對了另一個非私有的 ip 地址。所以從 10.4.4.5 主機所發送的數據報,會被翻譯成 2.2.2.2 發送的數據報,從而達到可以上網的需求。這就是 NAT 的基本思想。

靜態 NAT

靜態 NAT 的做法就是在路由器上寫死一個 NAT table。

動態 NAT

動態 NAT 的做法就是在路由器上配置一個 ip 地址池,這個地址池裡的每一個 ip 地址都不是私有 ip 地址。採取的是先到先用的規則。

NAT 的缺點

不難發現,NAT 是一個一對一的映射關係。這就有很明顯的缺點,就是我們需要很大量的 ip 地址。雖然局域網內不見得所有主機都要同時上網,所以可以使用較少的地址池來完成 NAT,但其實對 ip 地址的需求依然非常緊張。於是出現了 PAT 技術。

PAT

PAT 是甚麼 ?

PAT 的全稱是 Port Address Translation。接下來馬上來看看 PAT 的概念和機制。

PAT 基本概念

顧名思義,PAT 是基於端口的,而不是簡單的 ip 地址了。回顧第四層傳輸層的部分,我們有提到過 socket 的結構。若不清楚或忘記了,可以先去看看 一篇搞懂 TCP 和 UDP。所以,PAT 是基於 socket 建立轉換的,具體機制再接著看下去。

PAT 工作機制

其實更進一步說,其實是兩個進程之間進行通訊,所以以 socket 建立源主機和目標主機是適合的。

其實,分配給局域網所有私有 ip 地址唯一的公有 ip 只有一個,203.10.10.2。也就是說,利用端口號來區分不同進程,而不再基於 ip 地址。而即使端口相同也沒關係,因為不同 ip 會區分出不同 socket。詳細 PAT 機制見下圖:

具體做法就是將所有局域網主機分配一個路由器端口(ip 地址),然後對於每個主機的各進程,再隨機分配一個端口號做區分就好了。

猜你喜欢

转载自blog.csdn.net/weixin_46803507/article/details/106904331
今日推荐