我正在研究一个与networking/压缩相关的项目。 其中一台机器是Windows Vista,已经configuration了IPv6。
当我尝试ipconfig
,我看到一个地址在以下格式: fe80::9dc8:72fa:aacd:76e2%10
但是,当我尝试从ping fe80::9dc8:72fa:aacd:76e2%10
另一台机器时,出现以下错误:
Ping request could not find host fe80::9dc8:72fa:e327:76e2%10.
Please check the name and try again.
任何想法/评论都非常有帮助。
地址之后的%10
称为作用域 。 当您使用链路本地 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
,首先要执行netsh interface ipv6 show addresses
正在ping的机器上的netsh interface ipv6 show addresses
,然后将%10
更改为所需接口的接口索引在源系统上使用。
如果您正在ping的机器是Linux,则必须执行ping6 -I eth0 fe80::9dc8:72fa:aacd:76e2
(假设其他系统在eth0
),因为Linux命令行实用程序不支持%
指定区域的方式(最后一次检查,无论如何)。
理想情况下,您应该在您的网络上设置支持IPv6的路由器来执行路由器通告,以便您可以使用无状态地址自动配置(SLAAC)并获取全球单播地址。 那么这不会是一个问题。
您不能使用经典ping实用程序ping ipv6地址,只能使用ipv4地址。 linux有一个名为ping6
的命令行工具来ping ipv6地址,windows可能有类似的东西。 有一点研究告诉我,windows使用ping -6
来ping ipv6地址。