天天看點

WebRTC網絡基礎 九、第二節 NAT打洞原理

今天我們來看一下NAT穿越的原理

NAT一共有四種類型,分别是完全錐型NAT (Full Cone NAT)、位址限制錐型NAT(Address  Restricted Cone NAT)、端口限制錐型NAT (Port Restricted Cone NAT)、對稱型NAT (Symmetric NAT),對NAT穿越來說,其實每一種穿越都不一樣,下面我就來看一下每一種不同類型,如何進行NAT穿越。

完全錐型NAT

WebRTC網絡基礎 九、第二節 NAT打洞原理

完全錐型是非常簡單的 ,左邊是内網的主機,它有自己的内網IP位址和端口 ,通過防火牆之後,它形成一個外網的IP位址,那麼外網的三台主機要想與内網的主機進行通信的時候,首先要由内網的主機向外發送一個請求,請求外網中的其中一台主機,這樣會形成的結果就是它會在NAT服務上打 一個洞,這樣會形成一個外網的IP位址和端口,那麼形成了外網的IP位址和端口之後,其他的主機隻要獲得了這個IP位址和端口它都可以向它發送資料。并且可以順利的通過防火牆發送給内網的主機。這樣就可以進行通訊了,這是完全錐型,也是最好穿越的一種 NAT類型。但是安全性就差很多。

位址限制錐型NAT

WebRTC網絡基礎 九、第二節 NAT打洞原理

它的安全性好一些,它會在防火牆上形成一個五元組,就是内網主機的IP位址和端口和映射後的公網IP位址和端口以及我要請求的這個主機IP位址,他們首先有一個公共的步驟,第一步就是要先由内網的主機向外網發送一個請求,在這個防火牆上或者NAT服務上形成一個映射表,那形成之後外網的主機就可以和内網的主機進行通訊了。

如圖所示,它首先向P的主機發送請求,那麼P就可以通過不同的端口向内網的主機發送消息它都是可以接受到的,但是對于其他主機來說,由于IP位址的限制,它傳回來的時候,一看IP位址不對,就會被攔掉。隻有P的主機是可以通過的,而且它的各個主機都可以跟它進行通訊。這就是位址限制型,這個位址限制型的打通,首先就是這個内網主機無論跟哪個主機進行打通,首先它都要發送 一個請求,發送請求之後就形成了所謂的映射表在我們的網關上。其他主機就可以給它通訊了。這是位址限制型NAT。

端口限制錐型NAT

WebRTC網絡基礎 九、第二節 NAT打洞原理

端口限制型就更加嚴格一些了,不光是對IP位址,還要對端口做限制,那是以在這個防火牆上就形成了六元組,不光有内網的IP位址和端口以及映射後的公網的IP位址和端口,還有你請求的主機的IP位址和端口,那麼在在這種情況下P這台主機,它發送消息的時候,如果請求的是P這台主機的這個q這個端口的服務,隻有它這個服務才能返來,其他的端口(如:r端口)發送資料就不行了。

那如果内網的主機沒有向S這個主機發送請求的話,S主機發送資訊到内網的主機是肯定不通的;但是如果内網的主機給M這台主機的n端口已經發送了請求,那麼M主機的n端口也是可以打通這個資料防火牆然後與這個内網主機進行通訊的。這就是端口限制錐型NAT。

對稱型NAT

WebRTC網絡基礎 九、第二節 NAT打洞原理

對稱限制型就更加嚴格了,以前的類型是在防火牆上形成映射後的公網的IP位址是保持不變的,大家要找還是能找到它的,雖然不 通,但是對于 這個對稱型它就不一樣了,它就發生了變化,不光是形成了這個一個IP位址和端口,而且還會形成多個,對于每一台主機都會形成一個不同的IP位址和端口對,是以這個 時候當内網主機給Pq發送請求的時候,Pq可以回來資訊,其他的都回不來。但是給M主機 n端口發送資料的時候,又形成一個C和d,這個M,n在發資料的時候不會像A,b發送資料,必須向C,d發送資料 才可以過來,這樣才能進行互通,這個就是對稱型的NAT穿越。這個就是對稱型的NAT穿越。

下面我們在來看看NAT穿越的基本步驟

NAT穿越原理

C1,C2向STUN發消息

交換公網IP及端口

我們要進行穿越其實是兩台主機直接進行穿越,也就是C1,C2之間進行穿越。C1和C2之間進行穿越首先C2要知道C1的位址,C1要知道C2的位址,那就要通過STUN服務發送消息,STUN收到他們的消息之後就會拿到它們對應的公網的IP和端口;是以這個時候要進行資訊交換,就是将C1的公網IP和端口交給C2,将C2的公網IP和端口交給C1;交換完這些資訊之後,我們就要按照類型進行打通,如果是完全錐型的,他們就直接可以進行通訊了,已經具有公網的IP和端口了。

對于完全錐型,隻要我在防火牆上建立一個映射,那任何一台主機,如果我們把STUN當作一台主機的話,那C2就可以通過C1和STUN之間的這個公網的映射然後去發送資料。

對于IP位址限制錐型,STUN 不能用這個IP位址給這個C1發消息,那因為C1是知道C2的公網IP和端口,是以首先C1向C2發送一個請求 ,C2在利用C1形成的這個IP位址和端口給它傳回資料,這樣他們也是可以互通的。

對于端口限制型其實也一樣的,都可以通過這種方式。

C1->C2,C2->C1,甚至是端口猜測

那麼對于對稱型NAT就比較麻煩了,對于對稱型NAT來說,由于是IP位址和端口的變化 ,那更多的是端口的随機性和增長,就是說線性增長的變化,是以并不能直接進行互通,那怎麼才能通呢?其實也是有辦法的,就是通過端口猜測的方式,就是通過幾次的探測,然後找到它端口配置設定的規律,它是線性增長的,比如每次增1,或者每次增2等,還是一個 随機的,随機數是在 一定範圍的,不可能所有端口都随機,在這些随機的端口範圍内,實際它每一個都做一次嘗試,那麼這個時候就有可能打通,那麼這種打通的機率就低很多。

這個就是整個NAT穿越的基本原理。

下面我們再來看一看組合