五、數據中心核心技術之網絡技術(NAT技術)

目錄

NAT產生背景

今天,無數快樂的互聯網用戶在盡情享受Internet帶來的樂趣。他們瀏覽新聞,搜索資料,下載軟件,廣交新朋,分享信息,甚至於足不出戶獲取一切日用所需。企業利用互聯網發佈信息,傳遞資料和訂單,提供技術支持,完成日常辦公。然而,Internet在給億萬用戶帶來便利的同時,自身卻面臨一個致命的問題:構建這個無所不能的Internet的基礎IPv4協議已經不能再提供新的網絡地址了。

2011年2月3日中國農曆新年, IANA對外宣佈:IPv4地址空間最後5個地址塊已經被分配給下屬的5個地區委員會。2011年4月15日,亞太區委員會APNIC對外宣佈,除了個別保留地址外,本區域所有的IPv4地址基本耗盡。一時之間,IPv4地址作爲一種瀕危資源身價陡增,各大網絡公司出巨資收購剩餘的空閒地址。其實,IPv4地址不足問題已不是新問題,早在20年以前,IPv4地址即將耗盡的問題就已經擺在Internet先驅們面前。這不禁讓我們想去了解,是什麼技術使這一危機延緩了盡20年。

要找到問題的答案,讓我們先來簡略回顧一下IPv4協議。

IPv4即網際網協議第4版——Internet Protocol Version 4的縮寫。IPv4定義一個跨越異種網絡互連的超級網,它爲每個網際網的節點分配全球唯一IP地址。如果我們把Internet比作一個郵政系統,那麼IP地址的作用就等同於包含城市、街區、門牌編號在內的完整地址。IPv4使用32bits整數表達一個地址,地址最大範圍就是232 約爲43億。以IP創始時期可被聯網的設備來看,這樣的一個空間已經很大,很難被短時間用完。然而,事實遠遠超出人們的設想,計算機網絡在此後的幾十年裏迅速壯大,網絡終端數量呈爆炸性增長。

更爲糟糕的是,爲了路由和管理方便,43億的地址空間被按照不同前綴長度劃分爲A,B,C,D類地址網絡和保留地址。其中,A類網絡地址127段,每段包括主機地址約1678萬個。B類網絡地址16384段,每段包括65536個主機地址。
ANA向超大型企業/組織分配A類網絡地址,一次一段。向中型企業或教育機構分配B類網絡地址,一次一段。這樣一種分配策略使得IP地址浪費很嚴重,很多被分配出去的地址沒有真實被利用,地址消耗很快。以至於二十世紀90年代初,網絡專家們意識到,這樣大手大腳下去,IPv4地址很快就要耗光了。於是,人們開始考慮IPv4的替代方案,同時採取一系列的措施來減緩IPv4地址的消耗。正是在這樣一個背景之下,本期的主角閃亮登場,它就是網絡地址轉換——NAT。

NAT是一項神奇的技術,說它神奇在於它的出現幾乎使IPv4起死回生。在IPv4已經被認爲行將結束歷史使命之後近20年時間裏,人們幾乎忘了IPv4的地址空間即將耗盡這樣一個事實——在新技術日新月異的時代,20年可算一段漫長的歷史。更不用說,在NAT產生以後,網絡終端的數量呈加速上升趨勢,對IP地址的需求劇烈增加。此足見NAT技術之成功,影響之深遠。

說它神奇,更因爲NAT給IP網絡模型帶來了深遠影響,其身影遍佈網絡每個角落。根據一份最近的研究報告,70%的P2P用戶位於NAT網關以內。因爲P2P主要運行在終端用戶的個人電腦之上,這個數字意味着大多數PC通過NAT網關連接到Internet。如果加上2G和3G方式聯網的智能手機等移動終端,在NAT網關之後的用戶遠遠超過這個比例。

ip地址基礎知識

同學你現在做兩個操作

  • 打開你的命令行輸入ipconfig查詢你的Ip地址
  • 打開百度,輸入Ip查詢,查詢你的ip地址

你是不是發現了一件很神奇的事情,這兩個地址是不一樣的。但是我們又經常說每個主機只有一個ip,這個ip是他的身份標識。這完全矛盾啊。這就引出了我們今天要講的NAT技術
其實並不矛盾。這裏我們要引入公網ip和私網ip這兩個概念,關於這個問題的解讀。大家可以參看我的博文。爲什麼百度查到的ip和ipconfig查到的不一樣

NAT技術的工作原理和特點

NAT名字很準確,網絡地址轉換,就是替換IP報文頭部的地址信息。NAT通常部署在一個組織的網絡出口位置,通過將內部網絡IP地址替換爲出口的IP地址提供公網可達性和上層協議的連接能力。那麼,什麼是內部網絡IP地址?

