IPV4地址枯竭的背後,深度解析NAT協議的利與弊
摘要:如果通信雙方都是使用的公網IP,這不會造成什麼問題,但如果那個嵌入式地址和端口是內網的,鏈接就不可能成功建立,這樣就導致了NAT設備後的客戶端網絡應用程序出現連接故障。除此之外,在傳統的IP地址結構中,每個IP地址都對應一個網絡連接,Internet的軟件設計也是基於此前提之上,但使用NAT協議的網絡中卻可能存在多個主機使用相同的地址的情況。
2019年11月26日,負責英國、歐洲、中東和部分中亞地區互聯網資源分配的歐洲網絡協調中心(RIPE NCC)正式宣佈:共計43億個IPV4地址已經全部分配完畢!
關於IPV4地址枯竭的問題,人們對此並不感到意外。因爲互聯網一開始只是設計給美國軍方使用的,可能當時誰也沒有想到互聯網發展的速度會如此之快。早在二十世紀初,IPv4地址稀缺的問題便已初現端倪,對此人們也早早的做好了準備措施——第六代網際協議IPV6。但是在二者的過渡工作尚未完成之前,IPV4地址的匱乏和爆炸式增長的入網需求矛盾日益加深。該怎麼解決這個問題呢?什麼是NAT協議?
NAT(Network Address Translator),網絡地址翻譯器,也稱網絡地址轉換協議,NAT協議可以將一個由私有IP構成的局域網中所有的計算機,通過一臺具有公網IP和NAT功能的設備來訪問公網公網資源。因爲局域網中的設備可以通過很少的公有IP(甚至一個)就能實現網上衝浪,很大程度上節約了地址資源,所以在實際場景中,NAT被應用的極其廣泛。豪不誇張的說,哪裏有網絡,哪裏就有NAT的身影。
私網是無法直接訪問公網的,這是因爲用戶的私網地址會被公網的網關直接過濾掉,就算能通過公網網關,其響應包也無法返回正確的源地址。所以在內網的數據包進入公網之前,必須先將其轉換成公有IP。NAT所提供的的就是一種“私到公”的過渡技術。除了翻譯IP地址外,NAT同時還兼具着TCP/UDP端口的翻譯功能,這也是NAT爲什麼常常被配置在網關計算機上的原因。那麼,NAT協議究竟是如何實現公私地址轉換的呢?NAT協議的工作原理
簡單來說,用戶發出一個請求後,NAT設備會檢查該數據包,當它發現這是一個請求外網的數據包時,會進而檢查是否存在映射關係,對源IP地址和端口進行翻譯(修改),同時在映射表中添加新建的IP和端口的映射條目,然後再把修改的數據包轉發出去。如下方邏輯圖所示,左邊部分是內網用戶通過NAT訪問公網的過程,右半部分是公網返回內網的過程(剛好是左邊的逆過程)。
需要注意的是,在此過程中,發起連接請求的內網計算機對NAT設備的“翻譯”過程是一無所知的,並不知道自己的目的地址已經發生了改變。
NAT解決了IP地址枯竭的燃眉之急,因爲隨着接入Internet的計算機數量的指數型怎張,IP地址資源也就顯得捉襟見肘。以中國爲例,除了中國教育和科研計算機網等少數組織外,普通用戶想要申請整段的C類地址簡直難如登天!即使是哪些擁有着上百臺計算機的大型局域網用戶,能夠申請到的IP地址也不過數十個而已。顯然,如此少的IP地址是根本無法滿足現在的網絡狀況的。NAT技術的弊端
儘管在表面上看,NAT似乎真的沒有缺點,除了節約公網IP資源外,它還可以保護我們內部網絡的安全。但是,完美無缺的事物是不存在的。在享受了NAT所帶來的便利後,NAT技術的缺陷也逐漸引起了人們的重視。
1.增加了網絡的複雜性
從之前NAT的工作過程的描述中可以看出,內網主機和公網IP之間並沒有建立真正的端對端連接!這就導致該過程無法參與高層網絡的一些協議,比如說非常重要的傳輸層協議——TCP和UDP,體現在實際中,就是某些需要初始化後,從外部網絡建立的鏈接服務會被非正常中斷。你的網絡可能會莫名其妙的斷開,還檢查不出原因。
這就對NAT路由器提出了更高的要求,否則送來的數據包有很大的可能根本無法找到正確的地址。但這又會導致另一個問題:NAT也會使安全協議變的更加複雜,網絡整體結構變得脆弱。
2.NAT違背了網絡分層模型的設計原則
根據OSI七層網絡結構中,明確規定:第N層不容許修改第N+1層的爆頭內容,但NAT報文中卻違背了這一原則。
NAT是一個網絡層的協議,卻再報頭中增添了TCP/UDP首部。這就誕生了一個尷尬的局面:一個配有NAT協議的路由器,邏輯上卻工作在傳輸層(路由器屬於網絡層設備)。
除此之外,在傳統的IP地址結構中,每個IP地址都對應一個網絡連接,Internet的軟件設計也是基於此前提之上,但使用NAT協議的網絡中卻可能存在多個主機使用相同的地址的情況。同時,因爲NAT將IP協議從面向無連接變成了面向連接。路由器增加了一項新工作——維護專用IP地址與公用IP地址以及端口號的映射關係,大大增加了路由器的工作負擔。在原先的TCP/IP協議體系中,假設一個路由器出現了故障,只要幾秒收不到應答,就會執行超時重傳處理,重新發送,不會影響整體過程。如果存在NAT路由器,TCP/IP協議過程就會發生變動,Internet將有可能變得非常脆弱。
3.不能處理嵌入式IP地址或端口
由於NAT設備只能修改正常位於IP頭部,它只能翻譯那些正常位於IP首部中的地址信息和TCP/UDP首部中的端口信息。不能翻譯那些嵌入到應用數據部分的IP地址或端口信息。但在實際中,嵌入式的IP地址或端口是很普遍的。同時,NAT在P2P網絡模式中的表現也令人堪憂。
如果通信雙方都是使用的公網IP,這不會造成什麼問題,但如果那個嵌入式地址和端口是內網的,鏈接就不可能成功建立,這樣就導致了NAT設備後的客戶端網絡應用程序出現連接故障。雖說可以通過NAT編輯器來在一定程度上緩和此類問題,比如WINDOW就針對TCP,FTP等協議做了製作了各自的編輯器,但應用協議實在是太多了,根本不可能面面俱到。即便是使用NAT穿越的手段,依舊解決不了那種NAT設備位於另一個NAT設備之後的情況。
綜上所述,NAT雖然能解決IP地址不足的問題,還能夠有效地避免來自網絡外部的攻擊,但終歸不是長久之計。
深究NAT技術誕生的緣由,正是因爲IP地址不足。而IPV6能提供海量的IP地址,正中問題下懷。當然了,也不是說NAT技術在IPV6普及後就沒有存在的意義了。“不使用NAT上網無異於在網上裸奔”,即便是在今後的IPV6場景中,在沒有更加完善的方案解決安全性等諸多問題前,NAT技術在網絡結構中依舊擁有舉足輕重的位置!