當(dāng)前位置:首頁文章首頁 IT學(xué)院 IT技術(shù)

私有地址和NAT合理使用 提高整個因特網(wǎng)進行通信效率

作者:  來源:  發(fā)布時間:2011-4-29 11:34:13  點擊:

  在這條技巧中,我們看到了NAT是如何使一個網(wǎng)絡(luò)在為其內(nèi)部主機使用一塊私有網(wǎng)絡(luò)地址的同時,還能與整個因特網(wǎng)進行通信的。特別值得一提的是,對只有一個全局可達IP地址的小網(wǎng)絡(luò)來說,PAT非常有用。但是,由于PAT修改了輸出分組的源端口號,可能會給那些將與端口號有關(guān)的信息放在報文主體中傳輸?shù)姆菢?biāo)準協(xié)議帶來一些問題。

  在便宜且無處不在的因特網(wǎng)連接出現(xiàn)之前,一個組織為其網(wǎng)絡(luò)任意選擇一段IP地址的情形非常普遍。畢竟網(wǎng)絡(luò)沒有而且"永遠不會"連接到任何外部網(wǎng)絡(luò)上去,因此人們并不認為IP地址的選擇是什么問題。不過,世事難料,現(xiàn)在沒有因特網(wǎng)連接的網(wǎng)絡(luò)數(shù)量可能只占一小部分了。

  人們不再需要為私有網(wǎng)絡(luò)去任選一塊IP地址了。RFC1918[Rekhter et al., 1996]指定了三塊永遠不會被分配的保留IP地址。這三個地址塊是:

  10.0.0.0--10.255.255.255 (前綴10/8);

  172.16.0.0--172.31.255.255(前綴172.16/12);

  192.168.0.0--192.168.255.255(前綴192.168/16)。

  網(wǎng)絡(luò)使用這三塊地址中的任意一塊時,網(wǎng)絡(luò)中的任意一臺主機都可以訪問此網(wǎng)絡(luò)中的所有其他主機,而無須擔(dān)心與全局分配的IP地址產(chǎn)生沖突。當(dāng)然,只要與外部網(wǎng)絡(luò)沒有連接,分配什么樣的地址都是無所謂的,那就不妨使用上述某個私有地址塊了,這樣還可以預(yù)防以后需要連接到其他網(wǎng)絡(luò)的情況。

  如果網(wǎng)絡(luò)真的和外部相連會發(fā)生什么情況呢?使用私有IP地址的主機如何跟因特網(wǎng)或其他外網(wǎng)上的主機進行通信呢?這個問題最常見的答案就是使用NAT(Network Address Translation,網(wǎng)絡(luò)地址翻譯)。支持NAT的設(shè)備類型包括路由器、防火墻和獨立的NAT產(chǎn)品。NAT負責(zé)在私有網(wǎng)絡(luò)地址和一個或多個全局分配的IP地址之間進行翻譯。我們來簡要地看看它的工作原理。大部分NAT設(shè)備都可以配置為支持以下三種模式。

 。1)靜態(tài)--將私有網(wǎng)絡(luò)上的部分或所有主機的私有IP地址都映射為一個固定的、全局分配的地址。

 。2)地址池--NAT設(shè)備有一組全局分配的IP地址可用,它會將其中之一動態(tài)地分配給需要與外部網(wǎng)絡(luò)中的對等實體進行通信的主機。

 。3)PAT--也稱為PAT(Port Address Translation,端口地址轉(zhuǎn)換),只有一個全局分配地址時可以使用這種方法,比如圖2-12所示的情況。使用PAT時,所有私有地址都映射為同樣的外部地址,但輸出分組的源端口會被修改成唯一的值,通過它可以將輸入分組與私有網(wǎng)絡(luò)地址相關(guān)聯(lián)。

  圖2-12顯示了一個帶有三臺主機的小型網(wǎng)絡(luò),此網(wǎng)絡(luò)使用的是10/8地址塊。還有一臺標(biāo)識為NAT的路由器,它擁有一個私有網(wǎng)絡(luò)地址和一個因特網(wǎng)地址。

  這里只顯示了一個與NAT相關(guān)的全局地址,因此我們假設(shè)在后繼討論中,配置為使用PAT方式。靜態(tài)NAT和地址池情況與此類似,但更復(fù)雜一些,因為它們除了管理外部端口之外,還要管理外部地址。

  假設(shè)主機H2要向204.71.200.69,www.yahoo.com的Web服務(wù)器之一,發(fā)送一個TCP SYN段,以便打開一個連接。在圖2-13A中可以看到這個段離開H2時目的地址為204.71.200.69.80,源地址為10.0.0.2.9600。

 
圖2-12 帶有NAT路由器的私有網(wǎng)絡(luò)

  這里使用的是標(biāo)準記法,IP地址以A.B.C.D.P的形式書寫,其中A.B.C.D是IP地址,P是端口號。

  這里除了源地址是個私有網(wǎng)絡(luò)地址之外,沒什么特別的。這個段抵達路由器時,NAT必須將其源地址轉(zhuǎn)換成205.184.151.171,這樣Yahoo的Web服務(wù)器才會知道應(yīng)該把它的SYN/ACK和其他應(yīng)答送到哪里去。所有來自或發(fā)往私有網(wǎng)絡(luò)中其他主機的因特網(wǎng)流量也都會將其地址轉(zhuǎn)換成205.184.151.171,所以NAT也必須將源端口轉(zhuǎn)換成一個唯一的端口號,這樣它才能將那條連接上的輸入流量發(fā)送給正確的主機。我們看到,源端口9600被映射成了5555。因此傳送給Yahoo的段,目的地址為204.71.200.69.80,源地址為205.184.151.171.5555。

  如圖2-13B所示,Yahoo的應(yīng)答到達路由器時,會被發(fā)送給205.184.151.171.5555。NAT在其內(nèi)部狀態(tài)表中查找這個端口,并發(fā)現(xiàn)端口5555與地址10.0.0.2.9600相關(guān),因此,會將應(yīng)答從路由器傳送給H2,其源地址為204.71.200.69.80,目的地址為10.0.0.2.9600。

 
圖2-13 端口地址轉(zhuǎn)換

  盡管從前面的討論來看PAT好像簡單易懂,但有很多細節(jié)問題使它比看起來要復(fù)雜一些。比如,修改源地址和端口號會改變IP的首部校驗和以及TCP段的校驗和,因此這些值都要進行調(diào)整。

  FTP(File Transfer Protocol,文件傳輸協(xié)議)[Reynolds and Postel, 1985]是另外一個可以說明其復(fù)雜性的例子。一個FTP客戶端要向FTP服務(wù)器發(fā)送文件,或接收來自FTP服務(wù)器的文件時,會向服務(wù)器發(fā)送一條PORT命令,命令中包含了它監(jiān)聽服務(wù)器(數(shù)據(jù))連接的地址和端口號。這就意味著,首先,NAT要能夠識別出這個TCP段是一條FTP PORT命令,而且必須對地址和端口進行轉(zhuǎn)換。而且,PORT命令中的地址和端口號是作為ASCII字符串傳送的,對它們的修改可能會改變段的長度。這又意味著序列號(參見技巧1)的改變,NAT還要記錄這種變化,以便對ACK中的序列號進行調(diào)整,而且來自私有網(wǎng)絡(luò)主機的后續(xù)段也要依次對其序列號進行調(diào)整。

  除了這些難點之外,NAT工作得很好,并被廣泛應(yīng)用。尤其是在只有一條因特網(wǎng)連接可用時,用PAT將一個小網(wǎng)絡(luò)連接到因特網(wǎng)上去是種很自然的方式。

文章評論

軟件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z