RFC1918規定了三個保留地址段落:10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255。這三個範圍分別處於A,B,C類的地址段,不向特定的用戶分配,被IANA作爲私有地址保留。這些地址可以在任何組織或企業內部使用,和其他Internet地址的區別就是,僅能在內部使用,不能作爲全球路由地址。這就是說,出了組織的管理範圍這些地址就不再有意義,無論是作爲源地址,還是目的地址。對於一個封閉的組織,如果其網絡不連接到Internet,就可以使用這些地址而不用向IANA提出申請,而在內部的路由管理和報文傳遞方式與其他網絡沒有差異。

對於有Internet訪問需求而內部又使用私有地址的網絡,就要在組織的出口位置部署NAT網關,在報文離開私網進入Internet時,將源IP替換爲公網地址,通常是出口設備的接口地址。一個對外的訪問請求在到達目標以後,表現爲由本組織出口設備發起,因此被請求的服務端可將響應由Internet發回出口網關。出口網關再將目的地址替換爲私網的源主機地址,發回內部。這樣一次由私網主機向公網服務端的請求和響應就在通信兩端均無感知的情況下完成了。依據這種模型,數量龐大的內網主機就不再需要公有IP地址了。
NAT的轉換示意圖如下所示
這裏寫圖片描述
我們一般使用私網ip作爲局域網內部的主機標識,使用公網ip作爲互聯網上通信的標識
在整個NAT的轉換中,最關鍵的流程有以下幾點

  • 網絡被分爲私網和公網兩個部分,NAT網關設置在私網到公網的路由出口位置,雙向流量必須都要經過NAT網關
  • 網絡訪問只能先由私網側發起,公網無法主動訪問私網主機;
  • NAT網關在兩個訪問方向上完成兩次地址的轉換或翻譯,出方向做源信息替換,入方向做目的信息替換;
  • NAT網關的存在對通信雙方是保持透明的;
  • NAT網關爲了實現雙向翻譯的功能,需要維護一張關聯表,把會話的信息保存下來。

靜態NAT

如果一個內部主機唯一佔用一個公網IP,這種方式被稱爲一對一模型。此種方式下,轉換上層協議就是不必要的,因爲一個公網IP就能唯一對應一個內部主機。顯然,這種方式對節約公網IP沒有太大意義,主要是爲了實現一些特殊的組網需求。比如用戶希望隱藏內部主機的真實IP,或者實現兩個IP地址重疊網絡的通信。
這裏寫圖片描述

動態NAT

它能夠將未註冊的IP地址映射到註冊IP地址池中的一個地址。不像使用靜態NAT那樣,你無需靜態地配置路由器,使其將每個內部地址映射到一個外部地址,但必須有足夠的公有因特網IP地址,讓連接到因特網的主機都能夠同時發送和接收分組

這裏寫圖片描述

NAT重載(經常應用到實際中)

這是最常用的NAT類型。NAT重載也是動態NAT,它利用源端口將多個私網ip地址映射到一個公網ip地址(多對一)。那麼,它的獨特之處何在呢?它也被稱爲端口地址特換(PAT)。通過使用PAT(NAT重載),只需使用一個公網ip地址,就可將數千名用戶連接到因特網。其核心之處就在於利用端口號實現公網和私網的轉換。
面對私網內部數量龐大的主機,如果NAT只進行IP地址的簡單替換,就會產生一個問題:當有多個內部主機去訪問同一個服務器時,從返回的信息不足以區分響應應該轉發到哪個內部主機。此時,需要NAT設備根據傳輸層信息或其他上層協議去區分不同的會話,並且可能要對上層協議的標識進行轉換,比如TCP或UDP端口號。這樣NAT網關就可以將不同的內部連接訪問映射到同一公網IP的不同傳輸層端口,通過這種方式實現公網IP的複用和解複用。這種方式也被稱爲端口轉換PAT、NAPT或IP僞裝,但更多時候直接被稱爲NAT,因爲它是最典型的一種應用模式。
這裏寫圖片描述
舉個例子,客戶端172.18.250.6和百度服務器202.108.22.5通信,172.18.250.6發送數據時,先轉換爲219.155.6.240:1723(任意>1024的隨機端口),然後再利用這個身份發送數據給百度服務器,然後百度服務器迴應數據併發送給219.155.6.240:1723,NAT網關檢查自己的關聯表,意識到這是自己地私網中172.18.250.6的數據包,然後把這個數據發送給客戶端

也就是說,我們利用端口號的唯一性實現了公網ip轉換爲私網ip的這一步。PAT(NAT重載)能夠使用傳輸層端口號來標識主機,因此,從理論上說,最多可讓大約65000臺主機共用一個公有IP地址

