自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

NAT詳解:基本原理、穿越技術(P2P打洞)、端口老化等

網絡 通信技術
針對目前很多filecoin廠商宣傳的NAT穿透,小編做個科普,希望大家擦亮眼睛,不要被過度神話的營銷手段蒙蔽雙眼。

 針對目前很多filecoin廠商宣傳的NAT穿透,小編做個科普,希望大家擦亮眼睛,不要被過度神話的營銷手段蒙蔽雙眼。

1. IPv4協(xié)議和NAT的由來

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

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

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

IPv4即網際網協(xié)議第4版——Internet Protocol Version 4的縮寫。IPv4定義一個跨越異種網絡互連的超級網,它為每個網際網的節(jié)點對應分配一個IP地址。如果我們把Internet比作一個郵政系統(tǒng),那么IP地址的作用就等同于包含城市、街區(qū)、門牌編號在內的完整地址。IPv4使用32bits整數(shù)表達一個地址,地址的范圍就是232 約為43億。以IP創(chuàng)始時期可被聯(lián)網的設備來看,這樣的一個空間已經很大,很難被短時間用完。然而,事實遠遠超出人們的設想,計算機網絡在此后的幾十年里迅速壯大,網絡終端數(shù)量呈爆炸性增長。

更為糟糕的是,為了路由和管理方便,43億的地址空間被按照不同前綴長度劃分為A,B,C,D類地址網絡和保留地址。其中,A類網絡地址127段,每段包括主機地址約1678萬個。B類網絡地址16384段,每段包括65536個主機地址。

 

圖1 IPv4網絡地址劃分

IANA向超大型企業(yè)/組織分配A類網絡地址,一次一段。向中型企業(yè)或教育機構分配B類網絡地址,一次一段。這樣一種分配策略使得IP地址浪費很嚴重,很多被分配出去的地址沒有真實被利用,地址消耗很快。以至于二十世紀90年代初,網絡專家們意識到,這樣大手大腳下去,IPv4地址很快就要耗光了。于是,人們開始考慮IPv4的替代方案,同時采取一系列的措施來減緩IPv4地址的消耗。正是在這樣一個背景之下,本期的主角閃亮登場,它就是網絡地址轉換——NAT。

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

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

然而當我們求本溯源時卻發(fā)現(xiàn)一個很奇怪的事實:NAT這一意義重大的技術,NAT初版的RFC作者,只是整理歸納了已被廣泛采用的技術。

2. NAT的工作模型和特點

2.1 NAT的概念模型

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

RFC1918規(guī)定了三個保留地址段落: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作為私有地址保留。這些地址可以在任何組織或企業(yè)內部使用,和其他Internet地址的區(qū)別就是,僅能在內部使用,不能作為全球路由地址。這就是說,出了組織的管理范圍這些地址就不再有意義,無論是作為源地址,還是目的地址。對于一個封閉的組織,如果其網絡不連接到Internet,就可以使用這些地址而不用向IANA提出申請,而在內部的路由管理和報文傳遞方式與其他網絡沒有差異。

對于有Internet訪問需求而內部又使用私有地址的網絡,就要在組織的出口位置部署NAT網關,在報文離開私網進入Internet時,將源IP替換為公網地址,通常是出口設備的接口地址。一個對外的訪問請求在到達目標以后,表現(xiàn)為由本組織出口設備發(fā)起,因此被請求的服務端可將響應由Internet發(fā)回出口網關。出口網關再將目的地址替換為私網的源主機地址,發(fā)回內部。這樣一次由私網主機向公網服務端的請求和響應就在通信兩端均無感知的情況下完成了。依據(jù)這種模型,數(shù)量龐大的內網主機就不再需要公有IP地址了。

 

圖2 NAT轉換過程示意圖

雖然實際過程遠比這個復雜,但上面的描述概括了NAT處理報文的幾個關鍵特點:

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

隨著后面對NAT的深入描述,讀者會發(fā)現(xiàn),這些特點是鮮明的,但又不是絕對的。其中第二個特點打破了IP協(xié)議架構中所有節(jié)點在通訊中的對等地位,這是NAT一個很大的弊端,為對等通訊帶來了諸多問題,當然相應的克服手段也應運而生。事實上,第四點是NAT致力于達到的目標,但在很多情況下,NAT并沒有做到,因為除了IP首部,上層通信協(xié)議經常在內部攜帶IP地址信息。這些我們稍后解釋。

2.2 一對一的NAT

如果一個內部主機只占用一個公網IP,這種方式被稱為一對一模型。此種方式下,轉換上層協(xié)議就是不必要的,因為一個公網IP對應一個內部主機。顯然,這種方式對節(jié)約公網IP沒有太大意義,主要是為了實現(xiàn)一些特殊的組網需求。比如用戶希望隱藏內部主機的真實IP,或者實現(xiàn)兩個IP地址重疊網絡的通信。

2.3 一對多的NAT

NAT最典型的應用場景就如同圖2描述的,一個組織網絡,在出口位置部署NAT網關,所有對公網的訪問表現(xiàn)為一臺主機。這就是所謂的一對多模型。這種方式下,出口設備只占用一個由Internet服務提供商分配的公網IP地址。面對私網內部數(shù)量龐大的主機,如果NAT只進行IP地址的簡單替換,就會產生一個問題:當有多個內部主機去訪問同一個服務器時,從返回的信息不足以區(qū)分響應應該轉發(fā)到哪個內部主機。此時,需要NAT設備根據(jù)傳輸層信息或其他上層協(xié)議去區(qū)分不同的會話,并且可能要對上層協(xié)議的標識進行轉換,比如TCP或UDP端口號。這樣NAT網關就可以將不同的內部連接訪問映射到同一公網IP的不同傳輸層端口,通過這種方式實現(xiàn)公網IP的復用和解復用。這種方式也被稱為端口轉換PAT、NAPT或IP偽裝,但更多時候直接被稱為NAT,因為它是最典型的一種應用模式。

2.4 按照NAT端口映射方式分類

在一對多模型中,按照端口轉換的工作方式不同,又可以進行更進一步的劃分。為描述方便,以下將IP和端口標記為(nAddr:nPort),其中n代表主機或NAT網關的不同角色。

 

圖3 按照端口轉換映射方式分類

全錐形NAT

其特點為:一旦內部主機端口對(iAddr:iPort)被NAT網關映射到(eAddr:ePort),所有后續(xù)的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);任何一個外部主機發(fā)送到(eAddr:ePort)的報文將會被轉換后發(fā)到(iAddr:iPort)。

限制錐形NAT

其特點為:一旦內部主機端口對(iAddr:iPort)被映射到(eAddr:ePort),所有后續(xù)的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);只有 (iAddr:iPort)向特定的外部主機hAddr發(fā)送過數(shù)據(jù),主機hAddr從任意端口發(fā)送到(eAddr:ePort)的報文將會被轉發(fā)到(iAddr:iPort)。

端口限制錐形NAT

其特點為:一旦內部主機端口對(iAddr:iPort)被映射到(eAddr:ePort),所有后續(xù)的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);只有(iAddr:iPort)向特定的外部主機端口對(hAddr:hPort)發(fā)送過數(shù)據(jù),由 (hAddr:hPort)發(fā)送到(eAddr:ePort)的報文將會被轉發(fā)到(iAddr:iPort)。

對稱型NAT

其特點為:NAT網關會把內部主機“地址端口對”和外部主機“地址端口對”完全相同的報文看作一個連接,在網關上創(chuàng)建一個公網“地址端口對”映射進行轉換,只有收到報文的外部主機從對應的端口對發(fā)送回應的報文,才能被轉換。即使內部主機使用之前用過的地址端口對去連接不同外部主機(或端口)時,NAT網關也會建立新的映射關系。

事實上,這些術語的引入是很多混淆的起源。現(xiàn)實中的很多NAT設備是將這些轉換方式混合在一起工作的,而不單單使用一種,所以這些術語只適合描述一種工作方式,而不是一個設備。比如,很多NAT設備對內部發(fā)出的連接使用對稱型NAT方式,而同時支持靜態(tài)的端口映射,后者可以被看作是全錐型NAT方式。而有些情況下,NAT設備的一個公網地址和端口可以同時映射到內部幾個服務器上以實現(xiàn)負載分擔,比如一個對外提供WEB服務器的站點可能是有成百上千個服務器在提供HTTP服務,但是對外卻表現(xiàn)為一個或少數(shù)幾個IP地址。

3. NAT的限制與解決方案

3.1 IP端到端服務模型

IP協(xié)議的一個重要貢獻是把世界變得平等。在理論上,具有IP地址的每個站點在協(xié)議層面有相當?shù)墨@取服務和提供服務的能力,不同的IP地址之間沒有差異。人們熟知的服務器和客戶機實際是在應用協(xié)議層上的角色區(qū)分,而在網絡層和傳輸層沒有差異。一個具有IP地址的主機既可以是客戶機,也可以是服務器,大部分情況下,既是客戶機,也是服務器。端到端對等看起來是很平常的事情,而意義并不尋常。但在以往的技術中,很多協(xié)議體系下的網絡限定了終端的能力。正是IP的這個開放性,使得TCP/IP協(xié)議族可以提供豐富的功能,為應用實現(xiàn)提供了廣闊平臺。因為所有的IP主機都可以服務器的形式出現(xiàn),所以通訊設計可以更加靈活。使用UNIX/LINUX的系統(tǒng)充分利用了這個特性,使得任何一個主機都可以建立自己的HTTP、SMTP、POP3、DNS、DHCP等服務。與此同時,很多應用也是把客戶端和服務器的角色組合起來完成功能。例如在VoIP應用中,用戶端向注冊服務器登錄自己的IP地址和端口信息過程中,主機是客戶端;而在呼叫到達時,呼叫處理服務器向用戶端發(fā)送呼叫請求時,用戶端實際工作在服務器模式下。在語音媒體流信道建立過程后,通訊雙向發(fā)送語音數(shù)據(jù),發(fā)送端是客戶模式,接收端是服務器模式。而在P2P的應用中,一個用戶的主機既為下載的客戶,同時也向其他客戶提供數(shù)據(jù),是一種C/S混合的模型。上層應用之所以能這樣設計,是因為IP協(xié)議棧定義了這樣的能力。試想一下,如果IP提供的能力不對等,那么每個通信會話都只能是單方向發(fā)起的,這會極大限制通信的能力。細心的讀者會發(fā)現(xiàn),前面介紹NAT的一個特性正是這樣一種限制。沒錯,NAT的弊端正在于此——破壞了IP端到端通信的能力。

3.2 NAT的弊端

NAT在解決IPv4地址短缺問題上,并非沒有副作用,其實存在很多問題。

首先,NAT使IP會話的保持時效變短。因為一個會話建立后會在NAT設備上建立一個關聯(lián)表,在會話靜默的這段時間,NAT網關會進行老化操作。這是任何一個NAT網關必須做的事情,因為IP和端口資源有限,通信的需求龐大,所以必須在會話結束后回收資源。通常TCP會話通過協(xié)商的方式主動關閉連接,NAT網關可以跟蹤這些報文,但總是存在例外的情況,要依賴自己的定時器去回收資源。而基于UDP的通信協(xié)議很難確定何時通信結束,所以NAT網關主要依賴超時機制回收外部端口。通過定時器老化回收會帶來一個問題,如果應用需要維持連接的時間大于NAT網關的設置,通信就會意外中斷。因為網關回收相關轉換表資源以后,新的數(shù)據(jù)到達時就找不到相關的轉換信息,必須建立新的連接。當這個新數(shù)據(jù)是由公網側向私網側發(fā)送時,就會發(fā)生無法觸發(fā)新連接建立,也不能通知到私網側的主機去重建連接的情況。這時候通信就會中斷,不能自動恢復。即使新數(shù)據(jù)是從私網側發(fā)向公網側,因為重建的會話表往往使用不同于之前的公網IP和端口地址,公網側主機也無法對應到之前的通信上,導致用戶可感知的連接中斷。NAT網關要把回收空閑連接的時間設置到不發(fā)生持續(xù)的資源流失,又維持大部分連接不被意外中斷,是一件比較有難度的事情。在NAT已經普及化的時代,很多應用協(xié)議的設計者已經考慮到了這種情況,所以一般會設置一個連接?;畹臋C制,即在一段時間沒有數(shù)據(jù)需要發(fā)送時,主動發(fā)送一個NAT能感知到而又沒有實際數(shù)據(jù)的?;钕?,這么做的主要目的就是重置NAT的會話定時器。

