Семантика того, как работают подсети

1

Предположим, у меня есть host1 с настроенным IP 1.2.3.4и маской подсети, 255.255.255.0подключенной к маршрутизатору.

Является ли следующее утверждение абсолютно семантически правильным:

«Маршрутизатор будет пересылать пакет, отправленный хостом 1, на его шлюз по умолчанию, если и только если для всех его подключенных интерфейсов сконфигурированный адрес интерфейса побитовый И с маской подсети хоста 1 не равен сетевому адресу хоста 1 »?

В частности, если адрес назначения находится в той же подсети, что и , скажем 1.2.3.50, host1 , но не существует в локальной сети, верно ли, что маршрутизатор никогда не переадресует его по шлюзу по умолчанию?

Наконец, если я (нелепо) выберу маску подсети /0для host1 , это фактически блокирует весь интернет от моего хоста? Поскольку маршрутизатор будет действовать как коммутатор и рассылать спам по каждому пакету на все подключенные интерфейсы (кроме межсетевого интерфейса), и никогда не будет пересылать что-либо через шлюз по умолчанию?

JSStuball
источник
1
Прежде чем подключиться к роутеру, мы должны рассмотреть, что делает хост, инициирующий пакет. Сначала проверяется таблица маршрутизации хоста, и на основании этого определяется следующий переход пакета. Если адрес назначения находится в той же подсети, хост отправляет пакет непосредственно адресату; он вообще не проходит через роутер. Маршрутизатор и хост фактически функционально очень похожи, существенное отличие состоит в том, что маршрутизатор также пересылает пакеты, то есть он получает пакеты через интерфейс и повторно передает их, если они не предназначены для маршрутизатора.
Йохан Мирен
1
«Маршрутизатор будет пересылать пакет, отправленный хостом 1, по его шлюзу по умолчанию тогда и только тогда, когда для всех его подключенных интерфейсов IP-адрес назначения поразрядно И с маской подсети хоста для этого интерфейса не будет равным сетевому адресу хоста1 для этого интерфейса » будет больше точный.
jcaron
1
@jcaron Это совсем не так. Если он получен маршрутизатором, он отправит пакет на хост назначения. Эта ситуация, однако, обычно не должна происходить в любом случае, потому что host1 должен понимать, что пункт назначения находится на том же канале, и отправлять пакет непосредственно на узел назначения. Более точным утверждением было бы «Маршрутизатор будет пересылать любой пакет по своему шлюзу по умолчанию, если и только если не существует более конкретного маршрута, соответствующего адресу назначения». Также обратите внимание, что маршрут по умолчанию вообще не требуется, если сети изолированы и все известны маршрутизатору.
Йохан Мирен
@ JohanMyréen Ой, похоже, я прочитал только половину предложения. Я почему-то подумал, что он прочитал " host1 будет пересылать пакет по умолчанию на шлюз ...". Но это означает, что оригинальное предложение еще более странно, поведение маршрутизатора не имеет ничего общего с конфигурацией host1 ...
jcaron

Ответы:

5

«Маршрутизатор будет пересылать пакет, отправленный хостом 1, по шлюзу по умолчанию, если и только если для всех его подключенных интерфейсов сконфигурированный адрес интерфейса побитовый И с маской подсети хоста 1 не равен сетевому адресу хоста 1»?

В традиционной IP-маршрутизации да. Пересылка пакетов осуществляется путем выбора наиболее конкретного подходящего маршрута из таблицы маршрутизации (нет особого различия между «подключенным интерфейсом» и «шлюзом по умолчанию», они оба являются просто стандартными маршрутами). Таким образом, если у маршрутизатора есть два маршрута, соответствующих пакету, один для 0.0.0.0/0(шлюз по умолчанию) и другой для 1.2.3.0/24(локальная подсеть), последний всегда побеждает.

Хотя вы должны заметить, что маршрутизаторы не обязательно имеют шлюз по умолчанию (особенно в так называемой « зоне по умолчанию », что на самом деле означает, что у них есть более специфичные маршруты для абсолютно всего).

Также я говорю «традиционная IP-маршрутизация», потому что маршрутизаторы могут делать больше, чем просто сопоставление маршрутов на основе пункта назначения. Например, в IPv6 некоторые системы поддерживают маршруты, которые соответствуют источнику и получателю; Например, вы можете иметь маршруты from ::/0 to ::/0 via <gw1>и from 2001:db8::/48 to ::/0 via <gw2>.

