久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

各種nat類型

 雅心樓 2013-07-08

1. NAT 簡介

NAT(Network Address Translation ,網(wǎng)絡(luò)地址轉(zhuǎn)換) 是一種廣泛應(yīng)用的解決IP 短缺的

有效方法,, NAT 將內(nèi)網(wǎng)地址轉(zhuǎn)和端口號(hào)換成合法的公網(wǎng)地址和端口號(hào),,建立一個(gè)會(huì)話,與公網(wǎng)主機(jī)進(jìn)行通信,。

1.1. NAT 分類

NAT 從表面上看有三種類型:靜態(tài) NAT ,、動(dòng)態(tài)地址 NAT 、地址端口轉(zhuǎn)換 NAPT ,?! ?/span>

1 )靜態(tài)NAT :靜態(tài)地址轉(zhuǎn)換將內(nèi)部私網(wǎng)地址與合法公網(wǎng)地址進(jìn)行一對(duì)一的轉(zhuǎn)換,且每個(gè)內(nèi)部地址的轉(zhuǎn)換都是確定的,。

    2 )動(dòng)態(tài)NAT :動(dòng)態(tài)地址轉(zhuǎn)換也是將內(nèi)部本地地址與內(nèi)部合法地址一對(duì)一的轉(zhuǎn)換,,但是動(dòng)態(tài)地址轉(zhuǎn)換是從合法地址池中動(dòng)態(tài)選擇一個(gè)未使用的地址來對(duì)內(nèi)部私有地址進(jìn)行轉(zhuǎn)換。

    3NAPT :它也是一種動(dòng)態(tài)轉(zhuǎn)換,,而且多個(gè)內(nèi)部地址被轉(zhuǎn)換成同一個(gè)合法公網(wǎng)地址,,使用不同的端口號(hào)來區(qū)分不同的主機(jī),不同的進(jìn)程,。

從實(shí)現(xiàn)的技術(shù)角度,,又可以將NAT 分成如下幾類:全錐NAT(Full Cone NAT) 、限制性錐NATRestricted Cone NAT ),、端口限制性錐NAT( Port Restricted Cone NAT) ,、對(duì)稱NAT ( Symmetric NAT)

1 )全錐NAT :全錐NAT 把所有來自相同內(nèi)部IP 地址和端口的請(qǐng)求映射到相同的外部IP 地址和端口,。任何一個(gè)外部主機(jī)均可通過該映射發(fā)送數(shù)據(jù)包到該內(nèi)部主機(jī),。

2 )限制性錐NAT :限制性錐NAT 把所有來自相同內(nèi)部IP 地址和端口的請(qǐng)求映射到相同的外部IP 地址和端口。但是, 和全錐NAT 不同的是:只有當(dāng)內(nèi)部主機(jī)先給外部主機(jī)發(fā)送數(shù)據(jù)包, 該外部主機(jī)才能向該內(nèi)部主機(jī)發(fā)送數(shù)據(jù)包,。

3 )端口限制性錐NAT :端口限制性錐NAT 與限制性錐NAT 類似, 只是多了端口號(hào)的限制, 即只有內(nèi)部主機(jī)先向外部地址:端口號(hào)對(duì)發(fā)送數(shù)據(jù)包, 該外部主機(jī)才能使用特定的端口號(hào)向內(nèi)部主機(jī)發(fā)送數(shù)據(jù)包,。

4 )對(duì)稱NAT :對(duì)稱NAT 與上述3 種類型都不同, 不管是全錐NAT ,限制性錐NAT 還是端口限制性錐NAT ,,它們都屬于錐NATCone NAT ),。當(dāng)同一內(nèi)部主機(jī)使用相同的端口與不同地址的外部主機(jī)進(jìn)行通信時(shí), 對(duì)稱NAT 會(huì)重新建立一個(gè)Session ,為這個(gè)Session 分配不同的端口號(hào),,或許還會(huì)改變IP 地址,。

1.2. NAT 的作用

    NAT 不僅實(shí)現(xiàn)地址轉(zhuǎn)換,,同時(shí)還起到防火墻的作用,隱藏內(nèi)部網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),,保護(hù)內(nèi)部主機(jī),。 NAT 不僅完美地解決了 lP 地址不足的問題,而且還能夠有效地避免來自網(wǎng)絡(luò)外部的攻擊,,隱藏并保護(hù)網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī),。 這樣對(duì)于外部主機(jī)來說,內(nèi)部主機(jī)是不可見的,。但是,,對(duì)于P2P 應(yīng)用來說,卻要求能夠建立端到端的連接,,所以如何穿透NAT 也是P2P 技術(shù)中的一個(gè)關(guān)鍵,。

 

 

