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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NAT STURN,ICE

發(fā)布時間:2024/4/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NAT STURN,ICE 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

NAT原理與NAT穿越

最近在看東西的時候發(fā)現(xiàn)很多網(wǎng)絡(luò)程序中都需要NAT穿越,特意在此總結(jié)一下。

先做一個約定:

內(nèi)網(wǎng)A中有:A1(192.168.0.8A2(192.168.0.9兩用戶

?????????????? 網(wǎng)關(guān)X1(一個NAT設(shè)備)有公網(wǎng)IP?1.2.3.4

內(nèi)網(wǎng)B中有:B1(192.168.1.8、B2(192.168.1.9兩用戶,

?????????????? 網(wǎng)關(guān)Y1(一個NAT設(shè)備)有公網(wǎng)IP?1.2.3.5

公網(wǎng)服務(wù)器:C (6.7.8.9) D (6.7.8.10)

  • NAT原理

???? 網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT,Network Address Translation)屬接入廣域網(wǎng)(WAN)技術(shù),是一種將私有(保留)地址轉(zhuǎn)化為合法IP地址的轉(zhuǎn)換技術(shù)。下面介紹兩類不同方式實(shí)現(xiàn)的NAT:

  • NAT(Network Address Translators):稱為基本的NAT
  • 在客戶機(jī)時????? 192.168.0.8:4000——6.7.8.9:8000

    在網(wǎng)關(guān)時???????? 1.2.3.4:4000——6.7.8.9:8000

    服務(wù)器C????????? 6.7.8.9:8000

    其核心是替換IP地址而不是端口,這會導(dǎo)致192.168.0.8使用4000端口后,192.168.0.9如何處理?具體參考RFC 1631

    基本上這種類型的NAT設(shè)備已經(jīng)很少了?;蛟S根本我們就沒機(jī)會見到。

    ???? 2.?? NAPT(Network Address/Port Translators):其實(shí)這種才是我們常說的 NAT

    NAPT的特點(diǎn)是在網(wǎng)關(guān)時,會使用網(wǎng)關(guān)的 IP,但端口會選擇一個和臨時會話對應(yīng)的臨時端口。如下圖:

    在客戶機(jī)時?????????? 192.168.0.8:4000——6.7.8.9:8000

    在網(wǎng)關(guān)時????????????? 1.2.3.4:62000——6.7.8.9:8000

    服務(wù)器C?????????????? 6.7.8.9:8000

    網(wǎng)關(guān)上建立保持了一個1.2.3.4:62000的會話,用于192.168.0.8:4000與6.7.8.9:8000之間的通訊。

    對于NAPT,又分了兩個大的類型,差別在于,當(dāng)兩個內(nèi)網(wǎng)用戶同時與8000端口通信的處理方式不同:

    ???????? 2.1、Symmetric NAT型 (對稱型)

    在客戶機(jī)時????????????? 192.168.0.8:4000——6.7.8.9:8000 192.168.0.8:4000——6.7.8.10:8000

    在網(wǎng)關(guān)時,兩個不同session但端口號不同??????1.2.3.4:62000——6.7.8.9:8000 1.2.3.4:62001——6.7.8.10:8000

    服務(wù)器C????? 6.7.8.9:8000

    服務(wù)器 D???? 6.7.8.10:8000

    這種形式會讓很多p2p軟件失靈。

    ??????? 2.2、Cone NAT型(圓錐型)

    在客戶機(jī)時????????????? 192.168.0.8:4000——6.7.8.9:8000 192.168.0.8:4000——6.7.8.10:8000

    在網(wǎng)關(guān)時,兩個不同session但端口號相同??????1.2.3.4:62000——6.7.8.9:8000 1.2.3.4:62000——6.7.8.10:8000

    服務(wù)器C?????????? 6.7.8.9:8000

    服務(wù)器D?????????? 6.7.8.10:8000

    目前絕大多數(shù)屬于這種。Cone NAT又分了3種類型:

    • a)Full Cone NAT(完全圓錐型):從同一私網(wǎng)地址端口192.168.0.8:4000發(fā)至公網(wǎng)的所有請求都映射成同一個公網(wǎng)地址端口1.2.3.4:62000 ,192.168.0.8可以收到任意外部主機(jī)發(fā)到1.2.3.4:62000的數(shù)據(jù)報。
    • b)Address Restricted Cone NAT?(地址限制圓錐型):從同一私網(wǎng)地址端口192.168.0.8:4000發(fā)至公網(wǎng)的所有請求都映射成同一個公網(wǎng)地址端口1.2.3.4:62000,只有當(dāng)內(nèi)部主機(jī)192.168.0.8先給服務(wù)器C 6.7.8.9發(fā)送一個數(shù)據(jù)報后,192.168.0.8才能收到6.7.8.9發(fā)送到1.2.3.4:62000的數(shù)據(jù)報。
    • c)Port Restricted Cone NAT(端口限制圓錐型):從同一私網(wǎng)地址端口192.168.0.8:4000發(fā)至公網(wǎng)的所有請求都映射成同一個公網(wǎng)地址端口1.2.3.4:62000,只有當(dāng)內(nèi)部主機(jī)192.168.0.8先向外部主機(jī)地址端口6.7.8.9:8000發(fā)送一個數(shù)據(jù)報后,192.168.0.8才能收到6.7.8.9:8000發(fā)送到1.2.3.4:62000的數(shù)據(jù)報。???
    • 穿越NAT的實(shí)現(xiàn)

    A1在客戶機(jī)時??????????????? 192.168.0.8:4000——6.7.8.9:8000

    X1在網(wǎng)關(guān)時?????????????????? 1.2.3.4:62000——6.7.8.9:8000

    服務(wù)器C?????????????????????? 6.7.8.9:8000

    B1在客戶機(jī)時??????????????? 192.168.1.8:4000——6.7.8.9:8000

    Y1在網(wǎng)關(guān)時?????????????????? 1.2.3.5:31000——6.7.8.9:8000

    兩內(nèi)網(wǎng)用戶要實(shí)現(xiàn)通過各自網(wǎng)關(guān)的直接呼叫,需要以下過程:

    1、 客戶機(jī)A1、B1順利通過格子網(wǎng)關(guān)訪問服務(wù)器C ,均沒有問題(類似于登錄)

    2、 服務(wù)器C保存了 A1、B1各自在其網(wǎng)關(guān)的信息(1.2.3.4:62000、1.2.3.5:31000)沒有問題。并可將該信息告知A1、B2。

    3、 此時A1發(fā)送給B1網(wǎng)關(guān)的1.2.3.5:31000是否會被B1收到?答案是基本上不行(除非Y1設(shè)置為完全圓錐型,但這種設(shè)置非常少),因為Y1上檢測到其存活的會話中沒有一個的目的IP或端口于1.2.3.4:62000有關(guān)而將數(shù)據(jù)包全部丟棄!

    4、 此時要實(shí)現(xiàn)A1、B1通過X1、Y1來互訪,需要服務(wù)器C告訴它們各自在自己的網(wǎng)關(guān)上建立“UDP隧道”,即命令A(yù)1發(fā)送一個 192.168.0.8:4000——1.2.3.5:31000的數(shù)據(jù)報,B1發(fā)送一個192.168.1.8:4000——1.2.3.4:62000的數(shù)據(jù)報,UDP形式,這樣X1、Y1上均存在了IP端口相同的兩個不同會話(很顯然,這要求網(wǎng)關(guān)為Cone NAT,否則,對稱型Symmetric NAT設(shè)置網(wǎng)關(guān)將導(dǎo)致對不同會話開啟了不同端口,而該端口無法為服務(wù)器和對方所知,也就沒有意義)。

    5、 此時A1發(fā)給Y1,或者B1發(fā)給X1的數(shù)據(jù)報將不會被丟棄且正確的被對方收到.

    綜合P2P可實(shí)現(xiàn)的條件需要:

    1、 中間服務(wù)器保存信息、并能發(fā)出建立UDP隧道的命令

    2、 網(wǎng)關(guān)均要求為Cone NAT類型。Symmetric NAT不適合。

    3、 完全圓錐型網(wǎng)關(guān)可以無需建立udp隧道,但這種情況非常少,要求雙方均為這種類型網(wǎng)關(guān)的更少。

    4、 假如X1網(wǎng)關(guān)為Symmetric NAT, Y1為Address Restricted Cone NAT 或Full Cone NAT型網(wǎng)關(guān),各自建立隧道后,A1可通過X1發(fā)送數(shù)據(jù)報給Y1到B1(因為Y1最多只進(jìn)行IP級別的甄別),但B2發(fā)送給X1的將會被丟棄(因為發(fā)送來的數(shù)據(jù)報中端口與X1上存在會話的端口不一致,雖然IP地址一致),所以同樣沒有什么意義。

    5、 假如雙方均為Symmetric NAT的情形,新開了端口,對方可以在不知道的情況下嘗試猜解,也可以達(dá)到目的,但這種情形成功率很低,且?guī)眍~外的系統(tǒng)開支,不是個好的解決辦法。

    6、 不同網(wǎng)關(guān)型設(shè)置的差異在于,對內(nèi)會采用替換IP的方式、使用不同端口不同會話的方式,使用相同端口不同會話的方式;對外會采用什么都不限制、限制IP地址、限制IP地址及端口。

    7、 這里還沒有考慮同一內(nèi)網(wǎng)不同用戶同時訪問同一服務(wù)器的情形,如果此時網(wǎng)關(guān)采用AddressRestricted Cone NAT 或Full Cone NAT型,有可能導(dǎo)致不同用戶客戶端可收到別人的數(shù)據(jù)包,這顯然是不合適的。

    ?

    一些現(xiàn)在常用的技術(shù):

    ALG(應(yīng)用層網(wǎng)關(guān)):它可以是一個設(shè)備或插件,用于支持SIP協(xié)議,主要類似與在網(wǎng)關(guān)上專門開辟一個通道,用于建立內(nèi)網(wǎng)與外網(wǎng)的連接,也就是說,這是一種定制的網(wǎng)關(guān)。更多只適用于使用他們的應(yīng)用群體內(nèi)部之間。

    UpnP:它是讓網(wǎng)關(guān)設(shè)備在進(jìn)行工作時尋找一個全球共享的可路由IP來作為通道,這樣避免端口造成的影響。要求設(shè)備支持且開啟upnp功能,但大部分時候,這些功能處于安全考慮,是被關(guān)閉的。即時開啟,實(shí)際應(yīng)用效果還沒經(jīng)過測試。

    STUN(Simple Traversalof UDP Through Network):這種方式即是類似于我們上面舉例中服務(wù)器C的處理方式。也是目前普遍采用的方式。但具體實(shí)現(xiàn)要比我們描述的復(fù)雜許多,光是做網(wǎng)關(guān)Nat類型判斷就由許多工作,RFC3489中詳細(xì)描述了。

    TURN(Traveral Using Relay NAT)該方式是將所有的數(shù)據(jù)交換都經(jīng)由服務(wù)器來完成,這樣NAT將沒有障礙,但服務(wù)器的負(fù)載、丟包、延遲性就是很大的問題。目前很多游戲均采用該方式避開NAT的問題。這種方式不叫p2p。

    ICE(Interactive Connectivity Establishment)是對上述各種技術(shù)的綜合,但明顯帶來了復(fù)雜性。

    轉(zhuǎn)載于:https://www.cnblogs.com/SZLLQ2000/p/6762063.html

    超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

    總結(jié)

    以上是生活随笔為你收集整理的NAT STURN,ICE的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。