淺談 NAT 技術
NAT 技術也叫網路地址轉換技術,是一種私有地址轉換成合法/公網 IP 地址的技術。下面我們一起來了解一下,什麼是私有地址,什麼是合法 IP 地址,以及為什麼要引入 NAT 技術。
NAT 技術
私有地址和合法地址
如果組建一個區域網,其中的 IP 地址僅用於區域網內部通訊,而不能直接連到 Internet 的話,那麼這些IP地址就是區域網的私有 IP 地址。理論上所有 IP 地址均可作為私有 IP 地址,但是 RFC1918 規定私有 IP 地址不能出現在 Internet 上,所以規定了私有IP地址為以下三種:
10.*
,前8位是網路號,共16777216個地址;172.16.*
到172.31.*
192.168.*
,前16位是網路號,共65536個地址。
與私有 IP 地址相對的就是公有 IP 地址,也就是合法 IP 地址,是能夠用在 Internet 上的通訊的,是唯一的。
為什麼要引入NAT技術
由於 IP 地址數量有限,對於企業而言,向 ISP 申請 IP 地址,能夠申請到的 IP 地址數目也遠遠滿足不了網路使用者的需求,所以在區域網內使用者在向外網訪問的時候,將其私有 IP 地址轉換成一個合法的公有 IP 地址,通過這個 IP 地址來在外網上進行訪問,而將私有 IP 地址轉換成公有 IP 地址的技術就是 NAT 技術。而且在一定程度上,NAT 技術對區域網內的主機與外網進行了分隔,保護了局域網內部的資訊互動。
對於 NAT 技術,我們都知道在網路傳輸過程中資料包中會包含源 IP 地址和目的 IP 地址,它們倆在傳輸過程當中一般不會改變的,但在這裡我們應用 NAT 技術就是要改變它們倆的其中之一滿足我們的需求。
在資料包從區域網內部的某個主機上送至閘道器上時,會將資料包中的源 IP 地址替換成公有 IP 地址,然後轉發給外網的某個伺服器,而當伺服器處理好服務,會向之前接收到的資料包中的源 IP 地址(也就是公有地址)傳送資料包,而當它到達閘道器時,此時資料包中的目的IP地址又會被替換成區域網內傳送請求的主機的私有 IP 地址,從而轉發到目標主機上。
NAT 技術型別
① 靜態轉換 Static NAT
將內部網路的私有 IP 地址轉換為公有 IP 地址,IP 地址對是一對一的,是一成不變的,某個私有 IP 地址只轉換為某個公有 IP 地址。藉助於靜態轉換,可以實現外部網路對內部網路中某些特定裝置的訪問。
② 動態轉換 Dynamic NAT
將內部網路的私有 IP 地址轉換為公用 IP 地址時,IP 地址是不確定的,是隨機的,所有被授權訪問上 Internet 的私有 IP 地址可隨機轉換為任何指定的合法 IP 地址。也就是說,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作為外部地址時,就可以進行動態轉換。動態轉換可以使用多個合法外部地址集。當 ISP 提供的合法 IP 地址略少於網路內部的計算機數量時。可以採用動態轉換的方式。
前面兩種轉換私有 IP 地址在訪問外網時,都會被分配一個公有 IP 地址,只不過第一種是私有 IP 地址與公有 IP 地址是永久對應的,而第二種則是臨時分配給這個靜態 IP 地址的,使用者斷開後這個公有 IP 地址就會被釋放,後面別的私有 IP 地址也可以和它匹配,到了這裡似乎我們發現當同時一個區域網內有多個主機進行訪問,而公有IP數目不夠時,似乎無法進行同時訪問。
而要實現這一點,就要用下面這種 NAT 技術。
③ 埠多路複用 OverLoad
這種 NAT 技術是應用最多的,它在私有 IP 進行訪問時,NAT 伺服器會提供一個未被使用的埠,將以 公有IP地址:埠號
的形式替換資料包中的目的 IP 地址(私有IP地址:埠號
),而在伺服器響應傳送回資料包後,又會將目的地址用 私有IP地址:埠號
替換 公有IP地址:埠號
;所以只要 NAT 伺服器還有未被使用的埠號,那麼就可以實現區域網內的不同主機同時訪問外網。
這裡提到了埠號,其實在網路當中,“IP 地址 + 埠號” 才能標識網路服務當中唯一的特定主機的網路程序,這也就是我們的套接字。至於埠號,在網路當中主要分為兩類:物理埠(硬埠)和邏輯埠(軟埠)。
所謂硬埠就是我們經常能看到的各種裝置上真實存在的埠,而軟埠則是邏輯意義上用於區分服務的埠,它們是供各種應用程式使用進行各種服務的不存在於真實的某個裝置上,但能被應用程式識別的,為了區分這些埠,我們將這些埠進行編號,這也就是我們前面所說的埠號,都是這些軟埠的編號。
一臺計算機上的有效埠號最多到65535,而我們對這些埠又大致進行了如下劃分:0~1023為公認埠,它們一般與我們的常見服務進行繫結(如21對應ftp服務,22對應SSH服務,80對應http服務,443對應https服務);1024~49151為註冊埠,這些埠鬆散的繫結某些服務,但同樣也可以用於其他目的;49152及以上為動態埠也叫私有埠,可以用於任意應用軟體與其他應用軟體進行通訊,使用TCP/UDP協議。至於常見的服務與埠號之間的對應關係,可以在 /etc/services 檔案中查詢。
參考: