深入理解網絡地址轉換和NAT穿透,以及STUN、TURN、ICE的關係

2020-12-14 酷扯兒

原文標題《穿越NAT的迷霧:深入理解網絡地址轉換和NAT穿透,以及STUN、TURN、ICE的關係》

本文轉載自【微信公眾號:碼磚雜役,ID:whatis9527want】,經微信公眾號授權轉載,如需轉載與原文作者聯繫

NAT是什麼?

NAT是Net Address Translation的縮寫,即網絡地址轉換

NAT部署在網絡出口的位置,位於內網跟公網之間,是連接內網主機和公網的橋梁,雙向流量都必須經過NAT,裝有NAT軟體的路由器叫NAT路由器,NAT路由器擁有公網IP。

你的家庭和辦公網絡環境大多是經過NAT路由中轉的方式聯網。這也意味著你在家PC通過WIFI聯網,你在PC上通過命令行(ifconfig)查看到的IP位址(內網),跟通過baidu查看到的IP位址(公網),不一樣,這也能證明你的PC處於NAT後面。

NAT解決什麼問題?

NAT主要用來解決IPv4地址不夠用的問題

IPv4用32位表示網絡地址,最大能表示2的32次方(2^32=40億)個IP位址,但隨著各種聯網設備的快速增長,IPv4地址不夠用了,IPv6又遠水不解近渴,怎麼辦?NAT技術應運而生。

NAT是怎麼工作的?

內網地址:RFC1918規定了三個保留地址段落:

10.0.0.0-10.255.255.255;

172.16.0.0-172.31.255.255;

192.168.0.0-192.168.255.255。

這三個範圍分別處於A、B、C類的地址段,不向特定的用戶分配,被IANA作為私有地址保留。這些地址可以在任何組織或企業內部使用,和其他Internet地址的區別就是,僅能在內部使用,不能作為全球路由地址。

NAT後面的內網主機使用內網地址,也叫本地地址,是主機上內網上的標識。內網主機要跟公網通信,必須經過NAT中轉,NAT會自動為經過的網絡包做內外網地址轉換(這也是NAT的含義),公網地址是主機在網際網路上的標識

NAT原理:內網主機向外網主機發送的網絡包,在經過NAT時,IP和PORT會被替換為NAT為該主機分配的外網IP/PORT,也就是該內網主機在NAT上的出口IP/PORT,外網主機收到該網絡包後,會視該網絡包是從NAT發送的;外網主機只能通過NAT為該內網主機分配的外網IP/PORT,向它發送網絡包,內網主機的本地地址對外界不可見,網絡包在經過NAT的時候,會被NAT做外網IP/PORT到內網IP/PORT的轉換。

可見,NAT維護內網主機內網地址和在NAT上為它分配的外網地址之間的映射關係,需要維護一張關聯表。NAT在兩個傳輸方向上做兩次地址轉化,出方向做源(Src)信息替換,入方向做目的(Dst)信息替換,內外網地址轉換是在NAT上自動完成的。NAT網關的存在對通信雙方是透明的。

那NAT是如何緩解IPv4地址枯竭問題的呢?答案是埠多路復用,通過PAT(Port Address Translation),讓NAT背後的多臺內網主機共享一個外網IP,最大限度節省外網IP資源。

NAT背後的多臺內網主機是如何實現共享一個外網IP的呢?它是通過修改外出數據包的源IP和埠。

假設內網主機H1和H2位於NAT之後,H1通過本地地址10.0.0.1:port1給公網主機X發送數據包,在經過NAT的時候,該數據包的IP:PORT被修改為NAT的外網地址1.2.3.4:2222。

H2通過本地地址10.0.0.2:port2向公網主機X發送數據包,在經過NAT的時候,該數據包的ip:port被修改為NAT的外網1.2.3.4:3333。

雖然H1和H2的IP都被映射到了相同的NAT外網IP(1.2.3.4),但NAT為它們分配了不同的埠(2222和3333),所以可以通過埠區分H1和H2。之後公網主機X向內網主機H1發送網絡包的時候,只需要把1.2.3.4:2222作為目標地址:埠,就可以由NAT自動完成轉換,正確轉交到H1主機。

這便是基於埠復用的NAT方式(NPAT)的工作原理。通過將內網不同連接(主機到NAT)映射到同一公網IP的不同埠,從而實現公網IP的復用和解復用,這種一對多的方式也叫做埠轉換PAT或IP偽裝。

