在我的 Linux 系统中,它有三个接口,每个接口都分配了一个 ipv6 地址。路由表如下:
fe80::/64 dev enx000ec6ac911b proto 内核度量 256 pref 中等 fe80::/64 dev enx000ec6aca81e proto 内核度量 256 pref 中等 fe80::/64 dev wlp59s0 proto 内核指标 600 pref 中等
现在我有另一台设备连接到 enx000ec6ac9111b。我可以 ping 它:
ping -6 fe80::224:28ff:fe00:b6e4 PING fe80::224:28ff:fe00:b6e4(fe80::224:28ff:fe00:b6e4) 56 个数据字节 来自 fe80::224:28ff:fe00:b6e4%enx000ec6ac911b 的 64 字节:icmp_seq=1 ttl=64 时间=0.585 毫秒 来自 fe80::224:28ff:fe00:b6e4%enx000ec6ac911b 的 64 字节:icmp_seq=2 ttl=64 时间=0.522 毫秒
我可以看到,ping 命令的目标地址无法与路由表明确区分(路由表中有三个 fe80::/64)。我的问题是,Linux 如何正确地将数据包发送到正确的接口并得到回复?我感觉 ipv6 情况下的路由工作方式似乎与 IPv4 不同。
请有人给出一点解释。谢谢!
- 木质
答案1
第 2 层,而不是第 3 层
ip neighbor
将显示你的NDP 发现 IPv6 邻居以及您的 ARP 发现的 IPv4 邻居。以及有问题的接口。这是在链路层,不是路由。
需要将区域索引发送到本地链路在正确的接口上。由于地址空间的大小,唯一地址很常见,因此它很方便,不需要您输入它。