姓名:劉登賢
學號:14310116024
轉載自: ? ? ? ? ? ?http://www.right.com.cn/forum/thread-199299-1-1.html
????????????????????????????http://blog.csdn.net/boywgw/article/details/48496151
????????????????????????????https://baike.baidu.com/item/nat
????????????????????????????http://www.cnblogs.com/my_life/articles/1908552.html
【嵌牛導讀】:NAT類型概述以及提升NAT類型的方法
【嵌牛鼻子】:關于NAT類型對網絡的影響
【嵌牛提問】:NAT類型有哪些?不同NAT類型有什么區別?提升NAT類型有什么好處?日常使用中怎樣提高NAT類型?、
一、什么是NAT
? ??NAT(Network Address Translation,網絡地址轉換)是1994年提出的。當在專用網內部的一些主機本來已經分配到了本地IP地址(即僅在本專用網內使用的專用地址),但現在又想和因特網上的主機通信(并不需要加密)時,可使用NAT方法。
這種方法需要在專用網連接到因特網的路由器上安裝NAT軟件。裝有NAT軟件的路由器叫做NAT路由器,它至少有一個有效的外部全球IP地址。這樣,所有使用本地地址的主機在和外界通信時,都要在NAT路由器上將其本地地址轉換成全球IP地址,才能和因特網連接。
另外,這種通過使用少量的公有IP 地址代表較多的私有IP 地址的方式,將有助于減緩可用的IP地址空間的枯竭。在RFC1632中有對NAT的說明。
二、NAT的作用
????NAT不僅能解決了lP地址不足的問題,而且還能夠有效地避免來自網絡外部的攻擊,隱藏并保護網絡內部的計算機。
1.寬帶分享:這是 NAT 主機的最大功能。
2.安全防護:NAT 之內的 PC 聯機到 Internet 上面時,他所顯示的 IP 是 NAT 主機的公共 IP,所以 Client 端的 PC 當然就具有一定程度的安全了,外界在進行 portscan(端口掃描) 的時候,就偵測不到源Client 端的 PC 。
三、NAT的實現方式
NAT的實現方式有三種,即靜態轉換Static Nat、動態轉換Dynamic Nat和端口多路復用OverLoad。
靜態轉換是指將內部網絡的私有IP地址轉換為公有IP地址,IP地址對是一對一的,是一成不變的,某個私有IP地址只轉換為某個公有IP地址。借助于靜態轉換,可以實現外部網絡對內部網絡中某些特定設備(如服務器)的訪問。
動態轉換是指將內部網絡的私有IP地址轉換為公用IP地址時,IP地址是不確定的,是隨機的,所有被授權訪問上Internet的私有IP地址可隨機轉換為任何指定的合法IP地址。也就是說,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作為外部地址時,就可以進行動態轉換。動態轉換可以使用多個合法外部地址集。當ISP提供的合法IP地址略少于網絡內部的計算機數量時。可以采用動態轉換的方式。
端口多路復用(Port address Translation,PAT)是指改變外出數據包的源端口并進行端口轉換,即端口地址轉換(PAT,Port Address Translation).采用端口多路復用方式。內部網絡的所有主機均可共享一個合法外部IP地址實現對Internet的訪問,從而可以最大限度地節約IP地址資源。同時,又可隱藏網絡內部的所有主機,有效避免來自internet的攻擊。因此,目前網絡中應用最多的就是端口多路復用方式。
ALG(Application Level Gateway),即應用程序級網關技術:傳統的NAT技術只對IP層和傳輸層頭部進行轉換處理,但是一些應用層協議,在協議數據報文中包含了地址信息。為了使得這些應用也能透明地完成NAT轉換,NAT使用一種稱作ALG的技術,它能對這些應用程序在通信時所包含的地址信息也進行相應的NAT轉換。例如:對于FTP協議的PORT/PASV命令、DNS協議的 "A" 和 "PTR" queries命令和部分ICMP消息類型等都需要相應的ALG來支持。
如果協議數據報文中不包含地址信息,則很容易利用傳統的NAT技術來完成透明的地址轉換功能,通常我們使用的如下應用就可以直接利用傳統的NAT技術:HTTP、TELNET、FINGER、NTP、NFS、ARCHIE、RLOGIN、RSH、RCP等。
四、NAT的四種類型以及檢測方法
考慮到UDP的無狀態特性,目前針對其的NAT實現大致可分為Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四種。值得指出的是,對于TCP協議而言,一般來說,目前NAT中針對TCP的實現基本上是一致的,其間并不存在太大差異,這是因為TCP協議本身 便是面向連接的,因此無需考慮網絡連接無狀態所帶來復雜性。
用語定義
1.內部Tuple
:指內部主機的私有地址和端口號所構成的二元組,即內部主機所發送報文的源地址、端口所構成的二元組
2.外部Tuple:指內部Tuple經過NAT的源地址/端口轉換之后,所獲得的外部地址、端口所構成的二元組,即外部主機收到經NAT轉換之后的報文時,它所看到的該報文的源地址(通常是NAT設備的地址)和源端口
3.目標Tuple:指外部主機的地址、端口所構成的二元組,即內部主機所發送報文的目標地址、端口所構成的二元組
詳細釋義
1. Full Cone NAT
:所有來自同一 個內部Tuple X的請求均被NAT轉換至同一個外部Tuple Y,而不管這些請求是不是屬于同一個應用或者是多個應用的。除此之外,當X-Y的轉換關系建立之后,任意外部主機均可隨時將Y中的地址和端口作為目標地址 和目標端口,向內部主機發送UDP報文,由于對外部請求的來源無任何限制,因此這種方式雖然足夠簡單,但卻不那么安全
2. Restricted Cone NAT
: 它是Full Cone的受限版本:所有來自同一個內部Tuple X的請求均被NAT轉換至同一個外部Tuple Y,這與Full Cone相同,但不同的是,只有當內部主機曾經發送過報文給外部主機(假設其IP地址為Z)后,外部主機才能以Y中的信息作為目標地址和目標端口,向內部 主機發送UDP請求報文,這意味著,NAT設備只向內轉發(目標地址/端口轉換)那些來自于當前已知的外部主機的UDP報文,從而保障了外部請求來源的安 全性
3. Port Restricted Cone NAT
:它是Restricted Cone NAT的進一步受限版。只有當內部主機曾經發送過報文給外部主機(假設其IP地址為Z且端口為P)之后,外部主機才能以Y中的信息作為目標地址和目標端 口,向內部主機發送UDP報文,同時,其請求報文的源端口必須為P,這一要求進一步強化了對外部報文請求來源的限制,從而較Restrictd Cone更具安全性
4. Symmetric NAT
:這是一種比所有Cone NAT都要更為靈活的轉換方式:在Cone NAT中,內部主機的內部Tuple與外部Tuple的轉換映射關系是獨立于內部主機所發出的UDP報文中的目標地址及端口的,即與目標Tuple無關; 在Symmetric NAT中,目標Tuple則成為了NAT設備建立轉換關系的一個重要考量:只有來自于同一個內部Tuple 、且針對同一目標Tuple的請求才被NAT轉換至同一個外部Tuple,否則的話,NAT將為之分配一個新的外部Tuple;打個比方,當內部主機以相 同的內部Tuple對2個不同的目標Tuple發送UDP報文時,此時NAT將會為內部主機分配兩個不同的外部Tuple,并且建立起兩個不同的內、外部 Tuple轉換關系。與此同時,只有接收到了內部主機所發送的數據包的外部主機才能向內部主機返回UDP報文,這里對外部返回報文來源的限制是與Port Restricted Cone一致的。不難看出,如果說Full Cone是要求最寬松NAT UDP轉換方式,那么,Symmetric NAT則是要求最嚴格的NAT方式,其不僅體現在轉換關系的建立上,而且還體現在對外部報文來源的限制方面。
P2P的NAT研究?
第一部分:不同NAT實現方法的介紹?
第二部分:NAT類型檢測
第一部分: 不同NAT實現方法的介紹?
各種不同類型的NAT(according to RFC)?
完全圓錐型NAT( Full Cone NAT ):
內網主機建立一個UDP socket(LocalIP:LocalPort) 第一次使用這個socket給外部主機發送數據時NAT會給其分配一個公網(PublicIP:PublicPort),以后用這個socket向外面任何主機發送數據都將使用這對(PublicIP:PublicPort)。此外,任何外部主機只要知道這個(PublicIP:PublicPort)就可以發送數據給(PublicIP:PublicPort),內網的主機就能收到這個數據包?
地址限制圓錐型NAT( Address Restricted Cone NAT?):
內網主機建立一個UDP socket(LocalIP:LocalPort) 第一次使用這個socket給外部主機發送數據時NAT會給其分配一個公網(PublicIP:PublicPort),以后用這個socket向外面任何主機發送數據都將使用這對(PublicIP:PublicPort)。此外,如果任何外部主機想要發送數據給這個內網主機,只要知道這個(PublicIP:PublicPort)并且內網主機之前用這個socket曾向這個外部主機IP發送過數據。只要滿足這兩個條件,這個外部主機就可以用自己的(IP,任何端口)發送數據給(PublicIP:PublicPort),內網的主機就能收到這個數據包?
端口限制圓錐型NAT( Port Restricted Cone NAT ):
內網主機建立一個UDP socket(LocalIP:LocalPort) 第一次使用這個socket給外部主機發送數據時NAT會給其分配一個公網(PublicIP:PublicPort),以后用這個socket向外面任何主機發送數據都將使用這對(PublicIP:PublicPort)。此外,如果任何外部主機想要發送數據給這個內網主機,只要知道這個(PublicIP:PublicPort)并且內網主機之前用這個socket曾向這個外部主機(IP,Port)發送過數據。只要滿足這兩個條件,這個外部主機就可以用自己的(IP,Port)發送數據給(PublicIP:PublicPort),內網的主機就能收到這個數據包?
對稱型NAT( Symmetric NAT):
內網主機建立一個UDP socket(LocalIP,LocalPort),當用這個socket第一次發數據給外部主機1時,NAT為其映射一個(PublicIP-1,Port-1),以后內網主機發送給外部主機1的所有數據都是用這個(PublicIP-1,Port-1),如果內網主機同時用這個socket給外部主機2發送數據,第一次發送時,NAT會為其分配一個(PublicIP-2,Port-2), 以后內網主機發送給外部主機2的所有數據都是用這個(PublicIP-2,Port-2).如果NAT有多于一個公網IP,則PublicIP-1和PublicIP-2可能不同,如果NAT只有一個公網IP,則Port-1和Port-2肯定不同,也就是說一定不能是PublicIP-1等于 PublicIP-2且Port-1等于Port-2。此外,如果任何外部主機想要發送數據給這個內網主機,那么它首先應該收到內網主機發給他的數據,然后才能往回發送,否則即使他知道內網主機的一個(PublicIP,Port)也不能發送數據給內網主機,這種NAT無法實現UDP-P2P通信。
第二部:NAT類型檢測
前提條件:有一個公網的Server并且綁定了兩個公網IP(IP-1,IP-2)。這個Server做UDP監聽(IP-1,Port-1),(IP-2,Port-2)并根據客戶端的要求進行應答。
第一步:檢測客戶端是否有能力進行UDP通信以及客戶端是否位于NAT后?
客戶端建立UDP socket然后用這個socket向服務器的(IP-1,Port-1)發送數據包要求服務器返回客戶端的IP和Port, 客戶端發送請求后立即開始接受數據包,要設定socket Timeout(300ms),防止無限堵塞. 重復這個過程若干次。如果每次都超時,無法接受到服務器的回應,則說明客戶端無法進行UDP通信,可能是防火墻或NAT阻止UDP通信,這樣的客戶端也就 不能P2P了(檢測停止)。?
當客戶端能夠接收到服務器的回應時,需要把服務器返回的客戶端(IP,Port)和這個客戶端socket的 (LocalIP,LocalPort)比較。如果完全相同則客戶端不在NAT后,這樣的客戶端具有公網IP可以直接監聽UDP端口接收數據進行通信(檢 測停止)。否則客戶端在NAT后要做進一步的NAT類型檢測(繼續)。
第二步:檢測客戶端NAT是否是Full Cone NAT?
客戶端建立UDP socket然后用這個socket向服務器的(IP-1,Port-1)發送數據包要求服務器用另一對(IP-2,Port-2)響應客戶端的請求往回 發一個數據包,客戶端發送請求后立即開始接受數據包,要設定socket Timeout(300ms),防止無限堵塞. 重復這個過程若干次。如果每次都超時,無法接受到服務器的回應,則說明客戶端的NAT不是一個Full Cone NAT,具體類型有待下一步檢測(繼續)。如果能夠接受到服務器從(IP-2,Port-2)返回的應答UDP包,則說明客戶端是一個Full Cone NAT,這樣的客戶端能夠進行UDP-P2P通信(檢測停止)。
第三步:檢測客戶端NAT是否是Symmetric NAT?
客戶端建立UDP socket然后用這個socket向服務器的(IP-1,Port-1)發送數據包要求服務器返回客戶端的IP和Port, 客戶端發送請求后立即開始接受數據包,要設定socket Timeout(300ms),防止無限堵塞. 重復這個過程直到收到回應(一定能夠收到,因為第一步保證了這個客戶端可以進行UDP通信)。?
用同樣的方法用一個socket向服務器的(IP-2,Port-2)發送數據包要求服務器返回客戶端的IP和Port。?
比 較上面兩個過程從服務器返回的客戶端(IP,Port),如果兩個過程返回的(IP,Port)有一對不同則說明客戶端為Symmetric NAT,這樣的客戶端無法進行UDP-P2P通信(檢測停止)。否則是Restricted Cone NAT,是否為Port Restricted Cone NAT有待檢測(繼續)。
第四步:檢測客戶端NAT是否是Restricted Cone NAT還是Port Restricted Cone NAT?
客戶端建立UDP socket然后用這個socket向服務器的(IP-1,Port-1)發送數據包要求服務器用IP-1和一個不同于Port-1的端口發送一個UDP 數據包響應客戶端, 客戶端發送請求后立即開始接受數據包,要設定socket Timeout(300ms),防止無限堵塞. 重復這個過程若干次。如果每次都超時,無法接受到服務器的回應,則說明客戶端是一個Port Restricted Cone NAT,如果能夠收到服務器的響應則說明客戶端是一個Restricted Cone NAT。以上兩種NAT都可以進行UDP-P2P通信。
注:以上檢測過程中只說明了可否進行UDP-P2P的打洞通信,具體怎么通信一般要借助于Rendezvous Server。另外對于Symmetric NAT不是說完全不能進行UDP-P2P達洞通信,可以進行端口預測打洞,不過不能保證成功。
五、提升NAT類型的好處和方法
? ??提升NAT類型的好處:
瀏覽網頁、觀看視頻、游戲等更順暢,下載速度更穩定快速,
特別是對那些玩ED2K/PT下載、PS4/XBox主機游戲的,
提升NAT類型后更有可能獲取到HigtID、更容易進入游戲房間連線等。
? ??提升NAT類型的方法
要提升NAT類型,我們必須知道程序顯示的NAT的4個類型的全稱:NAT1、NAT2、NAT3、NAT4。
它們分別對應:
NAT1?→?Full Cone?NAT
NAT2?→?Address-Restricted Cone?NAT
NAT3?→?Port-Restricted Cone?NAT
NAT4?→?Symmetric?NAT
說些比較重要的前話:路由器少一層是一層,這樣越有可能得到NAT1和NAT2這兩類NAT類型。
一般建議家里的網路是以下兩種拓撲類型:
1、光貓橋接→主路由(撥號連接外網用)→副路由(純AP模式,擴展信號)
2、光貓撥號(直接充當主路由)→副路由(純AP模式,擴展信號)
這樣的好處是橋接和純AP是不進行NAT的,而是SWitch,所以不會導致多一層NAT。
如果你的網絡是NAT1,那這是最寬松的網絡環境,你想做什么,基本沒啥限制;
如果是NAT4的話,這是最嚴格的網絡環境,可能會玩不了游戲、下載都沒速度;
一般,我們家里的設備都是通過光貓橋接+無線路由器撥號的形式連接到外網的,
此時,基本是NAT2和NAT3,正常情況對看網頁、游戲及下載都沒有過多的限制。
但是,現在個別網絡游戲嚴格要求你的網絡環境必須是“NAT2”以上(NAT2和NAT1),才能進行游戲。
而你的網絡環境又是"NAT3”及“NAT4",那到底該怎么辦呢?
下面我們介紹一些簡單提升NAT類型的方法,其實就是進行NAT穿透(NAT Traversal):
1、如果你的路由器有啟用“Full Cone”、“STUN”、“TURN”、“ICE”、“uPnP”等功能,全部都啟用了。
2、如果你的路由器沒有以上功能,那可以找下有沒有“DMZ”功能(DMZ是英文“demilitarized zone”的縮寫,中文名稱為“隔離區”,也稱“非軍事化區”。它是為了解決安裝防火墻后外部網絡的訪問用戶不能訪問內部網絡服務器的問題,而設立的一個非安全系統與安全系統之間的緩沖區。該緩沖區位于企業內部網絡和外部網絡之間的小網絡區域內。)
有的話,可以啟用它,并把你要提升NAT類型的主機IP地址設置好。
(一般建議有“Full Cone”、“uPnP”等,就不要開"DMZ”了,除非是PS4/XBox這類游戲主機要提升NAT類型)
3、在Windows上把以下三個服務設置為自動啟動,并啟動該服務:
一般這三個服務都會被奇虎360等帶啟動項優化的軟件當做無用啟動項被“優化”成禁止啟動。
Function Discovery Provider Host
Function Discovery Resource Publication
SSDP Discovery
4、在 Windows 防火墻,放行你需要提升NAT類型的軟件或者游戲程序(EXE程序或者UWP程序),
如果你不會放行,也可以直接關閉 Windows 防火墻。(一般不推薦這樣做)
第4步很重要,這步沒做,等于其它的全是在做無用功。
5、如果你的設備是通過電腦共享網絡的形式上網的,建議把這個服務也打開:UPnP Device Host
以上,能弄的都弄了,這樣你的網絡環境就會越好,甚至NAT1(也就是Full Cone NAT)都沒有問題。