我遇到了一个典型的“a 可以 ping b 但 b 不能 ping a”的问题。我使用 IPv6 进行 ping。我的情况比较特殊,即“b”在 ping “a”之后立即可以 ping “a”。经过几次尝试,我意识到如果我使用“-I eth0”指定应使用的网络接口,则一切都会正常工作(是的,Linux 机器上的两个接口位于同一子网中)。我仍然想了解机器“b”回复 ping 后会发生什么变化,并希望获得一些专家知识。使用 IPv4 进行 ping 在两个方向上都可以正常工作。如果我停止从“b”进行 ping,“a”仍然可以 ping “b”,直到我用 Ctrl-C 停止它。即使我立即尝试,再次尝试也会失败,因此我相信这不是 upcache 问题。一些信息:
机器“a”
操作系统:Windows(在防火墙例外中添加了“ICMPv6”)
IPv6 地址:fe80::21c:1cff:fe00:3de3
机器 "b":
操作系统:Linux Busybox
IPv6 地址:fe80::21c:1cff:fe00:3de4
尝试了“ping”和“ping6”二进制文件
答案1
和
链路本地 IPv6 地址
您始终需要指定接口。原因是每个网络都使用相同的地址块(前缀):地址fe80::21c:1cff:fe00:3de3
仅在特定链接(接口)上是唯一的。在不同的链接上,相同的地址可能用于完全不同的设备。
因此,本地链接地址通常不太适合手动使用,因为每次都需要指定接口。在另一台计算机上,接口名称可能不同,因此您不能直接向某人发送带有地址的链接,因为您不知道该链接在对方那边的接口名称是什么。
为了避免指定接口,您需要具有可路由的全局范围的“真实”IPv6 地址。
例如,您可以使用 https://cd34.com/rfc4193/,您输入一个 MAC 地址,它会进行计算并返回一组可供使用的 IPv6 地址。
在您的例子中,一台计算机 ping 另一台计算机后,其 IPv6 地址 及其界面目标计算机知道这一点,因此它可以 ping 回去。