У TOOGAM есть отличный ответ на этот вопрос.
Тем не менее, я добавлю два своих цента, вот как я упростил это, чтобы обернуть свои мысли вокруг подсетей:
Посмотрите на IP-адреса в двоичном виде. Каждый сегмент IP-адреса состоит из 8 битов или октета, что означает, что у вас есть рабочий диапазон 0-255, потому что это диапазон чисел, которые могут представлять 8 бит. Вот пара примеров:
0.0.0.0 is 0000 0000.0000 0000.0000 0000.0000 0000
а также
192.168.1.0 is 1100 0000.1010 1000.0000 0001.0000 0000
Вы знаете, что 192.168.1.0 - это адрес класса C, верно? В нотации CIDR это означает, что это сеть /24, а маска 255.255.255.0. Что это значит? Давайте снова посмотрим на двоичный файл - маска сети в двоичном коде выглядит следующим образом:
1111 1111.1111 1111.1111 1111.0000 0000
Все 1 являются битами фактического адреса, которые используются для идентификации сети, в то время как все 0 используются для идентификации конкретного хоста в сети. /24 означает, что 24 бита используются для идентификации сети, продолжения и их подсчета.
Обратите внимание, что каждая сеть имеет сетевое имя (которое является ПЕРВЫМ адресом сети, это также номер вашей подсети) и широковещательный адрес (который является последним адресом сети). Эти два адреса зарезервированы, вы не можете использовать их для хостов.
Допустим, мы хотим разделить 192.168.1.0 на три подсети. Мы не можем! Зачем? Давайте решим это. Если мы заимствуем один бит, мы можем иметь только две подсети, потому что один бит может представлять только числа 0-1.
Вот что я имею в виду - если вы хотите заимствовать один бит, то маска подсети становится
255.255.255.128
который в двоичном виде
1111 1111.1111 1111.1111 1111.1000 0000
^This is your borrowed bit right here
Итак, теперь у вас есть сеть /25. Вы используете 25 бит для представления ваших сетей, а оставшиеся 7 бит для идентификации ваших хостов. (Примечание: при выполнении подсетевых вычислений помогает перестать думать о точках в IP-адресе и просто иметь дело с двоичным файлом. Вы поймете, что я имею в виду позже.)
Это дает только две подсети,
This part tells you which network it is!
vvvv vvvv vvvv vvvv vvvv vvvv v
192.168.1.0/25 1100 0000.1010 1000.0000 0001.0000 0000
^^^ ^^^^
This part tells you which host it is!
а также
This part tells you which network it is!
vvvv vvvv vvvv vvvv vvvv vvvv v
192.168.1.128/25 1100 0000.1010 1000.0000 0001.1000 0000
^^^ ^^^^
This part tells you which host it is!
Остальные 7 бит зарезервированы для идентификации ваших хостов, поэтому вы не можете их использовать. Вместо этого вы должны заимствовать два бита, которые могут представлять число 0-3. Нравится вам это или нет, если вы хотите три подсети, вы должны разделить сеть как минимум на четыре подсети.
Итак, теперь у вас есть сеть /26 с этими подсетями:
192.168.1.0/26 1100 0000.1010 1000.0000 0001.0000 0000
192.168.1.64/26 1100 0000.1010 1000.0000 0001.0100 0000
192.168.1.128/26 1100 0000.1010 1000.0000 0001.1000 0000
192.168.1.192/26 1100 0000.1010 1000.0000 0001.1100 0000
^^
Look at these two bits! Watch how they go from 0 to 3 in binary.
Чтобы получить третью сеть, все, что вам нужно сделать, это посмотреть на ваши заимствованные биты и сделать 2 или 10 в двоичном виде. Почему 2? Потому что мы считаем от 0, а не от 1. По порядку у вас есть «0, 1, 2, 3», поэтому третья сеть - "2".
Вы просто вбиваете эти 10 в заимствованные биты, и вы можете получить третью сеть. Например, скажем, у меня была странная сеть, как
10.10.254.0/23 0000 1010.0000 1010.1111 1110.0000 0000
и мне нужно было разделить его на три подсети и найти третью. Другими словами, мне нужно сделать это в сети /25, потому что мне нужно как минимум два заимствованных бита. Так что теперь у меня есть
10.10.254.0/25 0000 1010.0000 1010.1111 1110.0000 0000
10.10.254.128/25 0000 1010.0000 1010.1111 1110.1000 0000
10.10.255.0/25 0000 1010.0000 1010.1111 1111.0000 0000
10.10.255.128/25 0000 1010.0000 1010.1111 1111.1000 0000
Your borrowed bits are here ^ ^
Это супер сбивает с толку, если вы посмотрите на десятичные IP-адреса, не так ли? Это то, что я имел в виду ранее, когда говорил, что нужно работать в двоичном формате и игнорировать точки в IP-адресе при выполнении подсетевых вычислений.
Чтобы получить широковещательный адрес, просто заполните "хост" часть вашего адреса 1с. Например, широковещательный адрес 192.168.1.128/26
Remember, this is the "host" part of your address, the first
26 bits represent the network
vv vvvv
192.168.1.191/26 1100 0000.1010 1000.0000 0001.1011 1111
See how the host portion is filled with 1s? ^^ ^^^^
Аналогично, чтобы получить полезный диапазон, просто начните с того, что поставьте 1 в последнем месте имени сети, чтобы получить первый пригодный для использования адрес, затем заполните часть "хоста" 1-ыми и поставьте 0 в последнем месте имени сети. чтобы получить последний пригодный для использования адрес.
Remember, this is the "host" part of your address, the first
26 bits represent the network
vv vvvv
1100 0000.1010 1000.0000 0001.1000 0001 192.168.1.129/26
First address: put a 1 here ^
1100 0000.1010 1000.0000 0001.1011 1110 192.168.1.190/26
^
Last address: fill the host part with 1s but put a 0 here
Конечно, в конце концов вы должны научиться делать это, как объяснил TOOGAM, но это может быть полезно, если вам нужно визуализировать подсети.