NAT技術的優缺點

優點

  • 節省合法的公有ip地址
  • 地址重疊時,提供 解決辦法
  • 網絡發生變化時,避免重新編址(這個問題具有親身體會,原本所在的實習單位搬遷,我們搬到了新的住處,網絡環境發生了一些變化,但是由於nat技術的特點,我們局域網的地址並沒有發生改變,我們依然使用着最初的編址方案)

NAT對我們來說最大的貢獻就是幫助我們節省了大量的ip資源

缺點

在介紹NAT的諸多缺點之前,我們先簡單介紹下什麼是IP的端到端通信:
IP協議的一個重要貢獻是把世界變得平等。在理論上,具有IP地址的每個站點在協議層面有相當的獲取服務和提供服務的能力,不同的IP地址之間沒有差異。人們熟知的服務器和客戶機實際是在應用協議層上的角色區分,而在網絡層和傳輸層沒有差異。一個具有IP地址的主機既可以是客戶機,也可以是服務器,大部分情況下,既是客戶機,也是服務器。端到端對等看起來是很平常的事情,而意義並不尋常。但在以往的技術中,很多協議體系下的網絡限定了終端的能力。正是IP的這個開放性,使得TCP/IP協議族可以提供豐富的功能,爲應用實現提供了廣闊平臺。因爲所有的IP主機都可以服務器的形式出現,所以通訊設計可以更加靈活。使用UNIX/LINUX的系統充分利用了這個特性,使得任何一個主機都可以建立自己的HTTP、SMTP、POP3、DNS、DHCP等服務。與此同時,很多應用也是把客戶端和服務器的角色組合起來完成功能。例如在VoIP應用中,用戶端向註冊服務器登錄自己的IP地址和端口信息過程中,主機是客戶端;而在呼叫到達時,呼叫處理服務器向用戶端發送呼叫請求時,用戶端實際工作在服務器模式下。在語音媒體流信道建立過程後,通訊雙向發送語音數據,發送端是客戶模式,接收端是服務器模式。而在P2P的應用中,一個用戶的主機既爲下載的客戶,同時也向其他客戶提供數據,是一種C/S混合的模型。上層應用之所以能這樣設計,是因爲IP協議棧定義了這樣的能力。試想一下,如果IP提供的能力不對等,那麼每個通信會話都只能是單方向發起的,這會極大限制通信的能力。細心的讀者會發現,前面介紹NAT的一個特性正是這樣一種限制。沒錯,NAT最大的弊端正在於此——破壞了IP端到端通信的能力。
NAT的弊端
首先,NAT使IP會話的保持時效變短。因爲一個會話建立後會在NAT設備上建立一個關聯表,在會話靜默的這段時間,NAT網關會進行老化操作。這是任何一個NAT網關必須做的事情,因爲IP和端口資源有限,通信的需求無限,所以必須在會話結束後回收資源。通常TCP會話通過協商的方式主動關閉連接,NAT網關可以跟蹤這些報文,但總是存在例外的情況,要依賴自己的定時器去回收資源。而基於UDP的通信協議很難確定何時通信結束,所以NAT網關主要依賴超時機制回收外部端口。通過定時器老化回收會帶來一個問題,如果應用需要維持連接的時間大於NAT網關的設置,通信就會意外中斷。因爲網關回收相關轉換表資源以後,新的數據到達時就找不到相關的轉換信息,必須建立新的連接。當這個新數據是由公網側向私網側發送時,就會發生無法觸發新連接建立,也不能通知到私網側的主機去重建連接的情況。這時候通信就會中斷,不能自動恢復。即使新數據是從私網側發向公網側,因爲重建的會話表往往使用不同於之前的公網IP和端口地址,公網側主機也無法對應到之前的通信上,導致用戶可感知的連接中斷。NAT網關要把回收空閒連接的時間設置到不發生持續的資源流失,又維持大部分連接不被意外中斷,是一件比較有難度的事情。在NAT已經普及化的時代,很多應用協議的設計者已經考慮到了這種情況,所以一般會設置一個連接保活的機制,即在一段時間沒有數據需要發送時,主動發送一個NAT能感知到而又沒有實際數據的保活消息,這麼做的主要目的就是重置NAT的會話定時器。

