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

2021-10-08 01:48:44 字數 1858 閱讀 8067

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

nat一共有四種型別,分別是完全錐型nat (full cone nat)、位址限制錐型nat(address  restricted cone nat)、埠限制錐型nat (port restricted cone nat)、對稱型nat (symmetric nat),對nat穿越來說,其實每一種穿越都不一樣,下面我就來看一下每一種不同型別,如何進行nat穿越。

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

對稱限制型就更加嚴格了,以前的型別是在防火牆上形成對映後的公網的ip位址是保持不變的,大家要找還是能找到它的,雖然不 通,但是對於 這個對稱型它就不一樣了,它就發生了變化,不光是形成了這個乙個ip位址和埠,而且還會形成多個,對於每一台主機都會形成乙個不同的ip位址和埠對,所以這個 時候當內網主機給pq傳送請求的時候,pq可以回來資訊,其他的都回不來。但是給m主機 n埠傳送資料的時候,又形成乙個c和d,這個m,n在發資料的時候不會像a,b傳送資料,必須向c,d傳送資料 才可以過來,這樣才能進行互通,這個就是對稱型的nat穿越。這個就是對稱型的nat穿越。

nat穿越原理

c1,c2向stun發訊息

交換公網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穿越的基本原理。

下面我們再來看一看組合

哪些是可以穿越成功,哪些是不成的,這裡有一張表 ,那通過上表我就可以 知道哪些是可以通過p2p打洞成功的,哪些是完全不能打通的,當我們檢測到一端是埠受限錐型一端是對稱型或者兩端都是對稱型,那肯定是不可以打通的,肯定是不可以的。

以上就是nat穿越的基本原理。

彙編 第二節

第二節 cpu主要有有運算器,控制器,暫存器,三部分組成 8086 cpu有14個暫存器,如ax,bx,cx,dx,si。8086所有暫存器都是16位的,可以存放2個byte即位元組,16位二進位制數 所能存放的最大數值是 11111111111 2 16 1 從0開始,所以 1嘛 通用暫存器為4個...

函式第二節

coding utf 8 1.定義乙個方法get num num num引數是列表型別,判斷列表裡面的元素為數字型別。其他型別則報錯,並且返回乙個偶數列表 注 列表裡面的元素為偶數 def get num l l for i in l 判斷列表l的元素是否都為整形 if not isinstance...

第二節練習

a b 2 鏈式賦值 print a print b c id a 位址print c c type a 型別 print c a,b 2,3 系列解包賦值 a,b b,a print a print b 基本運算 print 3 2 print 30 5 print 30 5 print 30 5...