2011年11月16日 星期三

簡介 IPv6

眾所周知,全球廣泛使用已逾三、四十年的32位元位址為基礎的IPv4協定有著諸多缺點及限制:

  • IP位址的限制與問題
    • 32位元的位址空間快速耗盡 (NAT、IPV6)
    • IP位址的使用與配置無效率 (VLSM)
  • 網際網路路由器上的路徑表急遽擴充 (CIDR)
  • 網路品質及流量控制不易 (QoS)
  • 安全性不足 (IPSec)
  • 設定管理不易

未來新一代的IPv6協定將解決IPv4的上述問題,提供改進與加強以便取代IPv4:

  • 較大的位址空間:
    • IP位址長度由32位元擴充為128位元,解決IPv4 位址耗盡和不足的困擾。
  • 較佳的路由效率及最佳化。
  • 簡化位址結構。
  • 簡化網路位址設定,支援自動設定(auto-configuration)的機制,網管更輕鬆。
  • 網路重新分配IP更容易。
  • 服務品質保證 
  • 提供認證和安全的機制。
    • 預設啟用IPsec,確保傳輸安全

IPv6位址表示法

IPv6位址的長度達128位元(16個位元組),位址空間高達2128 (大約3.4x1038),若是使用二進位表示法,則一連長串的0與1,恐會讓人看的頭昏腦脹,且書寫或輸入時又會過於冗長、容易造成錯誤。

冒號十六進位表達法(colon hexadecimal notation)

為了便於使用IPv6位址,IP6位址通常分為8組,每組16個位元(二個位元組),寫成4個16進位的數值,而每組之間需以冒號 ( : )區隔,此種表示法稱為冒號十六進位表達法(colon hexadecimal notation)。

ipv6address1

簡化或壓縮格式

IPv6位址中經常含有一長串的零。若要簡化這些位址的撰寫,需要使用壓縮格式,其規則如下:

  • 每一組如果開頭為0,則可省略
  • 每一組如果全為0,即可簡寫為0
  • 若連續好幾組皆為0000,則可全省略簡寫為::,亦即將其中一連串連續的 0以雙冒號 (::) 符號表示,不過切記,此符號::僅能在位址中出現一次

範例如下:

  FFED:0:0:0:0:BA98:3210:4562 的壓縮格式為 FFED::BA98:3210:4562          (多點傳送位址)

       3FFE:FFFF:0:0:8:800:20C4:0 的壓縮格式為 3FFE:FFFF::8:800:20C4:0        (單點傳送位址)

       0:0:0:0:0:0:0:1 的壓縮格式為 ::1    (回送位址)

       0:0:0:0:0:0:0:0 的壓縮格式為 ::    (未指定位址)

混合格式 (mixed notation)

此格式為 IPv4 及 IPv6 位址的結合,為IPv4相容的IPv6位址表示法(IPv4-Compatible IPv6 Address),讓IPv6可向下相容於IPv4,因此在混合格式下,位址的格式為 n:n:n:n:n:n:d.d.d.d,其中每個 n 表示六組 IPv6 高階的十六進位值,而每個 d 則表示 四個IPv4 位址的十進位數值,例如:

::140.92.33.58 (等於 IPv6 0000:0000:0000:0000:0000:0000:140.92.33.58)

首碼表示格式

128位元的IPv6位址中,通常前面N位元稱為類型首碼(Type Prefix),用來定義IPv6位址的類型,而首碼的長度端看位址的型態(Type)與用途而定,亦即不同類型的IPv6位址,其首碼長度就會不同,例如 /5,表示前面5個位元為首碼。

ipv6address2

 

首碼表示法即是採用『IPv6 位址/首碼長度』表示格式,亦即在IPv6位址之後加上『/首碼長度』

例:2001:0000:0000:B3:0000:0000:0000:1234/64


IPv6位址的類型與格式

IPv6的位址區分為單點傳送(unicast;one-to-one)、多點傳送(multicast;one-to-mary)與任一傳送(anycast;one-to-nearest)三種,與IPv4相比,不再使用廣播(Broadcast)位址與傳送方式。

單點傳送 (Unicast)

IPv6的單點傳送如同IPv4一般,封包乃傳送給單一介面位址,適用於單一點對單一節點的資料傳送,這種類型的IPv6位址又區分為『Global Unicast』位址、『Link-Local』位址、『Site-Local』位址 (已捨棄不再使用)。

『Global Unicast』位址

Global unicast是由IANA統一分配,是用來連上網際網路的位址,類似IPv4的Public IP,其基本定義為 001 /3。也就是最前面的3個位元固定為001不變,所以以二進位和十六進位表示而言,看起來就是如下圖所示,所以當你看到冒號十六進位表達法的IPv6位址是 2 或 3 開頭的就是可以直接在網際網路使用的 Global Unicast位址。

ipv6address3

 

ipv6address9

當企業組織內部需要使用IPv6協定互通、而且並不需要連上網際網路時就可以使用本地端位址(Local Address),而本地端位址又有Site-Local Unicast和Link-Local Unicast兩種。

Site-Local Unicast (RFC 3513)

『Site-Local』位址定義 1111 1110 11 /10,亦即最前面的10個位元固定為1111111011,接下來是38個0,再來是16位元的子網路位址,最後才是64位元的介面位址,因為前面16個位元固定為1111111011000000,所以Site-Local Unicast位址一定是以FEC0為開頭,首碼長度為10個位元。

由於 Site-Local 位址的Site這個用字容易混淆,所以它已在2004年九月的RFC3879中被捨棄,代之以唯一區域位址 (ULA,unique local address) ,故新的IPv6系統不應該再支援Site-Local這種類型的位址。

ipv6address4

 

Unique Local Address (RFC 4193)

Unique-Local 位址是IPv6版的私人位址 (private address),這是用在同一個私有網路管理機制之下可使用的網路位址空間,類似IPv4的10.0.0.0/8、172.16.0.0/16、192.168.0.0/24、它被定義在RFC 4193中,用來取代先前的 site-local位址。Unique-Local位址只能在限制的網路內路由。

Unique Local位址定義為1111 110/7,首碼為1111 1107,所以位址為 fc00::/7,但另一特殊之處在於第八個位元做為本地旗標,若為1代表本地,故FD00/8現在被視為本地單點傳送位址。

ipv6address6

 

Link-Local Unicast

『Link-Local』連結本地位址為同一個本地網段通訊所使用的位址,類似在傳統的IPv4下,使用了169.254.x.x這種自動指定且無法跨越路由器的IP位址,所以Link-Local位址只要是啟用IPv6協定的主機即可自動產生而能夠在網段內彼此連線無法路由。IPv6的連結本地位址定義為 1111 1110 10 /10,亦即最前面的10個位元的首碼固定為1111111010,由於前面16位元固定為 1111 1110 1000 0000,所以位址是以FE80開頭,接下來是54個0,最後是64位元的介面位址,由於介面位址只有48位元,所以會在中間插入16位元的"FFFE",例如網卡卡號為0020 D234 DCF5,則最後的64位元將會是0020 D2FF FE34 DCF5。

ipv6address5

 

位址範圍 (Address Scopes)
一個位址範圍定義網路介面上的IPv6位址必需確保唯一性的區域,由上面所介紹的IPv6單點傳送類型中可知,IPv6有三種不同的位址範疇:Global 、Unique/Site和Link-local,其位址應用的範疇分別為網際網路、企業組織與同一本地連結網路(如下圖所示)

ipv6addressscope

多點傳送(Multicast)

多點傳送位址用來定義一群節點的位址,其格式如下圖所示,前面8個位元為首碼1111 1111,接下來的4個位元為旗標 (Flag),用來定義多點傳送的類型,再接下來的4個位元為範圍位址(Scope ID),最後才是高達112位元的群組位址(Group ID)

IPv6 多點傳送位址為 FF00::/8 (1111 1111)。

ipv6address7

 

任一傳送(Anycast)

任一傳送位址也是用來定義一群不相節點的位址,但與多點傳送不同之處在於多點傳送位址的封包會傳送給群組中的每個點,而任一傳送位址的封包只會傳送給群組中最接近的一個節點。

任一傳送位址的格式如下圖所示,其首碼的長度不固定,但首碼以外的位元均為 0 。

任一傳送位址通常只能由路由器使用,而非一般主機。

ipv6address8


不同類型的IPv6位址整理

最後,整理各種不同類型的IPv6位址的前碼表示法。

IPv6 位址類型
二進位前置碼
IPv6首碼表示法
未指定位址(unspecified)
00…00 (128位元)
::/128
迴路位址(loopback)
000…1 (128位元)
::1/128 (0:0:0:0:0:0:0:1)
連結-本機位址
1111 1110 10
FE80::/10
站台-本機位址(過時)
1111 1110 11
FEC0::/10
單一本機位置(2005)
1111 110
fc00::/7
全球單一傳送位址
001
2::/3 (2xxx::/4 or 3xxx:/4)
多點傳送位址
1111 1111
FF00::/8

檢視IPv6位址及測試

不管您使用的是Windows或者是Linux作業系統(除非版本太舊),預設上均有支援或啟用IPv4和IPv6雙堆疊,當您開啟Windows 命令提示字元下達ipconfig,或使用Linux的ifconfig均通常會顯示Link-local位址,因為網路上並沒有DHCP或路由器配發IPv6位址,所以就自動設定為Link-local位址這種僅能在網段內使用的私人位址。

特別說明的一點是:微軟自Vista作業系統後,不再使用EUI-64技術利用MAC位址來形成IPv6的介面識別碼,而改採用隨機產生的介面識別碼,所以目前您並無法從Windows 7的Link-local位址看出其網卡卡號。不過如果您仍然希望使用EUI-64技術來產生介面識別碼,則您需要輸入下列命令:
netsh interface ipv6 set global randomizeidentifiers=disabled

ipv6address10

下圖為Linux預設的Link-Local位址,由圖可知linux採用了EUI-64技術產生了後面64位元的介面識別碼。

ipv6address11

若您要測試IPv6,請在Windows命令提示字元下輸入 :
ping -6 ::1    (IPv6 Loopback位址)

ipv6address12

若是Linux系統,請輸入下列指令測試loopback位址:

ping6 ::1

ipv6address13


IPv6位址指派方式

IPv6位址有多種指派或取得方式:

  1. 手動設定
  2. 無狀態自組態配置 (Stateless autoconfiguration;RFC2462)
  3. 無狀態DHCPv6 (Stateless DHCPv6)
  4. 全狀態DHCPv6 (Stateful DHCPv6)