Сетевая маска может считаться битовой маской для IP-адреса.
если (address1 & netmask) == (address2 & netmask)
тогда 2 ip-адреса считаются одной и той же подсети. (это выражение может быть написано разными способами ...)
Сетевая маска - это всего лишь способ «делить» сеть: сетевая маска не является частью IP-заголовка и не передается на провод. никто не знает сетевую маску устройства в сети, кроме самого устройства. он используется внутри пакета tcp устройства для принятия некоторых основных решений о маршрутизации. обратите внимание, что существуют другие способы определения подсети, которая может не включать сетевую маску, но достигает такого же результата: группировка нескольких устройств в «виртуальную» сеть.
Маршрутизатор, на котором подключено устройство, может даже иметь другое определение сетевой маски для этого же устройства: это не имеет значения, если маршрутизатор правильно маршрутизирует пакеты. сетевая маска используется в основном для автоматического вычисления некоторых известных адресов: например, широковещательный адрес, используемый для широковещательных пакетов udp, вычисляется из IP-адреса устройства и его сетевой маски.
в вашем конкретном случае:
нет никакого физического маршрутизатора, но ваш компьютер является маршрутизатором (он направляет пакеты внутри к различным сетевым интерфейсам). ваш компьютер содержит таблицу маршрутизации, которая сообщает, какой исходящий интерфейс должен использовать конкретный пакет (на окнах, попробуйте route print
, на linux, как root, попробуйте route
).
Как правило, таблица маршрутизации настроена так, что пакет выходит из интерфейса, который находится в той же подсети, что и целевое устройство. компьютер использует вышеуказанное логическое выражение для каждого интерфейса, чтобы определить, находится ли пункт назначения в той же подсети, что и этот интерфейс. если выражение истинно, пакет гаснет. каждая запись имеет параметр (называемый метрикой), который позволяет выбрать, казалось бы, лучший интерфейс в случае, если возможны несколько маршрутов.
Вы должны заметить, что таблица маршрутизации является динамической: ее можно изменить вручную, чтобы добавить конкретный маршрут (например, если вы знаете, что конкретное устройство доступно через интерфейс, но это устройство имеет IP-адрес, который не имеет отношение с этим интерфейсом ip address/netmask). существуют также некоторые протоколы (arp, dhcp ...), используемые в локальной сети, которые передают информацию о маршрутизации, которые автоматически обрабатываются вашей системой для изменения таблицы маршрутизации.
Спасибо. Я хочу применить эту теорию к моему конкретному случаю, описанному в вопросе. Где здесь роутер? Почему этот пакет не отправляется в ЛВС и отправляется на устройство? Мне нужно понять, как работает весь механизм подсети в этом конкретном случае. –
@AlexFarber: Я дополнял свой ответ, пытаясь ответить на ваши вопросы. однако, я боюсь, что слишком много вещей, находящихся под капотом, объясняется в этом упрощенном ответе. –
Отлично, спасибо! Надеюсь, вы также ответите на этот вопрос: http://stackoverflow.com/questions/8576759/understanding-of-host-route-table –