在windows和linux同时安装ipv6之后,系统将会自动分配一个link-local(链接本地)地址,也就是ifconfig -a看到的一行【inet6 addr: fe80::20c:29ff:feda:aaa/64 Scope:Link】,红色部分就是ipv6的链接本地地址。
现在假设windows下通过ipconfig看到的ipv6地址如下:
fe80::250:56ff:fec0:1%5 //%后面是本ipv6地址对应的网络接口的index,windows术语叫scope id,可理解为一个接口序号
而linux的ipv6地址是:
fe80::20c:29ff:feda:aaa
这样的配置,在linux下使用ping6 -I eth0 fe80::250:56ff:fec0:1能够正常ping通windows的ipv6链路本地地址,但是在windows下使用ping -6 fe80::20c:29ff:feda:aaa是不能ping通linux的ipv6地址的。如果我给linux配置一个全局的单播地址(比如2001::1),然后在windows使用ping -6 2001::1是能ping通的。折腾了好久,还以为是本地链路地址的原因,后来发现原来是windows系统的一个很搞笑的事情(~_~也许只是我感觉搞笑),必须使用ping -6 fe80::20c:29ff:feda:aaa%5才能ping通linux的ipv6链路本地地址,也就是需要再linux的ipv6地址后面加上%和windows网络接口序号。
下面是我的整个环境设置,我是使用vmware装的linux,并且vmware设置的网络方式是host-only,因此物理机和虚拟机通信使用的VMNet1这个网络接口。如果使用的windows和linux都是物理主机的话,那么windows应该看"本地连接"这个网络接口,也就是ping -6 $linux_ipv6address时,linux的ipv6地址应该加上%和"本地连接"网络接口的index.
Windows>ipconfig /all
----------
Ethernet adapter VMware Network Adapter VMnet1:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for
Physical Address. . . . . . . . . : 00-50-56-C0-00-01
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 192.168.0.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IP Address. . . . . . . . . . . . : fe80::250:56ff:fec0:1%5
Default Gateway . . . . . . . . . :
DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%3
fec0:0:0:ffff::2%3
fec0:0:0:ffff::3%3
Linux>ifconfig -a
---------
eth0 Link encap:Ethernet HWaddr 00:0C:29:DA:0A:AA
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feda:aaa/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:69 errors:0 dropped:0 overruns:0 frame:0
TX packets:95 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7140 (6.9 KiB) TX bytes:14550 (14.2 KiB)
Interrupt:67 Base address:0x2024