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

分享

科普|總在影響你上網(wǎng)體驗(yàn)的「NAT」到底是什么?

 邸彥強(qiáng) 2021-08-08

在使用網(wǎng)絡(luò)的過程中,,或許你會(huì)遇到這樣的問題:

Nintendo Switch 等游戲主機(jī)上的 NAT Type 是 D,,導(dǎo)致無法聯(lián)機(jī)游戲;

使用 eMule 下載文件時(shí),,發(fā)現(xiàn)獲取到了 Low ID,,導(dǎo)致下載速度變慢;

家中的 NAS 只能在內(nèi)網(wǎng)使用,,很難將 NAS 上的文件分享給其他人,。出門在外時(shí),想要下載 NAS 上的文件,,也發(fā)現(xiàn)無法連接,。或許你還會(huì)對(duì)這些問題感到好奇:

每天有那么多人使用微信進(jìn)行視頻通話,,騰訊的服務(wù)器是否能承受這么大的流量,?是否需要支付高額的流量費(fèi)用?

為什么在十多年前,,我們就看到過 IP 地址資源不足的新聞,。而現(xiàn)在,互聯(lián)網(wǎng)用戶越來越多,,IP 地址資源不足卻似乎并沒有給我們帶來什么影響,。其實(shí),這些問題都與 NAT 有關(guān),。那么,,NAT 到底是什么?NAT 會(huì)為我們的「網(wǎng)上沖浪」帶來哪些不便之處,?如何解決 NAT 為我們帶來的不便,?…… 本文將嘗試詳細(xì)地解答這些問題。

▍為什么需要 NAT在 Internet 上,,每臺(tái)設(shè)備都有一個(gè) IP 地址,。IP 地址和我們?nèi)粘I钪械募彝プ≈奉愃疲慌_(tái)設(shè)備想和另一臺(tái)設(shè)備通信,,必須知道另一臺(tái)設(shè)備的 IP 地址,,才能將數(shù)據(jù)發(fā)送到對(duì)方,。對(duì)于 IP 地址的基礎(chǔ)知識(shí),少數(shù)派已經(jīng)有一些文章進(jìn)行了介紹,。讀者可參考這些文章進(jìn)行了解:

入網(wǎng)指南 04 | IP 地址大揭秘

小白也能看懂的網(wǎng)絡(luò)基礎(chǔ) 04 | IP地址是如何工作的

小白也能看懂的網(wǎng)絡(luò)基礎(chǔ) 05 | IP 地址深度學(xué)習(xí)對(duì)于個(gè)人,、家庭的網(wǎng)絡(luò)設(shè)備,IP 地址一般由運(yùn)營商分配,。在過去,,一戶家庭一般只有一臺(tái)電腦,這臺(tái)電腦通過調(diào)制解調(diào)器(moden)直接接入 Internet,,獲取運(yùn)營商分配的 IP 地址,。

圖片

而現(xiàn)在,很多家庭會(huì)同時(shí)擁有手機(jī),、電腦,、智能家居等多種聯(lián)網(wǎng)設(shè)備,一個(gè) IP 地址完全不夠這么多設(shè)備使用,。

圖片

對(duì)于常用的 IPv4 地址,,其格式是這樣的:

圖片

可以看出,IPv4 地址一共有 4,294,967,296 個(gè),。由于全球互聯(lián)網(wǎng)用戶越來越多,,IPv4 地址已經(jīng)嚴(yán)重不足。綜上,,如下兩個(gè)原因,,讓我們面臨了 IP 地址不夠用的問題:

家庭中有多個(gè)設(shè)備需要聯(lián)網(wǎng),但運(yùn)營商只會(huì)分配一個(gè) IP 地址

全球聯(lián)網(wǎng)設(shè)備越來越多,,但 IPv4 地址資源有限所以,,我們需要一種技術(shù),讓多個(gè)設(shè)備「共用」同一個(gè) IP 地址,,來緩解 IPv4 地址不夠用的問題,。

▍什么是 NATNAT 的全稱是「網(wǎng)絡(luò)地址轉(zhuǎn)換」(Network Address Translation),指的是路由器等網(wǎng)絡(luò)設(shè)備,,在傳輸數(shù)據(jù)的過程中,,改變數(shù)據(jù)中的 IP 地址的一種技術(shù)。NAT 可用于內(nèi)網(wǎng) IP 地址(以下簡稱為「內(nèi)網(wǎng) IP」)和公網(wǎng) IP 地址(以下簡稱為「公網(wǎng) IP」)之間的轉(zhuǎn)換,。例如家庭中的多個(gè)聯(lián)網(wǎng)設(shè)備,,都擁有各自的內(nèi)網(wǎng) IP,無線路由器運(yùn)行 NAT 功能,;家中的設(shè)備向外發(fā)送數(shù)據(jù)時(shí),,數(shù)據(jù)中的內(nèi)網(wǎng) IP,,在無線路由器上會(huì)被轉(zhuǎn)換為公網(wǎng) IP,;外部數(shù)據(jù)發(fā)送到家庭設(shè)備時(shí),,數(shù)據(jù)中的公網(wǎng) IP,會(huì)被轉(zhuǎn)換為內(nèi)網(wǎng) IP,。通過這種方式,,家庭設(shè)備能夠「共享」同一個(gè) IP 地址。即使運(yùn)營商只為用戶分配了一個(gè) IP 地址,,用戶家中的多臺(tái)設(shè)備,,也能同時(shí)訪問 Internet。

圖片

作為對(duì)比,,如果沒有 NAT,,家中每一個(gè)設(shè)備,都需要獲取一個(gè)獨(dú)立的公網(wǎng) IP 地址,,對(duì)于本來就少的 IPv4 地址資源,,就顯得有點(diǎn)「奢侈」了。

圖片

另外,,在 IPv4 地址資源越來越緊張的今天,,很多電信運(yùn)營商,已經(jīng)不再為用戶分配公網(wǎng) IP,;而是直接在運(yùn)營商自己的路由器上運(yùn)營 NAT,,為用戶分配內(nèi)網(wǎng) IP。這樣,,只需要少量的 IP 地址,,就可以支撐大量用戶的上網(wǎng)需求。這樣的 NAT 又叫做 CGN(Carrier-grade NAT,,電信級(jí) NAT),。

圖片

▍NAT 是如何工作的NAT 改變了報(bào)文中的 IP 地址。但是,,為什么我們平時(shí)上網(wǎng)時(shí),,并沒感覺到 NAT 的存在,?在上文中的例子里,,多臺(tái)內(nèi)網(wǎng)設(shè)備共用同公網(wǎng) IP。外部數(shù)據(jù)到達(dá)路由器后,,路由器應(yīng)該將數(shù)據(jù)發(fā)送給哪個(gè)內(nèi)網(wǎng)設(shè)備,?

圖片

在介紹 NAT 的工作原理之前,,讓我們先了解一下另外一個(gè)概念:端口號(hào)。簡單說,,在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù),,會(huì)被拆分一個(gè)個(gè)較小的片段。每個(gè)片段被稱為一個(gè)報(bào)文。在報(bào)文中,,除了 IP 地址,,一般還包含了端口號(hào)。IP 地址每臺(tái)電腦唯一,,用來找到網(wǎng)絡(luò)中的電腦,。端口號(hào)每個(gè)應(yīng)用程序唯一,報(bào)文到達(dá)電腦后,,可根據(jù)端口號(hào)匹配到應(yīng)用程序,。在報(bào)文中,包含了兩個(gè) IP 地址和兩個(gè)端口號(hào),,分別是來源 IP,、目的 IP、來源端口,、目的端口:

圖片

我們使用的大部分軟件,,例如網(wǎng)頁瀏覽器,都是客戶端軟件,??蛻舳诵枰鲃?dòng)向服務(wù)器發(fā)起連接。例如,,當(dāng)我們?cè)L問少數(shù)派網(wǎng)站 sspai.com 后,,瀏覽器能夠解析到網(wǎng)站的 IP 地址(下文以 119.23.1.2 為例,不代表網(wǎng)站真實(shí) IP),,主動(dòng)向該地址發(fā)起報(bào)文,,建立連接。由于瀏覽網(wǎng)頁使用的 HTTPS 協(xié)議,,端口號(hào)為 443,,所以報(bào)文中的目的端口號(hào)填充為 443,來源端口號(hào)是一個(gè)隨機(jī)分配的值,。當(dāng)少數(shù)派網(wǎng)站收到請(qǐng)求后,,則會(huì)向用戶的瀏覽器發(fā)送網(wǎng)頁數(shù)據(jù)。發(fā)送的數(shù)據(jù)中,,來源端口號(hào)為 443,,目的端口號(hào)則為用戶請(qǐng)求報(bào)文中的源端口號(hào)。從下圖中也可以看出,,回應(yīng)報(bào)文的目的 IP,,就是請(qǐng)求報(bào)文的源 IP,也就是用戶電腦的 IP 地址,;回應(yīng)報(bào)文的目的端口號(hào),,就是請(qǐng)求報(bào)文中的源端口號(hào),,也就是用戶瀏覽器的端口號(hào)。這樣,,少數(shù)派服務(wù)器的回應(yīng)報(bào)文,,就能根據(jù) IP 地址發(fā)送回用戶電腦,并根據(jù)端口號(hào)最終到達(dá)瀏覽器:

圖片

那么,,如果用戶的電腦是內(nèi)網(wǎng)設(shè)備,經(jīng)過了 NAT,,使用瀏覽器訪問少數(shù)派網(wǎng)站時(shí),,又會(huì)是什么樣的過程呢?首先,,瀏覽器同樣會(huì)發(fā)送請(qǐng)求報(bào)文,,報(bào)文的源 IP 為電腦的內(nèi)網(wǎng) IP (此處以 192.168.1.126 為例)。當(dāng)報(bào)文到達(dá)路由器后,,路由器將報(bào)文源 IP 修改為公網(wǎng) IP(1.1.1.10),,并分配一個(gè)新的源端口號(hào)。在這個(gè)過程中,,路由器會(huì)記錄下源 IP 和源端口號(hào),,在轉(zhuǎn)換前后的對(duì)應(yīng)關(guān)系,形成 NAT 表項(xiàng),。路由器將源 IP 和源端口號(hào)轉(zhuǎn)換后的報(bào)文發(fā)送到服務(wù)器,,服務(wù)器回應(yīng)的報(bào)文,目的 IP 和目的端口端口號(hào),,就是請(qǐng)求報(bào)文中的源 IP 和源端口號(hào),。這樣,報(bào)文就能根據(jù)目的 IP,,到達(dá)用戶的路由器上,。路由器收到來自服務(wù)器的報(bào)文,根據(jù) NAT 表項(xiàng),,將目的 IP 和目的端口號(hào),,從外部 IP、外部端口,,轉(zhuǎn)換為內(nèi)部 IP,、內(nèi)部端口。這樣,,報(bào)文就能順利到達(dá)用戶電腦的瀏覽器上,。

圖片

從上面的例子中可以看出,NAT 通過記錄端口號(hào),、IP 地址的對(duì)應(yīng)關(guān)系,,將出方向報(bào)文的源 IP,、源端口號(hào)從內(nèi)部地址轉(zhuǎn)換為外部地址,將入方向報(bào)文的目的 IP,、目的端口號(hào)從外部地址轉(zhuǎn)換為內(nèi)部地址,,讓內(nèi)網(wǎng)設(shè)備也能正常訪問 Internet。但如下兩種情況,,是 NAT 難以做到的:

內(nèi)網(wǎng)設(shè)備作為服務(wù)器,,外部設(shè)備主動(dòng)向內(nèi)網(wǎng)設(shè)備發(fā)起連接

使用 TCP、UDP 之外的,、沒有端口號(hào)的協(xié)議進(jìn)行通信由于我們?nèi)粘I暇W(wǎng),,使用的基本上都是 TCP 和 UDP 協(xié)議。而且自己的設(shè)備一般是作為客戶端,,主動(dòng)連接第三方服務(wù)器的,。所以,在日常上網(wǎng)的情況下,,我們一般不會(huì)感受到 NAT 的存在,。

▍NAT 為我們帶來了哪些不便之處NAT 緩解了 IP 地址資源不足的問題,同時(shí)能使家庭中的多個(gè)設(shè)備共享同一條寬帶,,同時(shí)上網(wǎng),。另外,啟用 NAT 后,,外部設(shè)備無法主動(dòng)發(fā)起對(duì)內(nèi)網(wǎng)設(shè)備的連接,,相當(dāng)于起到了防火墻的作用,保護(hù)了內(nèi)網(wǎng)設(shè)備,,一定程度上提高了安全性,。NAT 通過「巧妙」的方式,在內(nèi)部地址和外部地址之間進(jìn)行轉(zhuǎn)換,。大部分情況下,,我們感受不到 NAT 的存在。但仍有部分應(yīng)用,,需要內(nèi)網(wǎng)設(shè)備作為服務(wù)器,,被外部連接,例如:

遠(yuǎn)程訪問家中的 NAS,、監(jiān)控?cái)z像頭

eMule,、BitTorrent 等 P2P 文件分享應(yīng)用,使自己的設(shè)備可供外部連接,,從而能夠連接到更多分享者,,獲取更快的下載、上傳速度

部分語音通話,、視頻會(huì)議應(yīng)用,,通信雙方直接連接,,獲取更好的通話質(zhì)量

部分聯(lián)機(jī)游戲,不會(huì)經(jīng)過第三方服務(wù)器,,需要玩家之間直接建立連接

對(duì)于這些應(yīng)用,,如果設(shè)備位于 NAT 之內(nèi),沒有公網(wǎng) IP,,就難以實(shí)現(xiàn)了,。

▍如何在 NAT 場景下,使內(nèi)網(wǎng)設(shè)備可被連接那么,,在 NAT 環(huán)境下,,應(yīng)該如何讓內(nèi)網(wǎng)設(shè)備作為服務(wù)器,使內(nèi)網(wǎng)設(shè)備被外部連接,?下文將介紹幾種常見的方式。

多撥部分運(yùn)營商,,支持在多個(gè)設(shè)備上,,通過 PPPoE 登錄同一個(gè)寬帶賬號(hào)。每個(gè)設(shè)備都能獲取到一個(gè)獨(dú)立的公網(wǎng) IP,。如果想讓游戲主機(jī)等設(shè)備獲取獨(dú)立的公網(wǎng) IP,,供外部連接,可以在光貓之后連接交換機(jī),。游戲主機(jī)連接交換機(jī),,直接進(jìn)行 PPPoE 撥號(hào)。無線路由器也連接交換機(jī),,家中的其他網(wǎng)絡(luò)設(shè)備經(jīng)過無線路由器訪問 Internet,。

圖片

但是多撥的局限也很大:

僅部分運(yùn)營商支持多撥

一些運(yùn)營商已不再為用戶分配公網(wǎng) IP,即使通過多撥,,也獲取不到公網(wǎng) IP

越來越多的設(shè)備不再支持 PPPoE,。例如 Xbox 360 支持 PPPoE,但 Xbox One 之后的版本已不再支持

設(shè)備直接獲取公網(wǎng) IP,,暴露在公網(wǎng)上,,安全性較差??赡苄枰獑为?dú)設(shè)置防火墻

需要額外購買交換機(jī),,連接在光貓和路由器之間。會(huì)改變家庭網(wǎng)絡(luò)拓?fù)?,操作比較復(fù)雜所以,,這種方式不太常用。

端口轉(zhuǎn)發(fā),、DMZ上文中介紹的 NAT,,路由器會(huì)根據(jù)內(nèi)網(wǎng)設(shè)備發(fā)出的報(bào)文,,自動(dòng)形成 NAT 表項(xiàng)。實(shí)際上,,用戶還可以在路由器上手動(dòng)配置端口映射關(guān)系,,讓內(nèi)網(wǎng)設(shè)備可被外部訪問。其中,,DMZ 功能,,可以指定一臺(tái)內(nèi)網(wǎng)設(shè)備為 DMZ 主機(jī)。到達(dá)路由器上的報(bào)文,,如果沒有匹配 NAT 表項(xiàng),,就會(huì)轉(zhuǎn)發(fā)到 DMZ 主機(jī)。從而使 DMZ 主機(jī)可被外部訪問,。DMZ 功能能讓一臺(tái)內(nèi)網(wǎng)設(shè)備上的所有端口,,都能被公網(wǎng)訪問。但這樣做也影響了內(nèi)網(wǎng)設(shè)備的安全性,,如果沒有特殊需要,,不建議打開這一功能。而 端口轉(zhuǎn)發(fā) 功能,,可以手動(dòng)設(shè)置端口映射關(guān)系,,讓指定內(nèi)網(wǎng)設(shè)備的指定端口,能夠被公網(wǎng)訪問:這種方式能夠精確控制哪些設(shè)備的哪些端口可被公網(wǎng)訪問,。但需要用戶具有一定的網(wǎng)絡(luò)知識(shí),,知道需要被公網(wǎng)訪問的應(yīng)用的端口號(hào),才能正確設(shè)置,。另外批評(píng)一下任天堂,,在官網(wǎng)的幫助文檔中,直接讓用戶打開了所有 UDP 端口的端口轉(zhuǎn)發(fā),。這樣做降低了安全性,,而且可能與用戶的其他端口轉(zhuǎn)發(fā)規(guī)則沖突。不過從另一個(gè)方面,,也說明了根據(jù)實(shí)際應(yīng)用,,手動(dòng)設(shè)置端口轉(zhuǎn)發(fā)規(guī)則,對(duì)部分用戶來說,,確實(shí)是一件門檻較高的事情:

UPnP IGD,、NAT-PMP上文中的端口轉(zhuǎn)發(fā)功能,需要手動(dòng)配置端口轉(zhuǎn)發(fā)規(guī)則,,操作起來比較麻煩,。而 UPnP IGD 和 NAT-PMP 協(xié)議,則能實(shí)現(xiàn)自動(dòng)配置端口轉(zhuǎn)發(fā)規(guī)則,。UPnP IGD(互聯(lián)網(wǎng)網(wǎng)關(guān)設(shè)備協(xié)議)和 NAT-PMP(NAT 端口映射協(xié)議)分別由微軟和 Apple 提出,,功能類似,,都可以讓應(yīng)用程序告訴路由器需要打開的端口,讓路由器自動(dòng)設(shè)置端口轉(zhuǎn)發(fā)規(guī)則,。UPnP IGD 和 NAT-PMP 的工作,,需要應(yīng)用程序和路由器的配合。首先需要在路由器上打開 UPnP 或 NAT-PMP 功能,。還需要使用支持的應(yīng)用程序,。目前 eMule、BitTorrent 等常見的 P2P 文件共享工具,,以及 Synology DiskStation 等 NAS 設(shè)備,,以及 Xbox 等游戲主機(jī),都已經(jīng)支持相關(guān)協(xié)議,。

光貓改為橋接模式,,使用路由器撥號(hào)安裝寬帶時(shí),運(yùn)營商附送的光貓,,一般會(huì)默認(rèn)打開路由功能,。這時(shí)光貓同時(shí)能作為路由器使用。但光貓的功能和性能有限,,一部分型號(hào)的光貓不支持 UPnP IGD 等協(xié)議,,或者不能手動(dòng)配置端口轉(zhuǎn)發(fā)規(guī)則,。所以,,可以考慮將光貓修改為橋接模式,通過自己的無線路由器撥號(hào),,充分利用路由器上端口轉(zhuǎn)發(fā),、UPnP IGD、DMZ 等功能,。正常情況下,,光貓改橋接,最簡單的方式是撥打運(yùn)營商的電話,,讓運(yùn)營商遠(yuǎn)程下發(fā)配置,。也可以登錄光貓的管理頁面,自行進(jìn)行修改,,具體需要上網(wǎng)搜索運(yùn)營商名和光貓型號(hào)來查找教程,。

向運(yùn)營商申請(qǐng)獲取公網(wǎng) IP由于 IPv4 地址資源不足,不少運(yùn)營商已經(jīng)不再分配公網(wǎng) IP,。在部分地區(qū),,可以嘗試撥打運(yùn)營商客服電話,申請(qǐng)分配公網(wǎng) IP,。另外一部分地區(qū)的運(yùn)營商,,在進(jìn)行 PPPoE 撥號(hào)時(shí),,用戶名中加入 pub,即可獲取公網(wǎng) IP,。部分地區(qū)需要付費(fèi)購買,,例如北京移動(dòng)寬帶,之前提供有公網(wǎng) IP 疊加包,。但是,,由于 IPv4 地址資源本身已經(jīng)不足,不一定能夠成功申請(qǐng)到公網(wǎng) IP,。另外,,擁有公網(wǎng) IP,家中的路由器能直接被公網(wǎng)訪問,,如果沒有配置好,,可能會(huì)帶來更多安全問題。所以,,需要根據(jù)自己的實(shí)際需要,,來決定是否申請(qǐng)公網(wǎng) IP。

PCP對(duì)于運(yùn)行 NAT 的家庭路由器,,通過 UPnP IGD 或 NAT-PMP 協(xié)議,,可以方便地將端口映射到公網(wǎng)。但是,,由于 IPv4 地址的不足,,電信運(yùn)營商也開始使用 NAT,不再為用戶分配公網(wǎng) IP,。那么是否有一種類似 UPnP IGD 或者 NAT-PMP 的協(xié)議,,運(yùn)行在運(yùn)營商的路由器上,能直接在運(yùn)營商路由器上創(chuàng)建端口轉(zhuǎn)發(fā)規(guī)則,?PCP 就是這樣一種協(xié)議,,該協(xié)議由 NAT-PMP 發(fā)展而來,運(yùn)行在運(yùn)營商的路由器上,。用戶的應(yīng)用程序可通過 PCP 協(xié)議,,申請(qǐng)?jiān)谶\(yùn)營商路由器上打開端口。PCP 需要運(yùn)營商的配合,,選用支持的網(wǎng)絡(luò)設(shè)備,,并打開 PCP 功能,才能正常工作,。根據(jù) V2EX 網(wǎng)友的測試,,國內(nèi)已有運(yùn)營商支持該協(xié)議,能通過 PCP 使 eMule 獲得 High ID。

