2

Я использовал компьютер с 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: Если кто-то может предложить более четкое название, пожалуйста, сделайте.

2 ответа2

2

Маршрут 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

На Ubuntu

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
1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .