In my Linux system, it has three interfaces each of which got assigned an ipv6 address. The route table is:
fe80::/64 dev enx000ec6ac911b proto kernel metric 256 pref medium fe80::/64 dev enx000ec6aca81e proto kernel metric 256 pref medium fe80::/64 dev wlp59s0 proto kernel metric 600 pref medium
Now I have another device attached to enx000ec6ac9111b. I can ping it:
ping -6 fe80::224:28ff:fe00:b6e4 PING fe80::224:28ff:fe00:b6e4(fe80::224:28ff:fe00:b6e4) 56 data bytes 64 bytes from fe80::224:28ff:fe00:b6e4%enx000ec6ac911b: icmp_seq=1 ttl=64 time=0.585 ms 64 bytes from fe80::224:28ff:fe00:b6e4%enx000ec6ac911b: icmp_seq=2 ttl=64 time=0.522 ms
I can see, the target address of the ping command cannot be explicitly distinguished from route table (there are three fe80::/64 in the route table). My question is, how Linux can correctly send the packet to the correct interface and get the reply? I feel the way how the routing work in ipv6 case seems not same as IPv4.
Please someone give a little explanation. Thanks!
pingdoesn't require a scope ID when pinging an IPv6 link-local address? I'm on Arch and as far as I can tell, the scope ID is not optional.