В моей системе Linux есть три интерфейса, каждому из которых назначен адрес ipv6. Таблица маршрутов:
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
Теперь у меня к enx000ec6ac9111b подключено еще одно устройство. Я могу пинговать его:
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
Я вижу, целевой адрес команды ping нельзя явно отличить от таблицы маршрутов (в таблице маршрутов есть три fe80 :: / 64). У меня вопрос, как Linux может правильно отправить пакет на правильный интерфейс и получить ответ? Мне кажется, что маршрутизация в случае ipv6 не похожа на IPv4.
Пожалуйста, дайте небольшое объяснение. Спасибо!
- древесный
ip neighbor
покажет ваш NDP обнаружил соседей IPv6 вместе с вашим ARP обнаружил соседей IPv4. И интерфейс, о котором идет речь. Это на канальном уровне, а не на маршрутизации.
Индекс зоны необходимо отправить в link-local на правильном интерфейсе. Поскольку уникальные адреса являются обычными из-за размера адресного пространства, он делает удобную вещь, так как вам не нужно его вводить.