IPv6地址詳解

IPv6地址組成

IPv6地址由被劃分為8個16位塊的128位組成。 然後將每個塊轉換為由冒號符號分隔的4位十六進位制數字,如:

2001:0000:3238:00E1:0063:0000:0000:FEFB

每一塊多個前導的0可以省略,一個塊全為0可以簡寫為一個0,,多個塊為連續0的話可以簡寫為:: (地址表示中僅能有一個::)。

2001:0:3238:E1:0063::FEFB

URL中IPv6地址必須加[]

IPv6地址由單播、組播、任意播地址組成:

IPv6地址詳解

#IPv6地址組成

IPv6地址詳解

#IPv6 vs。 IPv4

單播地址

在單播定址模式下,IPv6介面(host)在網段中唯一標識。 IPv6報文包含源IP地址和目標IP地址。 主機介面配備有在該網路段中唯一的IP地址。當網路交換機或路由器接收到註定到單個主機的單播IP分組時,它發出其連線到該特定主機的輸出介面。

IPv6地址詳解

地址的後半部分(最後64位)始終用於介面ID。 系統的MAC地址由48位組成並以十六進位制表示。 MAC地址被認為是在世界範圍內唯一分配的。 介面ID利用MAC地址的這種唯一性。 主機可以使用IEEE的擴充套件唯一識別符號(EUI-64)格式自動配置其介面ID。 首先,主機將其自己的MAC地址劃分為兩個24位的半部分。 然後16位十六進位制值0xFFFE被夾在這兩個MAC地址的兩半之間,產生EUI-64介面ID。

IPv6地址詳解

# MAC對映到IPv6地址

從左數起的第7位,是U位,使用EUI-64格式的地址IPv6地址,U/L位為1,則地址是全球唯一的,如果為0,則為本地唯一。

IPv6地址詳解

#IPv6報文

IPv6有三種不同型別的單播地址方案:

1. 可聚合全球單播(Global Unicast)

一般從運營商處申請到的IPv6地址空間為/48,三個最高有效位始終設定為001,再由自己根據需要進一步規劃:

IPv6地址詳解

#IPv6地址構成

2. 唯一本地地址 Unique Local Address

ULA,唯一本地地址,概念上相當於私有IP,僅能夠在本地網路使用,在IPv6 Internet上不可被路由, 用於以滿足本地環境中私有IPv6地址的使用。

在RFC4193中標準化了一種用來在本地通訊中取代站點本地單播地址的型別。ULA擁有固定字首FC00::/7,分為兩塊:FC00::/8暫未定義,FD00::/8定義如下:

IPv6地址詳解

#IPv6私有地址構成

附註: IPv6中的NAT

IPv6私網地址與公網地址的對映不像IPv4的NAT一樣,需要多個地址對映到一個地址,IPv6地址持有將近128位可隨意調配的位,鑑於地址空間的龐大,一般的企業或單位都會被分配到一個擁有很大量地址的網段,此網段擁有足夠多的地址來和內網主機進行一一對映,也就是說可用於對映的IP地址pool容量巨大無比,關鍵是這個一一對映如何來保持,既然不想再使用非IP層的資訊來保持資訊,那就要用純IP層的資訊了,這樣對上層影響最小。對於IPv4,經典NAT使用了五元組來保持流標識資訊,而對於IPv6,則更加絕妙,它利用(而不是使用)了checksum的演算法,絲毫不管這個checksum是誰的checksum,因為它根本就不改變資料包的checksum。

如,Linux下配置來回的兩條對映規則:

正向規則:

ip6tables -t mangle -A POSTROUTING -s fdca:ffee:babe::/64 -o eth2 -j MAP66——src-to 2008:db8:1::/64

反向規則:

ip6tables -t mangle -A PREROUTING -d 2008:db8:1::/64 -i eth2 -j MAP66 ——dst-to fdca:ffee:babe::/64

3. 鏈路本地IPv6 單播地址

類似於windows系統中IPv4的169。254。0。0/16地址(link-local IPv4 address)

它的有效範圍僅僅在所處鏈路上。以FE80::/10為字首,11-64位為0,外加一個64bits的介面標識(一般是EUI-64)。

IPv6地址詳解

#IPv6本地鏈路地址構成

特殊地址

IPv6地址詳解

組播(Multicast)

IPv6 多播(組播)地址是一組介面的識別符號(典型在不同節點上)。一個介面可以屬於任何數目的多播組。

組播地址最高位前8位固定為全1,也就是“FFXX::/8”

IPv6地址詳解

#IPv6組播地址構成

IPv6通訊的核心大量的使用了組播(鄰居發現協議NDP),IPv6不再使用廣播。IPv6的任何節點都能夠成為一個組播成員,源節點可以傳送資料包到組播組,任何一個組播成員都能收到來自這個組播組的資料包。

常用組播地址

IPv6地址詳解

節點請求

在IPv4環境中,ARP地址解析協議利用廣播將MAC請求訊息傳送給整個乙太網鏈路上的所有主機,目的主機迴應ARP Reply從而使傳送源獲得目的主機的MAC地址。

