03.01 ipv4 與 ipv6基礎

IPv6基礎


第一部分IPv6設計

一、IPv6出現背景,即IPv4面臨的缺點

1. IPv4地址空間的不足。(根本原因並不是地址空間32位長度不足問題,42億個理論地址目前並不是絕對數量層面的短缺,而是因為地址空間分配的不合理)。

2. 頭部複雜。(頭部複雜最大的問題是在急速網絡需求下,設備無法更有效提升數據層面的處理和轉發速度)。

3. 路由器和主機的配置相對複雜。(例如:OSPF的設計與收斂,DHCP協議和IP定位的弊端,NAT的存在)。

4. 重新編址很困難。(私網地址層面相同地址段間的路由問題,公網地址層面社會經濟等層面的問題)。

5. 龐大的路由表。(因為全球地址分配很混亂,導致很難彙總,全球路由表已經突破80萬條目)。

6. 安全、組播、移動網絡等技術的支持不夠。(黑客追蹤技術,域間組播技術,任意播技術)。

7. 不論作為定位符或標識符,IPv4地址都不理想。(標識符用於標識源端,而定位符用於標識目的端。主機IP地址既可以用作標識符,也可用作定位符。RFC 2101指出,對於標識符和定位符的要求有兩個重要區別:一是唯一性,二是持久性。 由於私有IP的出現,IP地址不再是全球唯一的,因此它不是理想的標識符。同樣,IP地址作為定位符也有其不足。其一,私有網絡號無法說明此節點在互聯網中的位置。其二,由於歷史原因,網絡地址無法說明該網絡與其他網絡的位置關係)。

二、當前的"解決"方法

1. NAT(靜態一對一,動態地址池多對多,PAT)弊端如下:

  • NAT很耗性能資源,所以一般用防火牆做NAT,一個entry大概是64K,而且有生存期問題。
  • NAT打破了業務端到端的模式,會影響動態IP地址服務應用的軟件設計。
  • NAT也會產生Difficult fast rerouting重路由的煩惱,查表更繁瑣。
  1. The use of subnetting子網劃分技術主要用於解決地址規劃合理性問題,弊端如下。
  • 產生更多的路由條目,提升整體維護難度和設備性能需求
  1. DHCP。DHCP用於解決用戶側或者說主機側的配置難度問題,弊端如下。
  • DHCP是有狀態的(stateful)協議,且需要DHCP服務器這一設備或服務單獨部署。
  1. Classless interdomain routing (CIDR)無類域間路由用於解決龐大路由表問題,弊端如下。
  • 需要高額的運維成本和風險抵禦制度。
  1. Enfroced better address management加強地址管理,主要是為了避免餘下的地址繼續被不合理的分配。

三、IPv6的特點

1. Global reachability and flexibility全局的可達性和靈活性

  • 128 bits: four times the bits of IPv4
  • Multihoming 多宿主
  • Autoconfiguration 自動配置。無狀態的,網絡設備(路由器)自動配置IP地址
  • Plug-and-play 即插即用
  • End to end without NAT 實現了端到端傳輸
  1. Simpler header簡單的頭部
  • Routing efficiency 路由更加的快捷
  • Performance and forwarding rate scalability 轉發更加快速
  • No checksums 沒有校驗和,因為2層幀和上層TCP/IP已經有校驗了
  • Extension headers 擴展頭部
  • Flow labels 流標籤

3. Mobility and security移動性和安全性

  • No broadcasts 沒有廣播也就沒有了ARP
  • Mobile IP RFC-compliant
  • IPsec mandatory(or native) for IPv6原生的使用了IPsec

4. Transition richness遷移方式多種多樣

  • Dual stack雙棧
  • 6to4 tunnels
  • Translation

四、IPv6目前主要發展情況


ipv4 與 ipv6基礎


  1. IPv6在我國

第二代中國教育和科研計算機網CERNET2是中國下一代互聯網示範工程CNGI最大的核心網和唯一的全國性學術網,是目前所知世界上規模最大的採用純IPv6技術的下一代互聯網主幹網。

CERNET2主幹網將充分使用CERNET的全國高速傳輸網,以 2.5Gbps-10Gbps傳輸速率連接全國20個主要城市的CERNET2核心節點,實現全國200餘所高校下一代互聯網IPv6的高速接入,同時為全國其他科研院所和研發機構提供下一代互聯網IPv6高速接入服務,並通過中國下一代互聯網交換中心CNGI-6IX,高速連接國內外下一代互聯網。

CERNET骨幹網拓撲示意圖如下:


ipv4 與 ipv6基礎


  1. IPv6的全球範圍試驗場

6bone 是一個世界範圍的非正式合作的 IPv6 試驗床。也是 IETF IPng 項目的成果。始於 1996 年,是運行在因特網上的由 IPv6 的 IPv4 隧道組成的虛擬網絡,網絡在緩慢的向純 IPv6 鏈路遷移。

官方網站:www.6bone.com

五、IPv6相關測試

1. 如果訪問http://www.kame.net 能看見烏龜Dance。即IPv6在客戶端運行成功。如果是靜止的一隻烏龜,則表明端到端通訊在使用IPv4。或者可以嘗試是否能成功打開 http://ipv6.google.cn

2. IPV6單獨測速網站:http://v6test.com/ 或者 https://ipv6-test.com/

第二部分IPv6數據格式

一、IPv6數據包基本包頭


ipv4 與 ipv6基礎


* 版本。長度為4位,該字段賦值為6。(version5已經分配給Experimental Stream Protocol)

* 類別。長度為8位,指明為該包提供了某種"區分服務"

* 流標籤。長度為20位,用於標識屬於同一業務流的包。流標籤和源節點地址,二者唯一標識了一個業務流。轉發路徑上的路由器可以根據流標籤來區分流並進行處理。由於流標籤在IPv6報文頭中攜帶,轉發路由器可以不必根據報文內容來識別不同的流,目的節點也同樣可以根據流標籤識別流,同時由於流標籤在報文頭中,因此使用IPSec後仍然可以根據流標籤進行QoS處理。

* 淨荷長度。長度為16位,其中包括包淨荷的字節長度,即IPv6頭後的包中包含的字節數

* 下一個頭。這個字段指出了IPv6基本包頭後,下面所跟的擴展頭字段中的選項類型,如果這個數據包不包含擴展頭,那麼此字段的值表示上一層協議,例如TCP協議

* 跳極限。長度為8位。每當一個節點對包進行一次轉發之後,這個字段就會被減1。與IPv4不同,對過期包進行超時判斷的功能可以由高層協議完成

* 源地址。長度為128位,指出了IPv6包的發送方地址。

* 目的地址。長度為128位,指出了IPv6包的接收方地址,與ipv4有一點不同,該字段並不是指數據包的最終接收者地址。例如如果使用了選路擴展頭,那麼該字段可以是數據轉發路徑中某一箇中間關鍵節點的地址。另外,這個地址可以是一個單播、組播或任意點播地址。

  1. IPV6 包頭字段重點的改進
  2. 取消了 IP 的校驗

第二層和第四層的校驗已經足夠健壯了,因此 IPv6 直接取消了 IP 的三層校驗。 l 取消中間節點的分片功能 分片重組功能由源目端自己進行,通過 PMTU機制來發現路徑MTU l 定義最長的 IPv6 報頭 有利於硬件的快速處理,如此一來中間節點可以避免處理而節省大量的資源。

  1. 安全選項的支持

IPv6 提供了對 Ipsec 的完美支持,如此上層協議可以省去許多安全選項,例如OSPFv3 就取消了認證。

  1. 增加流標籤
  2. 提高QoS 效率

三、IPv6數據包擴展頭

Ipv6除了基本包頭以外,還有一個叫擴展包頭的概念,擴展包頭並不是必須的,但是擴展包頭的使用極大的豐富了ipv6數據轉發層面的功能。擴展頭的設計理念是:ipv4包頭中“選項”這個必填字段裡面的內容大多數是給數據包接收終端看的,轉發路徑中的轉發設備(例如路由器)大多數情況下並不關心其內容,但是因為還存在少數個例數據包中的選項字段需要路由器查閱處理,所以路由器依然嚴格審閱所有數據包中的該字段賦值內容。Ipv6把該字段從IP頭中搬出來,路由器可以像轉發無選項包一樣來轉發所有的數據包。極大增強了處理層面的快速轉發的流水線能力。換句話說,擴展包頭中的內容,除了規定必須由每個轉發路由器進行處理的逐跳選項之外,IPv6包中的選項對於中間路由器而言是不可見的。


ipv4 與 ipv6基礎


四、IPv6 定義了六大選項擴展

* 逐跳選項頭。

* 選路頭。

* 分段頭。

* 目的地選項頭。

* 身份驗證頭(AH)。

* 封裝安全性淨荷(ESP)頭。


ipv4 與 ipv6基礎


下一個頭字段值指明是否有下一個擴展頭及下一個擴展頭是什麼,因此,IPv6頭可以鏈接起來,從基本的IPv6頭開始,逐個鏈接各擴展頭。例如下圖分別展示了沒有擴展頭的數據包格式,只有一個擴展頭的數據包格式,有多個擴展頭的數據包格式。


ipv4 與 ipv6基礎


而且,如果一個ipv6數據包含有多個擴展頭,那麼這些擴展頭前後的順序是有一定要求的。RFC1883規定,擴展頭如果有多個,那麼各個擴展頭的前後鏈接應該依照如下順序:

(1) IPv6基礎頭。

(2) 逐跳選項頭。

(3) 目的地選項頭(應用於IPv6目的地址字段的第一個目的地和選路頭中所列的附加目的地中)。

(4) 選路頭。

(5) 分段頭。

(6) 身份驗證頭。

(7) ESP頭。

(8) 目的地選項頭(當使用選路頭時,僅應用於包的最終目的地)。

(9) 上層頭。

且從以上順序可知,在同一個IP包中只有目的地選項擴展頭可以多次出現,並且僅限於包中包含選路擴展頭的情況。

五、各個擴展頭的細節

  1. 逐跳選項(Hop-by-Hop) :表示從源節點到目的節點的路徑上的每個節點,每個轉發包的路由器都要檢查逐跳選項中的信息。 逐跳選項攜帶的信息必須被IPv6報文轉發路徑中的每個節點檢查處理,逐跳選項必須緊跟著IPv6包頭,它的Next Header值為0。由於它需要每個中間路由器進行處理,逐跳選項只有在絕對必要的時候才會出現。


ipv4 與 ipv6基礎


該選項中有兩個預定義的字段:下一個頭字段和頭擴展長度字段。頭擴展長度字段佔 8位,指明該選項頭的長度(不包含擴展頭的第一個8字節)。該長度以8字節為單位,該字段限制了擴展頭最大為2048字節。

選項字段部分包含如下三個部分:

選項類型:該字段為8位標識符,指明選項的類型。

前2位表示如果目的節點不能識別特定的選項時,應該採取的動作是什麼,共有四種選項類型:

* 00:忽略此選項,完成對擴展頭其餘部分的處理。

* 01:丟棄整個包。

* 10:丟棄包,不論該包的目的地址是否是組播地址還是單播或者任意播,都向該包的源地址發送一個 ICMP報文(Code=2)。

* 11:丟棄包,如果該包的目的地址是單播地址或任意點播地址 (即非組播地址),則向該包的源地址發送一個ICMP報文(Code=2)。

第3位指明在包從源地址到目的地址的傳送過程中,選項數據的值是否可以被改變。

若為0,則不允許改變;

若為1,則選項數據是可變的。

選項數據長度:該字段為8位整數,表示選項數據字段的長度。該字段最大值為255。

選項數據:該字段包含選項特定的數據,最大長度為255字節。 到目前為止,選項數據已經定義了兩個:路由器提示選項和巨型淨荷選項。

Router Alert:和IPv4的Route Alert類似,指明報文需要路由器節點進行進一步處理才能轉發。目前主要是MLD以及RSVP的協議報文中攜帶。該Option的TYPE字段取值為0x05(詳見RFC2711)。

Jumbogram :巨型數據包(詳見RFC2675)。IPv6包頭本身Payload長度字段是2字節,受該字段取值範圍限制,ipv6包可以支持最大65535字節的數據包大小。因此設計了該選項,當ipv6包的淨荷超過 65535字節(其中包括逐跳選項頭)時候,就必須包含該選項。Ipv6技術通過Jumbogram Option(Type=0xC2),長度字段擴充到了4個字節,這樣單個報文長度可以擴充到2的32次方,也就是4294967295字節。

  1. 目的地選項:用於代替IPv4的“選項”字段,目的選項用於攜帶一些只有目的節點才會處理的信息。和前面逐跳選項格式類似,用法也和逐跳選項相同。 目的選項在設計時更傾向用於移動IPv6的一些擴展。


ipv4 與 ipv6基礎


目前目的選項在IPv6報文中可以出現兩次:

1、在路由選項之前:包含了路由器列表中路由器需要處理的信息;

2、在上層協議之前:包含了最後目的節點需要處理的信息。

  1. 選路擴展頭: 選路頭代替了IPv4中所設計的源選路技術。允許用戶自行指定本數據包到達目的地沿途必須經過的路由器。在這種情況下,IPv6包基礎頭的目的地址字段指的是“沿途必須經過的路由器”中的第一個地址,而不是包的最終目的地址。而且此時只有這個路由器才處理這個選路頭,該路由器收到之前路徑上的路由器則不必處理。此路由器接收到該包之後,對IPv6頭和選路頭進行處理,重寫基礎包頭中目的地址字段,並把包發送到選路頭列表中的第二個路由器地址。如此繼續,直到包到達其最終目的地。列表中最多可以指定256個路由器。


ipv4 與 ipv6基礎


選路擴展頭的選項內容部分,有兩個字段各佔1字節:選路類型字段和剩餘段數字段。其中選路類型字段表示所使用的選路頭的類型;而剩餘段數字段表示擴展頭的其餘部分所列出的附加路由器的個數。擴展頭的其餘部分為類型特定的數據,與選路頭類型相關。其中的Routing Type,RFC2460只定義了Route Type=0,移動IPv6定義了Route Type=2。

