查询IPv6子网划分信息



假设给出两个IPv6地址ip1 (abc::1/64), ip2 (abc::2/64),确定它们是否属于同一子网的算法是什么?

对于IPv4,一个地址中的每个八位元组都用子网八位元组进行掩码,并将其结果与第二个地址的类似练习的结果进行比较。我们可以为IPv6地址中的每个十六进制做类似的事情吗?

另外,在IPv6中,前缀长度/64是否等同于'ffff:ffff:ffff:ffff::'?如何用IPv6地址格式表示网络掩码?

谢谢!

假设有两个IPv6地址ip1 (abc::1/64), ip2 (abc::2/64)给定,用什么算法来确定它们是否是同一部分是否子网?

如果前64位相等,则它们在同一子网中。这些是地址的前四个"块"。如果你写完整的地址,它们会变成0abc: 0000000000000000000000000000000000000001和0abc: 00000000000000000000000000000002。前64位(0abc: 000000000000000:部分)是相等的,所以它们在同一个子网上。

对于IPv4,一个地址中的每个八位字节被子网八位字节掩码并将结果与类似的实验结果进行了比较第二个地址。我们能对每个文本做同样的事情吗IPv6地址吗?

实际上,您掩码的是位,而不是八位。但是你仍然可以使用同样的技术。将地址转换为位,并用与前缀长度相对应的位序列掩码。因此a/64将是64位,值为1,然后是64位,值为0。对于a/48,它将是48位,值为1,后跟80位,值为0。

在IPv6中也是一个前缀长度/64,相当于"飞行符:飞行符:飞行符:飞行符::’吗?网络掩码在IPv6中是如何表示的地址格式吗?

通常你不这样做,但'ffff:ffff:ffff:ffff::'对应于/64网络掩码

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的true,因此所需要的是将IPv6前缀长度转换为在测试中更容易使用的网络掩码。

路由查找的标准基树(Trie) (Patricia)实现可用于IPv6。

Netmask表示如下:

当我们描述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/

最新更新