其次,NAT在實現(xiàn)上將多個內部主機發(fā)出的連接復用到一個IP上,這就使依賴IP進行主機跟蹤的機制都失效了。如網絡管理中需要的基于網絡流量分析的應用無法跟蹤到終端用戶與流量的具體行為的關系?;谟脩粜袨榈娜罩痉治鲆沧兊美щy,因為一個IP被很多用戶共享,如果存在惡意的用戶行為,很難定位到發(fā)起連接的那個主機。即便有一些機制提供了在NAT網關上進行連接跟蹤的方法,但是把這種變換關系接續(xù)起來也困難重重。基于IP的用戶授權不再可靠,因為擁有一個IP的不等于一個用戶或主機。一個服務器也不能簡單把同一IP的訪問視作同一主機發(fā)起的,不能進行關聯(lián)。有些服務器設置有連接限制,同一時刻只接納來自一個IP的有限訪問(有時是僅一個訪問),這會造成不同用戶之間的服務搶占和排隊。有時服務器端這樣做是出于DOS防護的考慮,因為一個用戶正常情況下不應該建立大量的連接請求,過度使用服務資源被理解為有高風險的行為。但是這在NAT存在時不能簡單按照連接數(shù)判斷??傊?,因為NAT隱蔽了通信的一端,把簡單的事情復雜化了。

我們來深入理解NAT一下對IP端到端模型的破壞力。NAT通過修改IP首部的信息變換通信的地址。但是在這個轉換過程中只能基于一個會話單位。當一個應用需要保持多個雙向連接時,麻煩就很大。NAT不能理解多個會話之間的關聯(lián)性,無法保證轉換符合應用需要的規(guī)則。當NAT網關擁有多個公有IP地址時,一組關聯(lián)會話可能被分配到不同的公網地址,這通常是服務器端無法接受的。更為嚴重的是,當公網側的主機要主動向私網側發(fā)送數(shù)據(jù)時,NAT網關沒有轉換這個連接需要的關聯(lián)表,這個數(shù)據(jù)包無法到達私網側的主機。這些反方向發(fā)送數(shù)據(jù)的連接總有應用協(xié)議的約定或在初始建立的會話中進行過協(xié)商。但是因為NAT工作在網絡層和傳輸層,無法理解應用層協(xié)議的行為,對這些信息是無知的。NAT希望自己對通信雙方是透明的,但是在這些情況下這是一種奢望。

圖4 NAT對端到端通信模型的破壞

 

此外,NAT工作機制依賴于修改IP包頭的信息,這會妨礙一些安全協(xié)議的工作。因為NAT篡改了IP地址、傳輸層端口號和校驗和,這會導致認證協(xié)議徹底不能工作,因為認證目的就是要保證這些信息在傳輸過程中沒有變化。對于一些隧道協(xié)議,NAT的存在也導致了額外的問題,因為隧道協(xié)議通常用外層地址標識隧道實體,穿過NAT的隧道會有IP復用關系,在另一端需要小心處理。ICMP是一種網絡控制協(xié)議,它的工作原理也是在兩個主機之間傳遞差錯和控制消息,因為IP的對應關系被重新映射,ICMP也要進行復用和解復用處理,很多情況下因為ICMP報文載荷無法提供足夠的信息,解復用會失敗。IP分片機制是在信息源端或網絡路徑上,需要發(fā)送的IP報文尺寸大于路徑實際能承載的尺寸上限時,IP協(xié)議層會將一個報文分成多個片斷發(fā)送,然后在接收端重組這些片斷恢復原始報文。IP這樣的分片機制會導致傳輸層的信息只包括在前面那個分片中,NAT難以識別后續(xù)分片與關聯(lián)表的對應關系,因此需要特殊處理。

3.3 NAT穿越技術

前面解釋了NAT的弊端,為了解決IP端到端應用在NAT環(huán)境下遇到的問題,網絡協(xié)議的設計者們創(chuàng)造了各種武器來進行應對。但遺憾的是,這里每一種方法都有瑕疵,還需要在內部主機、應用程序或者NAT網關上增加額外的處理。

應用層網關

