WebRTC(七) NAT類型及檢測

WebRTC中P2P的傳輸是很重要的一部分。而NAT的穿越過程對於P2P的傳輸也很重要。

1 NAT簡介

NAT全稱network adress translation,即網絡地址轉換。其存在的意義是將私有的IP地址轉化爲公有IP地址。
NAT圖示

2 爲什麼會存在NAT

所有的內網都改爲公網地址難道不可以嗎?一方面是因爲起初公網的IPv4的地址不夠用,另一方面是防止其他主機或者電腦直接訪問公網上的電腦,起到一定的安全作用。另

3 NAT的種類

既然上面說了,NAT存在的目的一方面是因爲訪問安全。那麼按照安全等級劃分,既和其他外網主機的通訊的限制類型可劃分爲四種類型。即完全錐型,IP限制型,端口限制性,對稱型。下面對四種類型作簡要介紹:
假設現有:
內網的主機X: IP爲10.21.0.23 端口號爲8888, NAT後的映射IP爲10.3.02.45 端口號爲2222

公網主機M: IP爲192.45.80.43 端口號爲 1111
公網主機P: IP爲192.45.80.44 端口號爲 2222
公網主機S: IP爲192.45.80.45 端口號爲 3333

3.1 完全錐型NAT(full cone nat)😗

無論私網主機之前是否向公網Ip發送過數據,私網主機都能接收到公網主機發送的數據。
示例: 私網主機X先訪問公網主機M,主機X能成功收到M發送的數據,並且主機X在沒有向主機P發送數據的情況下,也能收到另一臺主機P發送的數據。
完全錐型NAT

3.2 IP限制錐型NAT(adress restricted cone nat)

私網主機只有先向公網主機發送數據之後,才能接收到公網主機發送的數據。否則接收不到。
示例: 私網主機X向公網主機P發送數據,然後X能接收到P發送的數據
在之前沒有向M發送過數據時,無法接收來自M的數據。
地址限制型NAT

3.3 端口限制錐型NAT(port restricted cone nat)*

私網主機只有先向公網主機的某一個端口號發送數據之後,才能接收到公網主機的這一端口號發送的數據。接收數據的公網主機更換端口號,則私網主機接收不到。
示例: 主機X先向主機P的q端口發送數據,然後只X只能接收到來自主機P的q端口的數據。
端口限制型NAT

3.4 對稱型NAT(sysmmetric nat)

私網主機請求指定的公網主機和端口號之後,後續只能接收來自此公網主機的端口號發送來的數據。更換主機和端口號向私網主機發送數據,私網主機都接收不到。

示例: 私網主機X經過NAT先訪問公網上主機P(端口號爲q),然後主機能接收到來自P(端口號爲q)響應的數據。同樣過程訪問M(端口號爲n),也能接收到來自M的數據。但是對於沒有請求過的主機S,如果S向主機X發送數據,則接收不到。說明此NAT類型爲對稱型。

和端口限制型不同的是,此種類型的轉換會對每一個請求都有一個公網的IP和端口號的映射。而端口限制型還是公用一個映射後的公網IP和端口號。
對稱型NAT

4 NAT類型檢測

在P2P的傳輸過程中,首先要在端對端傳輸之前要先建立一條通道。而這條通道的建立首先要知道NAT的類型,這樣才能知道如何打通這條通道。

NAT類型檢測要首先要了解STUN服務。使用STUN服務和處於NAT之後的客戶端建立一個連接,然後通過一些列的策略來判斷NAT的類型。

STUN(Simple Traversal Of UDP Through NAT 或 Session Traversal Utilities for NAT)是用來穿越NAT的協議。它允許位於NAT(或多重NAT)後的客戶 端找出自己的公網地址,查出自己位於哪種類型的NAT之後以及NAT爲某一個本地端口所綁定的Internet端端口。這些信息被用來在兩個同時處於 NAT路由器之後的主機之間建立UDP通信。

下面介紹如何通過STUN服務來檢測NAT類型。

4.1 確認網絡連接狀態

首先Client向Server發送一個請求,Server以相同的IP和port回覆。如果client收到了回覆,則說明網絡狀態正常。否則說明UDP的連接被阻塞

4.2 檢查是否是在NAT之後

在確認UDP的連接狀態是正常的之後,client再判斷server接收到的client的ip和port和client請求時的ip和port是否一致。如果不一致說明是經歷了NAT轉換。一致說明沒有經過NAT轉換。

4.3 沒有經過NAT轉換

如果沒有經過NAT轉換,那麼client再想同一個Server再次發送請求,然後Server以不同的IP和Port回覆。如果client收到了回覆則說明client本身處於公網IP,否則說明存在網絡防火牆。

4.4 經過了NAT轉換

4.4.1 檢查是否是完全錐類型NAT

當前已經知道Client在NAT之後,此時Client向Server發送請求,Server以不同的Ip和Port回覆,如果client收到了回覆,則說明是完全錐類型NAT

4.4.2 檢查是否是對稱型NAT

由於對稱型NAT的特徵比較明顯,每次發送出去的請求都會由私網Ip和Port映射出一個公網的Ip和Port。所以只要判斷向Server1請求時,本身的公網Ip和Port和向Server2請求時的公網Ip是否是同一個。如果不是同一個Ip和Port。則說明NAT類型是對稱型NAT。

4.4.3 判斷是否是端口限制型NAT

當前已經知道NAT類型不是對稱型NAT。此時當client向Server發送請求時,Server以相同的Ip和不同的Port回覆,如果client能收到回覆,則說明是Port限制型NAT。

4.4.4 判斷是否是IP限制型NAT

如果client能收到回覆說明是IP限制型NAT。

5 完整過程圖示

NAT檢測

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章