Вычисление диапазона IP-адресов из маски подсети

Скажем, у меня есть подсеть 255.255.255.242, и у меня есть известный IP-адрес в этой подсети 192.168.1.101.

Теперь, когда я вычисляю диапазон IP-адресов, выполните следующие действия:

В маске подсети найдите первый октет, который не является 255. В моем примере это 4-й октет и его 242. Итак, возьмите 256 и вычтите 242, что дает нам 14. Итак, теперь мы знаем, что эти сети, сети 192.168.1.x, все имеют диапазон 14. Так что просто начните перечислять их...

192.168.1.0
192.168.1.14
192.168.1.28
....42
....56
....70
....84
....98
....112

Здесь мы можем остановиться. Мой адрес 192.168.1.101 попадает в сеть .98..98 охватывает все IP-адреса от 192.168.1.98 до 192.168.1.111, потому что мы знаем, что 192.168.1.112 запускает следующую сеть.

Я хочу подтвердить, является ли это правильным и самым простым процессом для этого.

Ответ 1

Маска сети представляет собой серию из 1 бита. Биты должны быть последовательными без 0 пробелов. Все, что использует 1 бит, является частью сети, все остальное допустимо для назначения хоста в этой сети. A 255.255.255.224 имеет 27 "1" битов, что означает, что он /27 сети.

Чтобы вычислить это право, вам нужно преобразовать IP-адреса в числовое представление. Например, 255.255.255.224 - 11111111 11111111 11111111 11100000, что составляет 4294967264. 192.168.1.101 - 3232235877 (11000000 10101000 00000001 01100101).

Если вы берете IP и побитовое И это с сетевой маской, которая дает вам сетевой адрес. Это нижний край диапазона:

11111111 11111111 11111111 11100000  (mask)
11000000 10101000 00000001 01100101  (ip)
-----------------------------------
11000000 10101000 00000001 01100000  = 192.168.1.96  (network address)

Дополнение (побитовое НЕ) маски дает вам размер диапазона:

00000000 00000000 00000000 00011111  = 31

Таким образом, диапазон для этого IP-адреса находится между 192.168.1.96 - 192.168.1.127. (127 = 96 + 31)

Ответ 2

Спасибо вам обоим Джо и dig_123, но ответ Джо мог быть прояснен с помощью подстроки /28 из заявленной цели, которая была бы ближе к его примеру и упала между 92-112.

Итак, Джо, если я получу вашу точку зрения, вы говорите, что вы берете подсети с октетом; определить значение бита приращения и добавить его к значению подсети в октете SN, это должно дать диапазон и предоставить значения для адреса сети, первого хоста, последнего хоста и широковещательных адресов. Это верно? т.е. в моем примере 4-й октет будет 240, а приращение будет 16. Так как значение в 4-м октете равно 96, оно попадает в вычисленный диапазон для 16-битового приращения, на самом деле оно находится между 96 и 112, что один из 16-битных диапазонов, поэтому мы можем заключить, что наш сетевой адрес для этого примера:

0-15
15-31
32-47
48-63
64-79
80-95
96-111
112-127
128
NW 192.168.1.96 /28
1st 192.168.1.97 /28
Last 192.168.1.110 /28
Bcast 192.168.1.111 /28

Ответ 3

Чтобы добавить что-то в ответ Джо: если вы хотите делать операции более программно (предполагает знания по побитовым операторам).

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

Number from mask: 224
Number from IP:   101

Используя, например, python или вашу любимую программу калькулятора:

  • Start address byte: 224 & 101 = 96
  • End address byte: (~224 & 255) | 96 = 127

(~224 & 255) просто устанавливает один бит, который не был одним из 244 (то есть, последние 5 бит); OR'ing результата с помощью 96 просто копирует первые 3 бита с первого адреса.

Итак, результат: ожидаемый: 192.168.1. 96 - 192.168.1. 127.


Если маска заканчивается до последнего числа, существует очень похожая процедура; давайте сделаем пример:

В качестве маски используйте 255. 224.0.0 и тот же IP-адрес (192. 168.1.101).

Снова остается только один номер, который теперь находится во второй позиции: 168.

  • Start address byte: 224 & 168 = 160
  • End address byte: (~224 & 255) | 160 = 191

Теперь число слева (первая позиция) остается неизменным (192), а остальные числа в правом диапазоне от 0 до 255 (в зависимости от того, что они задают, оно также может быть от 1 до 254).

Таким образом, решение будет следующим: 192. 160.0.0 - 192. 191.255.255