我們看看不同NAT之間的NAT打洞。NAT打洞需要Server配合,需要2種Server:
1. 類似WebRTC中的信令服務(wù)器,作用是幫助客戶機(jī)溝通IP和PORT信息;
2. STUN Server,用來讓客戶機(jī)判斷自己所在的NAT環(huán)境。
現(xiàn)在假設(shè)客戶端和Server的通訊都沒問題,客戶端知道自己所處環(huán)境,并且將自己的信息通過服務(wù)器發(fā)送給了另一方客戶端,它們可能的打洞情況如下:
1. Full Cone NAT 與 Full Cone NAT:通訊很容易,各自通過STUN Server獲取外部IP和Port后,通過信令服務(wù)器通知另一方,即可通訊。

2. Full Cone NAT 與 Restricted Cone NAT或Port Restricted Cone NAT在互相告知IP和Port后,如果由Full Cone NAT端先發(fā)送數(shù)據(jù)包,會(huì)失敗,必須由Restricted Cone NAT或Port Restricted Cone NAT端先發(fā)送數(shù)據(jù)包給Full Cone NAT,之后雙方即可互相通訊。

3. Full Cone NAT 與 Symmetric NAT通訊時(shí),必須先由Symmetric NAT端發(fā)送數(shù)據(jù)包給Full Cone NAT端,F(xiàn)ull Cone NAT端通過發(fā)來的數(shù)據(jù)包獲得目標(biāo)的新端口號(hào),之后通過這個(gè)新端口號(hào)完成互相通訊。

4. Restricted Cone NAT 與 Restricted Cone NAT、Restricted Cone NAT 與 Port Restricted Cone NAT、Port Restricted Cone NAT 與 Port Restricted Cone NAT之間通訊時(shí),先發(fā)送數(shù)據(jù)包的一方會(huì)失敗,之后另一方發(fā)送數(shù)據(jù)包成功后,可互相通訊。

5. Restricted Cone NAT 與 Symmetric NAT通訊時(shí),先由Restricted Cone NAT發(fā)送數(shù)據(jù)包給Symmetric NAT,發(fā)送數(shù)據(jù)會(huì)失敗,只是為了下次能接收從Symmetric NAT端發(fā)送過來的數(shù)據(jù)包。然后由Symmetric NAT發(fā)送數(shù)據(jù)包到Restricted Cone NAT端,Restricted Cone NAT端會(huì)收到數(shù)據(jù)包,并且將新的端口號(hào)記下,使用新的端口號(hào)可與Symmetric NAT端通訊。

6. Port Restricted Cone NAT 與 Symmetric NAT通訊時(shí),由于Port Restricted Cone NAT會(huì)對(duì)IP:PORT對(duì)進(jìn)行限制,所以當(dāng)Symmetric NAT端使用新PORT發(fā)來數(shù)據(jù)包時(shí),Port Restricted Cone NAT端收不到,它們之間無法通訊。

7. Symmetric NAT 與 Symmetric NAT也無法通訊 。
