王雄
工程師的想象力是無窮的,在過去的十幾年間,嘗試通過各種辦法為IPv4協(xié)議續(xù)命延緩IP資源耗盡的時間,不過在可預見的未來IPv4協(xié)議也終將被IPv6替代,我們也會擁有幾乎用不完的IP地址。
網(wǎng)絡層協(xié)議承擔了分組轉發(fā)和路由選擇兩大功能,它能夠為上層提供在不同主機之間運輸分組的職責,IP協(xié)議作為網(wǎng)絡層協(xié)議,它雖然只能提供無連接的、不可靠的服務,但是它在今天的互聯(lián)網(wǎng)中起到了極其關鍵的作用。
在一般情況下,當我們想要訪問其他主機提供的服務時,都需要通過IP地址來訪問目標主機,擁有了IP地址才能在互聯(lián)網(wǎng)上被其他主機訪問。IP地址就像家庭住址,需要保證所有主機IP地址的唯一性,這樣才能找到正確的主機。
作為在1974年誕生的IP協(xié)議,第一個主要版本IPv4使用32位表示地址,總共可以提供232也就是4 294 967 296個IP地址。42億個IP地址雖然看起來很多,但是可用地址的數(shù)量卻一直在減少,早在2011年,頂級的IPv4地址就已經(jīng)被全部分配出去了。
為了解決IP地址即將被耗盡的問題,IETF在1998年發(fā)布了IPv6協(xié)議的草稿,并在2017年正式成為互聯(lián)網(wǎng)標準。IPv6使用128位的IP地址,總共可以有2128個地址,IPv6甚至可以為地球上的每粒沙子分配獨立的地址。
新版本的互聯(lián)網(wǎng)協(xié)議IPv6不僅能一勞永逸地解決IP地址即將被耗盡的問題,還能提高網(wǎng)絡的傳輸速度以及安全性。IPv6協(xié)議的設計者最初認為隨著IPv4地址的快速減少,IPv6會被快速采納,它們最初估計IPv6協(xié)議會在2003年在全球部署,但是從今天的角度來看,這些預測還是過于樂觀了。
本文想要分析的問題是,為什么IPv6協(xié)議有如此之多的好處并且能夠解決IPv4的地址短缺問題,但是在距離最初預估的2003年后又過了17年,IPv6協(xié)議也沒有被大規(guī)模采納。我們在這里會討論以下幾個原因:
NAT技術很大程度上緩解了IPv4地址短缺的問題;
IPv6協(xié)議在設計時沒有考慮與IPv4的兼容性問題;
更細粒度的管控IPv4地址并回收閑置的資源。
網(wǎng)絡地址轉換(Network Address Translation,NAT)是一種在IP數(shù)據(jù)包通過路由器時修改網(wǎng)絡地址的技術,它能夠將當前地址空間中的IP地址映射到另一個地址空間。當切換網(wǎng)絡或者上游的ISP出現(xiàn)改變時,NAT技術可以避免修改網(wǎng)絡中全部節(jié)點的IP,可以將NAT技術理解成一個轉換表,其中存儲著外部地址和端口到內(nèi)部地址的轉換關系。
當數(shù)據(jù)包從內(nèi)部訪問外部網(wǎng)絡時,NAT會為當前請求分配一個端口、覆寫數(shù)據(jù)包中的源地址和端口并將地址和端口信息存儲到本地的轉換表中。當數(shù)據(jù)包從外部進入網(wǎng)絡內(nèi)部時,NAT會根據(jù)數(shù)據(jù)包的IP地址和端口號查找到私有網(wǎng)絡中對應的主機和端口號并覆寫數(shù)據(jù)包中的目的地址和端口。
通過NAT這一中間層,我們不僅可保護私有的網(wǎng)絡,還能緩解IP地址的短缺問題。不過NAT技術并不是只有好處,它也帶來了很多的問題,在NAT網(wǎng)絡下的主機并不能建立起真正的端到端連接,也不能參與部分因特網(wǎng)協(xié)議,除此之外,NAT協(xié)議帶來了以下備受爭議的問題:
①NAT使用的端口號是用于進程尋址的,而不是用于主機尋址;
②NAT路由器作為第三層(網(wǎng)絡層)的設備,它應當只處理達到網(wǎng)絡層的分組;
③NAT違反了主機應當直接彼此對話的原則。
雖然NAT帶來了很多的爭議和問題,但是NAT已經(jīng)成為整個互聯(lián)網(wǎng)中廣泛使用的技術,工程師也嘗試通過各種NAT穿越技術來解決問題,例如:SOCKS,UPnP,ALG等。
軟件和協(xié)議都會遵循當下或可預測的未來進行設計,但是我們很難預測未來的具體走勢,當下的設計也會隨著場景的變換變得逐漸不適用。所有的軟件和協(xié)議都需要更新迭代,在更新的過程中我們就需要考慮兼容性,兼容性一般可以分成向前兼容(Forward compatibility)和向后兼容(Backward compatibility):
向前兼容:老版本系統(tǒng)可以接收并處理新版本系統(tǒng)產(chǎn)生的數(shù)據(jù);
向后兼容:新版本系統(tǒng)可以接收并處理老版本系統(tǒng)產(chǎn)生的數(shù)據(jù)。
這2種不同的兼容性可以起到不同的作用,如果IPv6協(xié)議與IPv4是向前兼容的,那么用于處理IPv4協(xié)議的硬件設備可以不用更新就能處理IPv6的數(shù)據(jù);如果IPv6協(xié)議與IPv4協(xié)議是向后兼容的,那么IPv6的硬件可以同時處理IPv4和IPv6的數(shù)據(jù)包,只要使用IPv6設備替換IPv4設備就可以使整個網(wǎng)絡無縫升級。
如果IPv4和IPv6能夠具有向前兼容性或者向后兼容性,那么IPv6協(xié)議的推進也可能也沒有這么復雜了,但是IPv6協(xié)議在設計時沒有考慮與更早版本協(xié)議的兼容性。雖然IPv4和IPv6都是IP協(xié)議,不過因為它們兩者互不兼容,所以只能通過雙協(xié)議棧、隧道技術或者NAT64實現(xiàn)協(xié)議的過渡。
IPv6協(xié)議想要擺脫歷史的包袱,實現(xiàn)完全不兼容的設計是可以理解的,在過去幾十年應用IP協(xié)議的過程中,我們遇到了很多的問題,雖然要背著歷史的包袱繼續(xù)前行也不是不可以,但是作為互聯(lián)網(wǎng)的核心協(xié)議,雖然IP協(xié)議的設計者承認IPv6沒有實現(xiàn)向前兼容是最大的錯誤,但是筆者認為通過不兼容的方式快速擺脫歷史的包袱從長期來看也是好事。
IPv4的地址雖然是稀缺資源,不過與其他的稀缺資源一樣,如何合理分配資源并提供使用率一直都是比較大的問題。InternetAssignedNumbersAuthority(IANA)和RegionalInternet Registries(RIR)是負責分配IP地址的組織,除了一些為專有網(wǎng)絡預留的IP地址之外,剩余的地址一般都是通過子網(wǎng)以地址塊的形式分配。
在互聯(lián)網(wǎng)協(xié)議的早期開發(fā)階段,子網(wǎng)是通過IP地址最左側的8位劃分子網(wǎng),但是因為這種方式只允許劃分256個網(wǎng)絡,所以在1981年被分類網(wǎng)絡架構迅速替代。分類網(wǎng)絡架構中包含A,B,C三類網(wǎng)絡。
A類地址只能分配給128個不同的網(wǎng)絡,每個網(wǎng)絡中可以包含1 600萬主機,而C類地址可以分配給200萬組織,網(wǎng)絡中可以包含200多個主機。通過對IP地址的分類,能夠更合理地分配IP地址塊,不過雖然它對IP地址進行了分類,但是它對地址的劃分還是比較粗糙。
IETF在1993年提出的無類別域間路由(Classless Inter Domain Routing,CIDR)替代了分類網(wǎng)絡架構,CIDR基于可變長子網(wǎng)掩碼(Variable-length Subnet Masking,VLSM),它的主要目的有2個:
緩解互聯(lián)網(wǎng)中路由器中轉發(fā)表的增長速度;
緩解IPv4地址耗盡的速度。
分類網(wǎng)絡架構中對地址的劃分還是有些過于理想,過小的地址塊往往不夠用,稍大的地址塊卻會造成較大的浪費。與分類網(wǎng)絡架構只使用8、16和24固定長度的子網(wǎng)掩碼將IP地址塊劃分成三類不同,CIDR會使用可變長度的子網(wǎng)掩碼來劃分地址塊,如下所示的CIDR表示中,N表示前綴長度,它可以是從0到32的任意值:A.B.C.D/N。
A.B.C.D/8、A.B.C.D/16和A.B.C.D/24就可以分別表示分類網(wǎng)絡架構中的A,B,C三類不同的地址塊,同時也可以使用其他的數(shù)字更靈活的表示特定網(wǎng)絡數(shù)和主機數(shù)的子網(wǎng)。
除了更細粒度的地址分配之外,回收不再使用的IP資源并投入再利用也是延長IPv4壽命的重要手段。從IP地址的分配中,我們能看到資源從充足到稀缺,人對于資源使用態(tài)度的轉變,從最開始粗糙的分配方式到后來細粒度的管控,充足的資源總是會被濫用,只有當資源真正變得稀缺時,我們才開始精打細算。
IPv4協(xié)議從1981年發(fā)布到今天已經(jīng)過去了將近40年,在過去的這段時間里,它作為互聯(lián)網(wǎng)協(xié)議簇中的重要協(xié)議承擔著分組轉發(fā)和路由選擇的重要責任,隨著網(wǎng)絡環(huán)境和終端設備變得越來越復雜,我們也需要更多的IP地址來滿足今天的需求。
IPv6協(xié)議擺脫了很多歷史的包袱輕裝前行,雖然越來越多的網(wǎng)站和網(wǎng)絡設備都開始支持IPv6,但是因為很多原因IPv6最終也很難完全取代IPv4協(xié)議,最后回顧一下本文內(nèi)容:
NAT技術可以很大程度上緩解IPv4的地址短缺問題并且能夠保護私有內(nèi)部的網(wǎng)絡,提供防火墻的功能;
IPv4與IPv6協(xié)議完全不兼容,需要引入雙協(xié)議棧、隧道技術或者NAT64解決兼容性問題,而應用這些技術也需要額外的成本;
通過對資源的細粒度管控并回收不再使用的IP地址,可以延緩IP地址耗盡的時間。
工程師的想象力是無窮的,在過去的十幾年間,我們嘗試通過各種辦法為IPv4協(xié)議續(xù)命延緩IP資源耗盡的時間,不過在可預見的未來,IPv4協(xié)議終將被IPv6替代,也會擁有幾乎用不完的IP地址。