IPv6地址格式
IPv6的地址長度是128位(bit)。
將這128位的地址按每16位划分為一個段,將每個段轉換成十六進制數字,並用冒號隔開。
例如:2000:0000:0000:0000:0001:2345:6789:abcd
這個地址很長,可以用兩種方法對這個地址進行壓縮,
前導零壓縮法:
將每一段的前導零省略,但是每一段都至少應該有一個數字
例如:2000:0:0:0:1:2345:6789:abcd
雙冒號法:
如果一個以冒號十六進制數表示法表示的IPv6地址中,如果幾個連續的段值都是0,那么這些0可以簡記為::。每個地址中只能有一個::。
例如:2000::1:2345:6789:abcd
單播地址(Unicast IPv6 Addresses)
可聚合的全球單播地址(Aggregatable Global Unicast Addresses)
可在全球范圍內路由和到達的,相當於IPv4里面的global addresses。前三個bit是001
例如:2000::1:2345:6789:abcd
鏈路本地地址(Link-Local Addresses)
用於同一個鏈路上的相鄰節點之間通信,相當於IPv4里面的169.254.0.0/16地址。Ipv6的路由器不會轉發鏈路本地地址的數據包。前10個bit是1111 1110 10,由於最后是64bit的interface ID,所以它的前綴總是FE80::/64
例如:FE80::1
站點本地地址(Site-Local Addresses)
對於無法訪問internet的本地網絡,可以使用站點本地地址,這個相當於IPv4里面的private address(10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16)。它的前10個bit是1111 1110 11,它最后是16bit的Subnet ID和64bit的interface ID,所以它的前綴是FEC0::/48。
值得注意的是,在RFC3879中,最終決定放棄單播站點本地地址。放棄的理由是,由於其固有的二義性帶來的單播站點本地地址的復雜性超過了它們可能帶來的好處。它在RFC4193中被ULA取代。
唯一的本地IPv6單播地址(ULA,Unique Local IPv6 Unicast Address)
在RFC4193中標准化了一種用來在本地通信中取代單播站點本地地址的地址。ULA擁有固定前綴FD00::/8,后面跟一個被稱為全局ID的40bit隨機標識符。
未指定地址(Unspecified address)
0:0:0:0:0:0:0:0 或者::
當一個有效地址還不能確定,一般用未指定地址作為源地址。未指定地址不能作為一個目標地址來使用。
回環地址(Loopback address)
回環地址::1用於標識一個回環接口,可以使一個節點可以給自己發送數據包。相當於IPv4的回環地址127.0.0.1
兼容IPv4的地址(IPv4-compatible address)
形如::w.x,y.z,這里的w.x.y.z是IPv4公共地址的十進制點號表示法,用於IPv6/IPv4節點們(同時支持)在使用僅支持IPv4的網絡上用IPv6的協議進行通信。
但是事實證明這種技術不是個好主意,RFC4291中廢棄了對這類地址的使用。
IPv4映射地址(IPv4-mapped address)
形如::FFFF:w.x.y.z,這里的w.x.y.z是IPv4公共地址的十進制點號表示法,用於一個僅支持IPv4的節點表現為一個IPv6的節點
6over4地址
[64bit-prefix]:0:0:WWXX:YYZZ,其中的WWXX:YYZZ是w.x.y.z IPv4公共地址的十進制點號表示法,用於一個使用6to4協議的隧道機制的節點。
6to4地址
2002:WWXX:YYZZ:[SLA ID]:[Interface ID],用於表示一個使用6to4協議的隧道機制節點。
多播IPv6地址(Multicast IPv6 Addresses)
前8個bit為1111 1111,
其中FF01::到FF0F::的多播地址是保留專用地址
FF01::1 節點本地范圍所有節點多播地址
FF02::1 鏈路本地范圍所有節點多播地址
FF01::2 節點本地范圍所有路由器多播地址
FF02::2 鏈路本地范圍所有路由器多播地址
FF05::2 站點本地范圍所有路由器多播地址
為 IPv6 划分子網
在對 IPv6 地址空間進行子網划分時,需要使用子網划分技術,以一種允許將剩余地址空間的摘要和委派路由到 IPv6 Intranet 的不同部分的方式,為 48 位全局地址前綴划分 16 位子網 ID 字段。
您不需要以任何特定的方式進行子網划分。此處介紹的子網划分技術假定您是通過使用子網 ID 字段的高序位划分其地址空間的可變部分來進行子網划分的。雖然此方法有助於分層尋址和路由,但此方法並不是非用不可。例如,在只有少數子網的小型組織中,您可以通過為子網編號(從 0 開始),輕松地為全局地址創建平面尋址空間。
對全局地址前綴進行子網划分
對於全局地址,Internet 編號分配機構 (IANA) 或 ISP 會分配一個前 48 位均為固定位的 IPv6 地址前綴。若要對 48 位全局地址前綴的子網 ID 字段進行子網划分,需要執行一個包含兩步的過程:
1. |
確定用於子網划分的位數。 |
2. |
枚舉出新的子網網絡前綴。 |
確定用於子網划分的位數
用於子網划分的位數決定着您可以分配給您的網絡各部分(基於地理區划或部門分類)的新子網網絡前綴的可能的數量。在分層路由基礎結構中,您必須確定您在層次結構的各層需要的網絡前綴數,進而確定各層需要的位數。為層次結構的各層選擇的位越多,您擁有的用於枚舉層次結構最后一層中的單個子網的位越少。
例如,您可以實施一個包含兩層的層次結構來反映地理/部門結構,4 位用於地理層,6 位用於部門層。這一方案允許 16 個地理區域,各個區域中的各個部門只占剩余的子網划分空間的 6 (16 - 6 - 4) 位,或者說每個部門只有 64 (=26) 個子網。
在層次結構中任何給定的層上,許多位已被層次結構中的上一層固定了 (f),許多位被用來在層次結構中的當前層進行子網划分 (s),還有許多位留給層次結構中的下一層使用 (r)。下面這個等式始終成立:f+s+r = 16。圖 4-5 顯示了這種關系。
枚舉子網網絡前綴
根據用於子網划分的位數,您必須列出新的子網網絡前綴,您可以使用下面兩種主要方法之一:
• | 使用子網 ID 和遞增值的十六進制表示形式來枚舉新的子網網絡前綴。 |
• | 使用子網 ID 和遞增值的十進制表示形式來枚舉新的子網網絡前綴。 |
這兩種方法產生的結果相同,都會生成子網網絡前綴的一個枚舉列表。
要使用十六進制方法創建子網網絡前綴的枚舉列表,請執行以下步驟:
1. |
根據為子網划分選擇的位數 s 和進行子網划分的網絡前綴的前綴長度 m,計算以下各值: f = m - 48 f 是子網 ID 中已固定的位的數目。 n = 2s n 是您將獲得的網絡前綴的數目。 i = 216-(f+s) i 是以十六進制表示的各個連續子網 ID 之間的遞增值。 P = m+s P 是新的子網網絡前綴的前綴長度。 |
2. |
創建一個包含 n 行、兩列的表。第一列存放網絡前綴編號(從 1 開始),第二列存放新的子網網絡前綴。 |
3. |
將使用新的前綴長度的原始網絡前綴放在第一行的第二列中。例如,根據進行子網划分的子網 ID 的十六進制值 F,子網網絡前綴為 [48 位前綴]:F::/P。 |
4. |
將站點本地地址或全局地址的子網 ID 部分中的值加上 i,將結果放在下一行的第二列中。例如,在第二行中,子網前綴為 [48 位前綴]:F+i::/P。 |
5. |
重復步驟 4,直到您完成該表。 |
例如,要對全局地址前綴 3FFE:FFFF:0:C000::/51 進行 3 位子網划分,首先計算前綴數量值、遞增值和新前綴長度值。起始值是 F=0xC000,s=3,m=51,因此 f=51-48=3。前綴的數量是 8 (n=23)。遞增值是 0x400 (i=216-(3+3)=1024=0x400)。新的前綴長度是 54 (P=51+3)。
接下來,構造一個包含 8 行的表,如表 4-12 所示。將 3FFE:FFFF:0:C000::/54 放在網絡前綴 1 所在的那一行的第二列,然后讓網絡前綴的子網 ID 部分依次遞增 0x400,將結果分別填入后面的各行中。
網絡前綴 | 子網網絡前綴 |
1 |
3FFE:FFFF:0:C000::/54 |
2 |
3FFE:FFFF:0:C400::/54 |
3 |
3FFE:FFFF:0:C800::/54 |
4 |
3FFE:FFFF:0:CC00::/54 |
5 |
3FFE:FFFF:0:D000::/54 |
6 |
3FFE:FFFF:0:D400::/54 |
7 |
3FFE:FFFF:0:D800::/54 |
8 |
3FFE:FFFF:0:DC00::/54 |
表 4-12 使用十六進制技術對 3FFE:FFFF:0:C000::/51 進行 3 位子網划分
要使用十進制方法創建子網網絡前綴的枚舉列表,請執行以下步驟:
1. |
根據用於子網划分的位數 s、進行子網划分的網絡前綴的前綴長度 m 和進行子網划分的子網 ID 的十六進制值 F,計算以下各值: f = m - 48 f 是子網 ID 中已固定的位的數目。 n = 2s n 是您將獲得的網絡前綴的數目。 i = 216-(f+s) i 是各個連續子網 ID 之間的遞增值。 P = m+s P 是新的子網網絡前綴的前綴長度。 D = F 的十進制表示形式 |
2. |
創建一個包含 n 行、三列的表。第一列存放網絡前綴編號(從 1 開始),第二列存放新的子網網絡前綴的子網 ID 部分的十進制表示形式,第三列存放新的子網網絡前綴。 |
3. |
將子網 ID 的十進制表示形式 (D) 放在第一行的第一列,將子網前綴 [48 位前綴]:F::/P 放在第一行的第二列。 |
4. |
用子網 ID 十進制表示形式的值加上 i,將結果放在下一行的第二列。例如,第二行的子網 ID 的十進制表示形式是 D+i。 |
5. |
在第三列中,將子網 ID 的十進制表示形式轉換為十六進制,並構造前綴 [48 位前綴]:[SubnetID]::/P。例如,在第二行中,子網網絡前綴為 [48 位前綴]:[D+i(轉換為十六進制)]::/P。 |
6. |
重復步驟 4 和 5,直到您完成該表。 |
例如,要對站點本地網絡前綴 3FFE:FFFF:0:C000::/51 進行 3 位子網划分,首先計算前綴數量值、遞增值、新前綴長度值和起始子網 ID 十進制表示形式。我們的起始值是 F=0xC000,s=3,m=51,這樣 f=51-48=3。前綴數量是 8 (n=23)。遞增值是 1024 (i=216-(3+3))。新的前綴長度是 54 (P=51+3)。起始子網 ID 的十進制表示形式是 49152 (D=0xC000=49152)。
接下來,構造一個包含 8 行的表,如表 4-13 所示。將 49192 放在網絡前綴 1 所在的那一行的第一列,將 3FFE:FFFF:0:C000::/54 放在該行的第二列。讓網絡前綴的子網 ID 部分(第四個十六進制塊)依次遞增 1024,然后將結果轉換為十六進制並分別填入后面的各行中。
網絡前綴 | 子網 ID 的十進制表示形式 | 子網網絡前綴 |
1 |
49192 |
3FFE:FFFF:0:C000::/54 |
2 |
50176 |
3FFE:FFFF:0:C400::/54 |
3 |
51200 |
3FFE:FFFF:0:C800::/54 |
4 |
52224 |
3FFE:FFFF:0:CC00::/54 |
5 |
53248 |
3FFE:FFFF:0:D000::/54 |
6 |
54272 |
3FFE:FFFF:0:D400::/54 |
7 |
55296 |
3FFE:FFFF:0:D800::/54 |
8 |
56320 |
3FFE:FFFF:0:DC00::/54 |
表 4-13 使用十進制技術對 3FFE:FFFF:0:C000::/51 進行 3 位子網划分
變量長度子網划分
與 IPv4 相同的是,您可以對 IPv6 地址前綴循環進行子網划分來在組織 Intranet 的各個層次提供路由摘要,定義單個子網的地址前綴可達到 64 位。與 IPv4 不同的是,您無法使用可變長度子網划分來創建不同大小的子網,因為所有 IPv6 子網都使用 64 位網絡 ID 和 64 位接口 ID。