IPv6链路本地地址格式

pdk*_*pdk 14 windows networking tcp ping ipv6

我正在开展一个与网络/压缩相关的项目.其中一台机器是Windows Vista,已经配置了IPv6.

当我尝试时ipconfig,我会看到以下格式的地址:fe80::9dc8:72fa:aacd:76e2%10

但是当我尝试从另一台机器ping这台机器时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.

任何想法/评论都非常有帮助.

mpo*_*llo 26

%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
Run Code Online (Sandbox Code Playgroud)

此地址的范围%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
Run Code Online (Sandbox Code Playgroud)

...而你想从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你查验机器上,并更改%10为哪个界面,您希望将源系统上使用的接口索引.

如果你是执行ping机器是Linux,你将不得不这样做ping6 -I eth0 fe80::9dc8:72fa:aacd:76e2(假设其他系统上eth0),因为Linux的命令行实用程序不支持%指定的区域的方式(我最后一次检查,反正).

理想情况下,您应该在网络上设置支持IPv6的路由器来执行路由器通告,以便您可以使用无状态地址自动配置(SLAAC)并获取全局单播地址.那么这不是问题.


kni*_*ttl 0

您无法使用经典 ping 实用程序来 ping ipv6 地址,只能使用 ipv4 地址。Linux 有一个名为ping6ping ipv6 地址的命令行工具,Windows 可能有类似的东西。一些研究告诉我,Windows 使用ping -6ping ipv6 地址。

  • 这个答案是不正确的,因为Windows“ping”实用程序将在没有“-6”标志的情况下 ping IPv6 地址(例如,如果主机名解析为 IPv4 和 IPv6 地址,则这*强制*使用 IPv6),但正确的是,Linux 有一个单独的“ping6”实用程序。 (3认同)