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

本文同時發佈於「即時通信技術圈」公衆號,連接是: https://mp.weixin.qq.com/s/cS5xB2DrjF52rmz6EGVJ6A
本文參考了公衆號鮮棗課堂的「IPv6,究竟是什麼?」一文的部份內容,感謝原做者。

一、引言

如今IPv6的技術應用已經愈來愈普及了,不少應用都開始支持IPv6。php

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

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

然而幾回下來,到底什麼是IPv6,仍是有點雲裏霧裏。面試

那麼,IP協議在TCP/IP體系中到底有多重要?看看下圖便知(緣由清晰版:今後處進入下載)。編程

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

總之,IP協議在TCP/IP體系中,是很是重要的一環(能夠認爲,沒它,也就沒有了互聯網),做爲IPv4的下一代協議,瞭解IPv6很是有必要。而做爲即時通信開發者來講,瞭解IPv6就顯的尤其迫切,說不定某天你的IM就會由於IPv6問題而致使沒法通訊的局面出現。安全

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

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

二、系列文章

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

網絡編程懶人入門(一):快速理解網絡通訊協議(上篇)
網絡編程懶人入門(二):快速理解網絡通訊協議(下篇)
網絡編程懶人入門(三):快速理解TCP協議一篇就夠
網絡編程懶人入門(四):快速理解TCP和UDP的差別
網絡編程懶人入門(五):快速理解爲何說UDP有時比TCP更有優點
網絡編程懶人入門(六):史上最通俗的集線器、交換機、路由器功能原理入門
網絡編程懶人入門(七):深刻淺出,全面理解HTTP協議
網絡編程懶人入門(八):手把手教你寫基於TCP的Socket長鏈接
網絡編程懶人入門(九):通俗講解,有了IP地址,爲什麼還要用MAC地址?
網絡編程懶人入門(十):一泡尿的時間,快速讀懂QUIC協議
網絡編程懶人入門(十一):一文讀懂什麼是IPv6》(本文)

三、複習一下什麼是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又是什麼?

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-test.com,就像下圖這樣: 

五、爲何要使用IPv6?

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

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

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

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

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

六、IPv6會帶給咱們什麼?

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

數量以下:

340282366920938463463374607431768211456個…

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

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

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

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

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

下面就是一個標準、合法的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使用新的頭部格式,就簡化和加速了路由選擇過程,提升了效率;
……

七、IPv6的優勢這麼多,爲何以前普及卻這麼慢?

IPv6優勢這麼多,爲何它問世已經20年了,仍是沒有徹底替代IPv4呢?這裏面的水就很深了。。。說白了,主要仍是和利益有關。

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

若是按照本世紀初專家們的預測,咱們IPv4的地址早已枯竭幾萬次了。可是,一直挺到如今,你們仍然還在用IPv4,對老百姓來講,並無由於地址不夠而沒法上網。

這是爲何呢? 就是由於除了IPv6以外,咱們還有一些技術,能夠變相地緩解地址不足。

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

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

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

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

甚至還能夠私網套私網,NAT套NAT,一層一層套。這樣一來,大大節約了公網IP地址數量。正由於如此,才讓咱們「續命」到了今天,不至於沒法上網。

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

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

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

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

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

若是你們去找運營商或ISP買帶寬,或者租賃雲服務,帶公共地址的,必定比不帶公共地址的貴不少不少。

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

因此,運營商和ISP都沒有動力去啓用IPv6。 

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

八、IPv6將來會怎樣

隨着5G時代的到來,有了IPv6的加持,萬物互聯或許會成爲現實。對於我等實時通訊類軟件的開發人員來講,某些場景下,或許不再須要爲「P2P打洞」這種事情煩惱了。 

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

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

九、參考資料

[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老矣,尚能飯否?
>>  更多同類文章 ……

歡迎關注個人「即時通信技術圈」公衆號: 

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

相關文章
相關標籤/搜索