%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