日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NTA打洞

發布時間:2024/1/17 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NTA打洞 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

只有一方處于NAT設備后

此種情況是所有P2P場景中最簡單的,它使用一種被稱為“反向鏈接技術”來解決這個問題。大致的原理如下所述。

如圖所示,客戶端A位于NAT之后,它通過TCP端口1234連接到服務器的TCP端口1235上,NAT設備為這個連接重新分配了TCP端口62000。客戶端B也通過TCP端口1234連接到服務器端口1235上。A和B從服務器處獲知的對方的外網地址二元組{IP地址:端口號}分別為{138.76.29.7:1234}和{155.99.25.11:62000},它們在各自的本地端口上進行偵聽。

由于B 擁有外網IP地址,所以A要發起與B的通信,可以直接通過TCP連接到B。但如果B嘗試通過TCP連接到A進行P2P通信,則會失敗,原因是A位于NAT設備后,雖然B發出的TCP SYN請求能夠到達NAT設備的端口62000,但NAT設備會拒絕這個連接請求。要想與Client A通信, B不是直接向A發起連接,而是通過服務器給A轉發一個連接請求,反過來請求A連接到B(即進行反向鏈接),A在收到從服務器轉發過來的請求以后,會主動向B發起一個TCP的連接請求,這樣在NAT設備上就會建立起關于這個連接的相關表項,使A和B之間能夠正常通信,從而建立起它們之間的TCP連接。

雙方都處于NAT后設備后

NAT設備部署情況

兩客戶端都處于NAT設備背后也有很多情況,如: 1,都處在同一NAT設備后. 2,隨直連的不是同一個NAT設備,中間有很多NAT轉接,但頂端接入公網ip的NAT(網絡服務商的路由)是同一個.

像第一種情況,就是在同一個以太網中,這種可以直接使用內網ip進行直連最優. 但是想第二種情況,因為嵌套在不同的內網中,都使用的保留ip地址,或許會存在與客戶端本身所在的內網地址重復的可能性,所以還是以外網ip+端口來進行打洞最為穩妥.

因為有Hairpin技術,它可以讓兩臺位于同一臺NAT網關后面的主機,通過對方的公網端口互相訪問.

ICE

ICE的全稱Interactive Connectivity Establishment(互動式連接建立),由IETF的MMUSIC工作組開發出來的,它所提供的是一種框架,使各種NAT穿透技術可以實現統一。ICE跟STUN和TURN不一樣,ICE不是一種協議,而是一個框架(Framework),它整合了STUN和TURN。

TURN

TURN(Traversal Using Relays around NAT)TURN與STUN的共同點都是通過修改應用層中的私網地址達到NAT穿透的效果,異同點是TURN是通過兩方通訊的“中間人”方式實現穿透

TURN服務器相比較STUN服務器,多了中繼的功能,對于無法端對端的服務器,可以進包轉發

STUN

STUN服務器(Simple Traversal of User Datagram Protocol Through Network Address Translators)是一個輕量級協議,是基于UDP的完整的穿透NAT的解決方案.在進行NAT穿透時我們需要STUN服務器.

STUN服務器主要做了兩件事:

1, 判斷客戶端的NAT類型(NAT分四種類型) 2, 接受客戶端的請求,返回其需要連接的外網地址 3, 協調客戶端間打洞

具體實現

是否處于NAT后(作為iOS肯定是在NAT后的,不用判斷的)

客戶端向STUN服務器發送UDP包,STUN將收到的包的IP包在UDP包中進行返回,客戶端收到包后和自己的IP做比較,不一樣則處在NAT后.

判斷NAT類型

當處在NAT后則要判斷NAT類型,為了判斷STUN服務器需要兩個ip,ip1和ip2.

客戶端當得知自己處在NAT設備后時,再向服務端ip1發送判斷請求.

1, FULL Cone NAT

服務器收到后從ip2向客戶端的公網ip發送包,若客戶端能收到,則為 完全雛形NAT.

2, 判斷是否為 對稱NAT

客戶端再從不同的port 想服務端發包,若客戶端收到的外網端口(此處的端口號是指NAT表中ip后對應的端口號,而不是主機為外網服務的端口號)不一致,則為對稱NAT,一致則不為對稱NAT

3, Restrict Cone NAT /Port Restrict NAT

服務端從ip1的不同端口向客戶端發包,若客戶端收到 則為Restrict Cone NAT,收不到則為 Port RestrictNAT.

協調打洞

1, Full Cone NAT

此時什么都不需要STUN做,只要知道對方公網ip+端口號 客戶端間可以直接通訊

2, Restrict Cone 或 Port Restrict

此時需要TURN服務器協調兩客戶端互相向對方公網ip發包, 因為在NAT設備看起來,互相發包都是在向公網發包,這時在NAT表上就會開啟對指定外網ip+端口號的通道.這樣就完成了打洞

3, 對稱NAT

對于對稱NAT是無法打洞的,因為客戶端向STUN服務器發包的外網ip+端口號 與向其他客戶端發包的外網ip+端口號是不一樣的.所以無法溝通,這時就需要TURN服務器,兩個客戶端都對其進行長連接,進行包的轉發.

參考鏈接

http://www.52im.net/thread-542-1-1.html http://www.52im.net/thread-557-1-1.html http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/Home/Catalog/201206/747038_97665_0.htm

總結

以上是生活随笔為你收集整理的NTA打洞的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。