Также распространено (как в IPv4, так и в IPv6) реализация маршрутизации на основе политик, которая может соответствовать пакетам по протоколу или по метке брандмауэра. Если маршрутизатор имеет два восходящих потока (два маршрута по умолчанию), он часто будет хотеть использовать политику маршрутизации, чтобы гарантировать, что пакеты, полученные от восходящего потока 1, будут отправлять свои ответы на тот же самый восходящий поток 1, даже если таблица маршрутизации предпочла бы восходящий поток 2.

В частности, если адрес назначения находится в той же подсети, что и host1, скажем, 1.2.3.50, но не существует в локальной сети, верно ли, что маршрутизатор никогда не переадресует его по шлюзу по умолчанию?

Да. Если в таблице маршрутизации указано, что пункт назначения является локальным, но маршрутизатору не удается получить ответ ARP / NDP, он не отступит на другой, менее конкретный маршрут - он сразу же сдастся и вернет какую-то ошибку ICMP, возможно, «Назначение». узел недоступен ".

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

Наконец, если я (абсурдно) выберу маску подсети / 0 для host1, [...] маршрутизатор будет действовать как коммутатор и рассылать спам каждый пакет на все подключенные интерфейсы (кроме межсетевого интерфейса), и никогда не переадресовывать ничего его шлюз по умолчанию?

Изменение маски подсети на хосте не влияет на маршрутизатор. Маршрутизатор не знает, какая маска подсети настроена на других хостах; он будет вести себя в соответствии с тем, как настроены его собственные интерфейсы. (И наоборот, хост не знает, как настроен маршрутизатор.)

Если вы напрямую настраиваете маршрутизатор на наличие маски подсети / 0 на каком-либо интерфейсе, он абсолютно не начинает действовать как коммутатор. Он все еще действует как маршрутизатор, но если раньше у него был маршрут по умолчанию, у него теперь просто есть два маршрута по умолчанию - один из них просто утверждает, что все узлы являются локальными на указанном интерфейсе.

Если маршрутизатор предпочитает этот второй маршрут по умолчанию, вы все равно увидите обычное поведение «локальной подсети»: маршрутизатор будет продолжать пытаться ARP / NDP для каждого пункта назначения непосредственно на этом интерфейсе (при условии, что это широковещательный интерфейс, такой как Ethernet / Wi-Fi) и по-прежнему не будет пересылать пакеты, пока не получит ответ ARP и не узнает MAC-адрес получателя.

И если вы настраиваете хост на наличие маски подсети / 0, в основном происходит то же самое: два маршрута по умолчанию, один из них локальный, поэтому хост будет пытаться выполнять запросы ARP для каждого пункта назначения и в случае сбоя. (Единственное различие между хостами и маршрутизаторами состоит в том, что хост не будет пересылать полученные пакеты, а маршрутизатор будет. В противном случае они обрабатывают таблицы маршрутизации почти таким же образом.)

Наконец, если я (нелепо) выберу маску подсети / 0 для host1, это фактически заблокирует весь интернет от моего хоста?

Обычно да, потому что хост никогда не преуспеет в запросах ARP для мест назначения, которые не являются действительно локальными.

Но у вас может быть фальшивый ответ маршрутизатора на эти запросы - функция под названием «Proxy ARP». Когда он включен, когда хост пытается выполнить запрос ARP для какого-либо удаленного хоста, он вместо этого узнает MAC-адрес локального маршрутизатора, и с этого момента все работает так, как если бы у хоста был нормальный маршрут шлюза. (Единственное отличие состоит в том, что хост получит огромный кэш ARP.)

Это чаще используется, когда хост думает, что он находится в стандартной подсети (скажем, / 24), но на самом деле не может отправлять кадры Ethernet ни на что, кроме локального маршрутизатора. Хостинговая компания может настроить свои коммутаторы так, чтобы они отбрасывали все пакеты, за исключением / из «доверенного» порта маршрутизатора (изоляция порта), и включали прокси-ARP на маршрутизаторе. Это позволяет фильтровать трафик даже между клиентами в одной подсети в соответствии с правилами брандмауэра маршрутизатора, которые они обычно обходят.

grawity
источник
2

В вашем примере (маска ip: 1.2.3.4: 255.255.255.0) все пакеты с пунктом назначения, отличным от диапазона 1.2.3.0-1.2.3.255, будут отправлены на шлюз.

Если пункт назначения принадлежит сети (1.2.3.50), но отсутствует, пакет также не будет отправлен на шлюз.

Если ваш хост имеет маску подсети / 0 (0.0.0.0), на шлюз ничего не отправляется

Герт Ян Краайевельд
источник