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