Как работает подсеть IPv4?

Вопрос или проблема

Это канонический вопрос о подсетях IPv4.

Связанные темы:

Как работает подсетирование IPv6 и чем оно отличается от подсетирования IPv4?

Как работает подсетирование, и как его делать вручную или в уме? Может кто-то объяснить концептуально и привести несколько примеров? Server Fault получает много вопросов по домашним заданиям по подсетированию, поэтому мы могли бы использовать готовый ответ для них на самом Server Fault.

Если у меня есть сеть, как мне понять, как её разделить?
Если мне выдана маска сети, откуда я знаю, каков диапазон сети?
Иногда после дроби идет число, что это за число?
Иногда есть маска подсети, но также есть маска с вайлдкардом, они кажутся одинаковыми, но на самом деле отличаются?
Кто-то упоминал о необходимости понимать двоичную систему?

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

Счет до 1
Если вы уже свободно владеете двоичной нотацией (основание 2), вы можете пропустить этот раздел. Для тех из вас, кто остался: Стыдно, что вы не владеете двоичной нотацией! Да, это может быть несколько грубо. Научиться считать в двоичной системе действительно очень просто, и можно узнать кратчайшие пути для преобразования двоичного в десятичное и обратно. Это действительно полезно знать.

Считать в двоичной системе просто, потому что нужно уметь считать только до 1! Представьте себе одометр автомобиля, за исключением того, что в отличие от традиционного каждая цифра может достигать только 1 с 0. Когда машина только что сошла с конвейера, одометр показывает “00000000”. После первой мили одометр показывает “00000001”. Пока все хорошо. После второй мили первая цифра одометра снова становится “0” (так как ее максимальное значение равно “1”), а вторая цифра становится “1”, что делает одометр “00000010”. Это похоже на число 10 в десятичной записи, но фактически это 2 в двоичной записи.

Когда вы проехали третью милю, одометр показывает “00000011”, так как снова переворачивается первая цифра. Число “11” в двоичной записи это то же самое, что число 3 в десятичной записи. Наконец, когда вы проехали четвертую милю, обе цифры (которые были “1” в конце третьей мили) снова становятся “0”, и третья цифра становится “1”, давая нам “00000100”. Это двоичное представление десятичного числа 4.

Можно заучить все это, если хотите, но на самом деле нужно понять, как маленький одометр “переходит” по мере увеличения числа, которое он считает. Это точно так же, как работа традиционного десятичного одометра, за исключением того, что каждая цифра может быть только “0” или “1” на нашем вымышленном “двоичном одометре”.

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

Поскольку вы понимаете, как одометр движется вперед, вы поймете, как он движется назад. Чтобы преобразовать двоичное число, отображаемое на одометре, обратно в десятичное, можно откатывать одометр назад по одному щелчку за раз, считая вслух до тех пор, пока одометр не покажет “00000000”. Когда весь подсчет и прокрутка завершены, последнее число, которое вы услышите вслух, будет десятичным представлением двоичного числа, с которого вы начали.

Преобразование значений между двоичным и десятичным таким образом было бы очень утомительным. Вы могли бы это сделать, но это не было бы очень эффективно. Проще выучить маленький алгоритм, чтобы делать это быстрее.

Краткое отступление: каждая цифра в двоичном числе известна как “бит”. Это “b” от слова “binary” и “it” от слова “digit”. Бит это двоичная цифра.

Преобразование двоичного числа, скажем, “1101011”, в десятичное – это простой процесс с удобным маленьким алгоритмом. Начните с подсчета количества битов в двоичном числе. В данном случае их 7. Сделайте 7 делений на листе бумаги (в уме, в текстовом файле и т.д.) и начните заполнять их справа налево. В крайнем правом слоте введите число “1”, потому что мы всегда начинаем с “1”. В следующем слоте к слоту слева введите вдвое большее значение от слота справа (так что “2” в следующем, “4” в следующем) и продолжайте до тех пор, пока все слоты не будут заполнены. (Вы запомните эти числа, которые являются степенями 2, по мере того как будете делать это снова и снова. Я хорошо до 131072 в голове, но обычно мне нужен калькулятор или бумага после этого).

Итак, у вас на бумаге должно быть следующее в ваших маленьких слотах.
64 | 32 | 16 | 8 | 4 | 2 | 1 |

Транскрибируйте биты из двоичного числа под слотами, вот так:
64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 1 0 1 0 1 1

Теперь добавьте некоторые символы и вычислите ответ на задачу:
64 | 32 | 16 | 8 | 4 | 2 | 1 |
x 1 x 1 x 0 x 1 x 0 x 1 x 1
— — — — — — —
+ + + + + + =

Выполнив все вычисления, вы получаете:
64 | 32 | 16 | 8 | 4 | 2 | 1 |
x 1 x 1 x 0 x 1 x 0 x 1 x 1
— — — — — — —
64 + 32 + 0 + 8 + 0 + 2 + 1 = 107

Готово. “1101011” в десятичном это 107. Это просто простые шаги и легкая математика.
Преобразование десятичного в двоичное так же просто и является тем же самым базовым алгоритмом, запущенным в обратном порядке.
Скажем, мы хотим преобразовать число 218 в двоичное. Начиная справа от листа бумаги, напишите число “1”. Слева удвойте это значение (например, “2”) и продолжайте двигаться влево, удваивая последнее значение. Если число, которое вы собираетесь написать, больше числа, которое вы хотите преобразовать, прекратите писать. иначе, продолжайте удваивать предыдущее число и писать. (Преобразование большого числа, вроде 34,157,216,092, в двоичное с использованием этого алгоритма может быть немного утомительным, но это вполне возможно.)
Итак, у вас должно быть на бумаге:
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |

Вы остановили запись чисел на 128, потому что удвоение 128, что дало бы 256, было бы больше, чем число, которое вы хотите преобразовать (218).
Начиная с самого левого числа, напишите “218” над ним (128) и спросите себя: “Больше ли 218 или равно 128?” Если ответ да, зачеркните “1” под “128”. Над “64” напишите результат 218 минус 128 (90).
Глядя на “64”, спросите себя: “Больше ли 90 или равно 64?” Это так, поэтому вы бы написали “1” под “64”, а затем вычли бы 64 из 90 и написали это число над “32” (26).
Когда вы дойдете до “32”, вы обнаружите, что 32 не больше или равно 26. В этом случае напишите “0” под “32”, скопируйте число (26) сверху “32” сверху “16” и продолжайте спрашивать себя тот же вопрос с остальными числами.
Когда вы закончите, у вас должно быть:
218 90 26 26 10 2 2 0
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 1 0 1 1 0 1 0

Числа вверху это просто заметки, используемые в расчетах и не несут для нас большого значения. Внизу же вы видите двоичное число “11011010”. Действительно, 218, преобразованное в двоичное, это “11011010”.
Следуя этим очень простым процедурам, вы можете преобразовывать двоичное в десятичное и обратно без калькулятора. Вся математика очень проста, и правила можно запомнить с небольшой практикой.
Разделение адресов
Подумайте о маршрутизации IP как о доставке пиццы.
Когда вас просят доставить пиццу на “123 Main Street”, вам, как человеку, очень ясно, что вы должны пойти к строению под номером “123” на улице, называемой “Main Street”. Легко понять, что вам нужно идти к 100-блокам Main Street, потому что номер здания находится между 100 и 199, и большинство городских блоков нумеруются сотнями. Вы “просто знаете”, как разделить адрес.
Роутеры доставляют пакеты, а не пиццу. Их работа такая же, как у водителя пиццы: доставить “груз” (пакеты) как можно ближе к месту назначения. Роутер подключен к двум или более IP-подсетям (чтобы быть хоть чем-то полезным). Роутер должен просматривать адреса назначения пакетов и разбивать эти адреса назначения на их “название улицы” и “номер здания”, как и водитель пиццы, чтобы принимать решения о доставке.
Каждый компьютер (или “хост”) в IP-сети настраивается с уникальным IP-адресом и маской подсети. Этот IP-адрес может быть разделен на компонент “номер здания” (как “123” в приведенном выше примере), называемый “идентификатором хоста” и компонент “название улицы” (как “Main Street” в приведенном выше примере), называемый “идентификатором сети”. Для наших человеческих глаз это просто увидеть, где находится номер здания и название улицы в “123 Main Street”, но сложнее увидеть это разделение в “10.13.216.41 с маской подсети 255.255.192.0”.
IP-роутеры “просто знают”, как разби
лять IP-адреса на эти составные части для принятия решений о маршрутизации. Поскольку понимание того, как маршрутизируются IP-пакеты, зависит от понимания этого процесса, мы должны знать, как разбивать IP-адреса. К счастью, извлечение идентификатора хоста и идентификатора сети из IP-адреса и маски подсети на самом деле довольно просто.
Начните с записи IP-адреса в двоичном виде (используйте калькулятор, если вы еще не научились делать это в уме, но обязательно учитесь — это действительно очень легко и впечатляет противоположный пол на вечеринках):
10. 13. 216. 41
00001010.00001101.11011000.00101001

Запишите маску подсети в двоичном виде тоже:
255. 255. 192. 0
11111111.11111111.11000000.00000000

Записанные рядом, вы можете увидеть, что точка в маске подсети, где останавливаются “1”, “выравнивает” к точке в IP-адресе. Это та точка, где разделяются идентификатор сети и идентификатор хоста. Таким образом, в данном случае:
10. 13. 216. 41
00001010.00001101.11011000.00101001 – IP-адрес
11111111.11111111.11000000.00000000 – маска подсети
00001010.00001101.11000000.00000000 – Часть IP-адреса, покрытая 1 в маске подсети, оставшиеся биты установлены на 0
00000000.00000000.00011000.00101001 – Часть IP-адреса, покрытая 0 в маске подсети, оставшиеся биты установлены на 0

Роутеры используют маску подсети для “маскирования” битов, покрытых 1 в IP-адресе (заменяя биты, которые не “маскированы” на 0) для извлечения идентификатора сети:
10. 13. 192. 0
00001010.00001101.11000000.00000000 – Идентификатор сети

Аналогично, с помощью маски подсети для “маскирования” битов, покрытых 0 в IP-адресе (заменяя биты, которые не “маскированы” на 0 снова) роутер может извлечь идентификатор хоста:
0. 0. 24. 41
00000000.00000000.00011000.00101001 – Часть IP-адреса, покрытая 0 в маске, пространство с оставшимися битами устанавливается в 0.

Для человеческого глаза не так просто увидеть “разрыв” между идентификатором сети и идентификатором хоста, как между “номером здания” и “названием улицы” в физических адресах во время доставки пиццы, но конечный эффект тот же.
Теперь, когда вы можете разделить IP-адреса и маски подсети на идентификаторы хостов и сетей, вы можете маршрутизировать IP так же, как это делает маршрутизатор.
Дополнительная терминология
Вы увидите маски подсетей, написанные по всему Интернету и в остальной части этого ответа в виде (IP/число). Эта нотация известна как “безклассовая междоменная маршрутизация” (CIDR). “255.255.255.0” состоит из 24 битов 1 в начале, и его быстрее писать как “/24”, чем как “255.255.255.0”. Чтобы преобразовать число CIDR (например, “/16”) в маску подсети с точечной десятичной нотацией, просто запишите это количество единиц, разделите их на группы по 8 битов и преобразуйте в десятичную. (На “/16” соответствует “255.255.0.0”, например.)
В “старые времена” маски подсетей не указывались, а выводились из определенных битов IP-адреса. IP-адрес, начинающийся с 0 – 127, например, имел подразумеваемую маску подсети 255.0.0.0 (называемую “класс A” IP-адресом).
Эти подразумеваемые маски подсетей сегодня не используются, и я не рекомендую изучать их, если только вам не повезло иметь дело с очень старым оборудованием или старыми протоколами (например, RIPv1), которые не поддерживают безклассовое адресование IP. Я не собираюсь больше упоминать эти “классы” адресов, потому что они неприменимы сегодня и могут быть сбивающими с толку.
Некоторые устройства используют нотацию, которая называется “масками с вайлдкардом”. “Маска с вайлдкардом” это не что иное как маска подсети с нолями там, где должны быть единицы, и единицами там, где должны быть ноли. “Маска с вайлдкардом” для /26:
11111111.11111111.11111111.11000000 – /26 маска подсети
00000000.00000000.00000000.00111111 – /26 “маска с вайлдкардом”

Обычно вы видите “маски с вайлдкардом”, используемые для сопоставления идентификаторов хостов в списках управления доступом или правилах брандмауэра. Мы их больше здесь обсуждать не будем.
Как работает роутер
Как я уже сказал, IP-роутеры имеют аналогичную работу с водителями по доставке пиццы, так как нужно добираться “груза” (пакетов) до места назначения. Когда роутеру поступает пакет, предназначенный для адреса 192.168.10.2, роутеру необходимо определить, какой из его сетевых интерфейсов лучше всего подойдет для этой передачи.
Предположим, что вы – IP-роутер, и у вас подключены интерфейсы:

Ethernet0 – 192.168.20.1, маска подсети /24
Ethernet1 – 192.168.10.1, маска подсети /24

Если вы получаете пакет для передачи с адресом назначения “192.168.10.2”, с помощью вашего человеческого глаза это довольно просто сказать, что пакет должен быть отправлен через интерфейс Ethernet1, потому что адрес интерфейса Ethernet1 соответствует адрес назначения пакета. Все компьютеры, подключенные к интерфейсу Ethernet1, будут иметь IP-адреса, начинающиеся с “192.168.10.”, потому что идентификатор сети IP-адреса, назначенного интерфейсу Ethernet1, это “192.168.10.0”.
Для роутера этот процесс выбора маршрута выполняется путем построения таблицы маршрутизации и обращения к таблице каждый раз, когда пакет должен быть доставлен. В таблице маршрутизации содержатся идентификатор сети и названия интерфейсов-получателей. Вы уже знаете, как получать идентификатор сети из IP-адреса и маски подсети, так что вы на пути к созданию таблицы маршрутизации. Вот наша таблица маршрутизации для этого роутера:

Идентификатор сети: 192.168.20.0 (11000000.10101000.00010100.00000000) – Маска подсети 24 бита – Интерфейс Ethernet0
Идентификатор сети: 192.168.10.0 (11000000.10101000.00001010.00000000) – Маска подсети 24 бита – Интерфейс Ethernet1

Для нашего входящего пакета, предназначенного для “192.168.10.2”, нам нужно просто преобразовать адрес назначения пакета в двоичный (как люди — рутер получает его как двоичный с провода в первую очередь) и попытаться сопоставить его с каждым адресом в нашей таблице маршрутизации (до количества битов в маске подсети) до тех пор, пока не станет понятно, что это подходит.

