2011-10-10 101 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