NAT的約束

NAT把網絡分為公網和內網,內網主機可以給外網主機直接發送網絡包,而外網主機卻不能主動給內網主機發送網絡包,也就是說網絡通信必須由內網側主動發起,公網主機不能主動訪問內網主機,這是NAT帶來的限制和約束。

內網主機主動給外網主機發送過網絡包之後,外網主機才有可能給內網主機發送網絡包。

NAT的類型

NAT的實現方式分靜態轉換動態轉換埠多路復用三種,但目前用的最多的還是埠多路復用,是最典型的一種應用模式。

首先,從大的層面上,埠復用型NAT(Net Address Port Translation)可以分為對稱型NAT和非對稱型NAT。

對稱型NAT(Symmetric NAT),內網某主機向公網的不同網絡地址(或埠)發送2個不同的網絡包,對稱型NAT會為這2個不同的網絡包產生2個不同出口埠號。換言之,NAT網關會把內部主機「地址埠對」和外部主機「地址埠對」完全相同的報文看作一個連接,在NAT網關上創建一個公網「地址埠對」作為出口地址,只有收到報文的外部主機從對應的埠對發送回應的報文,才能被轉換。對稱型NAT無法打洞,只能通過TURN Server轉發。非對稱型NAT(也叫錐型NAT),內網某主機向外網主機發送網絡包,NAT會為該內網主機生成一個公網(出口)IP:PORT,之後,不管該內網主機會通過該出口IP:PORT跟外網所有(如果可以)主機通信,而不會被映射到其他埠(出口IP顯然也不會變)。

錐型NAT細分:

Full Cone NAT(全錐型NAT):只要內網某主機給外網地址主動發送過一個網絡包(NAT會為之生成公網出口IP:PORT),外網任何主機都可以通過該內網主機在NAT上的出口IP:PORT,向該內網主機發送網絡包,也就是對外網主機IP和PORT都不設限,這是最寬鬆的類型。Restricted Cone NAT(IP受限型NAT):如果內網某主機,給外網某IP發送過一個網絡包,則外網可以通過該IP向該內網主機發送網絡包,注意,只要以該IP作為網絡包src ip就行,其他IP作為src不行,不限制埠號。舉個例子,內網主機10.0.0.1給外網1.2.3.4:2222主動發過網絡包,外網主機可以通過1.2.3.4:3333(作為src)向內網主機10.0.0.1發送網絡包,埠號不限,但不能通過其他ip向內網主機發送網絡包。Port Restricted Cone NAT(Port受限型NAT):跟IP受限類似,但是它更嚴格,既限制IP,又限制埠號。內網主機給外網主機10.0.0.1:2222發送過網絡包,外網只能以10.0.0.1:2222為src,向內網主機發送網絡包。

NAT類型檢測

NAT隔離內外網,外網不能主動訪問內網,但P2P項目,需要位於NAT後的主機(Peer)建立連接,所以需要檢測NAT類型,再判斷Peer之間能否直接建立連接,以及怎麼建立連接。

檢測NAT類型主要是利用上述NAT特點,通過測試連通性和比對埠號來實現目的,所以要搞清楚類型檢測,必須對照NAT類型定義來看。

另外,重複一下:NAT後的主機給外網發網絡包,網絡包在經過NAT的時候,NAT會為該主機分配出口IP:PORT,NAT會用該公網(出口)IP:PORT替換網絡包的SRC,這樣,接收端收到包之後,查閱包的src信息,會得到NAT出口IP:PORT,如同該包是直接從NAT發送過來的一樣。

NAT類型檢測的前提條件:需要有一臺位於公網的伺服器(server),且該server擁有2個公網IP位址,並在ip1:port1和ip2:port2做監聽

注意:檢測步驟中的server通過ip:port向client回包,是指server回包的時候,會把ip:port設置為rsp包的src ip和src port。

檢測的步驟:

【步驟1】判斷client是否位於NAT後面

很簡單,位於NAT後面的主機跟公網通信要做內外網地址轉換,兩個IP不一樣。所以,可以通過以下操作完成:

client向server ip1:port1發送一個req UDP包。server收到udp包之後,從IP頭部取出src IP,從UDP頭部取出src PORT,作為rsp UDP的payload,發送給client。client收到rsp UDP,取出payload裡的IP和PORT,跟自己的IP對比,如果相同,則client位於公網,擁有公網IP,檢測完成;否則,client位於NAT背後。

【步驟2】判斷是否全錐型Full Cone NAT

client向server ip1:port1發送一個req UDP包,請求server通過ip2:port2(以ip2:port2作為rsp UDP的src)向client回UDP包。

根據全錐型NAT的定義,如果client收到了rsp UDP,那說明NAT對外網發包IP都不限制,說明client是全錐型NAT。但全錐型NAT很少,大概率收不到rsp UDP包,如果收不到,則需要繼續判斷。

【步驟3】判斷是否對稱型 Symmetirc NAT

client向server ip2:port2發送一個req udp。server收到後,把收到的req udp的src ip和src port取出來,塞進rsp UDP的payload欄位,通過ip2:port2(以ip2:port2作為rsp UDP的src)向client回UDP包。

收到的rsp UDP之後,取出payload中的ip和port,跟步驟1中的ip和port對比,如果不一樣,則是對稱型NAT。

因為根據前面的定義,對稱型NAT,會為同一內網IP,根據不同的外網IP,分配不同的NAT出口PORT。

如果一樣,那麼肯定是錐型NAT,步驟2已經測試了全錐型,那剩下的就只有ip受限錐型和port受限錐型兩種NAT類型需要繼續判斷了。

【步驟4】判斷是受限錐型Restricted Cone還是PORT受限錐型

client向server ip2:port2發送一個req udp,要求server用ip2、且不同於port2的埠向client回rsp udp。就是用ip2+不同於port2的其他port作為udp的src向client回包。

如果client能收到rsp udp,那說明只要ip相同,哪怕port不相同,NAT也放行,所以NAT是IP受限型;如果沒收到,那就是PORT受限型,說明只能通過port2回包。

至此,所有的NAT類型便都檢測出來了,是不是很簡單?

對稱型NAT不能直接建立P2P連接,只能通過中轉伺服器relay包。

相關焦點

  • 現網中必用的NAT地址轉換技術,理論+實戰,三分鐘快速掌握
    現網中必用的NAT地址轉換技術,理論+實戰,三分鐘快速掌握 網絡地址轉換技術NAT(Network Address Translation)主要用於實現位於內部網絡的主機訪問外部網絡的功能。
  • 網絡地址轉換以及埠映射
    1網絡地址轉換windowsserver2003內置的RRAS組件集成了非常完善的網絡地址轉換功能,可以用來將小型辦公室、家庭辦公室連接到Internet網絡1.1網絡地址轉換技術網絡地址轉換NAT工作在網絡層和傳輸層,既能實現內網安全,有能提供共享上網服務
  • 為什麼需要內網穿透以及內網穿透的定義和應用
    為什麼需要內網穿透以及內網穿透的定義和應用
  • 一文解讀什麼是橋接、NAT連接和獨享連接
    為了學習和使用Linux,多數人選擇了使用VirtualBox虛擬機的方式來安裝Linux系統。VirtualBox提供了多種網絡連接方式,不同的網絡連接方式決定了虛擬機是否可以聯網,以及是否可以和宿主機互相ping通。
  • 中國新說唱ice是誰 ice冰塊個人資料微博地址
    中國新說唱ice是誰 ice冰塊個人資料微博地址  中國新說唱ice微博是7Gurus_ICE冰塊,微博地址:https:///icecakeyang000?is_hot=1  去年ICE也曾參加中國有嘻哈並且成功拿到了鏈子,不過卻因為同組合的兄弟,遭到不公平待遇而棄賽,真的是十分遺憾。
  • 深入作業系統,從內核理解網絡包的接收過程(Linux篇)
    我們現在想知道的是:當網絡包達到網卡,直到我們的recvfrom收到數據,這中間,究竟都發生過什麼?通過本文,你將從作業系統內部這一層深入理解網絡是如何實現的,以及各個部分之間是如何交互的。>《不為人知的網絡編程(六):深入地理解UDP協議並用好它》《不為人知的網絡編程(七):如何讓不可靠的UDP變的可靠?》
  • The differences among 「sleep in」,「sleep over」 and 「turn in」
    We can eat ice cream and watch movies!最後,我們來講搭配「turn in」。它表示 「上床睡覺」這個動作。來聽下面兩個例句:Is that the time? It's late!
  • 《最終幻想勇氣啟示錄》穿透心靈怎麼打 穿透心靈打法攻略教學
    最終幻想勇氣啟示錄穿透心靈打法攻略 穿透心靈出兵陣容和裝備 1.彩... 最終幻想勇氣啟示錄穿透心靈應該怎麼打呢?穿透心靈打法陣容應該如何搭配呢?裝備應該選什麼好呢?接下來就跟隨小編一起來看看吧!
  • 高考英語高分必備:有關turn的四組短語
    2. in turn 意為「依次」。如:   We will cross the bridge in turn. 我們將依次過橋。   They answered the teacher’s questions in turn. 他們依次回答老師的問題。
  • CRAVITY "My Turn" 歌詞中文音譯
    turn turn)My turn (My turn) my turnMy turn (My turn)My turn高k中嗯 No 五裡勒r 米到撒音 夢幾r 套老耐夠 打西 含包n 到Turn on GPS got my eyes on you帶料 嘎r給 熬低等 Under view
  • turn(轉) up/down/on/off,暈了沒?
    曾記否,當年被turn up/down/on/off短語辨析整得懷疑人生???都說城市套路深,當你做完短語辨析題頓覺生無可戀,學了十多年假英語,有木有???那問題到底出在哪?是老師沒用心教?還是學生沒用心學?都不是,老師和學生都很用心。關鍵是沒有理解。
  • turn down與turn up與turn on與turn off的區別
    1.turn down意為「關小;調低」,其反義詞為turn up「開大;調大」。例如:The music is too noisy, can you turn it down?音樂太吵了,你能調低一點嗎?
  • Nat:無條件的愛高學歷男神
    代表作品:《兩個爸爸》《朋友圈》Instagram:natsakdatorn新浪微博:NATsakdatorn泰國粉絲站:natsakdatorn_fc推特:NATsakdatornFC不知道有沒有小夥伴迷上《朋友圈》裡的Sam醫生呢?第一集裡撒嬌的小模樣,一看就是小編喜歡的款。
  • turn over a new leaf不要理解為「翻轉一片新的葉子」
    turn over 是「翻轉、翻過去」的意思,但是 a new leaf 不是指「一片新的樹葉」,而是指 a new page,書本裡新的一頁。這個口語表達的意思就是:「重新開始,改過自新,洗心革面」。例句:Sofar so good.
  • 新手學電腦,如何查看計算機的ip地址,以及MAC地址
    大家好,我是「科技跑的快」,今天教大家如何查看計算機IP位址以及MAC地址。計算機的IP位址一旦被分配,可以說是固定不變的,因此,查詢出計算機的IP位址,在一定程度上就實現了黑客入侵的前提工作。使用ipconfig命令可以獲取本地計算機的IP位址和物理地址,想玩電腦專業或更深入的都要會這個知識。具體的操作步驟如下。Step 01右擊【開始】按鈕,在彈出的快捷菜單中執行【運行】命令。Step 02打開【運行】對話框,在【打開】後面的文本框中輸入cmd命令。
  • 詞組的固定搭配:in turn
    Even if you're not a big fan of mobile games, there is one idea in today's lesson that should be examined a bit more: Honor of Kings is crazy popular, and its game assistant has in turn
  • Ice, Snow Tourism of Changchun Promoted in Guangzhou, Hangzhou
    During their stay in the two cities, the delegation of Changchun Municipal Bureau of Culture, Broadcasting and Tourism led by Jia Lina, Deputy Mayor of Changchun City, presented a gorgeous feast of ice
  • Ipv6轉換難點分析之一:協議轉換技術
    採用協議轉換實現IPv4到IPv6過渡的優點是不需要進行IPv4、IPv6節點的升級改造,缺點是用來實現IPv4節點和IPv6節點相互訪問的方法比較複雜,網絡設備進行協議轉換、地址轉換所需的技術難度較高,一般企業和網絡技術公司難以提供成熟穩定的應用方案。
  • 「bite the ice」別理解成「咬冰塊」
    大家好,歡迎來的餅哥英語的頻道,今天我們分享一個非常有用且地道的表達——bite the ice, 這個短語的含義不是指「咬冰塊」,其正確的含義是:bite the ice 見你的鬼!去你的!If that’s what you think. you can just bite the ice!你要是那麼想,就見你的鬼去吧! A: Change your life radically !要徹底改變你的生活!B: Bite the ice ! 去你的!Get away from me!
  • turn的詞組和常用用法
    turn的詞組和常用用法turn on/turn off/turn out/turn into/ turn down /turn over/turn away/turn back/turn to/turn up/turn in/turn around