節點請求則以一種“點對點”的形式將MAC地址請求訊息傳送到目標主機(因為主機的請求節點組播地址如FF02::1:FFAA:4C3E在整個鏈路上是唯一的),所以源主機可以直接將節點請求資訊發到目標主機節點請求組播地址上,節點請求組播地址是提高MAC地址解析的核心技術,那麼這個目標主機的節點請求組播是如何生成的?

節點請求組播的構成如下: 該組播地址是將一個單播IPv6地址(可以是本地鏈路地址也可以是全球單播地址)的後24位填充到一個請求節點組播地址的124位的固定字首FF02::1:FF中,生成一個唯一的節點請求組播地址。

IPv6地址詳解

#請求節點IPv4組播地址的構成

如一臺IPv6主機的本地鏈路地址為FECO:0000:0000:0000:0230:18FF:FEAA:4C3E,現在透過對這個地址的實踐分析,來理解該地址所對應的節點請求組播地址的構成原理,如下圖所示。首先是還原節點請求組播地址的124位固定字首的標準格式:“FF02:0000:0000:0000:0000:0001:FF”然後取出IPv6主機的本地鏈路地址FECO:0000:0000:0000:0230:18FF:FEAA:4C3E中的最後24位,填充到“FF02:0000:0000:0000:0000:0001:FF”字首中,IPv6使用十六進位制表達,那麼一個十六進位制字元是4個二進位制位,所以需要將IPv6單播地址中的最後6個字元(二進位制為24位)取下填充到124位固定字首中形成最後的地址:FF02:0000:0000:0000:0000:0001:FFAA:4C3E,最後使用“零壓縮”法表示成為:FF02::1:FFAA:4C3E。

IPv6地址詳解

#請求節點組播地址構成例項

IPV6的組播地址與MAC地址的對映關係

IPv6的節點請求多播地址去替代了ARP地址解析協議的目標廣播地址255。255。255。255,這隻能表示IPv6的節點請求從網路層上的最佳化與改進,在資料鏈路層最佳化則是:

在IPv4的ARP地址解析協議中的請求訊息報文的目標鏈路層地址為FFFF。FFFF。FFFF,那麼在IPv6中節點請求訊息報文的目標鏈路層地址是什麼?在IPv4中組播的IP地址是可以對映成為資料鏈路層的MAC地址,在IPv6中這個概念仍然生效,IPv6的節點請求組播地址也可以對映成資料鏈路層地址,具體方法如下圖所示組播的MAC地址是通地IPv6的組播IP地址對映而來,對映的原則是:將IPv6組播地址的後32位取出,填充到固定字首是3333的MAC地址中來生成資料鏈路層地址。

IPv6地址詳解

#MAC對映

在IPv4中的ARP表項也變成了IPv4中的鄰居表項,如在Win10系統中透過netsh interface ipv6 show neighbors可檢視裝置各個介面下的鄰居建立情況:

IPv6地址詳解

#IPv6鄰居檢視

任播(Anycast)

任播技術是一種新的網路應用方式,但是目前IPv6中它的很多定義是模糊的,並且在控制路由方面尚無一致的協議標準,因此節點間任播通訊仍然無法實現。

RFC 2723將IPv6地址結構中的任播地址定義為系列網路介面標識,即屬於多個節點的多個介面的共同網路標識(IPv6地址), 其特點是:發往一個任播地址的分組(報文)將被轉發到該地址標識“最近”的一個網路介面(“最近”的定義是基於路由協議中的距離度量——cost)。

單播地址是每個網路介面唯一的識別符號,多個介面不能分配相同的單播地址,帶有同樣目的地址的資料包被髮往同一個節點;另一方面,組播地址被分配給一組節點,組中所有成員擁有同樣的組播地址,而帶有同樣地址的資料包同時發給所有成員;類似於組播地址,單一的任播地址被分配給多個節點(任播成員),但和多播機制不同的是:每次僅有一個分配任播地址的成員(“最近”的成員)與傳送端通訊。若任播地址相關的有三個節點,當源節點發送一個目的地址為任播地址的資料包時,資料包被髮送給三個節點中的一個,而不是所有的主機。任播機制的優勢在於源節點不需要了解服務節點或目前網路的情況,而可以接收特定服務,當一個節點無法工作時,帶有任播地址的資料包又會在剩餘節點中挑選“最近”的節點進行轉發(取決於任播路由協議)。

任播技術的初衷是徹底簡化在網際網路中尋找合適伺服器的任務(類似負載均衡、VRRP等技術, Failover),從物理主機中分離出邏輯服務識別符號,任播地址可根據服務型別進行分配,使得網路服務擔當一個邏輯主機的角色

任播與組播的區別: 任播是將報文轉發到一組節點中的一個(僅是一個),而組播卻是將 報文轉發給一組節點中的所有成員。

任播地址定義:

使用部分已存單播地址空間(非正式)

如示例所示,Server A, B, C均申明適用任播地址2001:AD02::1, 路由器根據路由協議決定將目的為2001:AD02::1的報文發給三者中的一個(如:Cost最小的Server C)

IPv6地址詳解

為任意播定義一類特殊的地址

如定義AA00::/8或者FA00::/8作為任播地址