%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
...你要ping从Windows中的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
更改为您要在源系统上使用的任何接口的接口索引。
如果从查验机器是Linux,你将不得不做ping6 -I eth0 fe80::9dc8:72fa:aacd:76e2
(假设其他系统上eth0
),因为Linux的命令行实用程序不支持指定区域的%
方式(无论如何,我最后一次检查)。
理想情况下,您应该在您的网络上设置支持IPv6的路由器来执行路由器广告,以便您可以使用stateless address auto-configuration (SLAAC)并获得global unicast地址。那么这不会是一个问题。
我从来没有在ipv6地址前看到过'%10' – knittl 2011-04-21 15:15:03
%10是链路本地地址的一部分。 – Joe 2011-04-21 15:16:18
so you think,fe80 :: 9dc8:72fa:aacd:76e2是真正的ipv6地址吗? – pdk 2011-04-21 15:37:59