內(nèi)網(wǎng)穿透是什么意思?
內(nèi)網(wǎng),也稱為局域網(wǎng),就是路由器搭建的網(wǎng)絡(luò),稱為內(nèi)網(wǎng),比如需要訪問別的站點,就要是公網(wǎng),同樣公網(wǎng)也分為公有內(nèi)網(wǎng),這里就不做過多解釋了,進(jìn)行 NAT 穿透是為了使具有某一個特定源 IP 地址和源端口號的數(shù)據(jù)包不被 NAT 設(shè)備屏蔽而正確路由到內(nèi)網(wǎng)主機。下面就相互通信的主機在網(wǎng)絡(luò)中與 NAT 設(shè)備的相對位置介紹內(nèi)網(wǎng)穿透方法。

局域網(wǎng)穿透的實質(zhì)是利用路由器上的NAT 系統(tǒng)。NAT 是一種將私有(保留)地址轉(zhuǎn)化為合法IP地址的轉(zhuǎn)換技術(shù),它被廣泛應(yīng)用于各種類型 Internet 接入方式和各種類型的網(wǎng)絡(luò)中。NAT可以完成重用地址,并且對于內(nèi)部的網(wǎng)絡(luò)結(jié)構(gòu)可以實現(xiàn)對外隱蔽。

網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation,NAT)機制的問題在于,NAT設(shè)備自動屏蔽了非內(nèi)網(wǎng)主機主動發(fā)起的連接,也就是說,從外網(wǎng)發(fā)往內(nèi)網(wǎng)的數(shù)據(jù)包將被NAT設(shè)備丟棄,這使得位于不同NAT設(shè)備之后的主機之間無法直接交換信息。這一方面保護(hù)了內(nèi)網(wǎng)主機免于來自外部網(wǎng)絡(luò)的攻擊,另一方面也為P2P通信帶來了一定困難。Internet上的NAT設(shè)備大多是地址限制圓錐形NAT或端口限制圓錐形 NAT,外部主機要與內(nèi)網(wǎng)主機相互通信,必須由內(nèi)網(wǎng)主機主動發(fā)起連接,使 NAT設(shè)備產(chǎn)生一個映射條目,以上是原理或者是書籍上所涉及的,但是在實際使用中還會涉及到非常多知識點,比如現(xiàn)在市面上做的比較好的神卓互聯(lián)內(nèi)網(wǎng)穿透,他們使用的網(wǎng)絡(luò)通信技術(shù)方式要比傳統(tǒng)的性能要提升8倍以上,技術(shù)難點主要還是在網(wǎng)絡(luò)通信上,神卓互聯(lián)采用自主研發(fā)的 WanGooe Tunnel 通信協(xié)議,完全由 C 語言實現(xiàn),重點是在設(shè)備的底層架構(gòu)上進(jìn)行開發(fā),能做到最大限度利用設(shè)備性能,做過開發(fā)的基本知道架構(gòu)問題,就像蓋房子打地基一樣,只有好的地基才能建好的房子,像目前市面也有一些是做封裝好架包直接調(diào)用,好處比較省事,不好的地方就是有局限性。

一臺主機有一個公網(wǎng) IP,另一臺主機有一個內(nèi)網(wǎng) IP。Client A 位于 NAT 之后,并擁有[IP 地址:端口]對[10.0.0.1:1234],Client B位于 NAT 之前,并擁有[IP 地址:端口]對[138.76.29.7:1234],NAT 擁有公網(wǎng) IP 155.99.25.11。由于 Client B 有一個公網(wǎng) IP,Client A 可以直接通過 TCP 連接到[138.76.29.7:1234],然而,如果 Client B 向 Client A 發(fā)起主動連接,則不會成功。此時,需要一個公有的服務(wù)器輔助進(jìn)行內(nèi)網(wǎng)穿透。Client A 和 Client B 向服務(wù)器發(fā)起登陸請求,并保持一個 TCP 或 UDP 連接,服務(wù)器記錄其 IP 地址和端口號,這里服務(wù)器對 Client A 是記錄其經(jīng)過 NAT 映射之后的 IP 和端口號。當(dāng) Client B 想連接 Client A 時,首先向服務(wù)器提出請求,服務(wù)器在收到請求后向 Client A 發(fā)出打洞命令,并將 Client B 的[IP 地址:端口]對發(fā)給 Client A,Client A 根據(jù)接收到的 IP地址和端口號向 Client B 發(fā)起 TCP 連接或發(fā)送 數(shù)據(jù)包。接下來 Client A 和Client B 之間便可以建立數(shù)據(jù)傳輸通道。

臺主機都處于內(nèi)網(wǎng)中,服務(wù)器記錄的[IP 地址:端口]對是 Client A 和 Client B 經(jīng)
過 NAT 映射之后的IP 地址和端口號,此時,Client A 和 Client B 之間任意方向的連接請求都會被對方的 NAT 設(shè)備屏蔽。Client A 首先向服務(wù)器提出連接請求,服務(wù)器將 Client A 的 IP地址和端口號對[155.99.25.11:51200]發(fā)給 Client B,并向 Client B 發(fā)出打洞命令;Client B 收到服務(wù)器的打洞命令后首先向[155.99.25.11:51200]發(fā)送一定數(shù)目的 UDP探測包或 TCP 連接請求,在 NAT B 上打一個方向為[155.99.25.11:51200]的洞,Client B 隨后向服務(wù)器報告打洞完成;服務(wù)器在收到 Client B 的報告后將 Client B 的公網(wǎng)IP 地址和端口號對[110.10.33.10:5000],此時由于 NAT B 上已經(jīng)留下了對應(yīng)于[155.99.25.11:51200]方向的洞,Client A 向[110.10.33.10:5000]發(fā)出的數(shù)據(jù)包或連接請求將不會被丟棄。

表示了NAT技術(shù)的
穿透過程。NAT設(shè)備(或軟件)維護(hù)一個狀態(tài)表,用來把內(nèi)部網(wǎng)絡(luò)的私有IP地址映射到外部網(wǎng)絡(luò)的合法IP地址上去。每個包頭中的IP地址和端口信息在NAT設(shè)備(或軟件)中都被修改并翻譯成一正確的IP地址發(fā)往下一級。當(dāng)一個內(nèi)網(wǎng)主機通過NAT打開一個“外出”的TCP或UDP會話時,NAPT分配給這個會話一個公網(wǎng)IP和端口,用來接收外網(wǎng)的響應(yīng)的數(shù)據(jù)包,并經(jīng)過轉(zhuǎn)換通知內(nèi)部網(wǎng)的主機。這樣,NAPT在[私有IP:私有端口]和[公網(wǎng)IP:公網(wǎng)端口]之間建立了一個端口綁定。
巧妙地利用NAT原理實現(xiàn)NAT內(nèi)網(wǎng)穿透技術(shù),就可以使內(nèi)網(wǎng)服務(wù)器接收到外網(wǎng)數(shù)據(jù)包。