上一篇IPv6的基礎介紹相信大家對IPv6都有了一個大概的了解(傳送門:IPv6:讓每一粒沙子都擁有IP地址),本篇文章將開始對IPv6進行技術層面的解讀與分析。

一、IPv6的發展

工業革命以來,經濟在飛速的發展中,計算機也從最開始應用于軍事領域走向了商業領域,發展到本世紀初,計算機已經走進了普通的用戶手中。人們可以使用計算機進行通信,學習,研究,計算等等。現如今,雲計算、大數據、物聯網的不斷普及,直接或間接的促進了IPv6的發展。上一篇文章我們談到:IPv4的地址空間為2的32次方,約為40多億。這在當時看來也是取之不盡用之不竭,人們根本沒有考慮到IPv4地址會有枯竭的一天,隨著互聯網的普及,根據相關機構的統計,全世界網民總數已經達到了40多億,IPv4地址已經枯竭。(大部分書籍所表明的IPv4地址近乎枯竭覺得已經不適合當下的環境了)當然,針對這個問題,人們也採用了CIDR(無類別域間路由,Classless Inter-Domain Routing),NAT(網路地址轉換,Network Address Translation,)等技術一定程度緩解了IPv4地址枯竭的困境。但這都不是根本解決方案,由此,IETF(互聯網工程任務組,Internet Engineering Task Force)在20世紀90年代提出了下一代互聯網協議IPv6,IPv6即互聯網協議(InternetProtocol Version 6)的第六版,用於替代現行版本IP協議(IPv4)的下一代IP協議。

二、地址空間與報文格式

關於地址空間:

IPv4與IPv6從表面上來看,最顯著的區別就在於IPv4是32比特進行標識,IPv6是128比特進行標識,這也決定了IPv6的地址空間遠遠大於IPv4的地址空間,以「近乎無限」的地址空間進行地址分配(筆者在這裡認為目前的發展所認為的無限的地址空間可能就如同於當時人們認為IPv4的地址空間也足夠人們使用,可能隨著智能時代的到來,無限的地址空間也會有「用盡」的那天)。IPv4的地址空間為2的32次方,約為40多億,而IPv6的地址空間為2的128次方(43億×43億×43億×43億),這就是人們認為地球上的每粒沙子都可以擁有一個IPv6地址的原因,這也是IPv6相比較IPv4最大的優勢。

關於報文格式:

1、首先,我們來看看IPv4的報文格式:

Version:標識Version即版本信息,4代表IPv4,6代表IPv6;

IHL:標識了IP報文的首部長度,大小為20-60位元組;

Type of Service:服務類型,在QoS中才會使用到此欄位;

Total Length:IP報文段的總長度;

Identification:標識,主機每發一個報文,則+1;

Flags:3個bit,分別為保留位,DF位(0可以分片,1不能分片),MF位(0最後一片,1未完待續);

Fragment Offset:片偏移,分片重組的時候需要使用到的欄位,此處不做詳細解釋;

Time to Live:簡稱TTL,數據包可在網路中經過的路由節點數;

Protocol:下層協議,如UDP或TCP等;

Header Checksum:首部校驗和;

Source Address:源IP地址;

Destination Address:目的IP地址;

Options:選項欄位;

Padding:填充欄位。

2、接下來,看下IPv6的報文格式,由此比較下與IPv4的報文格式的區別:

Version:此欄位與IPv4的報文格式相同,4代表IPv4,6代表IPv6;

Traffic Class:流量區分,與IPv4中的服務類型類似;

Flow Label:流標籤,用來表示數據包的一個流;

Payload Length:載荷長度;

Next Header:下一報文頭,用來標識IPv6擴展報文頭的信息;

Hop Limit:跳數限制,與IPv4中的TTL類似;

Source Address:源IP地址;

Destination Address:目的IP地址;

Extension Headers:擴展報文頭信息。

相比較IPv4的報文格式,IPv6的報文格式比較簡單,根本原因是IPv6報文格式中引入了IPv6擴展報文頭的概念。

3、IPv6擴展報文頭:

IPv6擴展報文頭的引入簡化了IPv6基本報文頭的格式,一個IPv6報文中可以包含0個及以上擴展報文頭。當需要有多個IPv6擴展報文頭的時候,IPv6的基本報文頭的Next Header欄位將會指明下一個擴展報文頭的類型,IPv6擴展報文頭的Next Header欄位將會指明下一個擴展報文頭的類型,以此類推,如果後續沒有IPv6擴展報文頭,那麼此欄位將指明上層協議類型。IPv6的擴展報文頭分為:

逐跳選項擴展報頭、目的選項擴展報頭、路由擴展報頭、分片擴展報頭、認證擴展報頭、封裝安全有效載荷擴展報頭以及上層協議數據報文。此外,值得注意的是:擴展報文的出現順序也必須為上面所列出的順序一樣。

三、IPv6地址分類

IPv4的地址分為單播地址、組播地址、廣播地址。而IPv6的地址中又分為哪幾類呢?接下來我們就詳細講講IPv6的地址分類。

1、單播地址

①全球單播地址

類似於IPv4地址單播地址中的公網地址,地址範圍為2000::/3;

全球單播地址由路由前綴,子網ID和介面標識組成,其中子網ID最多被分配到64位。

②鏈路本地地址

鏈路本地地址只允許在連接到同一本地鏈路的節點之間去使用,地址範圍為FE80::/10,當節點啟用IPv6的時候,節點就會自動配置(通過EUI-64規則,後續我們會詳細介紹)鏈路本地地址,這樣就可以實現不做任何配置,連接到同一本地鏈路的節點就可以互相通信。

③唯一本地地址

唯一本地地址類似於IPv4單播地址中的私網地址。地址範圍為FC00::/7。

唯一本地地址在RFC4193中有詳細的說明,取代了之前在RFC3879中規定的站點本地地址。

參考:blog.51cto.com/internet

RFC3879中說明了放棄使用站點本地地址的說明

This document describes the issues surrounding the use of IPv6 site-local unicast addresses in their original form, and formally deprecates them. This deprecation does not prevent their continued use until a replacement has been standardized and implemented. [STANDARDS-TRACK]

RFC4193中定義了唯一本地地址

This document defines an IPv6 unicast address format that is globally unique and is intended for local communications, usually inside of a site. These addresses are not expected to be routable on the global Internet. [STANDARDS-TRACK]

④其他單播地址

未指定地址,地址為::/128

環回地址,地址為::1/128

2、組播地址

組播地址的前綴為FF00::/8

預定義組播地址:

Node-local

所有節點的組播地址: FF01:0:0:0:0:0:0:1

所有路由器的組播地址: FF01:0:0:0:0:0:0:2

Link-local

所有節點的組播地址: FF02:0:0:0:0:0:0:1

所有路由器的組播地址: FF02:0:0:0:0:0:0:2

Solicited-Node組播地址: FF02:0:0:0:0:1:FFXX:XXXX

所有OSPF路由器組播地址: FF02:0:0:0:0:0:0:5

所有OSPF的DR路由器組播地址: FF02:0:0:0:0:0:0:6

所有RIP路由器組播地址: FF02:0:0:0:0:0:0:9

所有PIM路由器組播地址: FF02:0:0:0:0:0:0:13

3、任播地址

任播地址是用來標識一組介面,當發往任播地址的數據包時,會發送到最近的網路介面。任播地址暫時不做過多介紹。

四、IPv6地址書寫方式

IPv6地址使用128比特進行標識,每16個比特劃分為一段,每段使用4個16進位來表示,並且使用冒號隔開。如2001:0000:130F:120E:02C0:06E0:175A:180B。但有時候書寫起來比較麻煩,所以我們有了IPv6的壓縮格式,每段中的前面的0都可以進行省略,比如前面的IPv6地址,可以表示為2001:0000:130F:120E:2C0:6E0:175A:180B。如果IPv6的地址中包含的連續兩個或多個均為0的段,可以用雙冒號「::」來代替。比如2001:0000:0000:120E:02C0:06E0:175A:180B,可以壓縮為2001::120E:02C0:06E0:175A:180B。但是我們同時規定,一個IPv6的地址中只能使用一次雙冒號,因為如果使用多次,恢復成128位完整的格式的時候,會無法確定知道每段的0的個數。


歡迎各位關注微信公眾號:IE進化論,與我們的小團隊(一共5人)親密接觸。

推薦閱讀:

相关文章