2. P2P 穿透NAT

要讓處于NAT 設(shè)備之后的擁有私有IP 地址的主機(jī)之間建立P2P 連接,就必須想辦法穿

NAT ,,現(xiàn)在常用的傳輸層協(xié)議主要有TCPUDP ,下面就是用這兩種協(xié)議來介紹穿透NAT 的策略,。

2.1. 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)

下面假設(shè)有如圖1 所示網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖,。


 

1. 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖

Server 129.208.12.38 )是公網(wǎng)上的服務(wù)器,NAT-ANAT-B 是兩個(gè)NAT 設(shè)備(可能是集成NAT 功能的路由器,,防火墻等),,它們具有若干個(gè)合法公網(wǎng)IP ,在NAT-A 阻隔的私有網(wǎng)絡(luò)中有若干臺(tái)主機(jī)【ClientA-1 ,,ClientA-N 】,,在NAT-B 阻隔的私有網(wǎng)絡(luò)中也有若干臺(tái)主機(jī)【ClientB-1ClientB-N 】,。為了以后說明問題方便,,只討論主機(jī)ClientA-1ClientB-1

假設(shè)主機(jī)ClientA-1 和主機(jī)ClientB-1 都和服務(wù)器Server 建立了“連接”,,如圖2 所示,。


2.ClientA-1ClientB-1Server 之間通信

    由于NAT 的透明性,,所以ClientA-1ClientB-1 不用關(guān)心和Server 通信的過程,,它們只需要知道Server 開放服務(wù)的地址和端口號(hào)即可。根據(jù)圖1 ,,假設(shè)在ClientA-1 中有進(jìn)程使用socket192.168.0.27000 )和Server 通信,,在ClientB-1 中有進(jìn)程使用socket192.168.1.12:8000 )和Server 通信。它們通過各自的NAT 轉(zhuǎn)換后分別變成了socket202.103.142.295000 )和socket221.10.145.846000 ),。

2.2. 使用UDP 穿透NAT

通常情況下,,當(dāng)進(jìn)程使用UDP 和外部主機(jī)通信時(shí),,NAT 會(huì)建立一個(gè)Session ,這個(gè)Session 能夠保留多久并沒有標(biāo)準(zhǔn),,或許幾秒,,幾分鐘,幾個(gè)小時(shí),。假設(shè)ClientA-1 在應(yīng)用程序中看到了ClientB-1 在線,,并且想和ClientB-1 通信,一種辦法是Server 作為中間人,,負(fù)責(zé)轉(zhuǎn)發(fā)ClientA-1ClientB-1 之間的消息,,但是這樣服務(wù)器太累,會(huì)吃不消,。另一種方法就是讓ClientA-1ClientB-1 建立端到端的連接,,然后他們自己通信。這也就是P2P 連接,。根據(jù)不同類型的NAT ,,下面分別講解。

1 )全錐NAT ,,穿透全錐型NAT 很容易,,根本稱不上穿透,因?yàn)槿F型NAT 將內(nèi)部主機(jī)的映射到確定的地址,,不會(huì)阻止從外部發(fā)送的連接請(qǐng)求,,所以可以不用任何輔助手段就可以建立連接。

2 )限制性錐NAT 和端口限制性錐NAT (簡稱限制性NAT ),,穿透限制性錐NAT 會(huì)丟棄它未知的源地址發(fā)向內(nèi)部主機(jī)的數(shù)據(jù)包,。所以如果現(xiàn)在ClientA-1 直接發(fā)送UDP 數(shù)據(jù)包到ClientB-1 ,那么數(shù)據(jù)包將會(huì)被NAT-B 無情的丟棄,。所以采用下面的方法來建立ClientA-1ClientB-1 之間的通信,。

1 ClientA-1202.103.142.29:5000 )發(fā)送數(shù)據(jù)包給Server ,請(qǐng)求和ClientB-1221.10.145.84:6000 )通信,。

2. Server ClientA-1 的地址和端口(202.103.142.29:5000 )發(fā)送給ClientB-1 ,,告訴ClientB-1ClientA-1 想和它通信,。

3. ClientB-1 ClientA-1202.103.142.29:5000 )發(fā)送UDP 數(shù)據(jù)包,,當(dāng)然這個(gè)包在到達(dá)NAT-A 的時(shí)候,還是會(huì)被丟棄,,這并不是關(guān)鍵的,,因?yàn)榘l(fā)送這個(gè)UDP 包只是為了讓NAT-B 記住這次通信的目的地址:端口號(hào),當(dāng)下次以這個(gè)地址和端口為源的數(shù)據(jù)到達(dá)的時(shí)候就不會(huì)被NAT-B 丟棄,,這樣就在NAT-B 上打了一個(gè)從ClientB-1ClientA-1 的孔,。

4. 為了讓ClientA-1 知道什么時(shí)候才可以向ClientB-1 發(fā)送數(shù)據(jù),,所以ClientB-1 在向ClientA-1202.103.142.29:5000 )打孔之后還要向Server 發(fā)送一個(gè)消息,告訴Server 它已經(jīng)準(zhǔn)備好了,。

5. Server 發(fā)送一個(gè)消息給ClientA-1 ,,內(nèi)容為:ClientB-1 已經(jīng)準(zhǔn)備好了,你可以向ClientB-1 發(fā)送消息了,。

6. ClientA-1 ClientB-1 發(fā)送UDP 數(shù)據(jù)包,。這個(gè)數(shù)據(jù)包不會(huì)被NAT-B 丟棄,以后ClientB-1ClientA-1 發(fā)送的數(shù)據(jù)包也不會(huì)被ClientA-1 丟棄,,因?yàn)?span lang="EN-US">NAT-A 已經(jīng)知道是ClientA-1 首先發(fā)起的通信,。至此,ClientA-1ClientB-1 就可以進(jìn)行通信了,。

2.3. 使用TCP 穿透NAT

使用TCP 協(xié)議穿透NAT 的方式和使用UDP 協(xié)議穿透NAT 的方式幾乎一樣,,沒有什么本質(zhì)上的區(qū)別,只是將無連接的UDP 變成了面向連接的TCP ,。值得注意是:

1.     ClientB-1 在向ClientA-1 打孔時(shí),,發(fā)送的SYN 數(shù)據(jù)包,而且同樣會(huì)被NAT-A 丟棄,。同時(shí),,ClientB-1 需要在原來的socket 上監(jiān)聽,由于重用socket ,,所以需要將socket 屬性設(shè)置為SO_REUSEADDR

2.     ClientA-1 ClientB-1 發(fā)送連接請(qǐng)求,。同樣,,由于ClientB-1ClientA-1 方向的孔已經(jīng)打好,所以連接會(huì)成功,,經(jīng)過3 次握手后,,ClientA-1ClientB-1 之間的連接就建立起來了。

2.4. 穿透對(duì)稱NAT

    上面討論的都是怎樣穿透錐(ConeNAT ,,對(duì)稱NAT 和錐NAT 很不一樣,。對(duì)于 對(duì)稱NAT ,當(dāng)一個(gè)私網(wǎng)內(nèi)主機(jī)和外部多個(gè)不同主機(jī)通信時(shí),,對(duì)稱NAT 并不會(huì)像錐(Cone ,,全錐,限制性錐,,端口限制性錐)NAT 那樣分配同一個(gè)端口,。而是會(huì)新建立一個(gè)Session ,重新分配一個(gè)端口,。參考上面穿透限制性錐NAT 的過程,,在步驟3 時(shí):ClientB-1221.10.145.84: ,?)向ClientA-1 打孔的時(shí)候,對(duì)稱NAT 將給ClientB-1 重新分配一個(gè)端口號(hào),,而這個(gè)端口號(hào)對(duì)于Server ,、ClientB-1ClientA-1 來說都是未知的,。同樣,, ClientA-1 根本不會(huì)收到這個(gè)消息,同時(shí)在步驟4 ,,ClientB-1 發(fā)送給Server 的通知消息中,,ClientB-1socket 依舊是(221.10.145.84:6000 )。而且,,在步驟6 時(shí):ClientA-1 向它所知道但錯(cuò)誤的ClientB-1 發(fā)送數(shù)據(jù)包時(shí),,NAT-1 也會(huì)重新給ClientA-1 分配端口號(hào)。所以,,穿透對(duì)稱NAT 的機(jī)會(huì)很小,。下面是兩種有可能穿透對(duì)稱NAT 的策略。

2.4.1 .同時(shí)開放TCP Simultaneous TCP open )策略

如果一個(gè) 對(duì)稱 NAT 接收到一個(gè)來自 本地 私有網(wǎng) 絡(luò) 外面的 TCP SYN 包,, 個(gè)包想 發(fā) 起一個(gè) 引入 TCP 接,,一般來 NAT 會(huì)拒 絕這 個(gè) 請(qǐng) 求并扔掉 個(gè) SYN 包,,或者回送一個(gè)TCP RSTconnection reset ,,重建 接)包 給請(qǐng) 求方。但是,,有一 情況 卻會(huì)接受這個(gè)“引入”連接,。

