目錄
文章目錄
前文列表
IPv6 的地址格式
IPv6 地址格式為 8 段 16 位(共 128 位)組成:
0010000000000001 0000000000000000 0011001000111000 1101111111100001 0000000001100011 0000000000000000 0000000000000000 1111111011111011
使用 32 個(4 * 8)十六進制數表示。十六進制表:
不同的段之間以符號 :
分隔,e.g. 2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b。
- 最左側的三個段(48 位)包含站點前綴。站點前綴描述通常由 ISP 或區域 Internet 注冊機構(Regional Internet Registry,RIR)分配的站點的公共拓撲。
- 下一個段網管分配的 16 位子網 ID。子網 ID 描述專用拓撲(也稱為站點拓撲),因為它是一個私有網絡的標識。
- 最右側的四個段(64 位)包含接口 ID,也稱為標記。接口 ID 可以從接口的 MAC 地址自動配置,也可以采用 EUI-64 格式手動配置。
上圖示例顯示了 IPv6 地址的全部 128 位。前 48 位 2001:0db8:3c4d 包含表示公共拓撲的站點前綴。隨后的 16 位 0015 包含代表站點專用拓撲的子網 ID。低階(最右邊的 64 位 0000:0000:1a2f:1a2b)包含接口 ID。
即使在轉換為十六進制格式后,IPv6 地址仍然很長。所以 IPv6 提供了一些規則來縮短地址:
- 規則 1:丟棄前導零,高位的連 0 可省略不寫,低位的 0 不可省略,上述地址可簡化記為 2001:db8:3c4d:15:0:0:1a2f:1a2b。
- 規則2:連續多段全 0 可用符號
::
替代且僅替代一次(只能出現一次),上述地址可進一步簡化記為 2001:db8:3c4d:15::1a2f:1a2b。
此外,還支持 點分十六進制 的寫法,e.g. 2001:0db8:85a3:08d3:1319:8a2e:0370:7344 則記為 2.0.0.1.0.d.b.8.8.5.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.7.0.7.3.4.4,其倒序寫法用於在 ip6.arpa 子域名中記錄 IPv6 地址與 Domain 之間的映射關系。
站點前綴
IPv6 地址格式同樣采用了 CIDR(Classless Inter-Domain Routing,無類別域間路由)的方式,通過 前綴長度(Ipv6 Address / Prefix Length) 來划分 網絡號 和 主機號。
IPv6 地址最左邊的字段是用來路由 IPv6 包的前綴,最多占用 IPv6 地址最左側的 48 位。例如,IPv6 地址 2001:db8:3c4d:0015:0000:0000:1a2f:1a2b/48 的站點前綴包含在最左邊的 48 位 2001:db8:3c4d 中。此前綴可使用如下形式(將零省略掉)來表示:2001:db8:3c4d::/48。
地址生成方式
IPv4:手動配置、DHCP 自動分配。
IPv6:手動配置、DHCPv6 自動分配、基於 ICMPv6 的自動生成。
IPv6 地址的分類以及尋址模式
單播(Unicast)地址
單播地址用於標識一個網絡接口(Interface),在單播尋址模式下,IPv6 協議會把送往地址的數據包送往給其 Interface。
單播地址可以進一步細分為以下 4 類:
- 全球唯一地址(Global Unique Address):公網地址,全球可達。
- 唯一本地地址(Unique Local Unicast Address):私網地址,同子網段可達。
- 鏈路本地地址(Link-Local Address):基於鄰居發現協議的自動配置地址,同一個鏈路上的所有主機可達,不需要手動配置。
- 站點本地地址(Site-Local Address):已丟棄,被鏈路本地地址替代。
單點傳送地址的類型由地址中最左邊(高階)的連續位(其中包含前綴)來確定。單點傳送地址的格式按以下分層結構進行組織:
- 公共拓撲
- 站點(專用)拓撲
- 接口 ID
單播地址作用范圍:
Interface ID
IPv6 具有三種不同類型的本地單播地址方案。地址的后 64 位始終作為 Interface ID。在本地單播地址的場景中,Interface ID 可直接從 MAC 轉換而成:MAC 地址是在世界唯一的,Interface ID 利用了 MAC 地址的唯一性。所以 Host 可以直接使用 IEEE 的擴展唯一標識符(EUI-64)格式自動的配置其 Interface ID。比如:將 48 位的 IEEE 802 MAC 地址平分為兩部分,然后在中間插入 16 位的 FFFE 即可轉換為 64 位的 Interface ID 了。因為,MAC 地址是全球唯一的,所以從 MAC 地址轉換得來的 Interface ID 也是全球唯一的。
為了將 EUI-64 ID 轉換為 IPv6 Interface ID,EUI-64 ID 的最高有效的第 7 位被補充。 例如:
全球唯一地址(Global Unique Address)
是全球唯一和可識別的 IPv6 地址,等同於 IPv4 的公網地址。由以下 3 部分組成:
- 全球路由前綴(Global Routing Prefix):標識 1 個 Site。
- Subnet ID:標識 Site 中的一個 Subnet。
- Interface ID:標識 Subnet 中的一個 Interface。
- 公共拓撲:站點前綴定義從網絡到路由器的公共拓撲。企業的站點前綴可以從 ISP 或區域 Internet 注冊機構(Regional Internet Registry,RIR)獲取。
- 站點拓撲和 IPv6 子網:在 IPv6 中,子網 ID 定義網絡的管理子網,它的最大長度為 16 位。可以在配置 IPv6 網絡的過程中指定子網 ID。子網前綴通過指定已分配了子網的特定鏈路來定義路由器的站點拓撲。IPv6 子網在概念上與 IPv4 子網相同,因為每個子網通常都與一個硬件鏈路相關聯。但是,IPv6 子網 ID 用十六進制表示法表示,而不是用點分十進制表示法表示。
- 接口 ID:接口 ID 用來標識特定節點的接口。接口 ID 必須在子網內唯一。IPv6 主機可以使用相鄰節點搜索協議自動生成其自身的接口 ID。相鄰節點搜索協議基於主機接口的 MAC 地址或 EUI-64 地址自動生成接口 ID。也可以手動指定接口 ID,建議對 IPv6 路由器和啟用了 IPv6 的服務器采用這種方式。
注意,在全球單播地址中,規定如 2001:BCFF:FEA6::/48 表示一個 IPv6 路由前綴,2001:BCFF:FEA6:6C01::/64 表示一個 IPv6 子網前綴。
本地唯一地址(Local Unique Address)
唯一本地地址(Unique Local Unicast Address)
前綴為 fc00::/7,該地址是本地全局唯一的,但只能用於本地通信,不通過 Internet 路由,等同於 IPv4 的私有網絡地址,用於取代站點本地地址。該地址包含一個 40 位的偽隨機數,以減少當網站合並或數據包誤傳到網絡時碰撞的風險。
站點本地地址(Site-Local Address)
只可在 Site 內路由,相當於 IPv4 的私網地址。站點本地地址由於起初的標准定義模糊而被棄用,而后 RFC 又重新定義了唯一本地地址以滿足本地環境中私有 IPv6 地址的使用,已被唯一本地地址替代。
鏈路本地地址(Link-Local Address)
鏈路本地地址前綴具有以下格式:fe80::interface-ID/10,當一個節點啟用 IPv6 時自動生成,interface-ID 通常從 48 位 MAC 地址派生而來。
用於單一鏈路,適用於自動配置、NDP(Neighbor Discovery Protocol,鄰居發現協議)等實現,路由器不轉發以 fe80 開頭的地址到 Link。前 64 位為 fe80::,而后 64 位為 Interface ID。可見,同一個 Link 上的所有 Interfaces 的前 64 位都是相同的,再通過后 64 的 Interface ID 來唯一標識一個 Interface。所以,Link-Local Address 只在 Subnet 中有效,即使 Link 上並沒有路由器,Interfaces 之間也是可以通信的。
組播(Multicast)地址
在 IPv6 中沒有廣播的概念,而是使用用組播來代替,因此 IPv6 中存在大量的組播使用。組播地址用於標識一組 Interfaces。IPv6 的組播尋址與 IPv4 相同,目的地為多個主機的數據包在特殊的多播地址上發送。所有對該組播信息感興趣的主機需要首先加入該組播組。加入組的所有 Interfaces 接收組播數據包並對其進行處理,而對組播數據不感興趣的其他主機則忽略組播信息。
普通的組播地址前綴為 ff00::/8,通過第二段的最后四位來標識多播的 “范疇”。其中有些地址已用於指定特殊協議,例如 ff0X::101 對應所有區域的 NTP 服務器。
標志位為 0000 表示是永久保留的組播地址,分配給各種技術使用;標志位為0001 表示是用戶可使用的臨時組播地址。范圍段定義了組播地址的范圍,其定義如下:
- 0001:本地接口范圍。
- 0010:本地鏈路范圍。
- 0011:本地子網范圍。
- 0100:本地管理范圍。
- 0101:本地站點范圍,類似組播的私網地址。
- 1000:組織機構范圍。
- 1110:全球范圍,類似組播的公網地址。
下面是一些組播指定地址:
- FF02::1,在本地鏈路范圍的所有節點。
- FF02::2,在本地鏈路范圍的所有路由器。
- FF02::5,all ospf routers。
- FF02::9,所有運行 RIP 的路由器。
- FF02::A,所有運行 eigrp 的路由器。
- FF05::2,在一個站點范圍內的所有路由器。
在創建某個接口的 IPv6 單點傳送地址時,內核會自動使該接口成為某些多點傳送組的成員。例如,內核會使每個節點都成為 “請求節點” 多點傳送組的成員,相鄰節點搜索協議使用該組來檢測可訪問性。內核還自動使節點成為 “所有節點” 或 “所有路由器” 多點傳送組的成員。
- 請求節點組播地址(Solicited-node multicast address):ff02::1:FFXX:XXXX,其中 XX:XXXX 為相對應的單播或任播地址中的三個最低的字節。
任播(Anycast)地址
任播(Anycast)地址,又稱任意點傳送地址,相當於是單播(Unicast)和廣播(Broadcast)的綜合體。單播是單點通信,廣播是單一來源和多個目的地進行通信。而任播則在以上兩者之間,它像廣播一樣,會有一組接收節點的地址列表,但只會發送給距離最近或發送成本最低(根據路由表來判斷)的其中一個接收地址,當該接收地址收到數據包並進行回應,且加入后續的傳輸,該接收列表的其他節點,會知道某個節點地址已經回應了,它們就不再加入后續的傳輸作業。當前,任播地址只能分配給中間設備(e.g. 路由器、三層交換機等),不能分配給終端設備(e.g. 手機、電腦等),而且不能作為發送端的地址。
IPv6 任意點傳送地址用來標識一組位於不同 IPv6 節點上的接口。每組接口都稱作一個任意點傳送組。當包發送到任意點傳送地址時,任意點傳送組中物理位置最接近發送者的成員將收到包。
特殊的地址
-
未指定地址:::/128,即 0:0:0:0:0:0:0:0。只能作為尚未獲得正式地址的 Host 的源地址,不能作為目的地址,不能分配給真實的 Interface。
-
環回地址:::1/128,相當於 IPv4 中的回環地址 lo 127.0.0.1。
-
路由協議的保留組播地址:
-
保留路由器/節點的多播地址:這些地址幫助路由器和主機與段上的可用路由器和主機通信,而無需配置 IPv6 地址。主機使用基於 EUI-64 的自動配置 IPv6 地址,然后通過這些地址與段上的可用主機/路由器通信。
-
ORCHID(Overlay Routable Cryptographic Hash Identifiers):2001:10::/28,這些是不可送達的 IPv6 地址,用於加密散列識別。
-
示例地址:2001:db8::/32,這些地址應用於 IPv6 地址的示例中,或用於描述網絡架構,作為描述性地址。
-
IPv4 轉譯地址:IPv4 位址可以很容易的轉化為 IPv6 格式。舉例來說,如果 IPv4 的一個地址為 135.75.43.52(十六進制為 0x874B2B34),它可以被轉化為 0000:0000:0000:0000:0000:FFFF:874B:2B34 或者 ::FFFF:874B:2B34。同時,還可以使用混合符號(IPv4-compatible address),則地址可以為 ::ffff:135.75.43.52。
- ::A.B.C.D,兼容 IPv4 的 IPv6 地址。其中 A.B.C.D 代表 IPv4 地址。即后 32 位可以用 10 進制數表示,因此 ::ffff:192.168.89.9 相等於 ::ffff:c0a8:5909,自動將 IPv6 包以隧道方式在 IPv4 網絡中傳送的 IPv4/IPv6 節點將使用這些地址。
- ::FFFF:A.B.C.D,是 IPv4 映射過來的 IPv6 地址,其中代表 IPv4 地址,e.g. ::ffff:202.120.2.30 ,它是在不支持 IPv6 的網上用於表示 IPv4 節點。
- 2001::/16,全球可聚合地址,用於 Teredo 隧道,由 IANA 按地域和 ISP 進行分配,是最常用的 IPv6 地址,屬於單播地址。
- 2002::/16,6 to 4 地址,用於 6 to 4 自動構造隧道技術的地址,屬於單播地址。