一個帶有選路頭的數據包生命過程如下:

* 由源節點構造“包必須經過的路由器的列表”,並構造類型賦值為0的選路頭,頭中包括路由器的列表、最終目的節點地址和剩餘段數,剩餘段數 ( 8位整數)指明在包向目的節點交付之前所必須經過的特定路由器的數目。

* 源節點發送包時,將IPv6基本包頭目的地址設置為選路頭列表中的第一個路由器的地址。

* 該包被常規的轉發技術經過各種網絡設備轉發,直到到達路徑中的第一個關鍵站,即選路頭列表中的第一個路由器,只有該路由器才檢查選路頭,將路由器包頭的剩餘段(Segments Left)字段減1,該字段作為一個指針,指向包含到原始目的地的剩餘路由器段數。然後,在該路由器發生下列操作:

(a) 路由器將IPv6基本包頭的目的地址更換為中間列表中的下一個路由器地址;

(b) 路由器將路由選項的剩餘字段減1;

(c) 路由器將自己的地址放在路由選項中間路由器列表的下一個路由器前面(記錄路由的方式);

(d)如果路由器是中間路由器列表的最後一項,路由器將基本IPv6包頭的IPv6目的地址更改為最後目的節點,而這實際上是數據包的原始目的地。

在第一個關鍵站和所有後續其他關鍵站,路由器檢查選路頭以確保剩餘段數與地址列表一致。若剩餘段數的值等於0,則表示此路由器節點實際上是該包的最終目的地,節點將繼續對包的其他上層部分進行處理。並且目的節點能夠看到記錄在路由選項中的中間路由器列表,這使得目的節點還能夠以逆序制定相同的路由器列表構造路由選項,向源節點發送應答數據包。

RFC 1883對類型0選路頭的定義中,在剩餘段數字段後保留了一個字節,並增加了 2 4位嚴格/寬鬆位映射字段。該字段將2 4個標誌映射到最多2 4箇中間路由器,由此源節點可以指定使用嚴格選路還是寬鬆選路。嚴格選路不允許數據包經過列表中不包含的中間路由器,而寬鬆選路則允許。

  1. 分段頭 :IPv6只允許源節點對包進行分段,通過使用路徑MTU發現機制,源節點可以確定源節點到目的節點之間的整個鏈路中能夠傳送的最大包長度,從而可以避免中間路由器的分段處理。RFC 1883中規定的格式


ipv4 與 ipv6基礎


* 下一個頭字段:此8位字段對所有的IPv6擴展頭是相同的設計原則。

* 保留:此8位字段目前未用,設置為0。

* 分段偏移值字段:與IPv4的分段偏移值字段很相似。此字段共13位,以8字節為單位,表示此包(分段)中數據的第一個字節與原來整個包中可分段部分的數據的第一個字節之間的位置關係。

* 保留字段:此2位字段目前未用,設置為0。

* M標誌:此位表示是否還有後續字段。若值為 1,表示後面還有後續字段;若值為 0則表示這是最後一個分段。

* 標識字段:該字段與IPv4的標識字段類似,但是為32位(在IPv4中為16位)。源節點為每個被分段的IPv6包都分配一個32位標識符,用來唯一標識最近 (在包的生存期內)從源地址發送到目的地址的包。

整個IPv6包中只有部分可以被分段,可分段的部分包括:1.淨荷 2.只能在到達最終目的地時才處理的擴展頭。對於 IPv6頭和在發往目的節點的途中必須由路由器處理的擴展頭,如選路頭或逐跳選項頭,則不允許進行分段。

  1. 身份認證包頭 : 該包頭由IPsec技術使用,對IPv6頭、擴展頭和淨荷的某些部分進行加密的校驗和的計算,提供認證、數據完整性以及重放保護。它還確保IPv6基礎包頭中的一些字段被保護,該包頭在IPv4和IPv6中是相同的,通常稱之為IPsec認證包頭(AH)。


ipv4 與 ipv6基礎


  1. 封裝有效安全載荷 :這是最後一個擴展頭,不進行加密,該包頭由IPsec使用,它指明剩餘的淨荷已經加密,併為已獲得授權的目的節點提供足夠的解密信息,提供認證、數據完整性以及重放保護和IPv6數據包的保密。類似於認證包頭,該包頭在IPv4和IPv6中是相同的,通常稱之為IPsec封裝有效安全載荷(ESP)。


ipv4 與 ipv6基礎


  1. No Next Header :如果IPv6包頭或者擴展包頭中的Next Header字段取值為59,則代表後面沒有任何信息。即便Payload Lenth表明包頭後面還有數據,路由器也會忽略,無條件的轉發這些數據。


分享到:


相關文章: