2011-10-10 27 views
-1

假設給出兩個IPv6地址ip1(abc :: 1/64),ip2(abc :: 2/64),那麼確定它們是否屬於同一個子網的算法是什麼?關於IPv6子網劃分的查詢

對於IPv4,一個地址中的每個八位字節都用子網八位字節進行掩碼,並將結果與​​第二個地址的類似練習的結果進行比較。我們可以爲IPv6地址中的每個六進制數做類似的事嗎?

另外,在IPv6中,前綴長度爲64,相當於'ffff:ffff:ffff:ffff ::'?網絡掩碼如何以IPv6地址格式表示?

謝謝!

回答

0

路由查找的標準Radix Tree(Trie)(Patricia)實現可用於IPv6。

當我們描述一個IPv4 IP網絡中,我們使用一個網絡掩碼來定義網絡:

掩碼錶示如下。 IPv6已經決定,而不是使用舊的255.255.255.0表示法,最好使用/#表示法。所以我們的網絡掩碼將會是128來描述類似於/ 32(255.255.255.255)或者一個主機的東西。需要注意的是expr 16 \* 8給我們128」 [1]

[1] http://www.linux-sxs.org/networking/ipv6_for_beginners.html

[2] http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/

1

假設兩個IPv6地址IP1(ABC :: 1/64),IP2 (ABC :: 2/64)是 給出什麼算法,以確定它們是相同的 子網的一部分,或者不是?

如果前64位相同,它們位於相同的子網上。這是地址中的前四個'街區'。如果寫入完整地址,它們將變爲0abc:0000:0000:0000:0000:0000:0000:0001和0abc:0000:0000:0000:0000:0000:0000:0002。前64位(0abc:0000:0000:0000:部分)相等,因此它們位於同一子網上。

對於IPv4,在一個地址每個八位位組被屏蔽與子網八位字節 和具有類似運動的 第二地址的結果進行比較的結果。我們可以爲 IPv6地址中的每個十六進制做類似的事情嗎?

實際上,你掩蓋了位而不是八位字節。但是你仍然可以使用相同的技術。將地址轉換爲位,並使用與前綴長度相對應的位序列對其進行掩碼。因此,a/64將是64位,值爲1,後面是64位,值爲0.對於/ 48,它將是48位,值爲1,接着是80位,值爲0.

另外,在IPv6中,是前綴長度/ 64相當於 'ffff:ffff:ffff:ffff ::'? IPv6 地址格式中的網絡掩碼如何表示?

通常你不會,但是'ffff:ffff:ffff:ffff ::'對應於一個/ 64的網絡掩碼。

+1

這有點危險,IPv6不聲明網絡必須是第一個64位,這個大小來自推薦的實現。配置具有不同前綴的網絡是完全有效的。考慮Teredo只有一個32位前綴。 –

+0

儘管a/64不能保證子網,但autoconf等東西卻是必需的。我認爲將會有非常少的非/ 64子網。 (通常在點對點鏈路上配置更長的前綴,但即使這樣,通常也保留整個/ 64) –

1

IPv4掩碼有點虛假,因爲它允許人們指定掩碼如255.0.0.255。 IPv6通過將「前綴長度」定義爲網絡掩碼中連續位的長度來闡明這一點。

255.0.0.0  ≡ ff00::  ≡ 8-bit prefix 
255.255.0.0 ≡ ffff::  ≡ 16-bit prefix 
255.255.192.0 ≡ ffff:C000:: ≡ 18-bit prefix 

如果你有兩個地址,IP#1和IP#2和網絡掩碼NETMASK再進行試驗,若在同一網絡中的兩個地址,則必須滿足以下條件:

IP#1 & NETMASK == IP#2 & NETMASK 

這對於IPv4和IPv6都是正確的,因此只需要將IPv6前綴長度轉換爲在測試中更易於使用的網絡掩碼即可。

+0

我剛剛意識到我們也可以具有IPv4映射的IPv6地址。假設IP地址爲fec1:fec2:fec3:fec4:fec5:fec6:fec7:10.20.30.40,並且網絡掩碼爲ffff:ffFf:ffff:ffff:ffff:ffff:ffff:ff00(如果允許)場景需要處理。 – user983356