我正在开展与网络/压缩相关的项目。其中一台机器是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.
任何想法/评论都非常有用。
答案 0 :(得分:25)
地址后的%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地址。那么这不会是一个问题。
答案 1 :(得分:0)
你不能用经典的ping实用程序ping ipv6地址,只能ping ipv4地址。 linux有一个名为ping6
的命令行工具来ping ipv6地址,windows可能有类似的东西。一个小小的研究告诉我,windows使用ping -6
来ping ipv6地址。
答案 2 :(得分:0)
%之后的数字是接口名称。如果打开网络接口的status->详细信息,您将看到ipv6链接本地地址,地址末尾的%xx是接口的索引,以防您想要查找某些应用程序的索引。系统信息或ipconfig可能只给你不同的索引号,至少在我的Windows 7 Pro上,这是非常令人困惑的。您从操作系统获得的描述也可能是错误的。