Адрес назначения входящего пакета: 11000000.10101000.00001010.00000010

Сравнивая это с записями в нашей таблице маршрутизации:
11000000.10101000.00001010.00000010 – Адрес назначения для пакета
11000000.10101000.00010100.00000000 – Интерфейс Ethernet0
!!!!!!!!.!!!!!!!!.!!!????!.xxxxxxxx – ! обозначает совпадающие цифры, ? обозначает несовпадение, x обозначает непроверенные (за пределами маски подсети)

11000000.10101000.00001010.00000010 – Адрес назначения для пакета
11000000.10101000.00001010.00000000 – Интерфейс Ethernet1, маска подсети 24 бита
!!!!!!!!.!!!!!!!!.!!!!!!!!.xxxxxxxx – ! обозначает совпадающие цифры, ? обозначает несовпадение, x обозначает непроверенные (за пределами маски подсети)

Запись для Ethernet0 совпадает с первыми 19 битами, но затем перестает совпадать. Это означает, что это не правильный интерфейс назначения. Вы видите, что интерфейс Ethernet1 совпадает по 24 битам адреса назначения. Ага! Пакет предназначен для интерфейса Ethernet1.
В реальной жизни роутеры упорядочивают таблицу маршрутизации таким образом, чтобы сначала проверялись на соответствие на длиннейшие маски подсетей (т.е. наиболее специфические маршруты), и по числу так, чтобы как только находилось соответствие, пакет маршрутизировался, и дальнейшие попытки соответствия не требовались (то есть 192.168.10.0 будет первым в списке, и 192.168.20.0 никогда бы не проверялось). Здесь мы немного упрощаем это. Выдающиеся структуры данных и алгоритмы делают маршрутизаторы IP более быстрыми, но простые алгоритмы приведут к тем же результатам.
Статические маршруты
До этого момента мы говорили о нашем гипотетическом маршрутизаторе, как имеющем сети, напрямую подключенные к нему. Это не то, разумеется, как все устроено в реальной жизни. В аналогии с доставкой пиццы иногда водителю не разрешено заходить дальше ресепшена и придется передать пиццу кому-то еще для доставки окончательному получателю (притворитесь, что верите, и оставайтесь со мной, пока я растягиваю аналогию, пожалуйста).
Предположим, что мы называем наш маршрутизатор из предыдущих примеров “Маршрутизатор A”. Вы уже знаете таблица маршрутизации Маршрутизатора A, как:

Идентификатор сети: 192.168.20.0 (11000000.10101000.00010100.00000000) – маска подсети /24 – Интерфейс RouterA-Ethernet0
Идентификатор сети: 192.168.10.0 (11000000.10101000.00001010.00000000) – маска подсети /24 – Интерфейс RouterA-Ethernet1

Предположим, что есть еще один маршрутизатор, “Маршрутизатор B”, с IP-адресами 192.168.10.254/24 и 192.168.30.1/24, назначенными его интерфейсам Ethernet0 и Ethernet1. У него следующая таблица маршрутизации:

Идентификатор сети: 192.168.10.0 (11000000.10101000.00001010.00000000) – маска подсети /24 – Интерфейс RouterB-Ethernet0
Идентификатор сети: 192.168.30.0 (11000000.10101000.00011110.00000000) – маска подсети /24 – Интерфейс RouterB-Ethernet1

В красивом виде ASCII арта сеть выглядит так:
Интерфейс Интерфейс
Ethernet1 Ethernet1
192.168.10.1/24 192.168.30.254/24
__________ V __________ V
| | V | | V
—-| РОУТЕР A |——- /// ——-| РОУТЕР B |—-
^ |__________| ^ |__________|
^ ^
Интерфейс Интерфейс
Ethernet0 Ethernet0
192.168.20.1/24 192.168.10.254/24

Вы видите, что Маршрутизатор B знает, как “подойти” к сети, 192.168.30.0/24, о которой Маршрутизатор A ничего не знает.
Предположим, что ПК с IP-адресом 192.168.20.13, подключенный к сети через интерфейс Ethernet0 маршрутизатора A отправляет пакет на Маршрутизатор A для доставки. Наш гипотетический пакет предназначен для IP-адреса 192.168.30.46, который является устройством, подключенным к сети через интерфейс Ethernet1 Маршрутизатора B.
С таблицей маршрутизации, показанной выше, ни одна запись в таблице маршрутизации Маршрутизатора A не совпадает с адресом назначения 192.168.30.46, поэтому Маршрутизатор A вернет пакет на отправляющий ПК с сообщением “Сеть назначения недоступна”.
Чтобы сделать Маршрутизатор A “осведомленным” о существовании сети 192.168.30.0/24, мы добавляем следующую запись в таблицу маршрутизации на Маршрутизаторе A:

Идентификатор сети: 192.168.30.0 (11000000.10101000.00011110.00000000) – маска подсети /24 – Доступно через 192.168.10.254

Таким образом, у Маршрутизатора A есть запись в таблице маршрутизации, которая совпадает с назначением нашего примера пакета 192.168.30.46. Эта запись в таблице маршрутизации говорит “Если вы получили пакет, направляющийся на 192.168.30.0/24, отправьте его дальше на 192.168.10.254, потому что он знает, как с этим справиться.” Это та аналогичная “передача пиццы у стойки ресепшена”, о которой я упоминал ранее — передача пакета кому-то другому, кто знает, как добрать его ближе к месту назначения.
Добавление записи в таблицу маршрутизации “вручную” известно как добавление “статического маршрута”.
Если Маршрутизатор B хочет доставить пакеты в сеть 192.168.20.0 маска подсети 255.255.255.0, ему также потребуется запись в его таблице маршрутизации:

Идентификатор сети: 192.168.20.0 (11000000.10101000.00010100.00000000) – маска подсети /24 – Доступно через: 192.168.10.1 (IP-адрес Маршрутизатора A в сети 192.168.10.0)

