人都不願意做改變,尤其是沒有必要的改變。這句話套在IPv6上非常合適。儘管提出之初就是為了取代IPv4,但是在已經提出的二十年後的今天,IPv6的使用率還遠不及IPv4。從下圖[1]看,世界上IPv6普及率最好的國家是:美國,印度和比利時。全世界的IPv6普及率只有23。34%。對於我國來說,著名事件就是去年工信部聯合各大企業發文要支援IPv6[2]。

IPv6--- 基礎

IPv4地址的耗盡

--

IPv6的出發點就是因為IPv4地址不夠用了。而網際網路IPv4耗盡的傳聞,就像石油100年後要用完一樣,是一個事實,但是這個事實又不斷的因為新的技術的出現得到緩解。先來看看IPv4地址的使用情況吧。

IPv4地址由IANA(網際網路地址編號機構)管理,並分配給5大地區管理機構。在2011年的時候,IANA就宣佈IPv4中央地址池已經耗盡。而5大地區:

APNIC(亞太網際網路資訊中心)在2011年4月就用盡了所有IPv4地址

RIPE(歐洲IP網路)在2012年9月用盡

LACNIC(拉美及加勒比網際網路資訊中心)在2014年6月用盡

ARIN(美國網際網路號碼註冊管理機構)在2015年9月用盡

AFRINIC(非洲網路資訊中心)將於2020年2月用盡

這裡的用盡並不是真的用光了,而是地區管理機構可用的IP地址已經下降到了一定的閾值。例如APNIC,名義上2011年就耗盡了IPv4地址,但是現在還能從最後一個 /8 網段(103開頭)和一些回收的IPv4地址池分配地址。

總的來說,IPv4地址基本處於用盡的地步,現在想要申請IPv4地址,可以:

(1)向所在的地區管理機構申請剩餘的IPv4地址

(2)向ISP(網際網路服務提供商)租用的IPv4地址

(3)在IPv4的開放市場(如果有的話)購買地址

而IPv6協議下,因為IPv6地址是128位的,並且IANA為每個地區管理機構分配了一個 /12 的IPv6地址,這樣的地址空間在可預期的將來是使用不完的。

IPv6--- 基礎

IPv6與IPv4的區別和關聯

--

從名字上看,IPv6就是IPv4的升級版,無非就是版本4升級到版本6。所以看到IPv6,很多人的直觀反應是如何從IPv4升級到IPv6。但是實際上,IPv6是一種與IPv4基本完全獨立的網路層協議。整個工作機制有相似的地方,但是支撐網路層的協議都重新定義了。實現IPv6並不是簡單的升級,而是重新實現一套網路層協議。

整體來看,IPv6報文與IPv4報文差別就兩個地方,一個是資料鏈路層(乙太網協議)中協議型別,IPv4是0x0800,IPv6是0x86DD;另一個是IPv6 Header是40位元組,IPv4只有20位元組。

IPv6--- 基礎

具體到網路層頭部內容可以看出,

IPv6根本沒有考慮要相容IPv4,這或許是IPv6推進緩慢的原因之一

。除了version,source address,destination address以外,其他的一些field,就算功能一樣,例如TTL和Hop Limit,但是名字和位置也變了。具體的差別有:

IPv6--- 基礎

Version一個是4,一個是6,這個沒得說

IHL(Internet Header Length)在IPv6中去除了,因為IPv6 Header不支援Option,所以長度是固定的40位元組,因此也沒必要表明Header的長度。實際上IPv4 option也很少使用。

Type of Service,在IPv6中改名成為了Traffic Class。不過功能保留了,還是用來標識流量做QoS用。

Total Length,在IPv6中改名成為了Payload Length。並且,IPv4的Total Length是要包含IPv4 Header的,而IPv6 Payload Length直接是IP payload的長度。這樣在IPv6包有效性校驗的時候,不必考慮Total Length必須要大於IHL,能夠提升一丟丟的效能。

Flow Label,IPv6中新增的欄位,用來標識一個TCP連線或者一個會話。透過Flow Label可以不看其他的Header,就標識出流量,對於QoS的實現有幫助。

