Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как маршрутизатор понимает, какому из узлов его подсети предназначен пакет?

It (информационные технологии)Компьютеры и интернет+3
Константин Тихонов
  · 10,4 K
Лучший
IT, телеком, телефония, базы данных, интеграционные решения, естествознание, образование  · 21 сент 2020

Откройте командную строку и введите команду ROUTE PRINT. Вы увидите таблицу маршрутизации, в которой сказано, для каких адресов назначения в какой интерфейс направлять пакет. На каждом хосте, включая маршрутизатор такая таблица есть, руководствуясь ею он и действует.

Конечно в таблице нет всех возможных адресов назначения. Адрес назначения задан двумя значениями Deistination и Mask. Допустим, что согласно ответу от DNS адрес назначения для www.example.com равен 93.184.216.34. Накладываем на этот адрес маски из таблицы (начиная от самых частных, и до наиболее общих). Маска — это побитовая операция, которая отбрасывает (обнуляет) все младшие биты и оставляет старшие. Грубо говоря, маска 255.0.0.0 сделает из этого адреса 93.0.0.0. (С масками длина которых не кратна 8 будет чуть сложнее, но принцип я надеюсь ясен.) После наложения маски происходит сравнение того что осталось с Destination address. Если подошло, то маршрут найден. Если нет, ищем более общие маршруты вплоть до дефолтного, который действует для всех остальных случаях, как правило это маршрут, указывающий на аплинк, за пределы локальной сети, типа, «это не наш пакет».

Найденный маршрут связан с двумя параметрами конкретным интерфейсом и адресом хоста. У клиентских машин все маршруты (как мы можем видеть по результатам ROUTE PRINT) ведут на Gateway (на маршрутизатор), а у маршрутизатора в зависимости от ip-адреса клиентов на эти самые клиентские хосты. Если подходящих маршрутов несколько, то там есть значение Metric, которое указывает приоритет. Т.е. работа клиента и маршрутизатора принципиально не отличается. Просто у маршрутизатора больше интерфейсов и таблица маршрутизации интереснее.

Так, если некий клиент посылает пакет, то пакет сначала поднимается к аплинку (к маршрутизатору, согласно клиентской таблице маршрутизации), а там, если это пакет предназначен другому клиенту, спускается вниз, например в нужный Ethernet-порт. А если таких клиентов в локальной сети нет, то опять поднимается аплинку (провайдеру).

Таблица маршрутизации заполняется автоматически при выдаче клиентам ip-адресов, или настройке статических адресов, при настройке NAT, А также при подключении/отключении физического коннекта к интерфейсу маршруты, указывающие на эти интерфейсы могут помечаться как неактивные. Ну, и конечно же в маршрутизацию можно вмешаться вмешаться собственными руками с помощью этой же самой команды ROUTE, но обычно этого не требуется.

P.S.

Выше описано для LAN-интрефейсов, но бывает так, что за одним физическим интерфейсом сидят несколько хостов с разными адресами. Например, если применяется wi-fi или коаксиальный кабель. Эта задача решается с помощью маршрутизации по MAC-адресам.