前言
隨着Internet規模的擴大,IPv4地址空間已經消耗殆盡。針對IPv4的地址短缺問題,曾先後出現過CIDR和NAT等臨時性解決方案,但是CIDR和NAT都有各自的弊端,並不能作爲IPv4地址短缺問題的徹底解決方案。另外,安全性、QoS(服務質量)、簡便配置等要求也表明需要一個新的協議來根本解決目前IPv4面臨的問題。
IETF在20世紀90年代提出了下一代互聯網協議-IPv6,IPv6支持幾乎無限的地址空間。IPv6使用了全新的地址配置方式,使得配置更加簡單。IPv6還採用了全新的報文格式,提高了報文處理的效率、安全性,也能更好的支持QoS。
一、IPv6的基本概念
1. IPv6地址
2. IPv6基本報頭
IPv6的基本報頭在IPv4報頭的基礎上,增加了流標籤域,去除了一些冗餘字段,使報文頭的處理更爲簡單、高效。
IPv6報文由IPv6基本報頭、IPv6擴展報頭以及上層協議數據單元三部分組成。
基本報頭中的各字段解釋如下:
- Version:版本號,長度爲4bit。對於IPv6,該值爲6。
- Traffic Class:流類別,長度爲8bit,它等同於IPv4報頭中的TOS字段,表示IPv6數據報文的類或優先級,主要應用於QoS。
- Flow Label:流標籤,長度爲20bit,它用於區分實時流量。流可以理解爲特定應用或進程的來自某一源地址發往一個或多個目的地址的連續單播、組播或任播報文。IPv6中的流標籤字段、源地址字段和目的地址字段一起爲特定數據流指定了網絡中的轉發路徑。這樣,報文在IP網絡中傳輸時會保持原有的順序,提高了處理效率。隨着三網合一的發展趨勢,IP網絡不僅要求能夠傳輸傳統的數據報文,還需要能夠傳輸語音、視頻等報文。這種情況下,流標籤字段的作用就顯得更加重要。
- Payload Length:有效載荷長度,長度爲16bit,它是指緊跟IPv6報頭的數據報文的其它部分。
- Next Header:下一個報頭,長度爲8bit。該字段定義了緊跟在IPv6報頭後面的第一個擴展報頭(如果存在)的類型。
- 跳數限制(Hop Limit),長度爲8bit,該字段類似於IPv4報頭中的Time to Live字段,它定義了IP數據報文所能經過的最大跳數。每經過一個路由器,該數值減去1;當該字段的值爲0時,數據報文將被丟棄。
- Source Address:源地址,長度爲128bit,表示發送方的地址。
- Destination Address:目的地址,長度爲128bit,表示接收方的地址。
與IPv4相比,IPv6報頭去除了IHL、Identifier、Flags、Fragment Offset、Header Checksum、 - Options、Padding域,只增了流標籤域,因此IPv6報文頭的處理較IPv4大大簡化,提高了處理效率。另外,IPv6爲了更好支持各種選項處理,提出了擴展頭的概念。
3. IPv6擴展報頭
IPv6擴展報頭是跟在IPv6基本報頭後面的可選報頭,可以有一個或多個。
IPv6增加了擴展報頭,使得IPv6報頭更加簡化。一個IPv6報文可以包含0個、1個或多個擴展報頭,僅當需要路由器或目的節點做某些特殊處理時,才由發送方添加一個或多個擴展頭。IPv6支持多個擴展報頭,各擴展報頭中都含有一個下一個報頭字段,用於指明下一個擴展報頭的類型。這些報頭必須按照以下順序出現:
- IPv6基本報頭
- 逐跳選項擴展報頭
- 目的選項擴展報頭
- 路由擴展報頭
- 分片擴展報頭
- 認證擴展報頭
- 封裝安全有效載荷擴展報頭
- 目的選項擴展報頭(指那些將被分組報文的最終目的地處理的選項)
- 上層協議數據報文
除了目的選項擴展報頭外,每個擴展報頭在一個報文中最多隻能出現一次。目的選項擴展報頭在一個報文中最多也只能出現兩次,一次是在路由擴展報頭之前,另一次是在上層協議擴展報頭之前。
二、IPv6地址格式和地址類型
1. IPv6地址格式
IPv6地址長度爲128比特,每16比特劃分爲一段,每段由4個十六進制數表示,並用冒號隔開。
IPv6地址包括網絡前綴和接口標識兩部分。
2. IPv6地址壓縮格式
每一組中的前導“0”都可以省略。
地址中包含的連續全爲0的組,可以用雙冒號“::”來代替。
注意:如果一個IPV6地址中只能出現一個‘::’,否則會出現歧義
3. IPv6地址分類
IPv6地址分爲單播地址、任播地址、組播地址三種類型。
單播地址的格式是2000::/3,代表公共IP網絡上任意可及的地址。IANA負責將該段地址範圍內的地址分配給多個區域互聯網註冊管理機構(RIR)。RIR負責全球5個區域的地址分配。以下幾個地址範圍已經分配:2400::/12 (APNIC)、2600::/12 (ARIN)、2800::/12 (LACNIC)、2A00::/12 (RIPE NCC)和2C00::/12 (AfriNIC),它們使用單一地址前綴標識特定區域中的所有地址。2000::/3地址範圍中還爲文檔示例預留了地址空間,例如2001:0DB8::/32。
鏈路本地地址只能在連接到同一本地鏈路的節點之間使用。可以在自動地址分配、鄰居發現和鏈路上沒有路由器的情況下使用鏈路本地地址。以鏈路本地地址爲源地址或目的地址的IPv6報文不會被路由器轉發到其他鏈路。鏈路本地地址的前綴是FE80::/10。
組播地址的前綴是FF00::/8。組播地址範圍內的大部分地址都是爲特定組播組保留的。跟IPv4一樣,IPv6組播地址還支持路由協議。IPv6中沒有廣播地址。組播地址替代廣播地址可以確保報文只發送給特定的組播組而不是IPv6網絡中的任意終端。
IPv6還包括一些特殊地址,比如未指定地址::/128。如果沒有給一個接口分配IP地址,該接口的地址則爲::/128。需要注意的是,不能將未指定地址跟默認IP地址::/0相混淆。默認IP地址::/0跟IPv4中的默認地址0.0.0.0/0類似。環回地址127.0.0.1在IPv6中被定義爲保留地址::1/128。
4. IPv6單播地址
全球單播地址帶有固定前綴,類似於IPv4中的公網地址
鏈路本地單播地址前綴爲FE80::/10。
單播地址主要包含全球單播地址和鏈路本地地址。全球單播地址(例如2000::/3)帶有固定的地址前綴,即前三位爲固定值001。其地址結構是一個三層結構,依次爲全球路由前綴、子網標識和接口標識。全球路由前綴由RIR和互聯網服務供應商(ISP)組成,RIR爲ISP分配IP地址前綴。子網標識定義了網絡的管理子網。
5. IPv6組播地址
所有IPv6組播地址都以FF開始。
IPv6爲需要使用組播發送數據的協議預留了一些組播組。
1. IPv6的組播與IPv4相同,用來標識一組接口,一般這些接口屬於不同的節點。一個節點可能屬於0到多個組播組。
2. 目的地址爲組播地址的報文會被該組播地址標識的所有接口接收。
3. 一個IPv6組播地址是由前綴、標誌(Flag)字段、範圍(Scope)字段以及組播組ID(Group ID)4個部分組成:
- 前綴:IPv6組播地址的前綴是FF00::/8(1111 1111)。
- 標誌字段(Flag):長度4bit,目前只使用了最後一個比特(前三位必須置0),當該位值爲0時,表示當前的組播地址是由IANA所分配的一個永久分配地址;當該值爲1時,表示當前的組播地址是一個臨時組播地址(非永久分配地址)。
- 範圍字段(Scope):長度4bit,用來限制組播數據流在網絡中發送的範圍。
- 組播組ID(Group ID):長度112bit,用以標識組播組。目前,RFC2373並沒有將所有的112位都定義成組標識,而是建議僅使用該112位的最低32位作爲組播組ID,將剩餘的80位都置0,這樣,每個組播組ID都可以映射到一個唯一的以太網組播MAC地址(RFC2464)。
6. IPv6任播地址
任播地址標識一組網絡接口(通常屬於不同的節點)。目標地址是任播地址的數據包將發送給其中路由意義上最近的一個網絡接口。任播過程涉及一個任播報文發起方和一個或多個響應方。任播報文的發起方通常爲請求某一服務(DNS查找)的主機或請求返還特定數據(例如,HTTP網頁信息)的主機。任播地址與單播地址在格式上無任何差異,唯一的區別是一臺設備可以給多臺具有相同地址的設備發送報文。
企業網絡中運用任播地址有很多優勢。其中一個優勢是業務冗餘。比如,用戶可以通過多臺使用相同地址的服務器獲取同一個服務(例如,HTTP)。這些服務器都是任播報文的響應方。如果不是採用任播地址通信,當其中一臺服務器發生故障時,用戶需要獲取另一臺服務器的地址才能重新建立通信。如果採用的是任播地址,當一臺服務器發生故障時,任播報文的發起方能夠自動與使用相同地址的另一臺服務器通信,從而實現業務冗餘。
使用多服務器接入還能夠提高工作效率。例如,用戶(即任播地址的發起方)瀏覽公司網頁時,與相同的單播地址建立一條連接,連接的對端是具有相同任播地址的多個服務器。用戶可以從不同的鏡像服務器分別下載html文件和圖片。用戶利用多個服務器的帶寬同時下載網頁文件,其效率遠遠高於使用單播地址進行下載。
三、IPv6無狀態地址配置的過程
1. IPv6無狀態地址自動配置
網絡節點向相連的路由器發送RS,請求地址前綴信息。
路由器通過發送路由器通告RA,回覆地址前綴信息。
IPv6支持無狀態地址自動配置,無需使用諸如DHCP之類的輔助協議,主機即可獲取IPv6前綴並自動生成接口ID。路由器發現功能是IPv6地址自動配置功能的基礎,主要通過以下兩種報文實現:
RA報文:每臺路由器爲了讓二層網絡上的主機和其它路由器知道自己的存在,定期以組播方式發送攜帶網絡配置參數的RA報文。RA報文的Type字段值爲134。
RS報文:主機接入網絡後可以主動發送RS報文。RA報文是由路由器定期發送的,但是如果主機希望能夠儘快收到RA報文,它可以立刻主動發送RS報文給路由器。網絡上的路由器收到該RS報文後會立即向相應的主機單播迴應RA報文,告知主機該網段的默認路由器和相關配置參數。RS報文的Type字段值爲133。
2. EUI-64規範
將FFFE插入MAC地址的前24位與後24位之間,並將第7位的值取反(比如0改爲1)即可生成接口ID。
爲了通過IPv6網絡進行通信,各接口必須獲取有效的IPv6地址,以下三種方式可以用來配置IPv6地址的接口ID:網絡管理員手動配置;通過系統軟件生成;採用擴展唯一標識符(EUI-64)格式生成。就實用性而言,EUI-64格式是IPv6生成接口ID的最常用方式。IEEE EUI-64標準採用接口的MAC地址生成IPv6接口ID。MAC地址只有48位,而接口ID卻要求64位。MAC地址的前24位代表廠商ID,後24位代表製造商分配的唯一擴展標識。
MAC地址的第七高位是一個U/L位,值爲0時表示MAC地址全局唯一,值爲1時表示MAC地址本地唯一。
在MAC地址向EUI-64格式的轉換過程中,在MAC地址的前24位和後24位之間插入了16比特的FFFE,並將U/L位的值從0變成了1,這樣就生成了一個64比特的接口ID,且接口ID的值全局唯一。接口ID和接口前綴一起組成接口地址。
3. IPv6無狀態地址DAD檢查
當爲接口配置IPv6地址時,DAD用來在本地鏈路範圍內檢測將要使用的IPv6地址是否唯一。
設備在給接口分配IPv6單播地址之前會進行重複地址檢測(DAD),確認是否有其它的節點使用了該地址。尤其是在地址自動配置的時候,進行DAD檢測是很必要的。一個IPv6單播地址在分配給一個接口之後且通過重複地址檢測之前稱爲試驗地址,此時該接口不能使用這個試驗地址進行單播通信,但是仍然會加入兩個組播組:ALL-nodes組播組和Solicited-node組播組。Solicited-node組播組由單播或任播地址的後24位加上地址前綴FF02:0:0:0:0:1:FF00::/104組成。例如,本示例中配置的試驗地址爲2000::1,該地址被加入Solicited-node組播組FF02::1:FF00:1。
IPv6重複地址檢測技術和IPv4中的免費ARP類似:用於地址分配或主機連接網絡時檢測重複的IPv4主機地址。節點向一個自己將使用的試驗地址所在的Solicited-node組播組發送一個以該試驗地址爲請求的目標地址的鄰居請求(NS)報文,如果收到某個其它站點回應的鄰居通告(NA)報文,就證明該地址已被網絡上使用,節點將不能使用該試驗地址進行通信。這種情況下,網絡管理員需要手動爲該節點分配另外一個地址。
四、IPv6過渡技術
1. 雙協議棧技術
同時啓用v4與v6協議棧
雙棧技術
- 同時支持IPv6和IPv4協議
- 應用程序根據DNS解析地址類型選擇使用IPv6或IPv4協議
優點
互通性好,實現簡單,允許應用逐漸從IPv4過渡到IPv6
缺點
- 只適用雙棧節點本身
- 對每個IPv4節點都要升級,成本較大,沒有解決IPv4地址緊缺問題
2. 隧道技術
v6報文封裝在v4中(主流技術)
GRE隧道技術
IPv6報文被包含在GRE報文中作爲GRE的載荷
優點
- 通用性好
- 技術成熟,易於理解
缺點
維護複雜
GRE隧道流程
- 發送方與接收方都是雙棧設備
- 隧道已預先建立好
- 發送方封裝報文,接收方解封裝
IPv6 in IPv4隧道技術
IPv6報文被包含在IPv4報文中作爲IPv4的載荷
同GRE隧道有類似的優缺點
6to4隧道流程
- 同自動隧道技術類似
6to4中繼- 通往純IPv6網絡的網關
ISATAP隧道技術
連接IPv4網點內部的IPv6主機和路由器
將IPv4網點作爲一個NBMA鏈路,在IPv4報文中封裝IPv6報文
優點
IPv4網點內部的IPv6主機可自動獲得IPv6前綴
缺點
IPv6地址爲固定格式
3. 網絡地址轉換
NAT-PT
NAT-PT原理
- 通過中間的NAT-PT協議轉換服務器,實現純IPv6節點和純IPv4節點間的互通
- NAT-PT服務器分配動態IPv4地址來標識IPv6主機(與DNS配合)
- NAT-PT服務器向相鄰IPv6網絡宣告96位地址前綴信息,用於標識IPv4主機
- NAT-PT服務器負責IPv4-to-IPv6,或IPv6-to-IPv4的報文轉換
優點
只需設置NAT-PT服務器
缺點
資源消耗較大,服務器負載重
NAT-PT種類
靜態NAT-PT
- NAT-PT服務器提供一對一的IPv6地址和IPv4地址的映射。
- 配置複雜,使用大量的IPv4地址。
動態NAT-PT
- NAT-PT服務器提供多對一的IPv6地址和IPv4地址的映射。
- 採用上層協議複用的方法。
NAT-PT DNS ALG
- 動態NAT-PT與DNS ALG聯合使用,轉換DNS請求。
- 可利用原有的DNS服務器。
靜態NAT-PT轉換過程
動態NAT-PT轉換過程
NAT-PT DNS ALG轉換過程
五、常見問題
IPv6主機無狀態地址自動配置的過程是什麼?
IPv6主機首先通過路由器發現功能來獲取地址前綴信息,之後通過向接口已有的48比特MAC地址中插入16比特的FFEE生成接口ID,在生成了IPv6地址後會通過重複地址檢測來確認地址是否唯一。