網絡編程懶人入門(十一):一文讀懂什麼是IPv6

1、引言

現在IPv6的技術應用已經越來越普及了,很多應用都開始支持IPv6。

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

▲ 去年開始,支付寶的官網上就已出現“支持IPv6”標識

對於即時通訊技術(尤其是IM應用)的開發者來說,新產品上架蘋果的App Store因IPv6問題被拒的情況,很常見。每次也都能根據網上的資料一一解決,並順利通過審核。

然而幾次下來,到底什麼是IPv6,還是有點雲裡霧裡。

那麼,IP協議在TCP/IP體系中到底有多重要?看看下圖便知(原因清晰版:從此處進入下載)。

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

▲ 紅圈處就是IP協議,它幾乎是整個TCP/IP協議簇的支撐(圖引用自《計算機網絡通訊協議關係圖》)

總之,IP協議在TCP/IP體系中,是非常重要的一環(可以認為,沒它,也就沒有了互聯網),作為IPv4的下一代協議,瞭解IPv6非常有必要。而作為即時通訊開發者來說,瞭解IPv6就顯的尤為迫切,說不定某天你的IM就會因為IPv6問題而導致無法通信的局面出現。

本文將用淺顯易懂的文字,帶你瞭解到底什麼是IPv6。

本文同時發佈於“即時通訊技術圈”公眾號。

(本文同步發佈於:http://www.52im.net/thread-2979-1-1.html)

2、系列文章

本文是系列文章中的第11篇,本系列文章的大綱如下:

《網絡編程懶人入門(一):快速理解網絡通信協議(上篇)》

《網絡編程懶人入門(二):快速理解網絡通信協議(下篇)》

《網絡編程懶人入門(三):快速理解TCP協議一篇就夠》

《網絡編程懶人入門(四):快速理解TCP和UDP的差異》

《網絡編程懶人入門(五):快速理解為什麼說UDP有時比TCP更有優勢》

《網絡編程懶人入門(六):史上最通俗的集線器、交換機、路由器功能原理入門》

《網絡編程懶人入門(七):深入淺出,全面理解HTTP協議》

《網絡編程懶人入門(八):手把手教你寫基於TCP的Socket長連接》

《網絡編程懶人入門(九):通俗講解,有了IP地址,為何還要用MAC地址?》

《網絡編程懶人入門(十):一泡尿的時間,快速讀懂QUIC協議》

《網絡編程懶人入門(十一):一文讀懂什麼是IPv6》(本文)

3、複習一下什麼是IPv4?

IPv4是Internet Protocol version 4的縮寫,中文翻譯為互聯網通信協議第四版,通常簡稱為網際協議版本4。

IPv4使用32位(4字節)地址,因此地址空間中只有 4,294,967,296(即2^32) 個地址。

IPv4地址可被寫作任何表示一個32位整數值的形式,但為了方便人類閱讀和分析,它通常被寫作點分十進制的形式,即四個字節被分開用十進制寫出,中間用點分隔。

通常IPv4地址的地址格式為 nnn.nnn.nnn.nnn,就像下面這樣:

172.16.254.1

下圖看起來更清晰一些:

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

4、IPv6又是什麼?

IPv6是Internet Protocol version 6的縮寫,中文翻譯為互聯網通信協議(TCP/IP協議)第6版,通常簡稱為網際協議版6。IPv6具有比IPv4大得多的編碼地址空間,用它來取代IPv4主要是為了解決IPv4地址枯竭問題,同時它也在其他方面對於IPv4有許多改進。

其實,IPv6並不是新技術,從IPv6最早的工作組成立1992年到現在,已過去27年。在互聯網技術的發展歷程中,IPv6年齡甚至有些太大了。

IPv6的“6”表示的是TCP/IP協議的第六個版本,IPv4的“4”表示的是TCP/IP協議的第四個版本。其實除了這兩個版本,當然還有其它版本,TCP/IP協議其實從IPv1開始,到現在IPv10都已經出現了,這些不同版本之間並沒有關聯,也不是簡單IP地址長度的長短。

IPv6地址由八組、每組四位16進制數字組成,每組之間由":"來分隔。

看個簡單的例子:

2610:00f8:0c34:67f9:0200:83ff:fe94:4c36,每個“:”前後都是4位16進制的數字,共分隔成8組。

如下圖所示:

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

小知識:如何查看手機或者電腦的網絡是否支持IPv6呢?

可以在你手機或者電腦上的瀏覽器中打開:Ipv6-test.com,就像下圖這樣:

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

5、為什麼要使用IPv6?

最主要的原因,就是地址數量不夠用了。

IPv4迄今為止已經使用了30多年。最早期的時候,互聯網只是設計給美國軍方用的,根本沒有考慮到它會變得如此龐大,成為全球網絡。

尤其是進入21世紀後,隨著計算機和智能手機的迅速普及,互聯網開始爆發性發展,越來越多的上網設備出現,越來越多的人開始連接互聯網。這就意味著,需要越來越多的IP地址。

IPv4的地址總數是2的32次方,也就是約42.9億個。而全球的網民總數早已超過這個數目。

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

所以說,IPv4地址池接近枯竭,根本無法滿足互聯網發展的需要。人們迫切需要更高版本的IP協議,更大數量的IP地址池。(有點像固定電話號碼升位。)

6、IPv6會帶給我們什麼?

首先,最重要的一點,就是前面所說的地址池擴容。IPv4的地址池是約42.9億,IPv6能達到多少呢?

數量如下:

340282366920938463463374607431768211456個…

不用數了,太多了… 簡單說,是2的128次方。

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

這個數量,即使是給地球上每一顆沙子都分配一個IP,也是妥妥夠用的。

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

▲ 這圖你看懂了嗎?嗯,我也沒看懂,反正就是很多的樣子

這個數量值是怎麼得來的呢?還是它的地址位長決定的。

如果以二進制來寫,IPv6的地址是128位。不過,這樣寫顯然不太方便(一行都寫不下)。所以,通常用十六進制來寫,也就縮短成32位(32位會分為8組,每組4位)。

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

下面就是一個標準、合法的IPv6地址示例:

2001:0db8:85a3:08d3:1319:8a2e:0370:7344

注意:IPv6的地址是可以簡寫的,每項數字前導的0可以省略。

例如,下面這個地址:

2001:0DB8:02de:0000:0000:0000:0000:0e13

粉紅的“0”就可以省略,變成:

2001: DB8:2de:0:0:0:0:e13

如果有一組或連續幾組都是0,那麼可以簡寫成“::”,也就是:

2001: DB8:2de::e13

注意:一個IPv6地址,只能有一個“::”。

為什麼?很簡單,你看下面這四個地址,如果所有0全都縮寫,會變成什麼樣?

2001:0000:0000:0000:0000:25de:0000:cade

2001: 0000: 0000:0000:25de:0000:0000:cade

2001: 0000: 0000:25de:0000:0000:0000:cade

2001: 0000: 25de:0000:0000:0000:0000:cade

是的,都是2001::25de::cade,衝突了。所以,這個地址是非法的,不允許存在的。

關於IPv6還有很多技術細節,因篇幅原因,不再贅述。

除了地址數量之外,IPv6還有很多優點,例如:

1)IPv6使用更小的路由表。使得路由器轉發數據包的速度更快;

2)IPv6增加了增強的組播支持以及對流的控制,對多媒體應用很有利,對服務質量(QoS)控制也很有利;

3)IPv6加入了對自動配置的支持。這是對DHCP協議的改進和擴展,使得網絡(尤其是局域網)的管理更加方便和快捷;

4)IPv6具有更高的安全性。用戶可以對網絡層的數據進行加密並對IP報文進行校驗,極大地增強了網絡的安全性;

5)IPv6具有更好的擴容能力。如果新的技術或應用需要時,IPV6允許協議進行擴充;

6)IPv6具有更好的頭部格式。IPV6使用新的頭部格式,就簡化和加速了路由選擇過程,提高了效率;

……

7、IPv6的優點這麼多,為什麼之前普及卻這麼慢?

IPv6優點這麼多,為什麼它問世已經20年了,還是沒有完全替代IPv4呢?這裡面的水就很深了。。。說白了,主要還是和利益有關。

7.1 NAT這類技術,讓IPv4得以續命

如果按照本世紀初專家們的預測,我們IPv4的地址早已枯竭幾萬次了。但是,一直挺到現在,大家仍然還在用IPv4,對老百姓來說,並沒有因為地址不夠而無法上網。

這是為什麼呢? 就是因為除了IPv6之外,我們還有一些技術,可以變相地緩解地址不足。

例如NAT(Network Address Translation,網絡地址轉換)。

NAT是什麼意思?當我們在家裡或公司上網時,你的電腦肯定有一個類似192.168.0.1的地址,這種地址屬於私網地址,不屬於公共的互聯網地址。

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

▲ 一個典型的NAT應用場景(圖自《IPv6,到底是什麼?》)

每一個小的局域網,都會使用一個網段的私網地址,在與外界連接時,再變換成公網地址。這樣一來,幾十個或幾百個電腦,都只需要一個公網地址。

甚至還可以私網套私網,NAT套NAT,一層一層套。這樣一來,大大節約了公網IP地址數量。正因為如此,才讓我們“續命”到了今天,不至於無法上網。

但是,NAT這種方式也有很多缺點,雖然私網地址訪問互聯網地址方便,但互聯網地址訪問私網地址就困難了。很多服務,都會受到限制,你只能通過複雜的設置才能解決,也會影響網絡的處理效率。

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

▲ NAT內網的計算機是不能被外網直接訪問的(圖自《IPv6,到底是什麼?》)

7.2 升級IPv6涉及運營商的利益

物以稀為貴,地址越稀缺,就越值錢。掌握地址的人,就越開心。誰開心?運營商和ISP(互聯網服務提供商)。

他們就像是經銷商,從上游(互聯網域名與號碼分配機構,即ICANN)申請到IP地址,再賣給下游用戶。稀缺沒關係,反正,他一定能賺取更多的差價。

如果大家去找運營商或ISP買帶寬,或者租賃雲服務,帶公共地址的,一定比不帶公共地址的貴很多很多。

除了地址可以賺錢之外,如果升級支持IPv6,對運營商和ISP來說,也意味著很大的資金投入。現在新設備基本都是支持的,但畢竟還是有一些老設備,如果在使用壽命到期之前就換,就是虧錢。

所以,運營商和ISP都沒有動力去啟用IPv6。

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

至於設備商或手機電腦廠商,出於提前考慮,早已普遍支持了IPv6,意見並不是很大,也決定不了什麼。必竟,提供基礎設施服務的運營商們更強勢。

8、IPv6未來會怎樣

隨著5G時代的到來,有了IPv6的加持,萬物互聯或許會成為現實。對於我等實時通信類軟件的開發人員來說,某些場景下,或許再也不需要為“P2P打洞”這種事情煩惱了。

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

▲ 5G+IPv6,萬物互聯不是夢

未來已來,你準備好了嗎?

9、參考資料

[1] IPv6入門教程

[2] IPv6,到底是什麼?

[3] 關於IPv6的發展史!IPv6的秘密史!

[4] 科普:一文讀懂IPv6是什麼?

[5] 漫話:全球IPv4地址正式耗盡?到底什麼是IPv4和IPv6?

附錄:更多網絡編程基礎知識文章

《TCP/IP詳解 - 第11章·UDP:用戶數據報協議》

《TCP/IP詳解 - 第17章·TCP:傳輸控制協議》

《TCP/IP詳解 - 第18章·TCP連接的建立與終止》

《TCP/IP詳解 - 第21章·TCP的超時與重傳》

《技術往事:改變世界的TCP/IP協議(珍貴多圖、手機慎點)》

《通俗易懂-深入理解TCP協議(上):理論基礎》

《通俗易懂-深入理解TCP協議(下):RTT、滑動窗口、擁塞處理》

《理論經典:TCP協議的3次握手與4次揮手過程詳解》

《理論聯繫實際:Wireshark抓包分析TCP 3次握手、4次揮手過程》

《計算機網絡通訊協議關係圖(中文珍藏版)》

《UDP中一個包的大小最大能多大?》

《P2P技術詳解(一):NAT詳解——詳細原理、P2P簡介》

《P2P技術詳解(二):P2P中的NAT穿越(打洞)方案詳解(基本原理篇)》

《P2P技術詳解(三):P2P中的NAT穿越(打洞)方案詳解(進階分析篇)》

《P2P技術詳解(四):P2P技術之STUN、TURN、ICE詳解》

《通俗易懂:快速理解P2P技術中的NAT穿透原理》

《高性能網絡編程(一):單臺服務器併發TCP連接數到底可以有多少》

《高性能網絡編程(二):上一個10年,著名的C10K併發連接問題》

《高性能網絡編程(三):下一個10年,是時候考慮C10M併發問題了》

《高性能網絡編程(四):從C10K到C10M高性能網絡應用的理論探索》

《高性能網絡編程(五):一文讀懂高性能網絡編程中的I/O模型》

《高性能網絡編程(六):一文讀懂高性能網絡編程中的線程模型》

《Java的BIO和NIO很難懂?用代碼實踐給你看,再不懂我轉行!》

《不為人知的網絡編程(一):淺析TCP協議中的疑難雜症(上篇)》

《不為人知的網絡編程(二):淺析TCP協議中的疑難雜症(下篇)》

《不為人知的網絡編程(三):關閉TCP連接時為什麼會TIME_WAIT、CLOSE_WAIT》

《不為人知的網絡編程(四):深入研究分析TCP的異常關閉》

《不為人知的網絡編程(五):UDP的連接性和負載均衡》

《不為人知的網絡編程(六):深入地理解UDP協議並用好它》

《不為人知的網絡編程(七):如何讓不可靠的UDP變的可靠?》

《不為人知的網絡編程(八):從數據傳輸層深度解密HTTP》

《不為人知的網絡編程(九):理論聯繫實際,全方位深入理解DNS》

《技術掃盲:新一代基於UDP的低延時網絡傳輸層協議——QUIC詳解》

《讓互聯網更快:新一代QUIC協議在騰訊的技術實踐分享》

《現代移動端網絡短連接的優化手段總結:請求速度、弱網適應、安全保障》

《聊聊iOS中網絡編程長連接的那些事》

《移動端IM開發者必讀(一):通俗易懂,理解移動網絡的“弱”和“慢”》

《移動端IM開發者必讀(二):史上最全移動弱網絡優化方法總結》

《IPv6技術詳解:基本概念、應用現狀、技術實踐(上篇)》

《IPv6技術詳解:基本概念、應用現狀、技術實踐(下篇)》

《從HTTP/0.9到HTTP/2:一文讀懂HTTP協議的歷史演變和設計思路》

《腦殘式網絡編程入門(一):跟著動畫來學TCP三次握手和四次揮手》

《腦殘式網絡編程入門(二):我們在讀寫Socket時,究竟在讀寫什麼?》

《腦殘式網絡編程入門(三):HTTP協議必知必會的一些知識》

《腦殘式網絡編程入門(四):快速理解HTTP/2的服務器推送(Server Push)》

《腦殘式網絡編程入門(五):每天都在用的Ping命令,它到底是什麼?》

《腦殘式網絡編程入門(六):什麼是公網IP和內網IP?NAT轉換又是什麼鬼?》

《腦殘式網絡編程入門(七):面視必備,史上最通俗計算機網絡分層詳解》

《腦殘式網絡編程入門(八):你真的瞭解127.0.0.1和0.0.0.0的區別?》

《以網遊服務端的網絡接入層設計為例,理解實時通信的技術挑戰》

《邁向高階:優秀Android程序員必知必會的網絡基礎》

《全面瞭解移動端DNS域名劫持等雜症:技術原理、問題根源、解決方案等》

《美圖App的移動端DNS優化實踐:HTTPS請求耗時減小近半》

《Android程序員必知必會的網絡通信傳輸層協議——UDP和TCP》

《IM開發者的零基礎通信技術入門(一):通信交換技術的百年發展史(上)》

《IM開發者的零基礎通信技術入門(二):通信交換技術的百年發展史(下)》

《IM開發者的零基礎通信技術入門(三):國人通信方式的百年變遷》

《IM開發者的零基礎通信技術入門(四):手機的演進,史上最全移動終端發展史》

《IM開發者的零基礎通信技術入門(五):1G到5G,30年移動通信技術演進史》

《IM開發者的零基礎通信技術入門(六):移動終端的接頭人——“基站”技術》

《IM開發者的零基礎通信技術入門(七):移動終端的千里馬——“電磁波”》

《IM開發者的零基礎通信技術入門(八):零基礎,史上最強“天線”原理掃盲》

《IM開發者的零基礎通信技術入門(九):無線通信網絡的中樞——“核心網”》

《IM開發者的零基礎通信技術入門(十):零基礎,史上最強5G技術掃盲》

《IM開發者的零基礎通信技術入門(十一):為什麼WiFi信號差?一文即懂!》

《IM開發者的零基礎通信技術入門(十二):上網卡頓?網絡掉線?一文即懂!》

《IM開發者的零基礎通信技術入門(十三):為什麼手機信號差?一文即懂!》

《IM開發者的零基礎通信技術入門(十四):高鐵上無線上網有多難?一文即懂!》

《IM開發者的零基礎通信技術入門(十五):理解定位技術,一篇就夠》

《百度APP移動端網絡深度優化實踐分享(一):DNS優化篇》

《百度APP移動端網絡深度優化實踐分享(二):網絡連接優化篇》

《百度APP移動端網絡深度優化實踐分享(三):移動端弱網優化篇》

《技術大牛陳碩的分享:由淺入深,網絡編程學習經驗乾貨總結》

《可能會搞砸你的面試:你知道一個TCP連接上能發起多少個HTTP請求嗎?》

《知乎技術分享:知乎千萬級併發的高性能長連接網關技術實踐》

《5G時代已經到來,TCP/IP老矣,尚能飯否?》

>> 更多同類文章 ……

歡迎關注我的“即時通訊技術圈”公眾號:

網絡編程懶人入門(十一):一文讀懂什麼是IPv6

(本文同步發佈於:http://www.52im.net/thread-2979-1-1.html)


分享到:


相關文章: