家裡面的移動給的是內網ip,比如會對ps4聯機造成影響,我想了計網層面了解一下原因,網上搜了也沒有具體原因,是和什麼nat埠類型有關嗎?比如什麼圓錐型,對稱性


傳統的客戶/伺服器模式通信

傳統的客戶/伺服器模式通信,有一點是不變的,即伺服器的IP地址以及服務的埠號是固定不變的。那麼無論客戶的IP地址、埠號怎麼變化,客戶端可以根據伺服器固定不變的IP、埠號,來輕鬆找到伺服器並完成通信。

P2P通信模式

P2P通信模式,由於是客戶端與客戶端通信,而客戶端的IP地址、埠是動態變化的,那麼第一個面臨的挑戰就是,如何讓IP地址、埠動態改變的客戶端A找到同樣IP地址、埠動態改變的客戶端B,如果能找到,那麼A就可以與B完成通信。

伺服器中介S

A與B想完成交易,就如同A想賣自己的房子,而要在茫茫人海中找到想買房子的B,怎麼找呢?

很簡單啊,只要A將自己的聯繫方式在房產中介S那裡登記,想買房子的B,也去房產中介S出完成聯繫方式登記。

因為房產中介的地址是固定不變的,客戶A、B、C、。。。N都可以輕鬆找到S。

在計算機通信中,也引入了伺服器中介S,用於客戶ABC之間的聯繫方式的分發,等A與B有了彼此的聯繫方式,自然就無需中介S,可以實現AB之間的P2P通信。

三方通信

假設S = 9.9.9.9:9999

A =1.1.1.1:1111

B =2.2.2.2:2222

S收集了A、B的聯繫方式並告知彼此,A 就可以與B (2.2.2.2:2222)通信,同時B也可以與A(1.1.1.1:1111)通信,這是一個不錯的解決方案。

NAT設備的不同工作方式

(1) 不限外部IP,不限埠

NAT表原型

(1.1.1.1, 1111, *, *)

(2) 限IP,不限埠

NAT表原型

(1.1.1.1, 1111, 9.9.9.9, *)

(3) 限IP,限埠

NAT表原型

(1.1.1.1, 1111,9.9.9.9,9999)

(4) 對稱型

NAT表原型

(1.1.1.1, 1111, 9.9.9.9, 9999)

(1.1.1.1, 1234, 2.2.2.2, 2222)

上文NAT的種種不同實現方式,只有(1)可以保證客戶A與S、以及與B通信的IP地址+埠號不變,且允許通信。

其它的方式,要麼A與S,A與B的聯繫方式不變,但NAT卻限制了A與B的通信。

要麼A與B的通信信息與A與S的通信信息不一樣,那麼B拿著A過期的信息,自然也無法與A通信。

解決方案

凡是A與B無法完成P2P通信的場景,只要超時Fallback到A與S的通信,然後S把A的通信內容中轉給B的方式。同理,也可以把B的通信數據中轉發給A。


簡單的說,P2P是IP對IP的,但是因為公網IP並不能滿足每一個上網的用戶,於是便有了路由器,每個路由器擁有一個IP(不一定是公網IP),然後路由器後面接著你的手機,電腦,PS4等等,也就是說,這些設備共享路由器那一個IP地址。這就是NAT。一般而言目前的路由器的NAT方式是通過埠的,即路由器後面的設備先發起一個請求,路由器會為你分配一個埠,這個埠在一段時間內與你的設備是綁定的(一般就幾分鐘),如果這個埠上沒有流量了,這個通路就斷了。這個模型就會造成一個問題,只有當你先主動去找別人的時候,別人才知道怎麼找你,如果你從來沒有找過別人,別人就找不到你。如果一方在路由器後(稱為A),另一方有公網IP(稱為B),A可以主動發起連接到B的請求,B可以根據這個請求回複數據,A和B就能夠建立聯繫了,但是如果A沒有發起連接B的請求,B就不能主動連接A。此時A在PS4中一般叫做類型2,B叫做類型1。同樣,如果兩個人都在路由器後,理論來說雙方誰也找不到誰,但是這種情況又很普遍,所以一般會有一個中間搭橋的伺服器,A與B都連一下這個伺服器,交換一下雙方的臨時埠號,這樣雙方就可以點對點聯繫了。但是因為公網IP比較稀有,所以有一些運營商就會再加一層NAT設備,把一個公網IP分給若干台路由器用,每個路由器後面又有若干台設備,此時,互相想要連接就會變得極其複雜,NAT類型也會降級。遊戲效果就會變差

所謂的錐形NAT,就是指的路由器上面的一個埠對應外面多個連接,這樣看就像是一個錐子。定點是路由器的某個埠

當NAT開始,客戶端的某個PORT與路由器的某個port建立好聯繫後,就出現後面幾種類型

假設你作為玩家A,通過路由器的1234發出去了一個數據,連接上了玩家B,此時玩家C得知了你的信息,也向1234發送消息想要和你連接,如果:

0、你雖然從未和C連接過,但是你的PS4的某個埠已經和路由器1234的埠建立了聯繫,那麼路由器就會把C發到1234的信息無條件的轉發給你,這樣的話,就是全錐形,效果最好,對應到PS4上就是NAT類型1,XBOX上就是開放,switch上就是NAT B

1、因為你沒主動和C連接過,所以路由器把C發給1234的包丟棄了,但是因為你主動和B連接過,所以就把B發給你的包轉發給了你,這樣的話,叫做首先錐形,效果會差一些,副作用就是你沒連接過的玩家無法連接到你,比如,你建立的遊戲房間,C可能不能進入你的房間,對應到PS4上就是NAT類型2,XBOX上是中等,switch上是NAT C

2、你之前沒有和C連接過,所以路由器把C發給1234的包丟棄了,雖然你主動和B連接過,但是你連接的是B的4321埠,而這次的報文是B從4322發過來的,不予轉發,丟棄。這種就叫做埠首先錐形。這種基本玩遊戲很困難,因為往往遊戲數據並不止使用一個埠連接,也有可能能玩遊戲但是不能語音等等,對應到PS4上就是類型3,XBOX上是嚴格,switch上是NAT D

摘抄一段各種NAT類型的介紹

1:

client(192.168.0.3, 100)和server(1.1.1.1, 1111)在路由器上建立好映射關係後,如果client(192.168.0.3, 100)又給(2.2.2.2, 2222)發送數據,路由器該怎麼處理呢?

1, 復用舊的映射關係(8.8.8.8, 800)&(192.168.0.3, 100)和(2.2.2.2, 2222)通信, 這就是錐型(Cone) NAT

2, 創建新的映射關係(8.8.8.8, 801)&(192.168.0.3, 100)和(2.2.2.2, 2222)通信, 這就是對稱型NAT

注: (8.8.8.8, 801)只是舉例,到底用什麼埠取決於路由器的埠管理策略,總之是另外的一個埠,有的路由器有多個公網IP,不同的IP也會參與到這個映射關係中。

2:

client(192.168.0.3, 100)和server(1.1.1.1, 1111)在路由器上建立好映射關係後,如果這個時候路由器(8.8.8.8)在800埠上收到從另外一台server(2.2.2.2, 2222)發來的數據,是不是應該轉發給(192.168.0.3, 100)呢?

有四種情況:

1, 無條件轉發給(192.168.0.3, 100), 這就是全錐型(Full Cone)NAT。

2, 如果(192.168.0.3, 100)之前給(2.2.2.2)發送過數據,則轉發, 這就是受限錐型(Restricted Cone)。

3, 如果(192.168.0.3, 100)之前給(2.2.2.2, 2222)發送過數據,則轉發, 這就是埠受限錐型(Port Restricted Cone)。

4, 丟棄報文,拒絕轉發, 這就是對稱型NAT。

從上面也描述也可以看出,安全性係數, 對稱型 &> 埠受限錐型 &> 受限錐型 &> 全錐型

---------------------

作者:mycloudpeak

來源:CSDN

原文:NAT的四種類型 - mycloudpeak的博客 - CSDN博客

版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


一般大眾化的p2p軟體在網關地址轉換產生的影響是可以忽略的,因為有udp穿透與upnp


推薦閱讀:
相关文章