其次,NAT在實現上將多個內部主機發出的連接複用到一個IP上,這就使依賴IP進行主機跟蹤的機制都失效了。如網絡管理中需要的基於網絡流量分析的應用無法跟蹤到終端用戶與流量的具體行爲的關係。基於用戶行爲的日誌分析也變得困難,因爲一個IP被很多用戶共享,如果存在惡意的用戶行爲,很難定位到發起連接的那個主機。即便有一些機制提供了在NAT網關上進行連接跟蹤的方法,但是把這種變換關係接續起來也困難重重。基於IP的用戶授權不再可靠,因爲擁有一個IP的不等於一個用戶或主機。一個服務器也不能簡單把同一IP的訪問視作同一主機發起的,不能進行關聯。有些服務器設置有連接限制,同一時刻只接納來自一個IP的有限訪問(有時是僅一個訪問),這會造成不同用戶之間的服務搶佔和排隊。有時服務器端這樣做是出於DOS攻擊防護的考慮,因爲一個用戶正常情況下不應該建立大量的連接請求,過度使用服務資源被理解爲攻擊行爲。但是這在NAT存在時不能簡單按照連接數判斷。
總之,缺點大概如下:

  • 無法進行端到端的ip跟蹤(破壞了端對端通信的平等性)
  • 很多應用層協議無法識別(比如ftp協議 )

NAT穿越技術

前面解釋了NAT的弊端,爲了解決IP端到端應用在NAT環境下遇到的問題,網絡協議的設計者們創造了各種武器來進行應對。但遺憾的是,這裏每一種方法都不完美,還需要在內部主機、應用程序或者NAT網關上增加額外的處理。

應用層網關(ALG)

前面我們已經介紹到了,NAT實現了對UDP或TCP報文頭中的的IP地址及端口轉換功能,但對應用層數據載荷中的字段無能爲力(也就是淨載中的數據無法修改),在許多應用層協議中,比如多媒體協議(H.323、SIP等)、FTP、SQLNET等,TCP/UDP載荷中帶有地址或者端口信息,這些內容不能被NAT進行有效的轉換,就可能導致問題。也就是說,NAT只是將數據包的包頭的ip地址和端口號進行了轉換,但是沒有對包內數據中的ip地址和端口號進行轉換於是我們開始設想能不能使用一種行之有效的方法保證包頭的ip和端口號與包中數據裏的Ip地址和端口號都轉化爲公網的ip地址和端口號。

ALG的實際應用

對於ALG的實現機制還是不清楚,如果有懂的大佬,推薦下書籍
下面我們舉個FTP傳輸的例子來簡單介紹一下ALG的實際應用
這裏寫圖片描述
圖中私網側的主機要訪問公網的FTP服務器。
NAT設備上配置了私網地址192.168.1.2到公網地址8.8.8.11的映射,實現地址的NAT轉換,以支持私網主機對公網的訪問。組網中,若沒有ALG對報文載荷的處理,私網主機發送的PORT報文到達服務器端後,服務器無法根據私網地址進行尋址,也就無法建立正確的數據連接。整個通信過程包括如下四個階段:

(1) 私網主機和公網FTP服務器之間通過TCP三次握手成功建立控制連接。

(2) 控制連接建立後,私網主機向FTP服務器發送PORT報文,報文中攜帶私網主機指定的數據連接的目的地址和端口,用於通知服務器使用該地址和端口和自己進行數據連接。

(3) PORT報文在經過支持ALG特性的NAT設備時,報文載荷中的私網地址和端口會被轉換成對應的公網地址和端口。即設備將收到的PORT報文載荷中的私網地址192.168.1.2轉換成公網地址8.8.8.11,端口1084轉換成12487。

(4) 公網的FTP服務器收到PORT報文後,解析其內容,並向私網主機發起數據連接,該數據連接的目的地址爲8.8.8.11,目的端口爲12487(注意:一般情況下,該報文源端口爲20,但由於FTP協議沒有嚴格規定,有的服務器發出的數據連接源端口爲大於1024的隨機端口,如本例採用的是wftpd服務器,採用的源端口爲3004)。由於該目的地址是一個公網地址,因此後續的數據連接就能夠成功建立,從而實現私網主機對公網服務器的訪問。

NAT技術的未來

在知乎上看到過這樣一種言論,隨着ipV6技術的到來,NAT技術已經不再需要了。在我看來,技術的革命一定是一步一步實現的,比如先是在局部地區使用IPV6,然後再逐步擴大其規模,減少IPv4的規模,所以NAT技術還是需要的。而且到了那個時候,網絡世界中會充斥着兩種地址ipV4和ipV6,這個時候更需要NAT技術了,因爲NAT的中文翻譯叫做網絡地址轉換啊。所以學好這個知識點對於我們理解網絡是至關重要的。每到此時都會感慨,學校學到的知識真的只是皮毛,但是卻是我現在所有知識的基礎。

參考文獻

  1. 《CCNA學習指南》點此處下載此書
  2. ALG原理與應用
  3. P2P技術詳解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章