數(shù)十年專注企業(yè)數(shù)字化轉(zhuǎn)型、智能化升級(jí)、企業(yè)上云解決方案服務(wù)商
工單提交 實(shí)名認(rèn)證 騰佑科技咨詢熱線咨詢熱線: 400-996-8756
百度云服務(wù)中心騰佑科技公司
云服務(wù)器活動(dòng) 服務(wù)器租用 服務(wù)器托管 機(jī)柜租賃 帶寬租賃
  • 最新資訊
  • 熱門資訊
  • 最熱資訊
智能建站

NAT基本的技術(shù)原理和應(yīng)用

發(fā)布時(shí)間:2022-07-18 作者:admin

簡(jiǎn)述:1概述1.1簡(jiǎn)介1.1.1名詞解釋公有IP地址:也叫全局地址,是指合法的IP地址,它是由NIC(網(wǎng)絡(luò)信息中心)或者ISP(網(wǎng)絡(luò)服務(wù)提供商)分配的地址,對(duì)外代表一個(gè)或多個(gè)內(nèi)部局部地址,是全球統(tǒng)一的可尋址的地址。私有IP地址:也叫內(nèi)部地址,屬于

1概述

1.1簡(jiǎn)介

1.1.1名詞解釋

公有IP地址:又稱全局地址,是指合法的IP地址,是由NIC(網(wǎng)絡(luò)信息中心)或ISP(網(wǎng)絡(luò)服務(wù)提供商)分配的地址代表一個(gè)或多個(gè)內(nèi)部地址,是全球統(tǒng)一的地址。

私有IP地址:又稱內(nèi)部地址,屬于非注冊(cè)地址,專門用于組織內(nèi)部。因特網(wǎng)分配編號(hào)委員會(huì)(IANA)保留了3塊IP地址為私有IP地址:

10.0.0.0———10.255.255.255

172.16.0.0———172.16.255.255

192.168.0.0———192.168.255.255

地址池:地址池有一些外部地址(世界上唯一的地址)IP地址)組合,我們稱這樣的地址為地址池。當(dāng)內(nèi)部網(wǎng)絡(luò)的數(shù)據(jù)包通過地址轉(zhuǎn)換到外部網(wǎng)絡(luò)時(shí),將在地址池中選擇一個(gè)IP地址作為數(shù)據(jù)包的來源IP可以有效利用用戶的外部地址,提高訪問外部網(wǎng)絡(luò)的能力。

1.1.2關(guān)于NAT

NAT英文全稱是“NetworkAddressTranslation”,中文意思是“網(wǎng)絡(luò)地址轉(zhuǎn)換”,它是一個(gè)IETF(InternetEngineeringTaskForce,Internet工程任務(wù)組)標(biāo)準(zhǔn),允許一個(gè)整體機(jī)構(gòu)使用公共機(jī)構(gòu)IP(InternetProtocol)地址出現(xiàn)在Internet上。顧名思義,它是一種內(nèi)部私人網(wǎng)絡(luò)地址(IP地址)翻譯成合法網(wǎng)絡(luò)IP如下圖所示。顧名思義,它是一種內(nèi)部私人網(wǎng)絡(luò)地址(IP地址)翻譯成合法網(wǎng)絡(luò)IP如下圖所示,地址技術(shù)。因此,我們可以認(rèn)為,NAT能在一定程度上有效解決公網(wǎng)地址不足的問題。

簡(jiǎn)單地說,NAT是在局域網(wǎng)內(nèi)部網(wǎng)絡(luò)中使用內(nèi)部地址,當(dāng)內(nèi)部節(jié)點(diǎn)與外部網(wǎng)絡(luò)通信時(shí),將內(nèi)部地址替換為公共地址(可以理解為出口,如庭院門),以便在外部公共網(wǎng)絡(luò)中(internet)正常使用,NAT多臺(tái)計(jì)算機(jī)臺(tái)計(jì)算機(jī)Internet連接,這一功能很好地解決了公共IP地址短缺。通過這種方法,請(qǐng)一個(gè)合法的IP地址,將計(jì)算機(jī)連接到整個(gè)局域網(wǎng)Internet中。通過這種方法,請(qǐng)一個(gè)合法的IP地址,將計(jì)算機(jī)連接到整個(gè)局域網(wǎng)Internet中。這時(shí),NAT屏蔽內(nèi)部網(wǎng)絡(luò),所有內(nèi)部網(wǎng)絡(luò)計(jì)算機(jī)對(duì)公共網(wǎng)絡(luò)都是看不見的,內(nèi)部網(wǎng)絡(luò)計(jì)算機(jī)用戶通常不會(huì)意識(shí)到NAT的存在。如下圖所示。這里提到的內(nèi)部地址是指在內(nèi)部網(wǎng)絡(luò)中分配給節(jié)點(diǎn)的私有地址IP該地址只能用于內(nèi)部網(wǎng)絡(luò),不能由路由轉(zhuǎn)發(fā)。

NAT路由器、防火墻通常集成功能ISDN路由器或單獨(dú)的NAT設(shè)備中。比如Cisco該功能已添加到路由器中,網(wǎng)絡(luò)管理員只需在路由器中IOS中設(shè)置NAT功能可以屏蔽內(nèi)部網(wǎng)絡(luò)。再比如防火墻WEBServer的內(nèi)部地址192.168.1.2021年映射外部地址.96.23.11,外部訪問202.96.23.11地址實(shí)際上就是訪問訪問192.168.1.1。此外,對(duì)于資金有限的小企業(yè)以通過軟件實(shí)現(xiàn)這一功能。Windows98SE、Windows這個(gè)功能包含在2000年。

1.2分類

NAT靜態(tài)有三種類型NAT(StaticNAT)、動(dòng)態(tài)地址NAT(PooledNAT)、網(wǎng)絡(luò)地址端口轉(zhuǎn)換NAPT(Port-LevelNAT)。

1.2.1靜態(tài)NAT

手動(dòng)設(shè)置Internet客戶的通信可以映射到特定的私人網(wǎng)絡(luò)地址和端口。如果要連接到Internet計(jì)算機(jī)可以在私人網(wǎng)絡(luò)上使用服務(wù)器(如網(wǎng)站服務(wù)器)和應(yīng)用程序(如游戲),因此靜態(tài)映射是必要的。靜態(tài)映射不會(huì)從NAT刪除轉(zhuǎn)換表。
如果在NAT轉(zhuǎn)換表中存在某個(gè)映射,那么NAT只是單向Internet將數(shù)據(jù)傳輸?shù)剿接芯W(wǎng)絡(luò)。NAT它在一定程度上保護(hù)了連接到私有網(wǎng)絡(luò)部分的計(jì)算機(jī)。但是,如果考慮的話Internet的安全性,NAT配合全功能防火墻使用。

對(duì)于上述網(wǎng)絡(luò)拓?fù)鋱D,當(dāng)內(nèi)網(wǎng)主機(jī)10.1.1.如果201年想與外網(wǎng)主機(jī)合作.0.0.通信時(shí),主機(jī)(IP:10.1.1.1)當(dāng)數(shù)據(jù)包通過路由器時(shí),路由器通過搜索NATtable將IP數(shù)據(jù)包的源IP地址(10.1.1.1)改為與之對(duì)應(yīng)的全局IP地址(201.0.0.1),而目標(biāo)IP地址201.0.0.11保持不變,使數(shù)據(jù)包達(dá)到201.0.0.11。而當(dāng)主機(jī)HostB(IP:201.0.0.11)當(dāng)響應(yīng)數(shù)據(jù)包到達(dá)與內(nèi)網(wǎng)連接的路由器時(shí),路由器也會(huì)搜索NATtable,將IP數(shù)據(jù)包的目的IP地址改成10.1.1.1.這樣,內(nèi)網(wǎng)主機(jī)就可以收到外網(wǎng)主機(jī)發(fā)送的數(shù)據(jù)包。在靜態(tài)NAT方式,內(nèi)部IP地址與公有IP地址是一對(duì)一的映射關(guān)系,所以這樣做的前提是組織可以申請(qǐng)足夠的全局IP地址。

1.2.2動(dòng)態(tài)NAT

動(dòng)態(tài)地址NAT只是轉(zhuǎn)換IP它是每個(gè)內(nèi)部的地址IP地址分配臨時(shí)外部IP地址主要用于撥號(hào),也可用于頻繁的遠(yuǎn)程連接NAT。當(dāng)遠(yuǎn)程用戶聯(lián)系時(shí),動(dòng)態(tài)地址NAT會(huì)給他一個(gè)IP當(dāng)用戶斷開地址時(shí),此地址IP地址將被釋放并留待以后使用。

動(dòng)態(tài)NAT適用于當(dāng)機(jī)構(gòu)申請(qǐng)的全局IP地址少,內(nèi)部網(wǎng)絡(luò)主機(jī)多。內(nèi)網(wǎng)主機(jī)IP與全局IP地址是多對(duì)一的。當(dāng)數(shù)據(jù)包進(jìn)出內(nèi)網(wǎng)時(shí),就有了NAT功能設(shè)備正確IP處理和靜態(tài)數(shù)據(jù)包NAT只是NATtable如果內(nèi)網(wǎng)主機(jī)在一定時(shí)間內(nèi)不與外部網(wǎng)絡(luò)通信,則表中的記錄是動(dòng)態(tài)的IP地址映射關(guān)系將被刪除,全局將被刪除IP地址分配給新的IP使用數(shù)據(jù)包形成新的數(shù)據(jù)包NATtable映射記錄。

1.2.3網(wǎng)絡(luò)地址端口轉(zhuǎn)換NAPT

網(wǎng)絡(luò)地址端口轉(zhuǎn)換NAPT(NetworkAddressPortTranslation)內(nèi)部地址映射到外部網(wǎng)絡(luò)IP不同端口的地址。它可以將中小型網(wǎng)絡(luò)隱藏在法律上IP地址后面。NAPT與動(dòng)態(tài)地址NAT不同的是,它將內(nèi)部連接映射到外部網(wǎng)絡(luò)中IP在地址上,同時(shí)在地址上加一個(gè)NAT選用設(shè)備的端口號(hào)。

NAPT使用最常見的轉(zhuǎn)換方法,它還包括兩種轉(zhuǎn)換方法:SNAT和DNAT。

(1)源NAT(SourceNAT,SNAT):修改數(shù)據(jù)包的源地址。NAT更改第一個(gè)數(shù)據(jù)包的來源地址,它將永遠(yuǎn)在數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)之前完成,數(shù)據(jù)包偽裝是一個(gè)SNAT的例子。

(2)目的NAT(DestinationNAT,DNAT):修改數(shù)據(jù)包的目的地地址。DestinationNAT剛好與SNAT相反,它改變了第一個(gè)數(shù)據(jù)包的目的地地址,如平衡負(fù)載、端口轉(zhuǎn)發(fā)和透明代理DNAT。

源NAT舉例:對(duì)于以上網(wǎng)絡(luò)拓?fù)鋱D,內(nèi)網(wǎng)的主機(jī)數(shù)量比較多,但是該組織只有一個(gè)合法的IP當(dāng)內(nèi)網(wǎng)主機(jī)(10.1.1.3)發(fā)送數(shù)據(jù)包時(shí),需要修改數(shù)據(jù)包IP地址和TCP/UDP比如將

源IP:10.1.1.3

源port:1493

改成

源IP:201.0.0.1

源port:1492(注:源端口號(hào)可以和原來的一樣或不同)

外網(wǎng)主機(jī)(201).0.0.11響應(yīng)內(nèi)網(wǎng)主機(jī)(10).1.1.3)時(shí),應(yīng)將:

目的IP:201.0.0.1

目的port:1492

改成

目的IP:10.1.1.3

目的port:1493

通過修改IP地址和端口的方法可以使內(nèi)網(wǎng)中的所有主機(jī)都能訪問外網(wǎng)。NAT只適用于一個(gè)合法的組織或機(jī)構(gòu)IP地址的情況也是動(dòng)態(tài)的NAT一個(gè)特例。

目的NAT例如:這種方法適用于需要為外網(wǎng)提供某些服務(wù)的內(nèi)網(wǎng)服務(wù)器。

例如,上述拓?fù)浣Y(jié)構(gòu),內(nèi)網(wǎng)服務(wù)器組(ip地址分別為:10.1.1.1,10.1.1.2,10.1.1.3.需要為外網(wǎng)提供服務(wù)WEB服務(wù),當(dāng)外網(wǎng)主機(jī)HostB訪問內(nèi)網(wǎng)時(shí)發(fā)送的數(shù)據(jù)包的目的IP地址為10.1.1.127.端口號(hào)為:80。當(dāng)數(shù)據(jù)包到達(dá)連接到內(nèi)網(wǎng)的路由器時(shí),路由器搜索NATtable,通過修改路由器的目的IP地址和端口號(hào),將外網(wǎng)的數(shù)據(jù)包平均發(fā)送到不同的主機(jī)上(10.1.1.1,10.1.1.2,10.1.1.3等),從而實(shí)現(xiàn)負(fù)載均衡。

1.3NAT實(shí)現(xiàn)方式

1.3.1全錐NAT(FullConeNAT)

一旦內(nèi)部地址(iAddr:port1)映射到外部地址(eAddr:port2),一切都來自iAddr:port1的包都經(jīng)由eAddr:port2向外發(fā)送。任何外部主機(jī)都可以通過給予。eAddr:port2發(fā)包到達(dá)iAddr:port1。

1.3.2限制性錐NAT(Address-RestrictedConeNAT)

一旦內(nèi)部地址(iAddr:port1)映射到外部地址(eAddr:port2),一切都來自iAddr:port1的包都經(jīng)由eAddr:port2向外發(fā)送。任何外部主機(jī)(hostAddr:any)都能通過給eAddr:port2發(fā)包到達(dá)iAddr:port1的前提是:iAddr:port以前發(fā)過包到hostAddr:any。"any"也就是說,端口不受限制。

1.3.三端口限制錐NAT(PortRestrictedConeNAT)

端口限制錐NAT與限制性錐NAT類似地,只是對(duì)端口號(hào)的限制。

一旦內(nèi)部地址(iAddr:port1)映射到外部地址(eAddr:port2),一切都來自iAddr:port1的包都經(jīng)由eAddr:port2向外發(fā)送。外部主機(jī)(hostAddr:port3)能發(fā)包到達(dá)iAddr:port1的前提是:iAddr:port以前發(fā)過包到hostAddr:port3.

1.3.4對(duì)稱NAT(SymmetricNAT)

每一個(gè)都來自同一個(gè)內(nèi)部IP從端口到特定目的地地址和端口的要求都映射到獨(dú)特的外部IP地址和端口。同一內(nèi)部IP不同的映射用于將信息包發(fā)送到不同的目的地和端口。只有收到內(nèi)部主機(jī)數(shù)據(jù)包的外部主機(jī)才能發(fā)回?cái)?shù)據(jù)包。

2、NAT原理

2.1地址轉(zhuǎn)換

NAT私有網(wǎng)主機(jī)和公共網(wǎng)主機(jī)通信的基本工作原理是IP包經(jīng)過NAT網(wǎng)關(guān)時(shí),將IP包中的源IP或目的IP在私有IP和NAT的公共IP轉(zhuǎn)換之間。

如下圖所示,NAT網(wǎng)關(guān)有兩個(gè)網(wǎng)絡(luò)端口,其中公共網(wǎng)絡(luò)端口IP公共地址統(tǒng)一分配IP,為202.20.65.5.私有網(wǎng)絡(luò)端口IP地址為1922.168.1.1。私有網(wǎng)絡(luò)主機(jī)192.168.1.202向公共網(wǎng)絡(luò)主機(jī).20.65.4發(fā)送了1個(gè)IP包(Dst=202.20.65.4,Src=192.168.1.2)。

當(dāng)IP包經(jīng)過NAT網(wǎng)關(guān)時(shí),NATGateway會(huì)將IP包的源IP轉(zhuǎn)換為NATGateway的公共IP此時(shí)轉(zhuǎn)發(fā)到公共網(wǎng)絡(luò),IP包(Dst=202.20.65.4,Src=202.20.65.5)沒有私有網(wǎng)絡(luò)IP的信息。由于IP包的源IP已轉(zhuǎn)換成NATGateway的公共IP,WebServer發(fā)出的響應(yīng)IP包(Dst=202.20.65.5,Src=202.20.65.4)將被送到NATGateway。

這時(shí),NATGateway會(huì)將IP包的目的IP轉(zhuǎn)換為私人網(wǎng)絡(luò)中的主機(jī)IP,然后將IP包(Des=192.168.1.2,Src=202.20.65.4)轉(zhuǎn)發(fā)到私有網(wǎng)絡(luò)。對(duì)于通信雙方來說,這個(gè)地址的轉(zhuǎn)換過程是完成的全透明。轉(zhuǎn)換圖如下。


如果內(nèi)網(wǎng)主機(jī)發(fā)出的請(qǐng)求包未通過NAT,那么當(dāng)WebServer收到請(qǐng)求包,回復(fù)的響應(yīng)包中的目的地址就是私有網(wǎng)絡(luò)IP地址,在Internet無法正確交付,導(dǎo)致連接失敗。

2.2連接跟蹤

在上述過程中,NATGateway在收到響應(yīng)包后,就需要判斷將數(shù)據(jù)包轉(zhuǎn)發(fā)給誰。此時(shí)如果子網(wǎng)內(nèi)僅有少量客戶機(jī),可以用靜態(tài)NAT手工指定;但是,如果內(nèi)網(wǎng)有多個(gè)客戶機(jī),并且各自訪問不同的網(wǎng)站,則需要連接跟蹤(connectiontrack)。如下圖所示:

在NATGateway收到客戶機(jī)發(fā)送的請(qǐng)求包后,轉(zhuǎn)換源地址并保存連接記錄NATGateway收到服務(wù)器的響應(yīng)包后,搜索TrackTable,確定轉(zhuǎn)發(fā)目標(biāo),轉(zhuǎn)換目的地址,轉(zhuǎn)發(fā)給客戶機(jī)。

2.3端口轉(zhuǎn)換

以上述客戶機(jī)訪問服務(wù)器為例,當(dāng)只有一臺(tái)客戶機(jī)訪問服務(wù)器時(shí),NATGateway只須更改數(shù)據(jù)包的源IP或目的IP即可正常通訊。但是如果ClientA和ClientB同時(shí)訪問WebServer,那么當(dāng)NATGateway收到響應(yīng)包時(shí),無法判斷將數(shù)據(jù)包轉(zhuǎn)發(fā)給哪臺(tái)客戶機(jī),如下圖所示。

此時(shí)NATGateway會(huì)在ConnectionTrack添加端口信息進(jìn)行區(qū)分。如果兩個(gè)客戶機(jī)訪問同一服務(wù)器的源端口不同,則在TrackTable可以通過添加端口信息來區(qū)分。如果源端口正好相同,SNAT和DNAT同時(shí),源端口也應(yīng)進(jìn)行相應(yīng)的轉(zhuǎn)換,如下圖所示。

3、應(yīng)用

NAT數(shù)據(jù)包偽裝、平衡負(fù)平衡負(fù)載、端口轉(zhuǎn)發(fā)、透明代理等功能。

數(shù)據(jù)偽裝:可將內(nèi)網(wǎng)數(shù)據(jù)包中的地址信息更改為統(tǒng)一的外部地址信息,防止內(nèi)網(wǎng)主機(jī)直接暴露在互聯(lián)網(wǎng)上,以確保內(nèi)網(wǎng)主機(jī)的安全。同時(shí),該功能通常用于共享互聯(lián)網(wǎng)。例如,當(dāng)內(nèi)網(wǎng)主機(jī)訪問外網(wǎng)時(shí),為了隱藏內(nèi)網(wǎng)拓?fù)浣Y(jié)構(gòu),使用全球地址來替換私人地址。

端口轉(zhuǎn)發(fā):內(nèi)網(wǎng)主機(jī)提供外部服務(wù)時(shí),使用內(nèi)部私有IP外網(wǎng)無法直接訪問地址。因此,有必要在網(wǎng)關(guān)上轉(zhuǎn)發(fā)端口,并將特定服務(wù)的數(shù)據(jù)包轉(zhuǎn)發(fā)給內(nèi)網(wǎng)主機(jī)。例如,公司小王在自己的服務(wù)器上設(shè)置了一個(gè)Web網(wǎng)站,他的IP地址為192.168.0.5.使用默認(rèn)端口80?,F(xiàn)在他想讓局域網(wǎng)外的用戶直接訪問他Web站點(diǎn)。利用NAT這個(gè)問題很容易解決,服務(wù)器IP地址為210.59.120.89,然后為小王分配一個(gè)端口,如81,即所有訪問210.59.120.89:81請(qǐng)求自動(dòng)轉(zhuǎn)向192.168.0.5:80,這個(gè)過程對(duì)用戶是透明的。

負(fù)載平衡:目的地地址轉(zhuǎn)換NAT一些服務(wù)器可以重定向連接到其他隨機(jī)選定的服務(wù)器。例如,1.2.3所講的目的NAT的例子。

故障結(jié)束:目的地地址轉(zhuǎn)換NAT它可以用來提供高可靠性的服務(wù)。如果一個(gè)系統(tǒng)有一個(gè)通過路由器訪問的關(guān)鍵服務(wù)器,一旦路由器檢測(cè)到服務(wù)器,它可以使用目的地址轉(zhuǎn)換NAT將連接轉(zhuǎn)移到備份服務(wù)器上,以提高系統(tǒng)的可靠性。

透明代理:例如,自己的服務(wù)器空間不足,需要指向另一個(gè)服務(wù)器空間的某些鏈接;或者沒有安裝在計(jì)算機(jī)上IIS服務(wù),但希望網(wǎng)民訪問計(jì)算機(jī)上的內(nèi)容,此時(shí)使用IIS的Web網(wǎng)站重定向可以輕松幫助我們完成。

4、NAT的缺陷

NAT一開始很完美,但是隨著網(wǎng)絡(luò)的發(fā)展,各種新的應(yīng)用層出不窮,此時(shí)NAT也暴露了缺點(diǎn)。NAT缺陷主要表現(xiàn)在以下幾個(gè)方面:

(1)嵌入式IP地址或端口

NAT設(shè)備不能翻譯嵌入應(yīng)用數(shù)據(jù)部分的設(shè)備IP地址或端口信息只能翻譯正常位置IP第一部電影中的地址信息和位置TCP/UDP第一部中的端口信息。如下圖所示,對(duì)方將使用嵌入在接收到的數(shù)據(jù)包中的地址和端口進(jìn)行通信(例如FTP協(xié)議),如果通信雙方都使用公網(wǎng),可能會(huì)導(dǎo)致連接故障。IP,這不會(huì)造成任何問題,但如果嵌入式地址和端口是內(nèi)網(wǎng),顯然連接不可能成功,原因就像開頭說的。MSNMessenger使用這種方法傳遞一些功能IP以及端口信息,導(dǎo)致NAT客戶端網(wǎng)絡(luò)應(yīng)用程序設(shè)備后連接故障。

一些NAT為了適應(yīng)更多的場(chǎng)景,服務(wù)提供適應(yīng)各種協(xié)議,如支持FTP、SCTP、IMCP、DNS等等,這種技術(shù)叫ALG(ApplicationLevelGateway),即在應(yīng)用層對(duì)IP與端口進(jìn)行一定的抽取,生成NAT映射表記錄。但這些也大大增加了NAT復(fù)雜性,特別是在自定義協(xié)議的情況下,應(yīng)考慮更復(fù)雜的機(jī)制來滲透NAT。

(2)內(nèi)部網(wǎng)絡(luò)服務(wù)不能從公網(wǎng)訪問

因?yàn)閮?nèi)網(wǎng)是私有的IP,因此,內(nèi)部網(wǎng)絡(luò)服務(wù)不能直接從公網(wǎng)訪問,比如WEB我們可以通過建立靜態(tài)映射來解決這個(gè)問題。例如,218有一個(gè)靜態(tài)映射.70.201.185:80與192.168.0.88:80映射,當(dāng)公網(wǎng)用戶訪問內(nèi)部時(shí)WEB當(dāng)服務(wù)器首先連接到218時(shí).70.201.185:80,然后NAT設(shè)備將請(qǐng)求傳遞給192.168.0.88:80,192.168.0.88把響應(yīng)返回NAT設(shè)備,再由NAT將設(shè)備傳輸給公網(wǎng)訪問用戶。

(3)有些應(yīng)用程序用A端口發(fā)送數(shù)據(jù),但需要用B端口接收,但是NAT設(shè)備翻譯時(shí)卻不知道這一點(diǎn),它仍然建立一條針對(duì)A端口的映射,結(jié)果對(duì)方響應(yīng)的數(shù)據(jù)要傳給B端口時(shí),NAT該設(shè)備將丟棄數(shù)據(jù)包,因?yàn)樗也坏较嚓P(guān)的映射項(xiàng)目。

(4)一些P2P應(yīng)用在NAT后無法進(jìn)行
對(duì)于那些沒有中間服務(wù)器的純服務(wù)器P2P對(duì)于應(yīng)用(如電視會(huì)議、娛樂等。),如果每個(gè)人都在那里NAT設(shè)備完成后,雙方無法建立連接。由于中間服務(wù)器沒有中轉(zhuǎn),NAT設(shè)備后的P2P程序在NAT設(shè)備上不會(huì)有映射條目,也就是說對(duì)方不能和你發(fā)起連接?,F(xiàn)在有一種叫做P2PNAT通過技術(shù)來解決這個(gè)問題。

(5)NAT設(shè)備編輯和修改數(shù)據(jù)包,降低了發(fā)送數(shù)據(jù)的效率;由于技術(shù)的復(fù)雜性,錯(cuò)誤變得困難。

5.NAT穿透

NAT不僅實(shí)現(xiàn)地址轉(zhuǎn)換,還起到防火墻的作用,隱藏內(nèi)部網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),保護(hù)內(nèi)部主機(jī)。NAT不僅完美解決了lP地址不足的問題也能有效避免網(wǎng)絡(luò)外的攻擊,隱藏和保護(hù)網(wǎng)絡(luò)內(nèi)的計(jì)算機(jī)。對(duì)于外部主機(jī)來說,內(nèi)部主機(jī)是看不見的。但是,對(duì)于P2P就應(yīng)用而言,它需要能夠建立端到端連接,因此如何穿透它NAT也是P2P技術(shù)的關(guān)鍵之一。

5.1網(wǎng)絡(luò)拓樸

Server(129.208.12.38)是公網(wǎng)上的服務(wù)器,NAT-A和NAT-B是兩個(gè)NAT設(shè)備(可能是集成NAT路由器的功能,防火墻等。),它們有幾個(gè)合法的公共網(wǎng)絡(luò)IP,在NAT-A私有網(wǎng)絡(luò)中有幾臺(tái)主機(jī)被屏蔽【ClientA-1,ClientA-N】,在NAT-B私有網(wǎng)絡(luò)中也有幾臺(tái)主機(jī)【ClientB-1,ClientB-N】。為了方便以后解釋問題,只討論主機(jī)ClientA-1和ClientB-1。

假設(shè)主機(jī)ClientA-1和主機(jī)ClientB-1都和服務(wù)器Server建立了“連接”,如下圖所示。

由于NAT所以ClientA-1和ClientB-1不用關(guān)心和Server他們只需要知道通信的過程Server開放服務(wù)地址和端口號(hào)即可。假設(shè)在圖1中ClientA-一是進(jìn)程使用socket(192.168.0.2:7000)和Server通信,在ClientB-一是進(jìn)程使用socket(192.168.1.12:8000)和Server通信。他們通過自己的方式NAT轉(zhuǎn)換后分別變成socket(202.103.142.29:5000)和socket(221.10.145.84:6000)。

5.2使用UDP穿透NAT

通常,當(dāng)使用過程時(shí)UDP與外部主機(jī)通信時(shí),NAT會(huì)建立一個(gè)Session,這個(gè)Session沒有標(biāo)準(zhǔn)保留多久,也許幾秒鐘,幾分鐘,幾個(gè)小時(shí)。假設(shè)ClientA-在應(yīng)用程序中看到1ClientB-在線,想和ClientB-通信,一種方式是Server作為中間人,負(fù)責(zé)轉(zhuǎn)發(fā)ClientA-1和ClientB-1之間的消息,但是服務(wù)器太累了,吃不下。另一種方法是讓步ClientA-1何ClientB-建立端到端連接,然后自行通信。這也就是P2P連接。根據(jù)不同類型NAT,下面分別說明。

(1)全錐NAT,穿透全錐型NAT很容易,根本稱不上穿透,因?yàn)槿F型NAT將內(nèi)部主機(jī)映射到確定的地址,不會(huì)阻止從外部發(fā)送的連接請(qǐng)求,因此無需任何輔助手段即可建立連接。

(2)限制錐NAT端口限制錐NAT(簡(jiǎn)稱限制性NAT),穿透限制性錐NAT將其未知的源地址丟棄到內(nèi)部主機(jī)的數(shù)據(jù)包中。所以現(xiàn)在ClientA-1直接發(fā)送UDP數(shù)據(jù)包到ClientB-1.那么數(shù)據(jù)包就會(huì)被接受NAT-B無情的丟棄。因此,建立以下方法ClientA-1和ClientB-1之間的通信。

1.ClientA-1(202.103.142.29:5000Server,請(qǐng)求和ClientB-1(221.10.145.84:6000)通信。

2.Server將ClientA-地址和端口(2020.103.142.29:5000)發(fā)送給ClientB-1,告訴ClientB-1,ClientA-想和它交流。

3.ClientB-1向ClientA-1(202.103.142.29:5000)發(fā)送UDP當(dāng)然,數(shù)據(jù)包正在到達(dá)NAT-A的時(shí)候,還是會(huì)被丟棄,這并不是關(guān)鍵的,因?yàn)榘l(fā)送這個(gè)UDP包只是為了讓NAT-B記住通信的目的地地址:端口號(hào),當(dāng)以這個(gè)地址和端口為源的數(shù)據(jù)下次到達(dá)時(shí),它將不會(huì)被使用NAT-B丟棄,就這樣NAT-B打了一個(gè)從ClientB-1到ClientA-1的孔。

4.為了讓ClientA-知道什么時(shí)候才能向前走ClientB-1發(fā)送數(shù)據(jù),所以ClientB-1在向ClientA-1(202.103.142.29:5000)打孔后要向前走Server發(fā)短信告訴Server它已經(jīng)準(zhǔn)備好了。

5.Server給我發(fā)個(gè)消息ClientA-1,內(nèi)容為:ClientB-已經(jīng)準(zhǔn)備好了,你可以去ClientB-發(fā)消息。

6.ClientA-1向ClientB-1發(fā)送UDP數(shù)據(jù)包。這個(gè)數(shù)據(jù)包不會(huì)被使用。NAT-B丟棄,以后ClientB-1向ClientA-發(fā)送的數(shù)據(jù)包不會(huì)被發(fā)送ClientA-1丟棄,因?yàn)镹AT-A已經(jīng)知道是ClientA-首先發(fā)起通信。到目前為止,ClientA-1和ClientB-1就可以進(jìn)行通信了。

5.3使用TCP穿透NAT

使用TCP協(xié)議穿透NAT方法和使用UDP協(xié)議穿透NAT方式幾乎一樣,沒有本質(zhì)區(qū)別,只是沒有連接UDP變成面向連接TCP。值得注意的是:

1.ClientB-1在向ClientA-打孔時(shí),發(fā)送SYN數(shù)據(jù)包也會(huì)被使用NAT-A丟棄。ClientB-需要原來的socket上監(jiān)聽,由于重用socket,所以需要將socket屬性設(shè)置為SO_REUSEADDR。

2.ClientA-1向ClientB-1發(fā)送連接請(qǐng)求。同樣,因?yàn)镃lientB-1到ClientA-方向的孔已經(jīng)打好了,所以連接會(huì)成功,握手三次后,ClientA-1到ClientB-建立了1之間的連接。

5.4穿透對(duì)稱NAT

上面討論的是如何穿透錐體(Cone)NAT,對(duì)稱NAT和錐NAT非常不同NAT,當(dāng)私網(wǎng)主機(jī)與多個(gè)不同的外部主機(jī)通信時(shí),對(duì)稱NAT并不會(huì)像錐(Cone,全錐、限制錐、端口限制錐)NAT同一端口的分配。相反,新建一個(gè)Session,重新分配一個(gè)端口。參考上述穿透限制性錐NAT步驟3:ClientB-1(221.10.145.84:?)向ClientA-打孔時(shí),對(duì)稱NAT將給ClientB-1重新分配一個(gè)端口號(hào),對(duì)于這個(gè)端口號(hào)Server、ClientB-1、ClientA-都是未知的。同樣,ClientA-在步驟4中,1根本不會(huì)收到這個(gè)消息,ClientB-1發(fā)送給Server的通知消息中,ClientB-1的socket依舊是(221.10.145.84:6000)。而且,在步驟6時(shí):ClientA-1向它所知但錯(cuò)誤的方向知道但是錯(cuò)誤的ClientB-1發(fā)送數(shù)據(jù)包時(shí),NAT-1也會(huì)重新給ClientA-1分配端口號(hào)。因此,穿透對(duì)稱NAT機(jī)會(huì)很小。以下是兩種穿透對(duì)稱的可能性NAT的策略。

5.4.1同時(shí)開放TCP(SimultaneousTCPopen)策略

若對(duì)稱NAT收到一個(gè)來自本地私人網(wǎng)絡(luò)TCPSYN這個(gè)包想發(fā)起一個(gè)包“引入”的TCP一般來說,連接,NAT該連接請(qǐng)求將被拒絕并扔掉SYN包,或者回一個(gè)TCPRST(connectionreset,重建連接)包給請(qǐng)求方。然而,有一種情況會(huì)接受這一點(diǎn)“引入”連接。

RFC規(guī)定:對(duì)稱NAT,當(dāng)收到這個(gè)SYN包中的源IP地址:端口、目標(biāo)IP地址:端口和NAT已激活的注冊(cè)人TCP會(huì)話中的地址信息一致時(shí),NAT會(huì)放手的SYN包。需要特別指出的是:如何激活它?TCP連接?除了真正建立和完成的TCP連接外,RFC規(guī)范指出:如果NAT碰巧看到一個(gè)剛發(fā)出去的SYN以及隨后收到的包SYN包中的地址:如果端口信息一致,那么NAT會(huì)想到這一點(diǎn)TCP該連接已被激活,并將允許該方向SYN包進(jìn)入NAT內(nèi)部。同時(shí)開放TCP策略是利用這個(gè)機(jī)會(huì)建立聯(lián)系。

如果ClientA-1和ClientB-1能夠正確預(yù)測(cè)對(duì)方NAT會(huì)給下一個(gè)TCP公網(wǎng)連接分配TCP端口,兩個(gè)客戶端可以同時(shí)向?qū)Ψ桨l(fā)起一個(gè)“外出”的TCP連接請(qǐng)求,在對(duì)方SYN在包到達(dá)之前,我剛發(fā)出去SYN所有的包都能順利穿過自己的包NAT的話,端對(duì)端TCP連接可以成功建立。

5.4.2端口猜測(cè)策略

同時(shí)開放TCP該策略非常依賴于猜測(cè)對(duì)方的下一個(gè)端口,并且強(qiáng)烈依賴于發(fā)送連接請(qǐng)求的時(shí)間,以及網(wǎng)絡(luò)的不確定性,因此即使是Server充當(dāng)同步時(shí)鐘的角色。以下是通過UDP因?yàn)閁DP無需建立連接,因此無需考慮“同時(shí)開放”的問題。

為了介紹ClientB-1.先介紹一下詭計(jì)。STUN協(xié)議。STUN(SimpleTraversalofUDPThroughNATs)該協(xié)議是用來探測(cè)被子的輕量級(jí)協(xié)議NAT映射后地址:端口。STUN采用C/S結(jié)構(gòu)需要探測(cè)自己的被子NAT轉(zhuǎn)換地址:端口Client向Server發(fā)送請(qǐng)求,Server返回Client轉(zhuǎn)換地址:端口。

參考上面UDP穿透NAT的步驟2,當(dāng)ClientB-1收到Server發(fā)送給它的消息后,ClientB-1即打開3個(gè)socket。socket-0向STUNServer發(fā)送請(qǐng)求并收到回復(fù)后,假設(shè)您知道轉(zhuǎn)換后的地址:端口(221.10.145.84:6005),socket-1向ClientA-1發(fā)送一個(gè)UDP包,socket-二、再向另一個(gè)STUNServer發(fā)送請(qǐng)求,假設(shè)轉(zhuǎn)換后的地址:端口(221.10.145.84:6020)。通常,對(duì)稱NAT分配端口有兩種策略,一種是按順序增加,另一種是隨機(jī)分配。若此處對(duì)稱NAT使用順序增加策略,ClientB-1將兩次收到的地址發(fā)送到端口Server后,Server就可以通知ClientA-1在這個(gè)端口范圍內(nèi)猜測(cè)剛才ClientB-1發(fā)送給它的socket-1中被NAT映射后地址:端口,ClientA-很有可能在孔有效期內(nèi)成功猜測(cè)端口號(hào),從而和ClientB-1成功通信。

5.5問題總結(jié)

以上兩種穿透對(duì)稱NAT就方法而言,它們都是基于嚴(yán)格的假設(shè)條件。但現(xiàn)實(shí)中的大多數(shù)人NAT都是錐NAT,因?yàn)橘Y源畢竟很重要,對(duì)稱是相反的NAT,因?yàn)樘还?jié)省端口號(hào),所以成本相對(duì)較高。因此,無論是穿透錐體。NAT,還是對(duì)稱NAT,現(xiàn)實(shí)中可以做到。除非對(duì)稱。NAT真正使用隨機(jī)算法來分配可用的端口。

6.結(jié)語

NAT技術(shù)是不可否認(rèn)的ipv4.緩解地址資源短缺;減少用戶申請(qǐng)ISP服務(wù)成本和提供相對(duì)完善的負(fù)載平衡功能帶來了許多好處。但是在ipv4地址將在未來幾年枯竭,NAT技術(shù)不能改變ip地址空間不足的本質(zhì)。但在安全機(jī)制上也存在潛在威脅,在配置和管理上也存在挑戰(zhàn)。若要從根本上解決ip地址資源問題,ipv6是最根本的路。在ipv4轉(zhuǎn)換到ipv6的過程中,NAT與其他方案相比,技術(shù)確實(shí)是一個(gè)不錯(cuò)的選擇。

點(diǎn)擊展開全文

騰佑科技(mubashirfilms.com)成立于2009年,總部位于河南鄭州,是一家集互聯(lián)網(wǎng)基礎(chǔ)設(shè)施及軟硬件于一體化的高新技術(shù)企業(yè),具有IDC/ISP/ICP/云牌照、雙軟等資質(zhì),并擁有多個(gè)國(guó)家版權(quán)局認(rèn)證。公司自成立以來,一直致力于發(fā)展互聯(lián)網(wǎng)IDC數(shù)據(jù)中心DataCenter、云計(jì)算Cloud、大數(shù)據(jù)BigDate、人工智能AI、內(nèi)容加速CDN、互聯(lián)網(wǎng)安全、軟件定制開發(fā)等產(chǎn)品服務(wù)及行業(yè)客戶技術(shù)一體化智能解決方案;2018年成為百度智能云AI河南服務(wù)中心。

售前咨詢熱線:400-996-8756

備案提交:0371-89913068

售后客服:0371-89913000

熱門活動(dòng)

百度云服務(wù)中心
  • 熱門資訊
  • 隨便看看