Сегодня мы поговорим о том, как правильно рассчитать IP-адрес по маске и делать это будем исключительно руками без всяких калькуляторов.
Начнем с просто примера: 192.168.1.100 с маской 255.255.255.0 или /24
Прежде всего скажем, не обращайте никакого внимания на десятичные цифры, они тут нужны исключительно для удобства восприятия. Вся магия происходит на двоичном уровне. Хотя на самом деле никакой магии там нет, обычная двоичная математика.
IP адрес и маска состоят из 4 октетов, каждый из которых нам нужно перевести в двоичный вид. Для этого сделаем такую табличку:
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1
Теперь берем первый октет, проверяем, помещается ли первое число 128 в 192? Помещается, ставим 1. Затем вычитаем из 192 число 128, получаем 64. Проверяем со вторым числом, помещается, снова ставим 1 и вычитаем из остатка 64.
У нас остался ноль, в который не помещаются остальные числа, там проставляем ноли.
В итоге адрес 192.168.1.100 мы запишем как
11000000 10101000 00000001 01100100
Теперь маска, также переводим ее в двоичный вид. Но если с 255.255.255.0 все понятно, то как понимать /24? А просто, 24 обозначает что маска содержит 24 единицы, т.е. вам даже не нужно ничего переводить:
/24 = 255.255.255.0 = 11111111 11111111 11111111 00000000
А теперь начинается настоящая двоичная магия, записываем адрес и маску друг под другом:
11000000 10101000 00000001 01100100
11111111 11111111 11111111 00000000
Те части адреса, которые покрываются маской являются номером (префиксом) сети, а те, которые не попадают в маску – номером узла.
Таким образом у нас адрес сети (все что не попадает под маску меняем нолями):
11000000 10101000 00000001 00000000
Что соответствует 192.168.1.0
Минимальным адресом сети будет:
11000000 10101000 00000001 00000001 = 192.168.1.1
Максимальным:
11000000 10101000 00000001 11111110 = 192.168.1.254
А последний доступный адрес в сети является широковещательным:
11000000 10101000 00000001 11111111 = 192.168.1.255
Теперь поменяем маску на /23 или 255.255.254.0 и посмотрим, что изменится:
11000000 10101000 00000001 01100100
11111111 11111111 11111110 00000000
Адрес сети у нас та часть, которая покрывается маской, остальное заменяем нулями:
11000000 10101000 00000000 00000000 = 192.168.0.0
Минимальный адрес:
11000000 10101000 00000000 00000001 = 192.168.0.1
Максимальный адрес:
11000000 10101000 00000001 11111110 = 192.168.1.254
Широковещательный адрес:
11000000 10101000 00000001 11111111 = 192.168.1.255
А теперь вернемся к примеру из пятничного вопроса:
5.6.7.0/23
00000101 00000110 00000111 00000000
11111111 11111111 11111110 00000000
Адрес сети:
00000101 00000110 00000110 00000000 = 5.6.6.0
Минимальный адрес:
00000101 00000110 00000110 00000001 = 5.6.6.1
Максимальный адрес:
00000101 00000110 00000111 11111110 = 5.6.7.254
Широковещательный адрес:
00000101 00000110 00000111 11111111 = 5.6.7.255
Таким образом в результате таких вот магических манипуляций мы выяснили, что 5.6.7.0/23 является адресом узла сети.
Адресом сети с такой маской он не может быть ни при каком раскладе, так как ее просто не может существовать физически.
Почему? Расписываем в двоичном виде адрес и маску и понимаем, что сети с адресами 5.6.6.0/23 и 5.6.8.0/23 существовать могут, а вот сеть с адресом 5.6.7.0/23 – нет.
