Я использовал компьютер с 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 и наоборот.