NAT型別有三種情況:
1、NAT1是指直連的
2、NAT2是透過路由器連線
3、網路型別為NAT3的意思是一些功能受限,電腦不能參加聯機,參加派對不能說話,相當於自己給自己關小黑屋。
NAT型別檢測
前提條件:有一個公網的Server並且綁定了兩個公網IP(IP-1,IP-2)。這個Server做UDP監聽(IP-1,Port-1),(IP-2,Port-2)並根據客戶端的要求進行應答。
第一步:檢測客戶端是否有能力進行UDP通訊以及客戶端是否位於NAT後?
1、客戶端建立UDP socket然後用這個socket向伺服器的(IP-1,Port-1)傳送資料包要求伺服器返回客戶端的IP和Port,
客戶端傳送請求後立即開始接受資料包,要設定socket Timeout(300ms),防止無限堵塞.
重複這個過程若干次。如果每次都超時,無法接受到伺服器的迴應,則說明客戶端無法進行UDP通訊,可能是防火牆或NAT阻止UDP通訊,這樣的客戶端也就
不能P2P了(檢測停止)。
2、當客戶端能夠接收到伺服器的迴應時,需要把伺服器返回的客戶端(IP,Port)和這個客戶端socket的
(LocalIP,LocalPort)比較。如果完全相同則客戶端不在NAT後,這樣的客戶端具有公網IP可以直接監聽UDP埠接收資料進行通訊(檢
測停止)。否則客戶端在NAT後要做進一步的NAT型別檢測(繼續)。
第二步:檢測客戶端NAT是否是Full Cone NAT?
客戶端建立UDP
socket然後用這個socket向伺服器的(IP-1,Port-1)傳送資料包要求伺服器用另一對(IP-2,Port-2)響應客戶端的請求往回
發一個數據包,客戶端傳送請求後立即開始接受資料包,要設定socket Timeout(300ms),防止無限堵塞.
重複這個過程若干次。如果每次都超時,無法接受到伺服器的迴應,則說明客戶端的NAT不是一個Full Cone
NAT,具體型別有待下一步檢測(繼續)。如果能夠接受到伺服器從(IP-2,Port-2)返回的應答UDP包,則說明客戶端是一個Full
Cone NAT,這樣的客戶端能夠進行UDP-P2P通訊(檢測停止)。
第三步:檢測客戶端NAT是否是Symmetric NAT?
重複這個過程直到收到迴應(一定能夠收到,因為第一步保證了這個客戶端可以進行UDP通訊)。
2、用同樣的方法用一個socket向伺服器的(IP-2,Port-2)傳送資料包要求伺服器返回客戶端的IP和Port。
3、比較上面兩個過程從伺服器返回的客戶端(IP,Port),如果兩個過程返回的(IP,Port)有一對不同則說明客戶端為Symmetric
NAT,這樣的客戶端無法進行UDP-P2P通訊(檢測停止)。否則是Restricted Cone NAT,是否為Port Restricted
Cone NAT有待檢測(繼續)。
第四步:檢測客戶端NAT是否是Restricted Cone NAT還是Port Restricted Cone NAT?
socket然後用這個socket向伺服器的(IP-1,Port-1)傳送資料包要求伺服器用IP-1和一個不同於Port-1的埠傳送一個UDP
資料包響應客戶端, 客戶端傳送請求後立即開始接受資料包,要設定socket Timeout(300ms),防止無限堵塞.
重複這個過程若干次。如果每次都超時,無法接受到伺服器的迴應,則說明客戶端是一個Port Restricted Cone
NAT,如果能夠收到伺服器的響應則說明客戶端是一個Restricted Cone NAT。以上兩種NAT都可以進行UDP-P2P通訊。
注:以上檢測過程中只說明瞭可否進行UDP-P2P的打洞通訊,具體怎麼通訊一般要藉助於Rendezvous Server。另外對於Symmetric NAT不是說完全不能進行UDP-P2P達洞通訊,可以進行埠預測打洞,不過不能保證成功。
NAT型別有三種情況:
1、NAT1是指直連的
2、NAT2是透過路由器連線
3、網路型別為NAT3的意思是一些功能受限,電腦不能參加聯機,參加派對不能說話,相當於自己給自己關小黑屋。
NAT型別檢測
前提條件:有一個公網的Server並且綁定了兩個公網IP(IP-1,IP-2)。這個Server做UDP監聽(IP-1,Port-1),(IP-2,Port-2)並根據客戶端的要求進行應答。
第一步:檢測客戶端是否有能力進行UDP通訊以及客戶端是否位於NAT後?
1、客戶端建立UDP socket然後用這個socket向伺服器的(IP-1,Port-1)傳送資料包要求伺服器返回客戶端的IP和Port,
客戶端傳送請求後立即開始接受資料包,要設定socket Timeout(300ms),防止無限堵塞.
重複這個過程若干次。如果每次都超時,無法接受到伺服器的迴應,則說明客戶端無法進行UDP通訊,可能是防火牆或NAT阻止UDP通訊,這樣的客戶端也就
不能P2P了(檢測停止)。
2、當客戶端能夠接收到伺服器的迴應時,需要把伺服器返回的客戶端(IP,Port)和這個客戶端socket的
(LocalIP,LocalPort)比較。如果完全相同則客戶端不在NAT後,這樣的客戶端具有公網IP可以直接監聽UDP埠接收資料進行通訊(檢
測停止)。否則客戶端在NAT後要做進一步的NAT型別檢測(繼續)。
第二步:檢測客戶端NAT是否是Full Cone NAT?
客戶端建立UDP
socket然後用這個socket向伺服器的(IP-1,Port-1)傳送資料包要求伺服器用另一對(IP-2,Port-2)響應客戶端的請求往回
發一個數據包,客戶端傳送請求後立即開始接受資料包,要設定socket Timeout(300ms),防止無限堵塞.
重複這個過程若干次。如果每次都超時,無法接受到伺服器的迴應,則說明客戶端的NAT不是一個Full Cone
NAT,具體型別有待下一步檢測(繼續)。如果能夠接受到伺服器從(IP-2,Port-2)返回的應答UDP包,則說明客戶端是一個Full
Cone NAT,這樣的客戶端能夠進行UDP-P2P通訊(檢測停止)。
第三步:檢測客戶端NAT是否是Symmetric NAT?
1、客戶端建立UDP socket然後用這個socket向伺服器的(IP-1,Port-1)傳送資料包要求伺服器返回客戶端的IP和Port,
客戶端傳送請求後立即開始接受資料包,要設定socket Timeout(300ms),防止無限堵塞.
重複這個過程直到收到迴應(一定能夠收到,因為第一步保證了這個客戶端可以進行UDP通訊)。
2、用同樣的方法用一個socket向伺服器的(IP-2,Port-2)傳送資料包要求伺服器返回客戶端的IP和Port。
3、比較上面兩個過程從伺服器返回的客戶端(IP,Port),如果兩個過程返回的(IP,Port)有一對不同則說明客戶端為Symmetric
NAT,這樣的客戶端無法進行UDP-P2P通訊(檢測停止)。否則是Restricted Cone NAT,是否為Port Restricted
Cone NAT有待檢測(繼續)。
第四步:檢測客戶端NAT是否是Restricted Cone NAT還是Port Restricted Cone NAT?
客戶端建立UDP
socket然後用這個socket向伺服器的(IP-1,Port-1)傳送資料包要求伺服器用IP-1和一個不同於Port-1的埠傳送一個UDP
資料包響應客戶端, 客戶端傳送請求後立即開始接受資料包,要設定socket Timeout(300ms),防止無限堵塞.
重複這個過程若干次。如果每次都超時,無法接受到伺服器的迴應,則說明客戶端是一個Port Restricted Cone
NAT,如果能夠收到伺服器的響應則說明客戶端是一個Restricted Cone NAT。以上兩種NAT都可以進行UDP-P2P通訊。
注:以上檢測過程中只說明瞭可否進行UDP-P2P的打洞通訊,具體怎麼通訊一般要藉助於Rendezvous Server。另外對於Symmetric NAT不是說完全不能進行UDP-P2P達洞通訊,可以進行埠預測打洞,不過不能保證成功。