23

Я понимаю основные предпосылки маски подсети, такие как 255.255.255.0 . Но все примеры подсетей, которые я видел, были (слева направо) смежными 1 с (биты HI). Например, 255.255.0.0 (/16) переводится в следующие октеты:

11111111 . 11111111 . 00000000 . 00000000

Я считаю, что эти биты должны быть смежными, потому что весь смысл подсетей заключается в получении идентификатора хоста и диапазонов доступных идентификаторов устройства. Но у меня возникает вопрос: может быть, у вас когда-нибудь будет маска подсети, скажем, 255.17.255.0 или:

11111111 . 00010001 . 11111111 . 00000000
  • Это когда-нибудь случится? Или для подсетей невозможно существование без смежных единиц? Если так, то почему?
  • В противном случае, если это возможно, зачем вам (несколько конкретных примеров)?

4 ответа4

26

Да, простой способ думать о том, что маски подсетей всегда равны единице в начале. Если у индикатора размера подсети нет 1 в начале двоичного представления, то я бы сказал, что индикатор размера подсети не является надлежащей «маской подсети», если использовать современные стандарты.

RFC 1219 утверждает, что более ранний RFC 950 разрешает несмежные биты. Фактически, RFC 950 стр. 15 (раздел 3) ясно имеет пример, который «иллюстрирует несмежные биты подсети». Однако нет способа преобразовать такие подсети в нотацию CIDR. Обозначение в стиле CIDR - это то, что использовало IPv6 (по крайней мере, начиная с RFC 1884, стр. 7, первое предложение раздела 2.4), поэтому несмежные биты никогда широко не поддерживались для сетей IPv6. Метод RFC 1219 указывает, что «биты подсети (маска = 1) назначаются от старшего значащего бита к младшему». (Раздел 3.1 RFC 4632, упомянутый в ответе Сами, указывает на официальный стандарт, в котором обсуждается нотация CIDR.)

На странице 2 RFC 1878 показаны стандартные обозначения «маски подсети» для всех подсетей IPv4, кроме /0 .

Тем не менее, я собираюсь немного подробнее остановиться на ответе Сами, изучая вопрос «почему» (на конкретном примере, когда вопрос задавался)...

Некоторое оборудование Cisco профессионального уровня поддерживает так называемую «маску подстановки», которая инвертирует биты. Таким образом, нормальная подсеть может быть представлена чем-то, что называется 00000000.00000000.00000000.11111111 .

С подстановочными масками Cisco не было правила, что все нули должны были идти первыми. Таким образом, вы можете использовать 00000000.00000000.00000000.11111110 .

В результате будет создана группа, содержащая все четные IP-адреса.

Это было действительно важно знать, потому что обучение Cisco покрывало это, и поэтому процесс экспертизы профессиональных сертификатов Cisco мог бы спросить о такой вещи.

Тем не менее, я думаю, что это было в основном бесполезно. Вместо того, чтобы делить сеть на две половины, используя четные адреса или адреса с нечетными номерами, вы можете просто разделить сеть пополам, используя адреса с низкими номерами и адреса с большими номерами, создав обычные подсети, которые в два раза меньше.

Маски с подстановочными знаками с несмежными битами не очень полезны, и с ними может быть сложнее работать. Смысл бита маски подсети, установленного в 1, состоит в том, что этот бит помогает определить, в какой подсети находится устройство. Нет никаких веских причин для того, чтобы эти биты распределялись по адресу, вместо того, чтобы просто сгруппировать их в начале адреса. В результате поддержка этих типов масок представляла дополнительную сложность без особой выгоды.

Я предполагаю, что в конечном итоге Cisco согласилась с тем, что нет смысла использовать такие нетрадиционные маски подсетей, потому что они в конечном итоге отказались от поддержки «масок подстановочных знаков». Старые брандмауэры Pix поддерживают «маски подстановочных знаков», но более новые блоки ASA вместо этого используют стандартные «маски подсетей».

Я бы даже не пытался создать сеть с несмежными «битами подсети» в маске, потому что многие программы следовали бы новым тенденциям / стандартам и отвергали бы такой дизайн сети. Даже если бы я использовал старое программное обеспечение, я бы, вероятно, хотел бы, чтобы мою сеть можно было легко модифицировать, чтобы можно было использовать более новое программное обеспечение без необходимости переделки сети. Таким образом, смежные «биты подсети» - единственный путь.

Если бы вам задали вопрос на тесте, я бы с уверенностью сказал, что все 1 должны быть в начале адреса. Это то, что любой здравомыслящий тестер хотел бы, чтобы большинство учеников изучали в наши дни.

17

Раздел 3.1 в RFC показывает разрешенные маски в бесклассовой междоменной маршрутизации. Биты должны быть смежными для правильной работы маршрутизации.

Кроме того, если мыслить логически, не имеет смысла иметь странные случайные сетевые маски.

2

RFC 950 говорит в главе 2.2:

 To support subnets, it is necessary to store one more 32-bit
  quantity, called my_ip_mask.  This is a bit-mask with bits set in
  the fields corresponding to the IP network number, and additional
  bits set corresponding to the subnet number field.

 The code then becomes:

   IF bitwise_and(dg.ip_dest, my_ip_mask)
                               = bitwise_and(my_ip_addr, my_ip_mask)
         THEN
             send_dg_locally(dg, dg.ip_dest)
         ELSE
             send_dg_locally(dg,
                    gateway_to(bitwise_and(dg.ip_dest, my_ip_mask)))

поэтому предложение касалось простой битовой операции, которая не заботится о смежных битах.

В 1985 году центральный процессор и память были намного более ограничены, поэтому любые более сложные операции просто не укладывались в рамки времени.

Это становится еще более явным в главе 3:

и что в сети используется 3-битное поле подсети (01011000), то есть маска адреса составляет 255.255.255.88.

Однако эти RFC, похоже, устарели. Например, в Windows 7 SP1 невозможно установить такую маску подсети:

Требуется непрерывная маска подсети в Windows 7

Даже на Windows XP SP2 это было невозможно:

Маска подсети Windows XP SP2

Однако клон ReactOS в Windows 98 позволяет установить "странную" маску сети:

Маска подсети ReactOS

1

Я согласен с ответом @Sami Кухмонен:

Раздел 3.1 в RFC показывает разрешенные маски в бесклассовой междоменной маршрутизации. Биты должны быть смежными для правильной работы маршрутизации. Кроме того, если мыслить логически, не имеет смысла иметь странные случайные сетевые маски.

Однако, даже если это не желательно или не разрешено, все еще возможно определить маску подсети непоследовательных единиц. Причина этого:
Идентификатор сети и идентификатор хоста рассчитываются на основе IP-адреса и маски подсети с использованием двоичных операций AND и XOR. Все остальное не имеет значения.

Я проверял это много лет назад на Win 2000, он работает. Оба компьютера имели маску 255.160.0.0. Они находились в локальной сети без маршрутизатора, поэтому я не могу рассказать о поведении маршрутизатора (обычно вы можете установить маску маршрутизатора только в его веб-интерфейсе, который будет отклонять его).
Вы также не можете ввести такую «недопустимую» маску подсети в соответствующее поле настроек сети; GUI отказывается принимать его. Но вы можете обмануть, изменив его в реестре напрямую. После этого перезагрузите или отключите + включите сетевой адаптер, чтобы изменения стали активными.
Цель всего этого: хм, наверное, нет.

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