應用層網關(ALG)是解決NAT對應用層協(xié)議無感知的一個最常用方法,已經被NAT設備廠商廣泛采用,成為NAT設備的一個必需功能。因為NAT不感知應用協(xié)議,所以有必要額外為每個應用協(xié)議定制協(xié)議分析功能,這樣NAT網關就能理解并支持特定的協(xié)議。ALG與NAT形成互動關系,在一個NAT網關檢測到新的連接請求時,需要判斷是否為已知的應用類型,這通常是基于連接的傳輸層端口信息來識別的。在識別為已知應用時,再調用相應功能對報文的深層內容進行檢查,當發(fā)現(xiàn)任何形式表達的IP地址和端口時,將會把這些信息同步轉換,并且為這個新連接創(chuàng)建一個附加的轉換表項。這樣,當報文到達公網側的目的主機時,應用層協(xié)議中攜帶的信息就是NAT網關提供的地址和端口。一旦公網側主機開始發(fā)送數(shù)據(jù)或建立連接到此端口,NAT網關就可以根據(jù)關聯(lián)表信息進行轉換,再把數(shù)據(jù)轉發(fā)到私網側的主機。很多應用層協(xié)議實現(xiàn)不限于一個初始連接(通常為信令或控制通道)加一個數(shù)據(jù)連接,可能是一個初始連接對應很多后續(xù)的新連接。比較特別的協(xié)議,在一次協(xié)商中會產生一組相關連接,比如RTP/RTCP協(xié)議規(guī)定,一個RTP通道建立后占用連續(xù)的兩個端口,一個服務于數(shù)據(jù),另一個服務于控制消息。此時,就需要ALG分配連續(xù)的端口為應用服務。ALG能成功解決大部分協(xié)議的NAT穿越需求,但是這個方法也有很大的限制。因為應用協(xié)議的數(shù)量非常多而且在不斷發(fā)展變化之中,添加到設備中的ALG功能都是為特定協(xié)議的特定規(guī)范版本而開發(fā)的,協(xié)議的創(chuàng)新和演進要求NAT設備制造商必須跟蹤這些協(xié)議的最近標準,同時兼容舊標準。盡管有如Linux這種開放平臺允許動態(tài)加載新的ALG特性,但是管理成本仍然很高,網絡維護人員也不能隨時了解用戶都需要什么應用。因此為每個應用協(xié)議開發(fā)ALG代碼并跟蹤新標準是不可行的,ALG只能解決用戶最常用的需求。此外,出于安全性需要,有些應用類型報文從源端發(fā)出就已經加密,這種報文在網絡中間無法進行分析,所以ALG無能為力。

探針技術STUN和TURN

所謂探針技術,是通過在所有參與通信的實體上安裝探測插件,以檢測網絡中是否存在NAT網關,并對不同NAT模型實施不同穿越方法的一種技術。STUN服務器被部署在公網上,用于接收來自通信實體的探測請求,服務器會記錄收到請求的報文地址和端口,并填寫到回送的響應報文中??蛻舳烁鶕?jù)接收到的響應消息中記錄的地址和端口與本地選擇的地址和端口進行比較,就能識別出是否存在NAT網關。如果存在NAT網關,客戶端會使用之前的地址和端口向服務器的另外一個IP發(fā)起請求,重復前面的探測。然后再比較兩次響應返回的結果判斷出NAT工作的模式。由前述的一對多轉換模型得知,除對稱型NAT以外的模型,NAT網關對內部主機地址端口的映射都是相對固定的,所以比較容易實現(xiàn)NAT穿越。而對稱型NAT為每個連接提供一個映射,使得轉換后的公網地址和端口對不可預測。此時TURN可以與STUN綁定提供穿越NAT的服務,即在公網服務器上提供一個“地址端口對”,所有此“地址端口對”接收到的數(shù)據(jù)會經由探測建立的連接轉發(fā)到內網主機上。TURN分配的這個映射“地址端口對”會通過STUN響應發(fā)給內部主機,后者將此信息放入建立連接的信令中通知通信的對端。這種探針技術是一種通用方法,不用在NAT設備上為每種應用協(xié)議開發(fā)功能,相對于ALG方式有一定普遍性。但是TURN中繼服務會成為通信瓶頸。而且在客戶端中增加探針功能要求每個應用都要增加代碼才能支持。

中間件技術

這也是一種通過開發(fā)通用方法解決NAT穿越問題的努力。與前者不同之處是,NAT網關是這一解決方案的參與者。與ALG的不同在于,客戶端會參與網關公網映射信息的維護,此時NAT網關只要理解客戶端的請求并按照要求去分配轉換表,不需要自己去分析客戶端的應用層數(shù)據(jù)。其中UPnP就是這樣一種方法。UPnP中文全稱為通用即插即用,是一個通用的網絡終端與網關的通信協(xié)議,具備信息發(fā)布和管理控制的能力。其中,網關映射請求可以為客戶動態(tài)添加映射表項。此時,NAT不再需要理解應用層攜帶的信息,只轉換IP地址和端口信息。而客戶端通過控制消息或信令發(fā)到公網側的信息中,直接攜帶公網映射的IP地址和端口,接收端可以按照此信息建立數(shù)據(jù)連接。NAT網關在收到數(shù)據(jù)或連接請求時,按照UPnP建立的表項只轉換地址和端口信息,不關心內容,再將數(shù)據(jù)轉發(fā)到內網。這種方案需要網關、內部主機和應用程序都支持UPnP技術,且組網允許內部主機和NAT網關之間可以直接交換UPnP信令才能實施。

中繼代理技術

準確說它不是NAT穿越技術,而是NAT旁路技術。簡單說,就是在NAT網關所在的位置旁邊放置一個應用服務器,這個服務器在內部網絡和外部公網分別有自己的網絡連接??蛻舳颂囟ǖ膽卯a生網絡請求時,將定向發(fā)送到應用代理服務器。應用代理服務器根據(jù)代理協(xié)議解析客戶端的請求,再從服務器的公網側發(fā)起一個新的請求,把客戶端請求的內容中繼到外部網絡上,返回的相應反方向中繼。這項技術和ALG有很大的相似性,它要求為每個應用類型部署中繼代理業(yè)務,中間服務器要理解這些請求。

特定協(xié)議的自穿越技術

在所有方法中最復雜也最可靠的就是自己解決自己的問題。比如IKE和IPsec技術,在設計時就考慮了到如何穿越NAT的問題。因為這個協(xié)議是一個自加密的協(xié)議并且具有報文防修改的鑒別能力,其他通用方法愛莫能助。因為實際應用的NAT網關基本都是NAPT方式,所有通過傳輸層協(xié)議承載的報文可以順利通過NAT。IKE和IPsec采用的方案就是用UDP在報文外面再加一層封裝,而內部的報文就不再受到影響。IKE中還專門增加了NAT網關是否存在的檢查能力以及繞開NAT網關檢測IKE協(xié)議的方法。

4. NAT的應用和實現(xiàn)

4.1 NAT的應用

NAT在當代Internet中被廣泛采用,小至家庭網關,大到企業(yè)廣域網出口甚至運營商業(yè)務網絡出口。其實NAT在用戶身邊隨處可見,一般家庭寬帶接入的ADSL Modem和SOHO路由器都內置了NAT功能,WindowsXP支持網絡連接共享,一個用戶連接到公網可能會經過多層NAT而對此一無所知。很多企業(yè)也為節(jié)約IP費用采用NAT接入Internet,但是相比家庭用戶有更復雜的需求。

NAT多實例應用

在虛擬專用網絡中,多實例路由意味著一個物理拓撲上承載多個邏輯拓撲,網絡終端被分配到相互隔離的邏輯拓撲中,彼此之間沒有路由的通路。但在訪問Internet或者一些關鍵服務器資源時,被隔離的網絡之間又存在共享資源的需求。NAT的多實例實現(xiàn)就是跨越這種邏輯拓撲的方法,把一個空間的網絡地址映射到另一個空間。

NAT的高可靠性組網

提高網絡可靠性是一個廣泛的需求,NAT作為私網到公網的關鍵路徑自然也需要高可靠性。當一個設備提供多個公網接口時,在多接口上部署NAT可以提供更高帶寬和多ISP就近訪問的能力。但是,當部署多個出口時,訪問的流量可能會從不匹配的接口返回,這就要求NAT方案有良好的路由規(guī)劃和部署合適的策略保證這種流量能夠正確處理。在多個物理設備承擔NAT功能時,不同設備之間的信息備份和流量分擔也是一個組網難題。

同時轉換源和目的地址的應用

前面我們介紹的所有NAT應用中,由內網向外網訪問過程中,都是將源地址進行轉換而目的地址保持不變,報文反方向進入時則處理目的地址。但有一些特殊應用需要在由內向外的IP通路上,替換目的IP地址。通常,這種應用會同時替換源地址和目的地址,在經過NAT網關以后完成兩次地址轉換。當兩個均規(guī)劃使用私屬IP地址范圍的網絡進行合并時,終端用戶都不想調整自己的IP地址方案,又希望開放一些網絡資源給彼此訪問。這時就可以通過NAT的兩次地址轉換來解決路由和地址規(guī)劃無法解決的問題。

 

圖5 同時轉換源和目的地址的應用

4.2 NAT的設備實現(xiàn)

NAT作為一個IP層業(yè)務特性,在產品實現(xiàn)中與防火墻、會話管理等特性有緊密聯(lián)系,這是因為NAT判斷一個進入設備的報文是否需要NAT處理,判斷報文是否為一個新的連接,都需要通過匹配訪問控制列表規(guī)則和查詢會話關聯(lián)表進行判斷。為了滿足不同應用場景的NAT需求, NAT的管理界面可提供用戶多種配置策略。按照NAT的具體工作方式,又可以做如下分類。

靜態(tài)一對一地址映射

這種工作方式下,NAT把一個私網地址和一個公網地址做靜態(tài)關聯(lián),在從內而外的方向,將源IP匹配的私網IP替換為公網IP,反方向則將目的IP匹配公網IP的報文替換為私網IP。網絡層以上的部分不進行替換處理,只修正校驗和。

靜態(tài)多對多地址映射

這種方式與上一種類似,只是把一段私網地址映射到一段公網地址。工作機制與前述的方式沒有差別,只是簡化配置工作量。

動態(tài)端口映射

這是最基本的工作方式,即前面多次介紹的將一段內網地址動態(tài)翻譯為一個或多個公網IP,同時對傳輸層端口或其他上層協(xié)議信息進行轉換,以實現(xiàn)IP復用。對由內而外的報文,替換源地址和端口,反向報文替換目的地址和端口。僅以連接公網的接口IP作為NAT轉換的公網地址時,這種配置最簡化,又被稱為EasyIP。當以一段公網IP地址作為NAT轉換地址時,需要配置一個地址池,NAT會自動在地址池中選擇使用公網IP。

動態(tài)地址映射(no-pat)

這是介于靜態(tài)多對多地址映射和動態(tài)端口映射方式之間的一種工作機制。當有一個私網向公網側訪問到達NAT網關時,NAT網關會檢查這個私網IP是否已經有關聯(lián)的公網IP映射。如果已經存在,則按照轉換表直接替換IP,不修改上層協(xié)議。如果不存在關聯(lián)表項,則在空閑的公網IP池中占用一個IP,并寫入關聯(lián)表中,以后按照這個關聯(lián)關系進行地址轉換。當這個私網主機發(fā)起的所有對外訪問均關閉或超時后,回收公網IP。這種方式可以理解為一組內網主機搶占式地共享一個公網IP地址池。當公網IP地址池用完以后,新連接將無法建立。

靜態(tài)端口映射

通過靜態(tài)配置,把一個固定的私網IP地址和端口關聯(lián)到一個公網地址和端口上。這種方式等同于前面介紹過的全錐模式,但是不需要內網主機首先發(fā)出報文。這種方式適用于在NAT網關上把一個知名服務(如HTTP)映射到一個內部主機上,也稱為port forwarding。

應用層網關(ALG)

在所有NAT產品實現(xiàn)中,ALG是一個必需的功能組件。但在不同實現(xiàn)中,有些產品可以動態(tài)加載不同的ALG模塊,有些產品可以提供ALG開關控制,有些則不提供任何用戶接口。ALG解析上層應用協(xié)議的內容,并且根據(jù)需要修改IP和端口相關信息,創(chuàng)建和維護附加的關聯(lián)表項。

NAT轉換關聯(lián)表