Identification, Flags, and Fragment Offset,這些欄位在IPv6中去除了。這些是用來實現IP報文分片的,也就是說IPv6不支援分片。

TTL在IPv6中改名為Hop Limit。功能是一樣的,改名之後更貼近實際的作用。

Protocol Field在IPv6中改名為Next Header。

Checksum在IPv6中移除了。因為更高層的協議自己有錯誤檢測,而更底層的協議通常有CRC校驗也能發現錯誤,所以IPv6放棄了自己的Checksum,這也是能提升一丟丟效能的改動。

Source Address,Destination Address,從IPv4的32bit,改成了IPv6的128bit。

IPv6還有一個潛在的區別,所有的主機和轉發裝置必須最少支援MTU 1280,而IPv4下,這個值是68。

IPv6 地址表示方式

--

初看IPv6地址可能會覺得比較複雜,但是本質上,IPv6地址是由bit組成,它的表示方法是為了讓人更好的記住和書寫這些地址。從最標準的角度來看,一個IPv6地址是這樣:

0010 0000 0000 0001 0000 1101 1011 1000

0000 0000 0000 0000 0000 0000 0000 0000

0000 0000 0000 0000 0000 0000 0101 0010

0000 0000 0000 0000 0000 0000 0000 0001

為了簡化,第一步是用16進製表示地址,因此上面的地址可以表示為8段16進位制數:

2001:0db8:0000:0000:0000:0052:0000:0001

這已經是一個完全合法的IPv6地址了。但是在實際應用中,要記住這麼一串地址基本不可能,尤其某些場合還不能複製黏貼。不得不說,IPv6地址太長也是阻礙IPv6發展的另一大因素。

為了進一步簡化,每一段地址起始的0

可以

不用寫出來(寫出來也合法)。任一段,如果少於4個字元,則認為前面用0補齊至4個字元。如果一段全是0,可以用單個0來表示。因此上面的地址可以表示為:

2001:db8:0:0:0:52:0:1

為了進一步簡化,任何全0組成的1個或者多個連續地址段,可以用雙冒號 “::” 表示。但是在IPv6地址中,不能出現兩個雙冒號。雙冒號應當用於儘可能縮短地址。因此上面的地址可以簡化成:

2001:db8::52:0:1

這就是一個常見IPv6地址的形態,雖然還是很長,但是相比較之前的形態已經簡化了很多。

最後

--

在IPv6協議(RFC2460/8200)提出的20年後來看, IPv6的發展仍然不溫不火,Google統計了其站點訪問中,IPv6的佔比[3],近幾年稍好一些,以5%的增速在擠壓IPv4。

IPv6--- 基礎

從長遠來看,IPv6佔主導是必然的,這就跟現在的能源領域,石油要耗盡,發展新能源是一樣的。在現在的網路裝置和作業系統中,基本都已經支援了IPv6。究竟是什麼原因使得IPv6沒有佔主導?

部署帶來的額外費用。這裡包括裝置升級,老舊裝置替換,甚至還有運維開發人員的培訓。

NAT拯救了IPv4。儘管IPv4地址已經接近用盡,但是透過NAT可以讓企業的無數裝置只使用少量的IPv4地址,同時NAT還能帶來一定的安全性。NAT對於IPv4的續命,也阻礙了IPv6的發展。

不相容性。前面說過,IPv6是一個與IPv4不相容的協議,所以對於企業來說部署IPv6是一次大的升級,這背後帶來的潛在風險也不容忽視。

群體效應。起因還是不相容性。現在網際網路絕大多數還是隻支援IPv4,因此企業就算現在要支援IPv6,也必須先支援IPv6和IPv4的雙棧,因為IPv4與IPv6天然不相通。除非某一天,企業的所有網際網路聯絡人都支援了IPv6,企業才能切換到IPv6 only的模式。 所以IPv6的早期發展必然是緩慢的。

[1]

https://

stats。labs。apnic。net/ip

v6

[2]

http://www。

miit。gov。cn/n1146295/n1

652858/n1652930/n3757020/c6154756/content。html

[3]

https://www。

google。com/intl/en/ipv6

/statistics。html#tab=ipv6-adoption