Как IP-адрес шлюза в статическом маршруте влияет на маршрутизацию?

Как IP-адрес шлюза в статическом маршруте влияет на маршрутизацию?

Я использовал компьютер с Windows 7 для подключения к компьютеру с Windows 10, который находится в той же физической сети, но в другой подсети. До того, как я добавил статический маршрут в Windows 7, весь трафик шел на главный маршрутизатор, а затем обратно в Windows 10. Это вызывало большую задержку при инициализации RDP-подключения, поэтому я добавил статический маршрут в Windows 7, чтобы избежать верхнего маршрутизатора. Я допустил ошибку, которая в итоге сработала, и я не уверен, почему.

Диаграмма сети

Диаграмма сети

Статические маршруты для Windows 7

1. None
2. route add 10.1.1.0 mask 255.255.255.0 10.1.0.99
3. route add 10.1.1.0 mask 255.255.255.0 10.1.1.3
  • Использование route 1 tracertшоу10.1.0.98 -> 10.1.0.1 -> 10.1.0.99 -> 10.1.1.4
  • Использование route 2 tracertшоу10.1.0.98 -> 10.1.0.99 -> 10.1.1.4
  • Использование route 3 tracertшоу10.1.0.98 -> 10.1.0.99 -> 10.1.1.4

Я понимаю, почему это route 2работает, но не знаю, почему это route 3тоже работает.

PS: Если кто-то может предложить более понятное название, пожалуйста, сделайте это.

решение1

Маршрут 3 работает из-за того, как пакеты ARP обрабатываются компьютером Ubuntu. Запрос ARP для 10.1.1.3 отправляется на 10.1.0.0/24 и принимается на интерфейсе 10.1.0.99. Поскольку этот компьютертакжевладеет 10.1.1.3, он отвечает аппаратным адресом для своего 10.1.0.99. Когда компьютер Windows 7 позже пытается установить RDP-подключение к компьютеру Windows 10, он отправляет пакеты, предназначенные для шлюза 10.1.1.3, но содержащие MAC-адрес компьютера в той же подсети, который коммутатор может пересылать напрямую.

Чтобы попытаться проверить это

В Windows 7

.\Arping.exe -i 10.1.0.98 -T 10.1.1.3

На Убунту

22:19:51.275116 (Windows 7 MAC) > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 10.1.1.3 tell 10.1.0.98, length 46

решение2

Магия маршрута 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.

То, что мы здесь видим в действии, — это Windows Таблица маршрутизации IP: процесс определения маршрута:

  • Для каждой записи в таблице маршрутизации выполните побитовое логическое И между 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 и наоборот.

Связанный контент