1. 程式人生 > >網路穿透與音視訊技術(1)——NAT的概念及工作模式(上)

網路穿透與音視訊技術(1)——NAT的概念及工作模式(上)

(這個專題我們將介紹網路穿透的基本知識,以及建立在此基礎上的實時視訊語音通訊技術。不只是介紹理論知識,還介紹實際案例 )

1、概念介紹

1.1、NAT基本概念

NAT英文全稱是“Network Address Translation”,中文意思是“網路地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標準,允許一個整體機構以一個公用IP(Internet Protocol)地址出現在Internet上(摘自百度)。瞭解NAT的定義、NAT裝置的工作方式等基本知識,是我們進行網路穿透與音視訊技術學習的基礎。本文和後續幾篇文章將按照NAT基本概念、NAT對映模式、NAT對映實現方式、NAT檢驗這樣的順序進行知識介紹和梳理。

1.2、NAT裝置是什麼

常見的各種網路中(稅務專網、警務專網、教育網、網際網路、軍網等),路由器的應用都非常廣泛。路由器實現了內部網路到外部網路的連線,除了起到子網隔離、有害資訊防護、路徑選擇和防火牆的作用外,路由器最重要的作用之一就是實現網路地址轉換(NAT)功能——只有進行了各種模式下的網路地址轉換和對映工作,路由器所隔離的內網和外網才能進行資料通訊。

所以路由器實際上就是一種最常見的帶有NAT功能的裝置,我們日常生活中使用的網路的存在多級地址轉換,並且處於不同級別的NAT裝置其地址轉換模式、效能都有較大差異。例如在電信核心機房的帶有NAT功能的裝置,其工作效能和我們家裡使用的NAT裝置的工作效能肯定是不一樣的。

1.3、為什麼需要NAT和NAT裝置

TCP/IP協議是一種四層協議簇(七層協議簇並不完全滿足),IP地址工作在網路層,埠描述資訊工作在傳輸層。一個IPV4的結構一共32位,其實在除去廣播段、組播段、保留段、內網段等特定IP地址範圍後,能夠工作在外網的固定IP地址非常有限(一種說法是IPV4已基本分配完畢,另一種說法是IPV4資源還很多隻是運營商捂著。但是IPV6 128位地址的推廣非常緩慢是顯而易見的,這涉及到廣泛的應用程序升級問題,有時間的話我們可以專門作為一個專題來進行探討)。

那麼有的朋友會說,作業系統上還有多個埠可以使用啊,IP + 埠這種組合方式還可以將目標地址再進行擴容。那麼抱歉,這也是有限的或者說擴容潛力是有限的。一個作業系統的埠範圍從 0——65535,其中低埠為保留埠,包括很多預設約定的埠。這樣算下來,我們通常能自定義使用的埠編號就從1024開始一直到65535。(那麼為什麼65535是最大埠數呢?因為TCP/IP協議簇中,只有16位描述埠資訊)

所以在我們所知的網路中,網路工程師都會使用帶有NAT功能的裝置/軟體來進行網路隔離,達到不同網路中進行IP、埠重用的目的。如下圖所示:

這裡寫圖片描述

當然就如前文描述的那樣,帶有NAT功能的網路隔離裝置還能完成很多其它重要功能,例如防火牆、最優路徑選擇、橋接等。

2、三種NAT裝置的對映模式

在本小節中,我們不但會介紹三種NAT裝置的對映模式,還會針對每種對映模式進行工作場景的介紹。目前NAT裝置有三種對映模式,它們是靜態對映、動態對映和網路地址埠對映(NAPT/PAT),其中又由於NAPT/PAT支援埠對映轉換,所以它又是目前使用最廣泛的一種對映模式。

2.1、靜態對映(Static NAT)

靜態對映(Static NAT)模式是指內部IP地址在NAT裝置上都有一個穩定且同一時間不重用的外部網路IP與之對應,如下圖所示:

這裡寫圖片描述

靜態對映模式的優點和缺點都非常明顯,優點是對應關係簡單,NAT裝置中的對映表易於查詢和維護;缺點也很明顯,內部網路的每一個終端要訪問外部網路都需要一個外部網路IP做對應,這加大了外部網路/上層網路的IP分配壓力。

2.2、動態對映(Pooled NAT)

動態對映模式可以解決靜態對映的一些問題,首先面對外部網路的NAT裝置擁有有限的多個外部IP地址,這些IP地址同樣是通過外部網路/上層網路分配而來,其次在NAT裝置內部維護了一個可用的外部網路IP地址池。當內部網路的某個終端需要完成地址轉換操作時,NAT裝置就會從自己內部維護的這個“地址池”中取出一個可用的外部網路IP地址作為對映關聯,如下圖所示:

這裡寫圖片描述

當完成本次外部資源的訪問或一段時間不再有相關資料通訊,這個對映關係將從NAT裝置的對映表中被剔除,外部網路IP地址將回到NAT裝置的“地址池”中,準備下一次被使用。從上圖可以看出動態對映模式的幾個工作特點,首先對映關係是隨機的,內部網路地址“192.168.100.201”第一次對映的外部網路地址可能是“47.92.50.240”,下一次同樣的內部網路地址可能對映的外部地址就變成了“47.92.50.241”。其次NAT裝置被外部網路/上層網路分配的網路地址雖然還是多個,但由於引入了“池”的概念,所以增加了一定的外部網路地址的重用性,減少了外部網路的地址分配壓力。

2.3、網路地址埠對映(NAPT/PAT)

這種工作模式下,面向外部網路/上層網路的NAT裝置可以只被外部網路/上層網路分配了一個網路地址。網路地址埠對映(NAPT/PAT)工作在TCP/IP的傳輸層,是目前使用最普遍NAT對映模式,首先是靜態對映和動態對映都不支援基於網路埠複用的對映轉換;其次是因為NAPT/PAT可以最大限度的節約外部網路/上層網路的IP資源,所有內部網路的終端都可以基於NAT裝置,對映同一個外部網路地址的不同埠。

那麼我們用一個例項說明,當局域網(內部網路)一個IP地址去訪問某一個外網服務地址時,NAT裝置是怎樣完成地址和埠轉換的。這個例項可以對NAPT/PAT的工作方式有一個大致瞭解(為了著眼重點,如何查詢DNS並解析域名、路由表如何完成查詢等工作就不多介紹了)。

這裡寫圖片描述

上圖中可以看到,當一個內網IP為“192.168.100.201”的作業系統需要訪問網際網路資源時,首先請求會通過作業系統上的一個埠(上圖中呈現的埠號是41000,實際上這些源埠往往是作業系統隨機分配的)傳送到第一級NAT裝置上,該NAT裝置使用NAPT/PAT對映模式,所以該NAT裝置會為內部網路地址“192.168.100.201:41000”建立一個新的對映關係,對映到“172.16.80.62”的“13445”埠。接下來第一級NAT裝置會將這個資料請求報文的源地址從192.168.100.201:41000改寫成172.16.80.62:13445(這種改寫方式實際上是NAPT/PAT對映模式中的Source NAT(SNAT)子模式,後文再進行詳細說明)。如下圖所示:

NAT裝置改寫SourceNAT

接下來這個被改寫的資料報文會被當前NAT裝置傳送到下一層網路的閘道器,既是上圖中所示的“公司核心路由器”,後者同樣也是一個帶有NAT功能的裝置,同樣也會將當前資料報文再次進行改寫(前提是這個NAT裝置支援NAPT/PAT-Source NAT對映模式)。改寫的效果如下圖所示:

這裡寫圖片描述

以上介紹的NAPT/PAT的工作模式是不是感覺似曾相似,還記得關於LVS工作模式的介紹嗎——LVS-NAT(https://blog.csdn.net/yinwenjie/article/details/46845997),是的實際上LVS-NAT的工作模式就是借鑑的NAT裝置的NAPT/PAT對映模式。

隨後說明一下,上圖中每一個區域網的NAT裝置都有且只有一個外部網路/上層網路地址,在實際情況下如果你的ADSL路由器是圖中的NAT裝置,那麼它的外網IP是由電信運營商分配的,目前這些由電信運營商分配“外網IP”有時是一種所謂的“虛擬IP”(實際上是一種電信的內網IP,這又是另一個話題這裡就不討論了)。

2.3.1 NAPT/PAT子模式——Source NAT

既然NAPT/PAT對映模式的本質是改寫資料報的地址和埠,那麼根據改寫地址和埠的方式,NAPT/PAT又可以分為Source NAT 和 Destination NAT兩種子對映模式。所謂Source NAT是指NAT裝置在向外部網路傳送資料報之前,會將資料報的源IP地址和源埠進行改寫,並建立對映關係。所以在本篇文章(2.3節)上述內容中介紹的NAPT/PAT對映模式,實際上就是Source NAT對映模式。

2.3.2 NAPT/PAT子模式——Destination NAT

那麼NAT裝置既然可以通過改寫資料報文的源地址和源埠實現NAPT/PAT,那麼自然就可以通過改寫資料報文的目標地址和目標埠實現NAPT/PAT,後者這種方式就是Destination NAT。Destination NAT的應用場景很多,其中一種就是伺服器通過NAT裝置對客戶端的請求進行相應,如下圖所示:

這裡寫圖片描述

上圖中客戶端通過NAT裝置向伺服器傳送請求報文(可能就是HTTP資料報或者可能是基於TCP的MQTT資料報),這個請求資料報通過NAT裝置時會被NAT裝置通過Source NAT方式建立對映關係並進行資料報改寫;當伺服器處理完本次請求,並生成一個響應資料報文。這個響應資料報文通過NAT裝置時,NAT裝置將基於之前建立的對映關係,通過改寫目標地址和目標埠的方式進行處理——Destination NAT。

Destination NAT還有一些比較典型的應用場景,例如負載均衡架構——Nginx、LVS、Tengine等都有類似原理的應用。如下圖所示:

這裡寫圖片描述

(接後文)