RFC 規(guī)定:對(duì)于對(duì)稱NAT 當(dāng) 個(gè)接收到的 SYN 包中的源IP 地址 端口,、目 標(biāo) IP 地址 端口都與NAT 的一個(gè)已 經(jīng) 激活的 TCP 會(huì) 中的地址信息相符 時(shí) ,, NAT 將會(huì)放行 個(gè) SYN 包。 需要 指出 的是:怎樣才是一個(gè)已經(jīng)激活的TCP 連接,?除了真正已經(jīng)建立完成的TCP 連接外,,RFC 規(guī)范指出: 如果 NAT 恰好看到一個(gè) 剛剛發(fā) 送出去的一個(gè) SYN 包和 隨之 接收到的SYN 包中的地址 :端口 信息相符合的 ,那 NAT 將會(huì) 認(rèn)為這 個(gè) TCP 接已 經(jīng) 被激活,,并將允 許這 個(gè)方向的 SYN 進(jìn) NAT 內(nèi)部,。 同時(shí)開放TCP 策略就是利用這個(gè)時(shí)機(jī)來建立連接的。

如果 Client A -1 Client B -1 彼此正確的 預(yù) 對(duì) 方的 NAT 將會(huì) 下一個(gè) TCP 接分配的公網(wǎng) TCP 端口,,并且兩個(gè)客 端能 時(shí) 發(fā) 起一 個(gè)面向?qū)Ψ降?/span> 外出 TCP 請(qǐng)求 ,,并在 對(duì) 方的 SYN 包到達(dá)之前,自己 剛發(fā) 送出去的 SYN 包都能 利的穿 自己的 NAT ,一條端 對(duì) 端的 TCP 接就 成功地建立了 ,。

2.4.2. UDP 端口猜測策略

同時(shí)開放TCP 策略非常依賴于猜測對(duì)方的下一個(gè)端口,,而且強(qiáng)烈依賴于發(fā)送連接請(qǐng)求的時(shí)機(jī),而且還有網(wǎng)絡(luò)的不確定性,,所以能夠建立的機(jī)會(huì)很小,,即使Server 充當(dāng)同步時(shí)鐘的角色。下面是一種通過UDP 穿透的方法,,由于UDP 不需要建立連接,,所以也就不需要考慮“同時(shí)開放”的問題。

為了介紹ClientB-1 的詭計(jì),,先介紹一下STUN 協(xié)議,。STUNSimple Traversal of UDP Through NATs )協(xié)議是一個(gè)輕量級(jí)協(xié)議,用來探測被NAT 映射后的地址:端口,。STUN 采用C/S 結(jié)構(gòu),,需要探測自己被NAT 轉(zhuǎn)換后的地址:端口的ClientServer 發(fā)送請(qǐng)求,Server 返回Client 轉(zhuǎn)換后的地址:端口,。

參考4.2 節(jié)中穿透NAT 的步驟2 ,,當(dāng)ClientB-1 收到Server 發(fā)送給它的消息后,ClientB-1 即打開3 個(gè)socket ,。socket-0STUN Server 發(fā)送請(qǐng)求,,收到回復(fù)后,假設(shè)得知它被轉(zhuǎn)換后的地址:端口( 221.10.145.84:600 5 ),,socket-1ClientA-1 發(fā)送一個(gè)UDP 包,,socket-2 再次向另一個(gè)STUN Server 發(fā)送請(qǐng)求,假設(shè)得到它被轉(zhuǎn)換后的地址:端口( 221.10.145.84:60 20 ),。通常,,對(duì)稱NAT 分配端口有兩種策略,一種是按順序增加,,一種是隨機(jī)分配。如果這里對(duì)稱NAT 使用順序增加策略,,那么,,ClientB-1 將兩次收到的地址:端口發(fā)送給Server 后,Server 就可以通知ClientA-1 在這個(gè)端口范圍內(nèi)猜測剛才ClientB-1 發(fā)送給它的socket-1 中被NAT 映射后的地址:端口,,ClientA-1 很有可能在孔有效期內(nèi)成功猜測到端口號(hào),,從而和ClientB-1 成功通信。

2.4.3. 問題總結(jié)

    從上面兩種穿透對(duì)稱NAT 的方法來看,,都建立在了嚴(yán)格的假設(shè)條件下,。但是現(xiàn)實(shí)中多數(shù)的NAT 都是錐NAT ,因?yàn)橘Y源畢竟很重要,,反觀對(duì)稱NAT ,,由于太不節(jié)約端口號(hào)所以相對(duì)來說成本較高,。所以,不管是穿透錐NAT ,,還是對(duì)稱NAT ,,現(xiàn)實(shí)中都是可以辦到的。除非對(duì)稱NAT 真的使用隨機(jī)算法來分配可用的端口,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多