Рассчитать маску для диапазона адресов - PullRequest
0 голосов
/ 15 июня 2019

У меня есть первый и последний адреса подсети (например, 3.0.0.0 и 3.1.255.255). Какой алгоритм позволит мне рассчитать длину маски этой подсети? Пример:

3.0.0.0-3.1.255.255  

По какому алгоритму вы можете просто рассчитать длину маски для этого диапазона адресов?

1 Ответ

0 голосов
/ 16 июня 2019

Самая длинная маска подсети - это самая длинная последовательность битов префикса, которые разделяют все адреса. Итак:

  1. преобразовать первый и последний IP-адреса в целые числа
  2. считать одинаковые биты, начиная с HSB - это длина маски

Адреса IPv4 на самом деле являются 32-разрядными целыми числами без знака - точечная запись предназначена только для нас, людей.

Шаг 2 может быть выполнен с помощью exclusive-или с обоими адресами, в результате чего все идентичные биты равны 0. Затем сдвиг вправо, пока результат не станет нулевым. Длина маски 32- (количество смен).

В вашем примере:

3.0.0.0     = 00000011 00000000 00000000 00000000
3.1.255.255 = 00000011 00000001 11111111 11111111
XOR         = 00000000 00000001 11111111 11111111
turns 0 after 17 right shifts => length is 15
...