IPv6 链路本地地址格式
Posted
技术标签:
【中文标题】IPv6 链路本地地址格式【英文标题】:IPv6 link-local address format 【发布时间】:2011-08-10 09:43:46 【问题描述】:我正在从事与网络/压缩相关的项目。其中一台机器是 Windows Vista,它已经配置了 IPv6。
当我尝试ipconfig
时,我看到一个格式如下的地址:fe80::9dc8:72fa:aacd:76e2%10
但是当我尝试使用 ping fe80::9dc8:72fa:aacd:76e2%10
从另一台机器上 ping 这台机器时,我收到以下错误:
Ping request could not find host fe80::9dc8:72fa:e327:76e2%10.
Please check the name and try again.
任何想法/cmets 都非常有帮助。
【问题讨论】:
我以前从未在 ipv6 地址中看到过%10
%10 是链接本地地址的一部分。
所以你认为,fe80::9dc8:72fa:aacd:76e2 是真正的 ipv6 地址?
%10
是范围 ID。这取决于 发送 机器的链接本地范围。
【参考方案1】:
您无法使用经典 ping 实用程序 ping ipv6 地址,只能使用 ipv4 地址。 linux 有一个名为ping6
的命令行工具来ping ipv6 地址,windows 可能有类似的东西。一项小研究告诉我,Windows 使用ping -6
ping ipv6 地址。
【讨论】:
我尝试 ping -6 fe80:0000:0000:0000:9dc8:72fa:e327:76e2 我得到以下错误 ::: Unable to initialize Windows Sockets interface, error code 10047. @pdk:所以?它起作用了吗?有错误吗?正如我在第一条评论和其他 cmets 中提到的,请尝试不使用%10
。 (不过,我想知道你没有在最后的评论中提到)
@knittl:我收到了这个错误(没有 %)。 “无法初始化 Windows Sockets 接口,错误代码 10047。”关于这个错误的任何提示?
pdk,我发现了这个article in the mkb——不确定这是否有帮助
这个答案是不正确的,因为 Windows ping
实用程序将在没有 -6
标志的情况下 ping IPv6 地址(如果主机名解析为,则此 强制 使用 IPv6例如 IPv4 和 IPv6 地址),但正确的是有一个单独的用于 Linux 的 ping6
实用程序。【参考方案2】:
地址后面的%10
称为scope zone。当您使用link-local IPv6 地址时,需要范围区域,以便系统知道将数据包发送到哪个接口。
在 Windows 上,如果您发出 netsh interface ipv6 show addresses
命令,您将看到分配给系统的地址及其区域 ID。请注意,区域 ID 与接口索引匹配。例如:
Interface 22: VirtualBox Host-Only Network
Addr Type DAD State Valid Life Pref. Life Address
--------- ----------- ---------- ---------- ------------------------
Other Preferred infinite infinite fe80::15c3:6bea:aaac:a015%22
此地址的范围为%22
,因为它位于索引为22
的接口上。同样,在 Linux 上,您可能会看到一个链接本地地址,例如 fe80::15c3:6bea:aaac:a016%eth0
。区域 ID 的格式对于每台运行 IPv6 的机器都是唯一的,这就是为什么如果您尝试从其他系统 ping 可能会有所不同。
例如,如果您有:
System A (Windows): fe80::15c3:6bea:aaac:a015%22
System B (Linux): fe80::15c3:6bea:aaac:a016%eth0
...如果你想从 Windows 机器 ping Linux 机器,你不能做ping fe80::15c3:6bea:aaac:a016%eth0
。但是你可以做ping fe80::15c3:6bea:aaac:a016%22
。这就是问题。以这种方式链接本地地址可能会很棘手。
尝试指定正确的区域 ID。也就是说,当您执行ping fe80::9dc8:72fa:aacd:76e2%10
时,首先在您正在ping 来自 的机器上执行netsh interface ipv6 show addresses
,然后将%10
更改为您想要使用的任何接口的接口索引源系统。
如果您 从 ping 的机器是 Linux,则必须执行 ping6 -I eth0 fe80::9dc8:72fa:aacd:76e2
(假设另一个系统在 eth0
),因为 Linux 命令行实用程序不支持%
指定区域的方式(我最后一次检查,无论如何)。
理想情况下,您应该在网络上设置支持 IPv6 的路由器来进行路由器通告,这样您就可以使用stateless address auto-configuration (SLAAC) 并获得global unicast 地址。那么这将不是问题。
【讨论】:
【参考方案3】:% 后面的数字是接口名称。如果你打开你的网络接口的状态->详细信息,你会看到ipv6链接本地地址,地址末尾有%xx,这是接口的索引,以防你想找到索引对于某些应用程序。系统信息或 ipconfig 可能只会给你不同的索引号,至少在我的 Windows 7 Pro 上是这样,这非常令人困惑。您从操作系统获得的描述也可能是错误的。
【讨论】:
以上是关于IPv6 链路本地地址格式的主要内容,如果未能解决你的问题,请参考以下文章