解決外網向內網通訊方案 NAT穿透技術詳解

2021-07-25 15:19:08 字數 2242 閱讀 6262

在網路編碼中會發現程式在區域網中是可以適用的,但是在外網與內網之間和內網與內網之間就不可行。

問題就在於nat。首先介紹下nat。 

nat的作用nat(network address translator),網路位址轉換。顧名思義,它是一種把內部私有網路ip位址翻譯成公有網路ip位址的技術,如圖5-1所示。nat是在ip位址日益缺乏的情況下產生的,它的主要目的是使位址能夠重用[9]。 

圖5-1 nat模型 

ip位址分為五類:a類,b類,c類,d類,e類(這裡不考慮保留的ip位址)。a、b、c類可被計算機作為ip位址,d類為組播位址,e類為特殊用途的位址。a、b、c類中,又可分為公有位址和私有位址,私有位址用於內網,不同的內網,私有位址可重用,從而節省了公網位址,它不可在公網中被路由,所以內網的主機要訪問公網的伺服器,便要經過nat。公有位址是全球唯一的,能在公網上被路由。 

內網主機用私有位址在內網能與其它的內網主機無誤地通訊,但它不能直接用私有位址訪問外網的主機,因為私有位址不能被路由。它要與外網通訊,必須經過nat裝置(如閘道器,路由器),如圖5-2所示。主機a與伺服器s通訊,它須先通過閘道器,此時閘道器改變它的資料報位址及埠,把私有位址(10.0.0.2)改為公有位址(155.99.25.11),使資料報能在公網上被路由,送至伺服器端。伺服器端返回的資料報到達閘道器後,閘道器把公網位址改為相應的私有位址,然後**到主機a。通過這種方法,乙個內網只需乙個公有ip位址,就把整個內網的計算機接入internet,從而解決ip位址缺乏的問題。 

nat功能通常被整合到路由器、防火牆、isdn路由器或者單獨的nat裝置中。也可通過軟體實現這一功能,windows 98 se、windows 2000 都包含了這一功能。 

nat的分類及工作原理 

基本nat與napt如圖5-3所示,nat分為兩大類,基本的nat和napt(network address/port translator)[10][11]。 

基本的nat,它僅將內網主機的私有ip位址轉換成公網ip位址,但並不將tcp/udp埠資訊進行轉換,有動態與靜態之區分。由於現在大部分都屬於另一種型別,即napt,故這裡不詳細討論基礎nat。 

另外一種nat叫做napt(network address/port translator),從名稱上我們也可以看得出,napt不但會改變經過這個nat裝置的ip資料報的ip位址,還會改變ip資料報的tcp/udp埠。napt的位址及埠的轉換過程,請看圖5-4: 

私有網路中某一主機client a(10.0.0.2),它的某個程序通過1234埠,想訪問外網伺服器18.181.0.31的1235埠。那麼當資料報通過nat時,這個nat的外網位址是155.99.25.11,首先nat會改變這個資料報的原ip位址,改為155.99.25.11。並分配乙個埠(如62000)給client a,把資料報的原埠號改為62000。所以本來是(10.0.0.2:1234->18.181.0.31:1235)的資料報到了網際網路上變為了(155.99.25.11:62000->18.181.0.31:1235),如圖5-4左圖所示。nat會記住62000埠對應的是10.0.0.2的1234埠,以後從外網伺服器18.181.0.31傳送到62000埠的資料會被nat自動的改變目的ip和埠號,然後**到10.0.0.2上(如圖5-4右圖所示) 

錐型nat與對稱型nat 

如圖6-7所示,步驟如下: 

①客戶端a發udp資料報經nat a,把資料傳送到伺服器。nat a分配埠給客戶端a。伺服器接收到資訊後,把客戶端a經nat a後的位址及埠資訊記錄下來。 

②客戶端b發udp資料報經nat b,把資料傳送到伺服器。nat b分配埠給客戶端b。伺服器接收到資訊後,把客戶端b經nat b後的位址及埠資訊記錄下來。 

③ 伺服器把客戶端b的位址及埠資訊傳送給客戶端a,把客戶端a的位址及埠資訊傳送給客戶端b,客戶端a、b就可以通過所獲得的對方的位址及埠號進行通訊了。

網路程式設計外網通訊

對於初學者而已,我們學習的網路程式設計 如tcp,udp程式設計 我們通常都是在區域網內進行通訊測試,有時候我們或者會想,我們現在寫的內網網路資料和外網的網路資料有什麼不同,我們內網的資料是如何走出外網的呢?首先,我們需要了解一下什麼是公有 ip 和私有 ip?公有位址 public address...

Windows 同時訪問內網和外網解決方案

1.前言 想擁有隱私的公司都有內網,外部通過一般途徑無法訪問,但是作為員工需要同時活躍在內網和外網之間,老是切換網路不是解決辦法。1.windows 網路訪問策略 隨意連線乙個網路 注意是乙個,網口或者wifi 開啟 cmd,鍵入 route print 命令,可以看到最上面有乙個路由 網路目標和網...

內網和外網之間的通訊

對於初學者而已,我們學習的網路程式設計 如tcp,udp程式設計 我們通常都是在區域網內進行通訊測試,有時候我們或者會想,我們現在寫的內網網路資料和外網的網路資料有什麼不同,我們內網的資料是如何走出外網的呢?公有 ip 和私有 ip 的區別 首先,我們需要了解一下什麼是公有 ip 和私有 ip 公有...