Магия маршрута 3 работает частично благодаря протоколу разрешения адресов, а частично благодаря таблице пересылки и частично благодаря алгоритмам маршрутизации.
Википедия говорит:
Протокол разрешения адресов (ARP) - это протокол связи, используемый для обнаружения адреса канального уровня, такого как MAC-адрес, связанный с данным адресом интернет-уровня (обычно адресом IPv4).
Многие операционные системы выполняют бесплатную ARP во время запуска. Это помогает решить проблемы, которые могли бы возникнуть, если бы, например, недавно была изменена сетевая карта (изменение сопоставления IP-адреса и MAC-адреса), а другие хосты по-прежнему имеют старое сопоставление в своих кэшах ARP.
Ubuntu при запуске объявила о своем присутствии и интерфейсах в обеих подсетях, к которым она подключена, то есть ко всей вашей сети.
Любое подобное объявление, сделанное Windows 10, было только внутри его подсети, поэтому никогда не доходило до Windows 7.
Даже если такое объявление не было получено, Windows 7, чтобы найти совпадение, отправит широковещательный пакет в сеть, используя протокол ARP, чтобы спросить «у кого есть 10.1.1.4».
Большой намек на то, что команда tracert
не указала маршрутизатор среди прыжков. Запрос на 10.1.1.4
пошел прямо на компьютер Ubuntu, хотя Windows 7 не знает о 10.1.1.4
.
В действии мы видим таблицу маршрутизации IP-адресов Windows : процесс определения маршрута:
Для каждой записи в таблице маршрутизации выполните побитовое логическое И между IP-адресом назначения и маской сети. Сравните результат с сетевым идентификатором записи на совпадение.
Список подходящих маршрутов составляется. Выбран маршрут с наибольшим соответствием (маршрут, который соответствует наибольшему количеству битов с IP-адресом назначения). Самый длинный совпадающий маршрут - это самый конкретный маршрут к IP-адресу назначения. Если найдено несколько записей с самым длинным соответствием (например, несколько маршрутов к одному и тому же идентификатору сети), маршрутизатор использует самый низкий показатель для выбора наилучшего маршрута. Если существует несколько записей, которые имеют самое длинное совпадение и самую низкую метрику, маршрутизатор может выбрать, какую запись таблицы маршрутизации использовать.
Маршрутизации для Windows 7 нашли общий префикс между 10.1.1.4
и 10.1.1.3
, который был 10.1.1
Другими возможностями были маршрутизатор или Ubuntu на 10.1.0.99
, но общий префикс был только 10.1
, поэтому они не были выбраны.
Здесь мы видим в действии таблицу пересылки, которая построена поверх таблицы маршрутизации.
В то время как таблица маршрутизации компилирует маршруты на основе IP-адресов, таблица пересылки содержит соответствующие MAC-адреса.
Таким образом, таблица пересылки содержала запись, в которой говорилось: «Для 10.1.1.X
, переслать пакет на MAC-адрес компьютера Ubuntu ".
Как только пакет прибыл на компьютер Ubuntu, он очень хорошо знал, как переслать его в 10.1.1.4
.
Так вот как пакеты из Windows 7 будут в конечном итоге в Windows 10, и наоборот.