你是否有想過,一個長度只有 32 位元的 IPv4 位置,計算下來約莫只能提供 42 億個位置,早已經少於世界人口總數,無法讓人人皆有了。
但是每個連上網際網路的裝置,都需要一個 IP 位置怎麼辦?
根據一些統計資料,在 2022 年 5 月時,想擁有一個 IPv4 位置大約要 50 美元,折合新台幣 1500 元左右。就連最大的雲端服務供應商 AWS,都宣布在 2024 年會開始對每個 IPv4 位置收取每月大約 100 元新台幣的租金。
雖然對於大部分的使用者來說,除非有建立伺服器相關服務的需求,似乎也沒有必要一個公開、固定的 IP 位置。那麼當我們下載網頁時,回傳的封包要怎麼被收到呢?
在正式談及 NAT 之前,我們來看看一個簡單的小例子回顧封包傳輸的路徑。
假設你有一台電腦,有個 Public IP Address 1.2.3.4,當你到 google.com 瀏覽時,會和網頁伺服器尋求下載一份網頁文件。由於你的 IP 位置是公開的,回傳的網頁很容易就能被你收到了。
*請求(Request)及回應(Response)
我們知道在你的電腦和網頁伺服器中間,其實是經由許多 Router 在幫你轉送資料的,所以當伺服器回覆你所需的網頁時,更精確一點的路徑其實是長這個樣子的。
*封包傳送路徑
然而,由於剛剛所提到 IPv4 位置枯竭的問題,不是每一台設備都有一個公開的 IP 位置的。常見的情況是,當你申請上網服務時,你的網路服務供應商(ISP)可能會分配一個公開 IP 位置,但有可能是動態的(意謂著可能隔一段時間、數據機重開時會被更換),也或許是虛擬的。
不論是什麼形式,你的所有設備如果都透過這台數據機上網的話,你最多就只有一組 Public IP 位置。如果此時有多台設備同時上網的話怎麼辦?這時 NAT 這項技術就派上用場了!
何謂 NAT?全名為 Network Address Translation,中文翻譯成「網路位置轉譯」,顧名思義就是將 IP 位置做個轉換的技術。
我們且看以下例子:
當一個 Public IP 位置被分配給我們,我們的路由器會維護一份 NAPT 的表格,對應內部及外部的 IP 位置加上連接埠,這也是為何會 NAT 加上一個 P 的緣故,這裡的 P 指的就是 Port(連接埠)。
*NAPT
所以當我們內網中有個 IP 位置為 192.168.1.2 的電腦送了一個請求到 google.com 時,這台電腦會開啟一個 Port,如 5566,等待 google.com 的回傳資料。
此時路由器就會將此 192.168.1.2:5566 的組合轉換成一個 Public IP + Port 的組合 1.2.3.4:9200,然後讓 google.com 知道回傳資料要傳到這邊。最後收到資料時再根據同樣的這張表反查,知道目的地為 1.2.3.4:9200 其實就是我們這台電腦 192.168.1.2:5566。
這樣子就算內網有多台設備,也能根據不同的 Public IP 位置加上不同的 Port 反查回是哪台設備的什麼請求。
不過,解決了 IP 位置有限問題的 NAT,其實也衍伸出不一樣的問題,我們下一講接著聊。