無論哪一種NAT工作方式,都要用到地址轉換關聯(lián)表,在不同產品的實現(xiàn)中,這個關聯(lián)表的存儲結構和在IP轉發(fā)中調用的方式有很大不同。關聯(lián)表中會記錄源IP、目的IP、連接協(xié)議類型、傳輸層源端口、目的端口,以及轉換后的源IP、源端口,目的IP、目的端口信息,這里的源和目的都是對應于從內網到外網的訪問方向。依據(jù)NAT具體工作方式,這些信息可能全部填充,也可能部分填充。例如只按照IP做靜態(tài)映射的方式,就不需要填入任何端口相關信息;對于靜態(tài)端口映射,則只填入源相關的內容,而目的端的信息為空。

5. 后IPv4時代的NAT

NAT是為延緩IPv4地址耗盡而推出的技術。毫無疑問,它已經出色完成了自己的歷史使命,IPv4比預期走得更遠。作為繼任者的IPv6吸取了IPv4的教訓,被賦予充足地址空間的同時在各個方面做了優(yōu)化——安全、高效、簡潔。但是IPv6無法平滑地取代IPv4,導致IP升級步伐緩慢。盡管網絡協(xié)議的分層設計很清晰,大量應用層協(xié)議和互聯(lián)網軟件中仍內嵌了IPv4地址的處理,要Internet全網升級到IPv6,必須先完成應用的改造。因為NAT和它的穿越技術結合能夠滿足大部分用戶的需求,所以IPv6時代被不斷推遲。

隨著IPv4地址的瀕臨耗盡,再經濟的模式也無以為繼,IPv4必須退出歷史舞臺。人們自然會認為,NAT作為IPv4的超級補丁技術使命已經完結。實際情況是,IPv4向IPv6過渡的階段,NAT仍然是一項必不可少的技術手段。因為Internet無法在一日之內完成全網升級,必然是局部升級,逐漸替換。在兩套協(xié)議并存的時期,用戶和服務資源分布在不同網絡之間,跨網訪問的需求必須得到滿足。這正是NAT所擅長的領域,地址替換,因此NAT-PT應運而生。由于IPv4和IPv6之間的差異,NAT要做的事比以往更復雜,有更多的限制和細節(jié)。

此外,IETF也在制定純IPv6網絡使用的NAT規(guī)范。雖然人們還看不到這種應用的強烈需求,但是NAT仍有其獨特的作用,比如隱藏內部網絡的地址,實現(xiàn)重疊地址網絡的合并等。

毫不夸張地說,正是有了NAT,以IPv4為基礎的Internet才能容納數(shù)十億的用戶終端,成就今日之輝煌。IPv4已至日暮西山,IPv6的黎明尚未來臨,Internet比任何時刻都更依賴NAT這項過渡技術。NAT的歷史再次證明,翻天覆地的劃時代進步不一定有市場,抱殘守缺的修修補補未必不會成功。在世代更替之時讓我們走近NAT,領略IP領域更多細微但不高深的知識,理解NAT就是理解變換萬千的應用世界。

責任編輯:武曉燕 來源: 博客園
相關推薦

2019-04-30 08:15:31

2010-08-20 13:29:33

OFDM

2012-01-12 14:37:34

jQuery

2012-12-10 09:46:21

P2P云存儲Symform

2010-01-07 09:53:09

Winform多線程編

2009-02-24 09:43:00

IP電話原理

2011-11-29 12:17:00

2020-11-26 13:54:03

容器LinuxDocker

2015-12-01 15:33:21

P2P端口映射工具dog-tunnel狗洞

2016-08-18 00:04:09

網絡爬蟲抓取系統(tǒng)服務器

2020-03-21 14:57:14

手機定位智能手機APP

2013-04-07 14:09:55

Android應用基本

2019-11-28 10:45:28

ZooKeeper源碼分布式

2016-08-17 23:53:29

網絡爬蟲抓取系統(tǒng)

2021-02-08 21:40:04

SockmapBPF存儲

2010-07-13 14:41:14

2020-03-05 20:30:15

Syncthing文件同步工具開源

2024-08-06 14:03:35

2010-03-22 15:27:40

云計算

2022-07-19 16:59:04

流媒體傳輸IPC物聯(lián)網
點贊
收藏

51CTO技術棧公眾號