引言:隨著計算機網絡深入人們生活的各個領域,大型主機、個人計算機、筆記本、PDA、存儲設備、路由器、交換機以及各種網絡設備都需要連接到Internet上,IPv4的地址空間嚴重不足。NAT技術是解決IP地址空間不足的暫時解決方案,下面筆者介紹一下NAT技術。
現在IPv4的地址空間嚴重不足,解決IPv4地址空間不足的方案有多種,IPv6被認為是解決IP地址不足的最終解決方案,NAT技術是解決IP地址空間不足的暫時解決方案。
當內部網絡上的一臺主機訪問互聯網上的一臺主機時,內部網絡主機所發出的數據包額源IP地址是私有地址,這個數據包到達某個路由器后,路由器使用事先設置好的注冊公有IP地址替換掉私有地址,這樣這個數據包的源IP地址就變成了互聯網上唯一的公有IP地址,此數據包將被發送到互聯網的目的主機處。互聯網上的主機認為是路由器在訪問它,因為數據包的源IP地址是路由器地址。NAT技術通過改變數據包中的IP地址,來實現內部網絡使用私有地址的主機和互聯網上使用公有地址的主機之間進行通信。
Inside local address:內部本地地址,是指局域網內部分配給主機的IP地址,這個地址通常是RFC1918規定的私有地址。
Inside global address:內部全局地址,指設置在路由器等互聯網接口設備上,用來替代一個或者多個內部私有地址的公有注冊IP地址,這個地址必須經過注冊,并且在互聯網中是唯一的。
Outside local address:外部本地地址,指互聯網上另一端網絡內部地址,該地址可能是RFC1918私有地址,也可能是注冊公有地址。
Outside global address:外部全局地址,指互聯網上的一個公有注冊地址,在互聯網上是唯一的。
一般情況下,Outside local address(外部本地地址)和Outside global address(外部全局地址)是同一個公有地址,它們是內部網絡主機所訪問的互聯網上的主機。
當內部網絡有多臺主機訪問互聯網上的多個目的主機時,路由器必須記住內部網絡的哪臺主機訪問互聯網的哪臺主機,以防止在地址轉換時將不同的連接混淆,所以路由器將為NAT的眾多連接建立一個表,即NAT表。
NAT在做地址轉換時,依靠在NAT表中記錄內部私有地址和外部公有地址的映射關系來保存地址轉換的依據。在做后續的NAT操作時,只需要查詢該NAT表,就可以得知應該如何轉換地址,而不會發生數據連接混淆。
如圖1所示,內部網絡主機A被分配了一個私有IP地址192.168.1.8,內部網絡通過一臺路由器與互聯網相連,地址是210.96.98.1,而我們為路由器單獨分配了一個公有注冊地址212.10.1.8來負責NAT的轉換。實際上,如果我們所擁有的公有注冊地址比較緊張,也可以直接使用路由器連接互聯網的地址210.96.98.1來作為NAT轉換的內部全局地址。

圖1 網絡拓撲結構
當內部網絡主機A訪問互聯網的服務器B時,它向服務器B發出了源IP地址為 192.168.1.8,目的 IP地址為202.108.22.5的數據包。
當該數據包到達路由器時,路由器吧從主機A發送來的數據包中的源IP地址轉換為公有注冊地 址 212.10.1.8,數 據 包中的目的地址不變,還是202.108.22.5,然后將該數據包路由到互聯網。
同時該路由器向自己的NAT表中添加一個條目,該條目的Inside local address(內 部 本地 地 址)是 192.168.1.8,Inside global address(內部全局地址)是212.10.1.8,Outside local address(外 部本地地址)和Outside global address(外 部 全局地址)都是202.108.22.5.
當服務器B接收到該數據包時,它會認為這個數據包是由互聯網地址是212.10.1.8的節點發給它的,而不會認為是由192.168.1.8這臺主機發給它的。
于是服務器B將以源IP地址為202.108.22.5,目的IP地址為212.10.1.8向回發送響應的數據包。
當服務器B發送回來的數據包到達路由器時,路由器將查找它的NAT表,從而得知訪問公有注冊地址202.108.22.5的本地局部主機地址是192.168.1.8,路由器將數據包中的目的IP地址212.10.1.8替換為192.168.1.8,然后把該數據包發送給主機A。
當主機A與服務器B之間的后續數據包再次通過路由器時,NAT的操作將重復進行。