Это создало бы путь для передачи между сетью 192.168.30.0/24 и сетью 192.168.20.0/24 через сеть 192.168.10.0/24 между этими маршрутизаторами.
Вы всегда должны быть уверены, что маршрутизаторы по обе стороны такой “промежуточной сети” имеют запись в таблице маршрутизации для “дальней” сети. Если у маршрутизатора B в нашем примере не было записи в таблице маршрутизации для “дальней” сети 192.168.20.0/24, подключенной к маршрутизатору A, наш гипотетический пакет от ПК с адресом 192.168.20.13 доберется до устройства назначения с адресом 192.168.30.46, но любой ответ, который 192.168.30.46 попытается отправить обратно, будет возвращен маршрутизатором B с пометкой “Сеть назначения недоступна.” Односторонняя связь обычно нежелательна. Всегда убедитесь, что вы думаете о движении трафика в обоих направлениях, когда думаете о связи в компьютерных сетях.
Вы можете извлекать много пользы из стат
нических маршрутов. Динамические протоколы маршрутизации, такие как EIGRP, RIP и т.д., это действительно не что иное, как способ обмена маршрутной информацией между роутерами, которая, в принципе, могла бы быть настроена с помощью статических маршрутов. Однако одно из больших преимуществ использования динамических протоколов маршрутизации перед статическими маршрутами заключается в том, что динамические протоколы маршрутизации могут динамически изменять таблицу маршрутизации в зависимости от сетевых условий (использование полосы пропускания, “падение” интерфейса и т.д.) и, таким образом, использование динамического протокола маршрутизации может привести к конфигурации, которая “обходит” отказы или узкие места в сетевой инфраструктуре. (Динамические протоколы маршрутизации явно выходят за рамки данного ответа, однако.)
Вы не можете добраться туда отсюда
В случае нашего примера с маршрутизатором A, что происходит, когда приходит пакет, предназначенный для “172.16.31.92”?
Посмотрев на таблицу маршрутизации маршрутизатора A, ни адрес назначения интерфейса, ни статический маршрут не совпадают с первыми 24 битами 172.18.31.92 (что, кстати, соответствует 10101100.00010010.00011111.01011100).
Как мы уже знаем, маршрутизатор A вернул бы пакет отправителю через сообщение “Сеть назначения недоступна”.
Скажем, что есть еще один маршрутизатор (маршрутизатор C), расположенный по адресу “192.168.20.254”. Маршрутизатор C имеет соединение с Интернетом!
Интерфейс Интерфейс Интерфейс
Ethernet1 Ethernet1 Ethernet1
192.168.20.254/24 192.168.10.1/24 192.168.30.254/24
__________ V __________ V __________ V
(( heap o )) | | V | | V | | V
(( internet )) —-| ROUTER C |——- /// ——-| ROUTER A |——- /// ——-| ROUTER B |—-
(( w00t! )) ^ |__________| ^ |__________| ^ |__________|
^ ^ ^
Интерфейс Интерфейс Интерфейс
Ethernet0 Ethernet0 Ethernet0
10.35.1.1/30 192.168.20.1/24 192.168.10.254/24

Было бы хорошо, если бы маршрутизатор A мог маршрутизировать пакеты, которые не соответствуют ни одному локальному интерфейсу, к маршрутизатору C, чтобы маршрутизатор C мог отправить их в Интернет. Входит “маршрут по умолчанию”.
Добавьте в конец нашей таблицы маршрутизации следующую запись:

Идентификатор сети: 0.0.0.0 (00000000.00000000.00000000.00000000) – маска подсети /0 – маршрутизатор назначения: 192.168.20.254

Когда мы пытаемся сопоставить “172.16.31.92” с каждой записью в таблице маршрутизации, мы, в конце концов, попадаем на эту новую запись. Сначала это немного озадачивает. Мы пытаемся сопоставить ноль битов адреса назначения с… Подождите… Что? Сопоставление нуля битов? Так что мы фактически не ищем совпадения вообще. Эта запись в таблице маршрутизации фактически говорит: “Если вы попали сюда, вместо того чтобы отказываться от доставки, отправьте пакет на маршрутизатор 192.168.20.254 и пусть он с этим справится”.
192.168.20.254 это назначение, к которому мы ЗНАЕМ, как доставлять пакет. Когда сталкиваемся с пакетом, предназначенным на адрес назначения, для которого у нас нет определенной записи в таблице маршрутизации, эта запись “маршрутизатор по умолчанию” всегда будет соответствовать (поскольку она соответствует ноль бит адреса назначения) и дает нам “последний шанс” место, куда мы можем отправить пакеты для доставки. Вы иногда услышите, что маршрут по умолчанию называется “маршрутизатором последней надежды.”
Для того, чтобы маршрут по умолчанию был эффективен, он должен указывать на маршрутизатор, который доступен с использованием других записей в таблице маршрутизации. Если вы попробуете указать маршрут по умолчанию 192.168.50.254 в Маршру
тизаторе A, например, доставка на такой маршрут по умолчанию потерпит неудачу. 192.168.50.254 это не адрес, к которому маршрутизатор A знает, как доставлять пакеты, используя любой из других маршрутов в своей таблице маршрутизации, так что такой адрес был бы неэффективен как маршрут по умолчанию. Это может быть коротко выражено: Маршрут по умолчанию должен быть установлен на адрес, который уже доступен, используя другой маршрут в таблице маршрутизации.
Реальные роутеры обычно хранят маршрут по умолчанию как последний маршрут в своих таблицах маршрутизации, так что он соответствует после того, как они не соответствуют всем другим записям в таблице.
Городское планирование и IP-маршрутизация
Разделение IP-подсети на более мелкие IP-подсети похоже на городское планирование. В городском планировании зонирование используется для адаптации к естественным особенностям ландшафта (реки, озера и т.п.), для влияния на потоки трафика между различными частями города и для разделения различных типов использования земли (индустриальное, жилое и т.п.). IP-подсети на самом деле чем-то похожи на это.
Существует три основные причины, по которым вы могли бы разделить сеть:

Возможно, вы хотите общаться через разные, несхожие каналы связи. Если у вас есть T1 WAN соединение между двумя зданиями, IP-роутеры могут быть размещены на концах этих соединений для содействия связи через линию T1. Сети на каждом конце (и возможно “промежуточная” сеть на самой линии T1) будет назначена уникальная IP-подсеть так, чтобы роутеры могли принимать решения о том, какой трафик должен быть отправлен через линию T1.

В Ethernet-сети вы могли бы использовать подсетирование для ограничения количества широковещательных трафиков в данном сегменте сети. Протоколы приложения высокого уровня используют широковещательные возможности Ethernet для очень полезных целей. Когда вы добавляете все больше и больше хостов в одну и ту же сеть Ethernet, процент широковещательного трафика на проводе (или в воздухе, в беспроводном Ethernet) может увеличиваться до такой степени, что это создает проблемы для доставки нешироковещательного трафика. (В старые времена широковещательный трафик мог перегружать процессоры хостов, заставляя их анализировать каждый широковещательный пакет. Это менее вероятно сегодня.) Чрезмерный трафик на коммутируемом Ethernet может также проявляться в виде “затопления фреймов до неизвестных целей”. Это состояние вызывается неспособностью Ethernet-коммутатора отслеживать каждое назначение в сети и является причиной того, что коммутируемые Ethernet-сети не могут масштабироваться до бесконечного числа хостов. Избыточный трафик и затопление фреймов неизвестными назначениями имеют схожие эффекты с точки зрения подсетирования.

Возможно, вы хотите “контролировать” виды трафика, циркулирующего между разными группами хостов. Возможно, у вас есть печатные серверы, и вы хотите, чтобы только авторизированные серверы очередности печати могли отправлять задачи на них. Ограничивая трафик, разрешенный к потоку на подсеть печатного сервера, пользователи не могут настраивать свои ПК для непосредственного общения с печатными серверами, чтобы обойти учет печати. Вы можете разместить устройства печатного сервера в отдельной подсети и создать правило в роутере или фаерволе, подсоединенном к этой подсети, чтобы контролировать список хостов, которым разрешено отправлять трафик на устройства печатного сервера. (Роутеры и фаерволы обычно могут принимать решения о том, как или следует ли доставлять пакет, основываясь на адресах отправителя и получателя пакета. Фаерволы обычно являются подвидом роутера с навязчивой личностью. Они могут быть очень, очень заинтересованы в содержимом пакетов, тогда как роутеры обычно игнорируют содержимое и просто доставляют пакеты.)

При планировании города вы можете планировать, как улицы пересекаются друг с другом, и использовать только поворотные, односторонние и тупиковые улицы, чтобы влиять на потоки трафика. Вы могли бы хотеть, чтобы Main Street имела длину 30 блоков, и чтобы каждый блок имел до 99 зданий. Легко планировать нумерацию улиц так, чтобы каждый блок Main Street имел диапазон номеров улиц, увеличивающийся на 100 для каждого блока. Очень легко знать, каков “начальный номер” в каждом последующем блоке.

При планировании IP-подсетей вы заботитесь о создании правильного количества подсетей (улиц) с нужным количеством доступных идентификаторов хоста (номеров зданий), и использовании роутеров для соединения подсетей друг с другом (перекрестков). Правила об разрешенных адресах отправителя и назначения, указанные в роутерах, могут дополнительно контролировать поток трафика. Фаерволы могут действовать как назойливые дорожные регулировщики.

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

Продолжение на: Как работает подсетирование IPv4?
(Да … мы достигли максимального размера ответа (30000 символов).)

Продолжение с: Как работает подсетирование IPv4?

Ваш интернет-провайдер выдает вам диапазон идентификатора сети 192.168.40.0/24 (11000000.10101000.00101000.00000000). Вы знаете, что хотели бы использовать устройство фаервола / роутера, чтобы ограничить связь между различными частями вашей сети (серверами, клиентскими компьютерами, сетевым оборудованием) и, следовательно, хотели бы разбить эти различные части вашей сети на IP-подсети (которые устройство фаервола / роутера может затем маршрутизировать между собой).

У вас есть:

12 серверов, но вы могли бы получить еще до 50% больше
9 коммутаторов
97 клиентских компьютеров, но вы могли бы получить больше

Какой хороший способ разбить 192.168.40.0/24 на эти части?

Думая о целых степенях двойки и работая с большими числам
и потенциальных устройств, вы можете прийти к следующему:

18 серверов – Следующая большая степень двойки это 32
9 коммутаторов – Следующая большая степень двойки это 16
97 клиентских компьютеров – Следующая большая степень двойки это 128

В данной IP-подсети есть два адреса, которые зарезервированы и не могут быть использованы в качестве допустимых IP-адресов устройств — адрес с всеми нулями в части идентификатора хоста и адрес с всеми единицами в части идентификатора хоста. Таким образом, для любой данной IP-подсети, количество доступных адресов хоста равняется двум в степени количество 32 минус количество битов в маске подсети, минус 2. Таким образом, в случае 192.168.40.0/24 мы видим, что маска подсети имеет 24 бита. Это оставляет 8 битов, доступных для идентификаторов хостов. Мы знаем, что два в восьмой степени это 256 — это означает, что 256 возможных комбинаций битов подходят в слот шириной в 8 битов. Поскольку комбинации “11111111” и “00000000” тех 8 битов не разрешены для идентификаторов хостов, это дает нам 254 возможных хоста, которые могут быть назначены в сети 192.168.40.0/24.

Из этих 254 хостов, кажется, что мы можем разместить клиентские компьютеры, коммутаторы и серверы в этом пространстве, верно? Попробуем.

У вас есть 8 битов маски подсети для “игры” (оставшиеся 8 битов IP-адреса 192.168.40.0/24 не покрыты маской подсети, предоставленной вашим интернет-провайдером). Мы должны выяснить, как использовать эти 8 битов, чтобы создать ряд уникальных идентификаторов сети, которые могут вместить перечисленные выше устройства.

Игнай с крупнейшей сети – клиентских компьютеров. Вы знаете, что следующая степень двойки, большее количество возможных устройств, это 128. Число 128 в двоичном виде это “10000000”. К счастью для нас, это помещается в 8-битный слот, который у нас свободен (если бы это не поместилось, это было бы указанием, что наша начальная подсеть слишком мала, чтобы вместить все наши устройства).

Давайте возьмем наш идентификатор сети, предоставленный нашим интернет-провайдером, и добавим один бит маски подсети, разбивая его на две сети:

11000000.10101000.00101000.00000000 – 192.168.40.0 идентификатор сети
11111111.11111111.11111111.00000000 – Старая маска подсети (/24)

11000000.10101000.00101000.00000000 – 192.168.40.0 идентификатор сети
11111111.11111111.11111111.10000000 – Новая маска подсети (/25)

11000000.10101000.00101000.10000000 – 192.168.40.128 идентификатор сети
11111111.11111111.11111111.10000000 – Новая маска подсети (/25)

Изучите это, пока это не станет понятно. Мы увеличили длину маски подсети на один бит, заставляя идентификатор сети покрывать один бит, который был бы использован для идентификатора хоста. Так как этот один бит может быть либо нулем, либо единицей, мы эффективно разбили нашу сеть 192.168.40.0 на две сети. Первая допустимая IP-адреса в сети 192.168.40.0/25 будет первым идентификатором хоста с “1” в крайней правой позиции:

11000000.10101000.00101000.00000001 – 192.168.40.1 – Первый допустимый хост в сети 192.168.40.0/25

Первый допустимый хост в сети 192.168.40.128 будет, также, первым идентификатором хоста с “1” в крайней правой позиции:

11000000.10101000.00101000.10000001 – 192.168.40.129 – Первый допустимый хост в сети 192.168.40.128/25

Последний допустимый хост в каждой сети будет идентификатором хоста с каждым битом, кроме крайнего правого, установленным на “1”:

11000000.10101000.00101000.01111110 – 192.168.40.126 – Последний допустимый хост в сети 192.168.40.0/25
11000000.10101000.00101000.11111110 – 192.168.40.254 – Последний допустимый хост в сети 192.168.40.128/25

Таким образом, мы создали сеть, достаточно большую, чтобы вместить наши клиентские компьютеры, и вторую сеть, которую мы можем затем применить тот же принцип, чтобы разбить на еще более мелкие сети. Сделаем замечание:

Клиентские компьютеры – 192.168.40.0/25 – Допустимые IPs: 192.168.40.1 – 192.168.40.126

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

У нас 12 серверов, но мы можем приобрести до 6 больше. Планируем на 18, что оставляет следующее наибольшее знакомое двум степеням как 32. В двоичной системе 32 это “100000”, что составляет 6 битов длиной. У нас осталось 7 битов маски подсети в 192.168.40.128/25, так что у нас достаточно битов для “игры”. Добавляя еще один бит маски подсети, мы получаем еще две сети:

11000000.10101000.00101000.10000000 – 192.168.40.128 идентификатор сети
11111111.11111111.11111111.10000000 – Старая маска подсети (/25)

11000000.10101000.00101000.10000000 – 192.168.40.128 идентификатор сети
11111111.11111111.11111111.11000000 – Новая маска подсети (/26)
11000000.10101000.00101000.10000001 – 192.168.40.129 – Первый допустимый хост в сети 192.168.40.128/26
11000000.10101000.00101000.10111110 – 192.168.40.190 – Последний допустимый хост в сети 192.168.40.128/26

11000000.10101000.00101000.11000000 – 192.168.40.192 идентификатор сети
11111111.11111111.11111111.11000000 – Новая маска подсети (/26)
11000000.10101000.00101000.11000001 – 192.168.40.193 – Первый допустимый хост в сети 192.168.40.192/26
11000000.10101000.00101000.11111110 – 192.168.40.254 – Последний допустимый хост в сети 192.168.40.192/26

Итак, теперь мы разбили 192.168.40.128/25 на еще две сети, каждая из которых имеет маску подсети 26 битов, или в общей сложности 62 возможных идентификаторов хоста — 2 ^ (32 – 26) – 2.

Это означает, что обе эти сети имеют достаточно адресов для наших серверов и коммутаторов! Сделаем замечания:

Серверы – 192.168.40.128/26 – Допустимые IPs: 192.168.40.129 – 192.168.40.190
Коммутаторы – 192.168.40.192/26 – Допустимые IPs: 192.168.40.193 – 192.168.40.254

Эта техника называется маскированием подсетей переменной длины (VLSM), и, если её правильно применить, вызывает снижение таблица маршрутизации “основных маршрутизаторов” (на процессе, вызываемом “суммированием маршрута”). В случае нашего интернет-провайдера в этом примере, они могут быть совершенно не осведомлены о том, как мы разделили 192.168.40.0/24 на подсети. Если маршрутизатор интернет-провайдера имеет пакет, направленный на 192.168.40.206 (один из наших коммутаторов), им нужно только знать, что его нужно передать нашему маршрутизатору (поскольку 192.168.40.206 соответствует идентификатору сети и маске подсети 192.168.40.0/24 в таблице маршрутизации их маршрутизатора) и наш маршрутизатор доставит его по месту назначения. Это помогает держать наши маршруты подсетей вне их таблиц маршрутизации. (Я немного упрощаю здесь, но суть вы поняли.)

Вы можете планировать очень географически обширные сети таким же образом. При условии, что вы сделаете правильное “городское планирование” заранее (предвидя количество хостов в каждой подсети с некоторой точностью и взглядом на будущее) вы можете создать большую маршрутизационную иерархию, которая, в таблицах маршрутизации основных маршрутизаторов, “резюмируется” до очень малого количества маршрутов. Как мы видели выше, чем больше маршрутов в таблице маршрутизации маршрутизатора, тем медленнее он выполняет свою работу. Проектирование IP-сетки с VLSM и удержание маленькой таблицы маршрутизации это очень хорошая вещь (ТМ).

Нереализм примеров
Вымышленный мир в этом ответе, очевидно, вымышленный. Обычно вы можете делать подсети на современных коммутируемых Ethernet с большим числом хостов чем 254 (профиль нагрузки зависит от трафика). Как было отмечено в комментариях, использование /24 сетей между маршрутизаторами не соответствует Реальной Жизни(тм). Это создает милые примеры, но это пустая трата адресного пространства. Обычно, /30 или /31 сеть (см. http://www.faqs.org/rfcs/rfc3021.html для более детальной информации о том, как работают /31– они определенно выходят за рамки этого ответа) используется на соединениях, строго точка-точка между двумя маршрутизаторами.

Подсети

Подсетирование не сложно, но может быть пугающим. Так что давайте начнем с самого простого шага. Учимся считать в двоичной системе.

Двоичная система

Бинарная система это система счисления на основе 2. Состоит всего из двух чисел (1 и 0). Счет осуществляется таким образом.

1 = 001 (0 + 0 + 1 = 1)
2 = 010 (0 + 2 + 0 = 2)
3 = 011 (0 + 2 + 1 = 3)
4 = 100 (4 + 0 + 0 = 4)
5 = 101 (4 + 0 + 1 = 5)

Итак, если вы просто представите себе, что каждый 1 это место-держатель для значения (все двоичные значения это степени двойки)

1 1 1 1 1 = 31
16 + 8 + 4 + 2 + 1 = 31

Итак… 100000 = 32. И 10000000 = 128. И 11111111 = 255.

Когда я говорю, “У меня маска подсети 255.255.255.0”, я действительно имею в виду, “У меня маска подсети 11111111.11111111.11111111.00000000.” Мы используем подсети как сокращение.

Точки в адресе, разделяют каждые 8 двоичных цифр (октет). Вот почему IPv4 также известен как 32-битовое (8*4) адресное пространство.

Зачем нужны подсети?

IPv4 адреса (192.168.1.1) в дефиците. Подсетирование дает нам способ увеличения количества доступных сетей (или хостов). Это связано по административным причинам и техническим причинам.

Каждый IP-адрес разбивается на две отдельные части, сеть и хост. По умолчанию IP-адрес класса C (192.168.1.1) использует первые 3 октета (192.168.1) на часть сетевого адреса, и 4-й октет (.1) на часть адреса хоста.

По умолчанию IP-адрес и маска подсети для адреса класса C выглядят так

IP 192.168.1.1
Маска 255.255.255.0

В двоичном виде вот так

IP 11000000.10101000.00000001.00000001
Маска 11111111.11111111.11111111.00000000

Посмотрите на двоичный пример снова. Заметьте, как я сказал, что первые три октета используются для сети? Замечаете, как сетевой часть это все единицы? Это все что есть подсетирование. Давайте расширим.

Предположим, что у нас есть только один октет для нашей части хоста (в примере выше). Мы можем ТОЛЬКО иметь 256 хостов (256 это максимальное значение октета, считая с 0). Но еще есть один маленький трюк: вам нужно вычесть 2 адреса хоста из доступных (в настоящее время 256). Первый адрес в диапазоне будет для сети (192.168.1.0) и последний адрес в диапазоне будет широковещательным (192.168.1.255). Таким образом, у вашей сети на самом деле 254 доступных адреса хоста.

Кейс-стадия

Скажем, я дал вам следующий кусок бумаги.

Создайте 4 сети с 192.168.1.0/24.

Давайте рассмотрим это. /24 называется CIDR нотация. Вместо указания 255.255.255.0 мы просто указываем количество битов, необходимых для идентификатора сети. В данном случае нам нужно 24 бита (3*8) из 32-битного адреса. Записывая это в двоичной форме

11111111.11111111.11111111.00000000 = 255.255.255.0
8бит + 8бит + 8бит + 0бит = 24бит

Теперь мы знаем, нам нужно выяснить, сколько подсетей нам нужно. Выглядит как 4. Поскольку нам нужно создать больше сетей (в данный момент у нас только одна), давайте перевернем некоторые биты

11111111.11111111.11111111.00000000 = 255.255.255.0 = 1 сеть OR /24
11111111.11111111.11111111.10000000 = 255.255.255.128 = 2 сетей OR /25
11111111.11111111.11111111.11000000 = 255.255.255.192 = 4 сетей (помним о степенях 2!) OR /26

Теперь, когда мы решили, /26 давайте начнем выделять хосты. Немного простой математики:

32(бита) – 26(бита) = 6(битов) для адресов хостов.

У нас есть 6 битов для распределения в каждой сети для хостов. Помним при этом, что нужно вычесть 2 для каждой сети.

h = биты хоста
2^h – 2 = доступных хостов

2^6 – 2 = 62 хостов

Наконец у нас 62 хоста в 4 сетях, 192.168.1.0/26

Теперь нужно понять, где разместить хосты. Вернемся к двоичной системе ме

снова!

11111111.11111111.11111111.00,000000 [запятая это новое разделение сети/хостов]

Начнем вычислять:

11000000.10101000.00000001.00,000000 = 192.168.1.0 [Первый IP = адрес сети]
11000000.10101000.00000001.00,000001 = 192.168.1.1 [Первый IP хоста]
11000000.10101000.00000001.00,000010 = 192.168.1.2 [Второй IP хоста]
11000000.10101000.00000001.00,000011 = 192.168.1.3 [Третий IP хоста]

И так далее … до …

11000000.10101000.00000001.00,111110 = 192.168.1.62 [Шестьдесят второй IP хоста]
11000000.10101000.00000001.00,111111 = 192.168.1.63 [Последний IP = адрес широковещательного]

Так что … Переходим к СЛЕДУЮЩЕЙ сети ….

11000000.10101000.00000001.01,000000 = 192.168.1.64 [Первый IP = адрес сети]
11000000.10101000.00000001.01,000001 = 192.168.1.65 [Первый IP хоста]
11000000.10101000.00000001.01,000010 = 192.168.1.66 [Второй IP хоста]

И так далее … до …

11000000.10101000.00000001.01,111110 = 192.168.1.126 [Шестьдесят второй IP хоста]
11000000.10101000.00000001.01,111111 = 192.168.1.127 [Последний IP = адрес широковещательного]

Так что … Переходим к СЛЕДУЮЩЕЙ сети ….

11000000.10101000.00000001.10,000000 = 192.168.1.128 [Первый IP = адрес сети]
11000000.10101000.00000001.10,000001 = 192.168.1.129 [Первый IP хоста]

И так далее

В этом смысле вы можете рассчитать всю подсеть.

Маски вайлдкард
Маска вайлдкард это инвертированная маска подсети.

11111111.11111111.11111111.11000000 = 255.255.255.192 [Подсеть]
00000000.00000000.00000000.00111111 = 0.0.0.63 [Вайлдкард]

Далее

Искать в Google по терминам “супернетинг” и “VLSM (маска подсети переменной длины) для более продвинутых тем.

Я вижу сейчас, что я потратил слишком много времени на ответ … вздох

Краткий урок истории: изначально, уникальные IPv4 адреса были разделены на 3 класса, каждый с ассоциированной “дефолтной” маской длины (называемой классовой маской подсети)

Класс A: Что угодно в диапазоне 1.0.0.0 -> 127.255.255.255. Классовая маска подсети 255.0.0.0 (/8 в CIDR нотации)
Класс B: Что угодно в диапазоне 128.0.0.0 -> 191.255.255.255. Классовая маска подсети 255.255.0.0 (/16 в CIDR натации)
Класс C: Что угодно в диапазоне 192.0.0.0 -> 223.255.255.255. Классовая маска подсети 255.255.255.0 (/24 в CIDR нотации)

Идея была в том, чтобы организации разного размера могли получать разные классы IP-адресов, чтобы эффективно использовать адресное пространство IP.

Однако, по мере роста IP-сетей, выяснилось, что этот подход имел свои проблемы. Чтобы назвать только три:

В классовом мире все подсети должны были иметь маску /8, /16 или /24. Это означало, что самая маленькая подсеть, которую можно было настроить была /24, что позволяло 254 адреса хоста (.0 и .255 были зарезервированы как сеть и широковещательный адреса соответственно). Это было чрезвычайно расточительно, особенно на точка-точка соединениях с только двумя подключенными маршрутизаторами.

Даже после того, как это было расслаблено, более ранние протоколы маршрутизации (например, RIPv1) не передавали длину маски, связанную с IP-префиксом. В отсутствие конкретной маски он использовал бы либо маску напрямую подключенного интерфейса в той же классовой сети, либо вернулся к использованию классовой маски. Например, если вы захотите использовать сеть 172.16.0.0 для меж-маршрутизаторных соединений с /30 масками, все подсети с 172.16.0.0 по 172.16.255.255 должны были бы иметь /30 маску (16384 подсетей, каждая с 2 доступными IP).

Таблицы маршрутизации интернет-маршрутизаторовзаняли все больше и больше памяти; это было/стало известно как “взрыв таблиц маршрутизации”. Если провайдер имел 16 непрерывных /24 сетей, например, ему бы пришлось рекламировать все 16 префиксов, а не один обобщающий, покрывающий весь диапазон.

Два связанных улучшения позволили нам преодолеть вышеперечисленные ограничения.

Маски подсетей переменной длины (VLSM)
CIDR (Безкласовая междоменная маршрутизация)

VLSM относится к возможности протокола маршрутизации поддерживать разные маски подсетей в одной классовой сети. Например:

192.168.1.0/24

Можно разделить на:

192.168.1.0/25
192.168.1.128/26
192.168.1.192/27
192.168.1.224/27

Это позволило гораздо более эффективное использование адресного пространства; подсети могли бы быть правильно размерены для количества хостов/маршрутизаторов, которые были бы подключены к ним.

CIDR берет VLSM и расширяет его в другую сторону; кроме применения подъединения одной классовой сети на более мелкую, CIDR позволяет для агрегирования нескольких классовых сетей в один обобщающий. Например, следующие сети класса B (/16):

172.16.0.0/16
172.17.0.0/16
172.18.0.0/16
172.19.0.0/16

Можно обобщить/срезюмировать с одним префиксом:

172.16.0.0/14

Что касается подсетирования: маска подсети 32 бита длиной. Длина маски обозначает, сколько битов идентифицируют сетевую часть адреса. Например:

10.1.1.0/24

Классовая маска подсети это /8
Фактическая маска подсети это /24
16 битов (24-8) были “заняты” для использования подсетизирования.

Это означает, что, предполагая, что вся сеть 10.0.0.0/8 подсетеизирована на /24, там будет 65536 (2 ^ 16) подсетей в этом диапазоне. (Это предполагает, что платформа, которую вы используете, поддерживает номера подсетей 0 и 255. См. Cisco ip subnet-zero).

Осталось 8 битов в “хостовой части” адреса. Это означает, что там 256 доступных IP-адресов (2 ^ 8), из которых 2 зарезервированы (10.1.1.0 это адрес сети, 10.1.1.255 это адрес широковещательной подсети). Это оставляет 254 доступных IP-адреса в этой подсети. ((2^8) – 2)

Я задам и отвечу на несколько связанных вопросов по пути:

Почему вы так часто видите 255.255.255.0?
Почему 192.168.0.1?

Почему 127.0.0.1?

Почему такие странные числа — 255, 192, 168, 127?

8+8+8+8-битная точечная десятичная

Интернет-адреса такие, как 194.60.38.10 используют точечную десятичную нотацию, чтобы разделить 32 бита на 8+8+8+8 битов. Точечная десятичная означает преобразование† каждого числа в двоичный потом заполнение нулями слева.

Например .60. → 60=32+16+8+4 → 111100 → .00111100..

Таким образом, 194.60.38.10 это точечное десятичное для адреса 4×8=32 бита 11000010.00111100.00100110.00001010, так как 38 → 100110, 10 → 1010, и так далее. 194 требует всех 8 бит; остальные заполняются нулями.

После того, как вы подумаете о 255, 192 и 127 в 8-битном двоичном, вы сможете легче понять, почему некоторые десятичные числа так распространены:

255 = 11111111
192 = 11000000
127 = _1111111
128 = 10000000

Эти десятичные числа, в частности, представляют собой визуально удобные 8-битные блоки, такие как ■■■■■■■■, ■□□□□□□□, и □■■■■■■■. Поэтому вы никогда не видели 256=2⁹ из-за 8-битного ограничения, и 127=128−1=2⁸−1 это побитное переворачивание числа мощьностью-два — а мощности-два это 10………00000 в двоичной.

168 = 10101000

Маски подсетей: Что мое, то мое + Что ваше, то ваше

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

■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ главные IPs
■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□ маска подсети

Закраска первых 8+8+8=24 битов и освобождение последних 8 битов это способ разбить IP ■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ на две части:

■■□□□□■□|□□■■■■□□|□□■□□■■□ сеть
□□□□■□■□ хост

Если владелец подсети (скажем, ОмниКорп) захочет больше внутренних IP, они могли бы выкупить (скажем 8+8=16 битов дастоящих в стороне) правую сторону сети, вроде:

■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|□□□□□□□□|□□□□□□□□ маска подсети
■■□□□□■□ □□■■■■□□ сеть
□□■□□■■□ □□□□■□■□ хост

Очевидно существует компромис в пределах 32-битного = 2³² = 4,294,967,296- опций адресного пространства: если вы захватываете больше идентификаторов сети (левая сторона), внутренняя сеть будет иметь больше идентификаторов хоста (правая сторона) для назначения.

Дешевые люди поэтому имеют маску подсети

255.255.255.0 = ■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□.

Даже более дешевые люди имеют

255.255.255.128 = ■■■■■■■■|■■■■■■■■|■■■■■■■■|■□□□□□□□

или 255.255.255.192 = ■■■■■■■■|■■■■■■■■|■■■■■■■■|■■□□□□□□.

Согласно фольклору, это не был на самом деле Роджер Миллер, а низкий системный администратор с маской 255.255.255.254, кто первоначально написал “Король дороги”, заменив “У меня нет большой подсети” на “У меня нет сигарет”.

(Почему же маски низкостоящих полны такими высокими числами? Потому что, как и у рассказчика фильма, маски подсетей считают все, что вы не имеете)

Что означает косая черта после IP-адреса? (например, 194.60.38.10/24)

Поскольку маски подсетей (разделяющие “их” от “наших”) всегда начинаются с 1, и поскольку мы ненавидим суммирование мощностей-двойки еще больше, чем мы ненавидим понимание мощностей-двойки в первую очередь, кто-то изобрел CIDR (косая черта после IP).

194.60.38.10/24 означает “маска подсети имеет 24 единицы, затем оставшиеся нули”, так
■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□ с 8+8+8 бит принадлежащих “им” и 8 бит “нам”.

Обратя воплощение броши выше,

/31 является песенником
/24 является средним классом (255.255.255.0 = ■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□)
/16 является богатым ■■■■■■■■|■■■■■■■■|□□□□□□□□|□□□□□□□□
/8 является супержадным ■■■■■■■■|□□□□□□□□|□□□□□□□□|□□□□□□□□
/1 or /0 должно быть чем-то вроде IANA.

† Использовать bc -l; obase=10; 60 для примера.

Диапазоны сетей:
сети всегда ссылаются на 2 числа: одно чтобы определить сеть, а другое чтобы определить какой компьютер (или хост) находится в этой сети. Поскольку каждый адрес сети это 32 бита длиной, оба числа должны вписываться в эти 32 бита.

Нумерация сети имеет значение, поскольку именно это ICANN раздает, когда вы просите диапазон IP сети. Если бы этого не было, никто бы не смог различать мою сеть и сети AT&T. Так что в то время как эти числа должны быть уникальными, никто другой не хочет назначать номера хостам на моей сети. Следовательно разделение – первая часть управляется сетевым людьми, вторая вся моя чтобы дать тем, что машины я хочу.

Номер сети не фиксирован на определенном числе битов – например, если бы у меня было всего 200 машин для управления, я был бы вполне доволен с номером сети, который использует 24 битов, оставляя меня с только 8 битами для себя – которых достаточно для до 255 хостов. Поскольку номер сети использует 24 битов, у нас есть множество из них, что позволяет большему количеству людей иметь свои собственные сети.

Раньше это называлось Class C сеть. (Класс B использовал 16 бит для номера сети, и класс A использовал 8 бит, так что существует всего несколько классов A сети).

Сегодня эта нотация вышла из моды. Она была заменена концептом под названием CIDR. CIDR явно ставит количество битов для ваших хостов после косой черты. Таким образом, мой пример выше (класс C) теперь называется CIDR /24.

Это дает нам немного больше гибкости, раньше если у меня было 300 хостов для управления, мне нужен был бы класс B сеть! Теперь, я могу просто получить /23 CIDR

Ответ или решение

Как работает подсеть IPv4?

Теория

IPv4 адресация представляет собой структуру из 32 бит, разделенную на четыре восьмибитных октета. Для создания и управления сетью требуется больше, чем просто адресация; это также предполагает деление сети на подсети, что позволяет более эффективно и организованно управлять интернет-трафиком. Подсети используются, чтобы уменьшить размер широковещательных доменов и управлять маршрутизацией.

Когда вы разрабатываете сеть, вам необходимо разделить IP-адреса на две части: часть сети и часть хоста. Для этого используется маска подсети. Маска подсети позволяет определить, какая часть IP-адреса относится к сети и какая — к хосту. Например, маска подсети 255.255.255.0 указывает, что первые три октета (24 бита) используются для идентификации сети, а последний октет (8 бит) — для идентификации хостов в этой сети.

Пример

Рассмотрим сеть с адресом 192.168.1.0/24. Это указание означает, что первые 24 бита адреса используются для идентификации сети, оставляя 8 бит для хостов. Подсеть с маской /24 позволяет иметь 256 адресов, из которых первый (192.168.1.0) предназначен для идентификатора сети, а последний (192.168.1.255) — для широковещательной рассылки. Таким образом, доступно 254 адреса для хостов (192.168.1.1 – 192.168.1.254).

Если нам нужно создать четыре подсети с исходным диапазоном адресов, мы должны добавить бит к маске подсети. Примем маску /26, которая представляет сеть как 255.255.255.192. Это позволит нам иметь:

  • 192.168.1.0/26: Диапазон от 192.168.1.1 до 192.168.1.62 (сетевая часть – 192.168.1.0)
  • 192.168.1.64/26: Диапазон от 192.168.1.65 до 192.168.1.126 (сетевая часть – 192.168.1.64)
  • 192.168.1.128/26: Диапазон от 192.168.1.129 до 192.168.1.190 (сетевая часть – 192.168.1.128)
  • 192.168.1.192/26: Диапазон от 192.168.1.193 до 192.168.1.254 (сетевая часть – 192.168.1.192)

Каждая из этих подсетей может иметь до 62 хостов.

Применение

Использование подсетей позволяет управлять доступом и трафиком внутри локальной сети. Предположим, у вас есть организация с 97 компьютерами пользователей, 12 серверами и 9 коммутаторами. Вы можете организовать их в три подсети:

  1. Подсеть клиентов: 192.168.40.0/25 для 127 пользовательских устройств.
  2. Подсеть серверов: 192.168.40.128/26 для 32 серверов.
  3. Подсеть сетевого оборудования: 192.168.40.192/26 для коммутаторов.

Такое разделение позволяет вам изолировать устройства друг от друга, управлять безопасностью, а также оптимизировать маршрутизацию и уменьшить нагрузку на сеть из-за широковещательных пакетов.

Перевод значений между десятичной и двоичной системами

Понимание работы масок подсетей требует представления IP-адресов и масок в двоичной форме. Например, адрес 192.168.1.1 в двоичном виде будет:

  • 192: 11000000
  • 168: 10101000
  • 1: 00000001

Маска подсети 255.255.255.192 (или /26) представляется как:

  • 255: 11111111
  • 255: 11111111
  • 255: 11111111
  • 192: 11000000

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

Резюме

Подсети IPv4 организуют большие сети в более управляемые сегменты, улучшая производительность и безопасность. Маска подсети и CIDR-нотация предоставляют полезные инструменты для этого управления. Знание бинарной математики, сетевого адресного пространства и принципов маршрутизации является ключевым для проектирования эффективных сетевых инфраструктур.

Оцените материал
Добавить комментарий

Капча загружается...