NAT类型及检测方法
一?NAT的類型
NAT可以分為很多種,但是最為普遍的是傳統(tǒng)NAT,或者稱為向外NAT。向外NAT在默認(rèn)情況下只允許向外的Session穿越NAT,這就是我們最為常見的情況。
這種向外NAT又可以分為基本NAT(Basic NAT)和NAPT(Network Address/Port Translation)。
1.??基本NAT
基本NAT只轉(zhuǎn)換IP地址,而不轉(zhuǎn)換端口。一個(gè)基本NAT往往需要具有多個(gè)公網(wǎng)IP來滿足多個(gè)內(nèi)網(wǎng)節(jié)點(diǎn)中具有相同端口的應(yīng)用程序的同時(shí)訪問。由于這種類型的NAT設(shè)備限制大,現(xiàn)在已不常見。
2.????NAPT
(注:Endpoint表示一個(gè)IP地址和端口對)
與基本NAT只轉(zhuǎn)換IP地址不同,NAPT轉(zhuǎn)換整個(gè)Endpoint。由于NAPT允許內(nèi)網(wǎng)內(nèi)的多個(gè)節(jié)點(diǎn)通過共享的方式使用同一個(gè)IP地址,因此,如今NAPT類型的NAT設(shè)備已經(jīng)越來越多。
NAPT又可以進(jìn)一步分為以下四種類型:
(1)???完全錐型NAT(FULL CONE NAT)
完全錐型NAT在內(nèi)網(wǎng)用戶A(Private Endpoint)首次向外部主機(jī)發(fā)送數(shù)據(jù)包時(shí)創(chuàng)建地址映射會(huì)話,并為A分配一個(gè)公網(wǎng)地址和端口(Public Endpoint),以后任何A向外部發(fā)送的數(shù)據(jù)都將使用這個(gè)Public Endpoint。此后,任何外部主機(jī)想要與A通信,只要將數(shù)據(jù)包發(fā)送到Public Endpoint上,A就能夠順利的進(jìn)行接收。
(2)???限制錐型NAT (RESTRICT CONE NAT)
限制錐型NAT在內(nèi)網(wǎng)用戶A(Private Endpoint)首次向外部主機(jī)發(fā)送數(shù)據(jù)包時(shí)創(chuàng)建地址映射會(huì)話,并為A分配一個(gè)公網(wǎng)地址和端口(Public Endpoint),以后任何A向外部發(fā)送的數(shù)據(jù)包都將使用這個(gè)Public Endpoint。此后,如果某個(gè)外部主機(jī)(Endpoint IP:PORT)想要與A通信,只要將數(shù)據(jù)包發(fā)送到Public Endpoint并且保證A曾用當(dāng)前與NAT的會(huì)話向該外部主機(jī)的IP地址發(fā)送過數(shù)據(jù),A就能夠正常收到外部主機(jī)(Endpoint IP:PORT)發(fā)送來的數(shù)據(jù)包。
(3)???端口限制錐型NAT(PORT RESTRICT CONE NAT)
端口限制錐型在內(nèi)網(wǎng)用戶A(Private Endpoint)首次向外部主機(jī)發(fā)送數(shù)據(jù)包時(shí)創(chuàng)建地址映射會(huì)話,并為A分配一個(gè)公網(wǎng)地址和端口(Public Endpoint),以后任何A向外部發(fā)送的數(shù)據(jù)都將使用這個(gè)Public Endpoint。此后,如果某個(gè)外部主機(jī)(Endpoint IP:PORT)想要與A通信,只要將數(shù)據(jù)包發(fā)送到Public Endpoint并且保證A曾用當(dāng)前與NAT的會(huì)話向該外部主機(jī)的Endpoint發(fā)送過數(shù)據(jù),A就能夠正常收到外部主機(jī)(Endpoint IP:PORT)發(fā)送來的數(shù)據(jù)包。
(4)???對稱型NAT(SYMMETRIC NAT)
對稱型NAT是一種比較特殊的NAT。內(nèi)網(wǎng)用戶A(Private Endpoint)首次向外部主機(jī)S1發(fā)送數(shù)據(jù)包時(shí)創(chuàng)建地址映射會(huì)話Session1,并為A分配一個(gè)公網(wǎng)地址和端口(Public Endpoint1),以后A所有發(fā)向S1的數(shù)據(jù)包都使用這個(gè)Public Endpoint1。如果之后A用同一個(gè)Socket向外部主機(jī)S2發(fā)送數(shù)據(jù)包,這時(shí)對稱型NAT又為其分配一個(gè)地址映射會(huì)話,并為A分配一個(gè)新的公網(wǎng)地址和端口對(Public Endpoint2),以后A所有發(fā)向S2的數(shù)據(jù)包都使用這個(gè)Public Endpoint2。對稱型NAT規(guī)定Public Endpoint1和Public Endpoint2一定不相同。此外,如果任何外部主機(jī)想要發(fā)送數(shù)據(jù)給A,那么它首先應(yīng)該收到A發(fā)給他的數(shù)據(jù),然后才能往回發(fā)送,否則即使他知道內(nèi)網(wǎng)主機(jī)的Public Endpoint也不能發(fā)送數(shù)據(jù)給A。這種NAT可以通過端口猜測等方法進(jìn)行穿透,但是效果并不是很好,很難實(shí)現(xiàn)UDP-P2P通信。
?
二?NAT類型的檢測
前提條件:一個(gè)提供兩個(gè)公網(wǎng)地址(通信地址分別設(shè)為:Endpoint1與Endpoint2)的服務(wù)器S進(jìn)行UDP端口數(shù)據(jù)監(jiān)聽并根據(jù)客戶的要求給出響應(yīng);待檢測的用戶可以正常進(jìn)行UDP通信。
步驟1.????檢測主機(jī)是否位于NAT后
為了檢測IP地址是不是公網(wǎng)地址,主機(jī)A首先發(fā)送任意一個(gè)UDP數(shù)據(jù)包給服務(wù)器S(Endpoint1),S收到包之后,用Endpoint1將接收到數(shù)據(jù)包頭的IP地址和端口打成一個(gè)UDP反饋包發(fā)送給用戶A。A在收到反饋包之后,比較自身的Endpoint和反饋包中的Endpoint,如果一樣則說明A不位于任何NAT之后,否則,就是位于NAT之后,這里并不能判斷NAT的具體屬于哪一種類型。
步驟2.????檢測NAT是否是完全錐型
為了檢測所處的NAT是否是完全錐型的,主機(jī)A向服務(wù)器S(Endpoint1)發(fā)送UDP數(shù)據(jù)包后,服務(wù)器用Endpoint2將接收到數(shù)據(jù)包頭的IP地址和端口打成一個(gè)UDP反饋包發(fā)送給用戶A。另外,A在發(fā)送UDP數(shù)據(jù)包后,立即開始端口偵聽,設(shè)定一個(gè)等待時(shí)間上限,防止無限堵塞(因?yàn)榻邮帐且粋€(gè)While循環(huán))。這樣進(jìn)行若干次,如果A每次都沒有收到數(shù)據(jù)包,說明A所處的NAT類型不是完全錐型的;相反,在這整個(gè)過程中只要收到一次服務(wù)的包,就說明A所處的NAT類型是完全限制型的。
步驟3.????檢測NAT是否是對稱型
為了檢測所處的NAT是否是對稱型的,主機(jī)A向服務(wù)器S(Endpoint1)發(fā)送UDP數(shù)據(jù)包,服務(wù)器S(Endpoint1)在收到數(shù)據(jù)包后,用Endpoint1將接收到數(shù)據(jù)包頭的IP地址和端口打成一個(gè)UDP反饋包發(fā)送給用戶A。另外,A在發(fā)送數(shù)據(jù)包后,開始偵聽端口并接收數(shù)據(jù),設(shè)定一個(gè)等待時(shí)間上限,防止無限堵塞(因?yàn)榻邮帐且粋€(gè)While循環(huán))。與此同時(shí),主機(jī)A用同一個(gè)套接字向服務(wù)器S?(Endpoint2)發(fā)送UDP數(shù)據(jù),Endpoint2發(fā)送與上面類似的UDP回饋包。在A的整個(gè)數(shù)據(jù)接收過程中,如果收到的服務(wù)器反饋數(shù)據(jù)包中標(biāo)識(shí)自身的IP地址和端口存在不相同的情況,就說明NAT是對稱型的,否則就不是。
步驟4.????檢測NAT是限制錐型的還是端口限制錐型
最后,為了檢測所處的NAT是限制錐型的還是端口限制錐型的,主機(jī)A向服務(wù)S的Endpoint1發(fā)送UDP數(shù)據(jù)包,服務(wù)器用與Endpoint1相同的IP地址和不同的端號(hào)將帶有A的Public Endpoint的UDP反饋包發(fā)送給A。另外,A在發(fā)送數(shù)據(jù)包后,立即偵聽端口和并進(jìn)行數(shù)據(jù)接收,設(shè)定一個(gè)等待時(shí)間上限,防止無限堵塞(因?yàn)榻邮帐且粋€(gè)While循環(huán))。重復(fù)若干次。如過在整個(gè)過程中,用戶A收到S發(fā)來的數(shù)據(jù)包,就說明NAT是限制型的;否則就說明NAT是端口限制型的。
總結(jié)
以上是生活随笔為你收集整理的NAT类型及检测方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络游戏外挂核心封包揭密
- 下一篇: 5种IO模式形象的比喻