服務(wù)器中轉(zhuǎn)上文中介紹了一系列使內(nèi)網(wǎng)設(shè)備可被外部訪問的方式,。但這些方式或者需要用戶手動(dòng)配置,,或者路由器的支持,或者需要運(yùn)營商的支持…… 如果上述方式都不可用,,就要通過第三方服務(wù)器中轉(zhuǎn)的方式,,讓內(nèi)網(wǎng)設(shè)備供外部訪問。這種方式雖然需要第三方服務(wù)器的參與,,浪費(fèi)資源,,但成功率最高,所以應(yīng)用范圍也很普遍,。例如常見的游戲加速器,,就可以通過第三方服務(wù)器中轉(zhuǎn)的方式,為游戲主機(jī)提供更高的 NAT 類型,。也有不少開源的反向代理工具,,可以搭建在自己的服務(wù)器上,使內(nèi)網(wǎng)服務(wù)可在公網(wǎng)訪問,。服務(wù)器中轉(zhuǎn)需要額外的服務(wù)器,,且需要消耗服務(wù)器上的流量。所以這種方式往往需要用戶額外付費(fèi),,例如購買游戲加速器會(huì)員,,或者自行購買虛擬服務(wù)器,并在服務(wù)器上搭建反向代理應(yīng)用,。而對(duì)于微信語音,、視頻通話等應(yīng)用,默認(rèn)也會(huì)使用其他 NAT 穿透技術(shù),,來節(jié)省微信服務(wù)器的流量費(fèi)用,,降低成本,。當(dāng)其他 NAT 穿透方式不可用時(shí),,則采用服務(wù)器中轉(zhuǎn)的方式,保證能夠正常通話,。

▍NAT 打洞

NAT 打洞的工作過程如果兩臺(tái)設(shè)備都位于 NAT 路由器之后,,沒有公網(wǎng) IP。在沒有第三方服務(wù)器的中轉(zhuǎn)下,,是不是就沒有辦法直接進(jìn)行通信了,?答案并不是這樣的。NAT 打洞,,就可以使兩臺(tái)內(nèi)網(wǎng)設(shè)備能夠直接通信,,不需要第三方服務(wù)器的中轉(zhuǎn)、不需要對(duì)路由器進(jìn)行特殊設(shè)置,、也不需要運(yùn)營商的配置,。微信語音,、騰訊會(huì)議、Skype 通信等消耗流量較大的應(yīng)用,,都會(huì)利用 NAT 打洞實(shí)現(xiàn)內(nèi)網(wǎng)設(shè)備間的直接通信,。這項(xiàng)技術(shù)聽起來很神奇,但是原理并不復(fù)雜,。我們以 PC 1,、PC 2 兩臺(tái)主機(jī)的通信為例。兩臺(tái)主機(jī)均位于 NAT 路由器之后,,各自的 IP 地址都是內(nèi)網(wǎng)地址,,無法互相通信。

圖片

在兩臺(tái)主機(jī)能夠直接通信之前,,需要一臺(tái)第三方服務(wù)器,。

圖片

PC 1、PC 2 首先需要給服務(wù)器發(fā)送一個(gè)報(bào)文,。經(jīng)過 NAT 路由器后,,報(bào)文的源 IP 和源端口號(hào)被轉(zhuǎn)換,同時(shí)在路由器上形成 NAT 表項(xiàng),。

圖片

報(bào)文到達(dá)服務(wù)器后,,服務(wù)器記錄下 PC 1、PC 2 兩側(cè)報(bào)文的源 IP 和源端口號(hào),,也就是 PC 1,、PC 2 兩側(cè)的公網(wǎng) IP 和外部端口號(hào)。然后,,服務(wù)器將兩臺(tái)設(shè)備的公網(wǎng) IP,、外部端口號(hào)發(fā)送給對(duì)方。這樣,,PC 1,、PC 2 都能相互知道對(duì)方的公網(wǎng) IP 和外部端口號(hào)。

圖片

其中一部分路由器的 NAT 檢查比較寬松,。一旦 NAT 表項(xiàng)建立,,只要路由器上收到的報(bào)文,目的 IP 和目的端口號(hào)能夠匹配到 NAT 表項(xiàng),,都會(huì)轉(zhuǎn)發(fā)到表項(xiàng)對(duì)應(yīng)的內(nèi)網(wǎng)設(shè)備,。對(duì)于這樣的路由器,PC 1,、PC 2 互相用對(duì)方的公網(wǎng) IP 與外部端口號(hào),,就能直接通信了,不再需要第三方服務(wù)器。

圖片

另一部分路由器的 NAT 檢查比較嚴(yán)格,,只有內(nèi)網(wǎng)設(shè)備向指定的目的 IP,、目的端口號(hào)發(fā)送過數(shù)據(jù),來自這個(gè) IP 和端口號(hào)的報(bào)文,,才能轉(zhuǎn)發(fā)到內(nèi)網(wǎng)設(shè)備,。

圖片

對(duì)于這樣的路由器,PC 1,、PC 2 兩臺(tái)主機(jī)需要同時(shí)向?qū)Ψ降墓W(wǎng) IP 和外部端口號(hào)發(fā)送一個(gè)報(bào)文,。這樣,PC 1 側(cè)的路由器認(rèn)為 PC 1 向 PC 2 發(fā)送過數(shù)據(jù),;PC 2 側(cè)的路由器認(rèn)為 PC 2 向 PC 1 發(fā)送過數(shù)據(jù),,PC 1 和 PC 2 就能相互通信了。經(jīng)歷了上述步驟,,NAT 打洞成功,,兩臺(tái)設(shè)備就可以不依賴第三方路由器,直接進(jìn)行通信,。當(dāng)然,,上述過程只是一個(gè)簡化的描述,不完全描述,。如果想要進(jìn)一步詳細(xì)了解 NAT 打洞的過程,,建議參考文末的 RFC 文檔鏈接??梢钥闯?,NAT 打洞可以在無需路由器特殊配置、無需運(yùn)營商配合的情況下,,實(shí)現(xiàn)兩個(gè)內(nèi)網(wǎng)設(shè)備的相互通信,。另外,對(duì)于多層 NAT 的網(wǎng)絡(luò)環(huán)境(例如運(yùn)營商和家庭路由器各進(jìn)行一級(jí) NAT),,NAT 打洞也能正常處理,。

NAT 類型與打洞成功率在一些路由器的設(shè)置頁面或文檔中,我們會(huì)看到,,NAT 能設(shè)置成不同的類型,,例如 Full cone,、Restricted cone,、Port-Restricted cone、Symmetric,。在 Xbox,、PlayStation、Nintendo Switch 等游戲主機(jī)上,我們也能看到不同的 NAT 類型,,例如 open,、moderate、strict 等,。那么,,這些 NAT 類型到底意味著什么?如何提升 NAT 類型,,來獲取更好的游戲體驗(yàn),?讓我們先來了解一下基礎(chǔ)的 NAT 類型:完全圓錐形 NAT(Full cone NAT):對(duì)于完全圓錐形 NAT,內(nèi)網(wǎng) IP 和內(nèi)網(wǎng)端口號(hào),,被映射為外部 IP 和外部端口號(hào),。當(dāng)路由器收到來自外部的報(bào)文時(shí),只要報(bào)文的目的 IP 和目的端口號(hào),,匹配到 NAT 表項(xiàng)的外部 IP 和外部端口號(hào),,都會(huì)轉(zhuǎn)換為對(duì)應(yīng)的內(nèi)網(wǎng) IP 和內(nèi)網(wǎng)端口號(hào),轉(zhuǎn)發(fā)到內(nèi)網(wǎng)設(shè)備,。

圖片

對(duì)于外部報(bào)文,,路由器并不關(guān)心報(bào)文的源 IP 和源端口號(hào)(即報(bào)文來自誰),只要收到匹配 NAT 表項(xiàng)的報(bào)文,,都能發(fā)送到內(nèi)網(wǎng)設(shè)備,。所以,完全圓錐形 NAT 是最寬松的 NAT,,打洞最方便,。受限圓錐形 NAT(Restricted cone NAT):與完全圓錐形 NAT 相比,受限圓錐形 NAT,,在內(nèi)網(wǎng)設(shè)備向外發(fā)送報(bào)文時(shí),,路由器除了生成 NAT 表項(xiàng),還會(huì)根據(jù)報(bào)文的目的 IP,,記錄下內(nèi)網(wǎng)設(shè)備正在與哪些外部設(shè)備通信,。這樣,只有內(nèi)網(wǎng)設(shè)備先發(fā)送報(bào)文給外部設(shè)備,,外部設(shè)備回應(yīng)的報(bào)文,,才會(huì)被轉(zhuǎn)發(fā)到內(nèi)網(wǎng)設(shè)備。而其他外部設(shè)備發(fā)送過來的報(bào)文,,即使匹配 NAT 表項(xiàng),,也無法發(fā)送到內(nèi)網(wǎng)設(shè)備。這樣的 NAT 安全性有一定的提高,,但是也提高了打洞難度,。兩臺(tái)內(nèi)網(wǎng)設(shè)備需要互相給對(duì)方發(fā)送一個(gè)報(bào)文,,才能打洞成功。

圖片

端口受限圓錐形 NAT(Port-Restricted cone NAT):端口受限圓錐形 NAT 和受限圓錐形 NAT 類似,,但增加了檢查的嚴(yán)格程度:受限圓錐形 NAT,,只會(huì)外部設(shè)備的 IP 地址,來檢查內(nèi)網(wǎng)設(shè)備與哪些外部設(shè)備通信過,。而端口受限圓錐形 NAT,,會(huì)同時(shí)根據(jù) IP 地址和端口號(hào)來進(jìn)行檢查。

圖片

對(duì)稱 NAT(Symmetric NAT):前面的三種圓錐形 NAT,,會(huì)根據(jù)內(nèi)網(wǎng)設(shè)備發(fā)出去的報(bào)文的源 IP,、源端口號(hào)兩個(gè)信息建立 NAT 表項(xiàng),將內(nèi)網(wǎng) IP 和內(nèi)網(wǎng)端口號(hào)映射到外部 IP 和外部端口號(hào),。內(nèi)網(wǎng)設(shè)備發(fā)出去的報(bào)文,,無論目的 IP 和目的端口號(hào)如何變化,不管發(fā)給哪臺(tái)外部設(shè)備,,都會(huì)被映射為相同的外部 IP 和外部端口號(hào),。而對(duì)稱 NAT,會(huì)同時(shí)根據(jù)內(nèi)網(wǎng)設(shè)備出方向報(bào)文的源 IP,、源端口號(hào),、目的 IP、目的端口號(hào)四個(gè)信息來建立 NAT 表項(xiàng),。如果報(bào)文的目的 IP,、目的端口號(hào)發(fā)生了變化,映射到的外部端口號(hào)也會(huì)發(fā)生改變,。對(duì)于對(duì)稱 NAT,,我們?cè)賮砘仡櫼幌虑拔闹?NAT 打洞的過程。內(nèi)網(wǎng)設(shè)備首先和第三方服務(wù)器通信,,內(nèi)網(wǎng) IP 和內(nèi)網(wǎng)端口號(hào)會(huì)被映射為一個(gè)外部 IP 和外部端口號(hào),。接下來,內(nèi)網(wǎng)設(shè)備和另一臺(tái)設(shè)備通信,,相同的內(nèi)網(wǎng) IP 和內(nèi)網(wǎng)端口號(hào),,又會(huì)被映射為另外一個(gè)外部端口號(hào)。這樣,,NAT 打洞就無法成功,。所以,在對(duì)稱 NAT 下,,很難進(jìn)行 NAT 打洞,。

圖片

而 Xbox、PlayStation,、Nintendo Switch 上的 NAT 類型,,基本上也跟上述四種 NAT 類型對(duì)應(yīng),。例如 Xbox 上的三種 NAT 類型:

open: 開放,。當(dāng)前主機(jī)可被所有外部主機(jī)連接,。如果主機(jī)擁有公網(wǎng) IP,或通過端口轉(zhuǎn)發(fā)等方式,,使主機(jī)可被外部訪問,,就能獲取到這種類型。

moderate: 當(dāng)前主機(jī)無法被外部主機(jī)直接連接,。但是可以通過 NAT 打洞等方式,,實(shí)現(xiàn)主機(jī)間的通信。一般對(duì)應(yīng)上文中的三種圓錐形 NAT,。

strict: 但是 NAT 比較嚴(yán)格,,無法打洞成功。一般對(duì)應(yīng)對(duì)稱 NAT,。所以,,對(duì)于能設(shè)置 NAT 類型的路由器(例如華碩的部分型號(hào)),將 NAT 類型設(shè)置為 Full cone NAT,,能夠更容易地實(shí)現(xiàn) NAT 打洞,,使游戲主機(jī)更容易被外部連接。

▍Q&A在這一章節(jié),,我會(huì)解答關(guān)于 NAT 的一些常見問題,。如果還有其他疑問,歡迎在評(píng)論區(qū)提出,,我會(huì)將相關(guān)問題與解答,,更新到這一章節(jié)。

對(duì)于「對(duì)稱 NAT」等更嚴(yán)格的 NAT,,是否還可以打洞,?按照上文中的描述,「對(duì)稱 NAT」是無法打洞成功的,。但是,,事實(shí)真的是這樣嗎?實(shí)際上,,運(yùn)用一點(diǎn)點(diǎn)概率知識(shí),,對(duì)稱 NAT 也是可以打動(dòng)成功的。讓我們先來了解一下「生日問題」:生日問題是指,,如果在一個(gè)房間要多少人,,則兩個(gè)人的生日相同的概率要大于50%? 答案是23人。這就意味著在一個(gè)典型的標(biāo)準(zhǔn)小學(xué)班級(jí)(30人)中,,存在兩人生日相同的可能性更高,。對(duì)于60或者更多的人,,這種概率要大于99%?!?nbsp;Wikipedia假設(shè)內(nèi)網(wǎng)設(shè)備 A 位于「圓錐形 NAT」之后,,內(nèi)網(wǎng)設(shè)備 B 位于「對(duì)稱 NAT」之后。這時(shí)候 A 向 B 發(fā)送報(bào)文,,B 并不知道 A 的報(bào)文經(jīng)過 NAT 之后,,公網(wǎng)端口號(hào)會(huì)被轉(zhuǎn)換為什么,所以無法向 A 發(fā)送數(shù)據(jù),。當(dāng)然,,在 B 不知道 A 的外部端口的情況下,也可以用不同的端口號(hào),,依次嘗試向 A 發(fā)送報(bào)文,,直到發(fā)送成功為止。但端口號(hào)一共有 65535 個(gè),,掃描所有端口并不現(xiàn)實(shí)…..那么,,如果我們運(yùn)用上「生日問題」,A 隨機(jī)向 B 以不同的源端口號(hào),,發(fā)送 256 個(gè)報(bào)文,,形成 256 個(gè) NAT 表項(xiàng);B 同時(shí)也隨機(jī)以不同的目的端口號(hào),,向 A 發(fā)送 256 個(gè)報(bào)文進(jìn)行探測,,打洞成功率就能達(dá)到 64%。如果隨機(jī)探測 1024 個(gè)端口,,打洞成功率則能達(dá)到 98%,。

利用 NAT 打洞,能實(shí)現(xiàn)哪些有趣的應(yīng)用前文中已經(jīng)提到,,語音通話,、視頻會(huì)議應(yīng)用,以及在線游戲,,都用到了 NAT 打洞,。那么,利用 NAT 打洞,,還能實(shí)現(xiàn)哪些有趣的應(yīng)用,?其實(shí),最常見的應(yīng)用,,就是通過 NAT 打洞,,將多個(gè)設(shè)備組建一個(gè)虛擬局域網(wǎng)。例如在家中有 NAS,,且沒有公網(wǎng) IP 的情況下,,通過這些利用 NAT 打洞的工具,,仍然可以在離開家的時(shí)候,用手機(jī)直接訪問 NAS 上的文件,。而且由于是直接通信,,不會(huì)因?yàn)榈谌椒?wù)器中轉(zhuǎn)而降低傳輸速度。另外,,UniFi Dream Machine 等路由器,,也通過 NAT 打洞等技術(shù),,使用戶安全,、方便地遠(yuǎn)程訪問路由器。

TCP 也是一種比較常用的協(xié)議,,為什么很少見到基于 TCP 的 NAT 打洞,?前面提到的 NAT 打洞,一般都是基于 UDP 協(xié)議的,。但是,,在 Internet 上,TCP 協(xié)議也十分常見,。例如我們?yōu)g覽網(wǎng)頁,、下載文件常用的 HTTP 協(xié)議,就是基于 TCP 的,。那么,,NAT 打洞時(shí),為什么不常用 TCP 協(xié)議,?這主要是因?yàn)?,TCP 相對(duì) UDP 復(fù)雜得多。UDP 協(xié)議是基于報(bào)文,,一個(gè)一個(gè)報(bào)文收發(fā)的,。而 TCP 需要先建立連接,然后才能傳輸數(shù)據(jù),。所以,,應(yīng)用程序可以方便地發(fā)送 UDP 報(bào)文,進(jìn)行打洞,。而對(duì)于 TCP,,操作系統(tǒng)底層處理了連接建立、斷開等過程,。應(yīng)用程序無法方便地控制單個(gè)報(bào)文的發(fā)送,。另外,部分路由器的 NAT 實(shí)現(xiàn),,也會(huì)對(duì) TCP 報(bào)文的狀態(tài)進(jìn)行額外檢查,。如果發(fā)送報(bào)文不屬于某個(gè)連接,,就會(huì)丟棄報(bào)文。所以,,TCP 打洞理論上能實(shí)現(xiàn),,但實(shí)現(xiàn)復(fù)雜,且成功率不高,。如果需要進(jìn)行 TCP 打洞,,建議改用 QUIC 協(xié)議。QUIC 協(xié)議雖然基于 UDP,,但引入了與 TCP 類似的可靠傳輸,、擁塞控制等機(jī)制。最新的 HTTP3 協(xié)議,,就是基于 QUIC 的,。

NAT 打洞必定會(huì)成功嗎在網(wǎng)上,我們會(huì)常??吹疥P(guān)于「某個(gè)工具的 NAT 打洞成功率更高,,而另一些工具經(jīng)常打洞失敗」的討論。那么,,如何理解這里說的「成功率」?NAT 打洞為內(nèi)網(wǎng)設(shè)備之間的直接通信,,提供了可能性。但是,,不同廠商,、不同設(shè)備的 NAT 實(shí)現(xiàn),不是完全相同的,。另外,,兩臺(tái)內(nèi)網(wǎng)設(shè)備之間,可能會(huì)經(jīng)過多個(gè)路由器和防火墻,,更增加了復(fù)雜性,。所以,NAT 打洞無法保證完全成功,。例如前文中介紹的對(duì)稱 NAT,,就無法保證 100% 成功。所以,,一個(gè)比較好的 NAT 穿透實(shí)現(xiàn),,會(huì)進(jìn)行多種嘗試:例如先嘗試 UPnP IGD 和 NAT- PMP,然后嘗試不同的 NAT 打洞方案,。在最終無法打洞成功時(shí),,選擇服務(wù)器中轉(zhuǎn)等備用方案。

NAT 打洞是否完美解決了 NAT 引入的問題?是否存在缺點(diǎn),?NAT 打洞雖然能讓內(nèi)網(wǎng)設(shè)備直接通信,,那么,是不是大部分設(shè)備,,都不需要公網(wǎng) IP,,直接位于 NAT 之后就行了。其實(shí)不是這樣,,比起使用公網(wǎng) IP 直接通信,,NAT 打洞仍存在不少缺點(diǎn),例如:

NAT 打洞仍需第三方服務(wù)器的參與

NAT 打洞無法 100% 成功,,尤其是對(duì)稱 NAT,,更難打洞成功

NAT 打洞的過程,需要開發(fā)者對(duì)應(yīng)用程序進(jìn)行適配

為了節(jié)省資源,,路由器上的 NAT 表項(xiàng)會(huì)超時(shí)刪除,。所以,,NAT 打洞后,,需要定期發(fā)送報(bào)文,維持路由器上的 NAT 表項(xiàng),。否則需要重新打洞

NAT 打洞的操作本身,,也增加了延遲

NAT 打洞對(duì) TCP 的支持不佳,一般使用 UDP,。但不少運(yùn)營商會(huì)對(duì) UDP 進(jìn)行限速,,導(dǎo)致打洞后雖然設(shè)備間能直接通信,但無法以較快的速率傳輸

▍NAT 的未來根據(jù)前面的介紹,,我們看到,,NAT 在緩解 IPv4 地址資源不足的問題上,做出了巨大的貢獻(xiàn),;同時(shí),,NAT 的出現(xiàn),也避免了個(gè)人設(shè)備暴露在公網(wǎng),,「意外地」提升了安全性,。但是,NAT 帶給我們更多的,,是各種各樣的限制...... 目前,,IPv6 正在逐步普及,等我們徹底用上了 IPv6,,NAT 可能就沒有了存在的意義,。但是,為了保證安全性,家用路由器,、PC,、NAS 等設(shè)備上,一般都有防火墻功能,。防火墻默認(rèn)會(huì)阻止傳入連接,,除非用戶手動(dòng)配置防火墻,打開特定端口,。所以,,即使 NAT 被淘汰,類似 NAT 打洞的技術(shù),,在 IPv6 時(shí)代仍會(huì)得到應(yīng)用,。那么,當(dāng) IPv6 普及,,NAT 消失,,Internet 是否會(huì)誕生新的有趣的應(yīng)用?家中的每個(gè)物聯(lián)網(wǎng)設(shè)備都有了公網(wǎng) IPv6 地址,,是否會(huì)有一些新的玩法,?是否會(huì)帶來新的安全性問題?隨著國內(nèi)大幅度推進(jìn) IPv6 的建設(shè),,這些問題應(yīng)該很快會(huì)有答案,。

    本站是提供個(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)論公約

    類似文章 更多