Про сетевую маску
Маска может состоять от 1 до 32 включенных битов.
Для того чтобы понять, что такое маска вообще, необходимо представить её в виде 4 секций по 8 бит в каждой:
11111111.11111111.11100000.10000000
Эта запись означает, что в маске 19 включенных битов (единиц), и если перевести каждую секцию в десятичную систему, получим 255.255.254.0
Тем самым, запись после слеша, типа 192.168.1.0/24, не что иное, как количество этих самых включенных битов в маске.
Подробную информацию про маску подсети смотрим в Википедии.
Алгоритм расчета диапазона ип адресов на примере 12.34.56.78/20
1. Вычисляем инверсию маски (cisco wilcard - используется в списках доступа (ACL) сетевого оборудования Cisco)Из 255.255.255.255 нужно вычесть пооктетно (поточечно, переведя каждую секцию в двоичный код) данную маску:
11111111.11111111.11111111.11111111 (255.255.255.255)
-
11111111.11111111.11110000.00000000 (255.255.240.0 = 20)
=
00000000.00000000.00001111.11111111 (0.0.15.255)
2. Вычисляем последний адрес сети (broadcast)К данному IP адресу нужно пооктетно прибавить инверсию маски. К каждой секции ип адреса добавляем в начало недостающие нули. Для сложения используем метод ИЛИ (1+1=1; 1+0=1; 0+1=1; 0+0=0):
00001100.00100010.00111000.01001110 (12.34.56.78)
+
00000000.00000000.00001111.11111111 (0.0.15.255)
=
00001100.00100010.00111111.11111111 (12.34.63.255)
3. Вычисляем адрес сетиК данному IP адресу нужно пооктетно прибавить данную маску. Для сложения используем метод И (1+1=1; 1+0=0; 0+1=0; 0+0=0):
00001100.00100010.00111000.01001110 (12.34.56.78)
+
11111111.11111111.11110000.00000000 (255.255.240.0 = 20)
=
00001100.00100010.00110000.00000000 (12.34.48.0)
4. Вычисляем диапазон и количество хостов в сетиВычислять здесь особо нечего. Минимальный ип адрес равен адресу сети + 1, а максимальный = броадкаст - 1:
Min = 00001100.00100010.00110000.00000000 (12.34.48.1)
Max = 00001100.00100010.00111111.11111111 (12.34.63.254)
Количество хостов в сети = 2 ^ (32 - кол-во_бит_в_маске) - 2
Класс сети определяется ее первыми битами:
0 - class A
10 - Class B
110 - Class C
1110 - Class D
11110 - Class E
Итак, диапазон сети в нашем примере равен 12.34.48.0/20 (с 12.34.48.1 до 12.34.63.254)
Пример этого калькулятора в моем исполнении на PHP можно посмотреть по ссылке. Ниже можно скачать его исходный код.
Так же, я написал его на JavaScript - можно посмотреть здесь.
--
Другие IP кулькуляторы:
jodies.de/ipcalc
opennet.ru/ipcalc.shtml
www.ispreview.ru/ipcalc.html
Присоединенные файлы (вирусов нет):
|
Инверсная сиськина маска - она нужна только тогда, когда сиськи же и программишь. В IPCalc оно нафиг не надо.
Получают инверсную маску обычным NOT-ом над 32-битным представлением простой маски (хотя никто не мешает сделать NOT над каждым октетом маски, один фиг).
Адрес броадкаста - штука жестко в стандартах не прописанная. Для него используется как максимальный адрес диапазона, так и адрес самой сети - это зависит чисто от пожеланий админа при настройке сетевого интерфейса.
Вот пример типичной работы с сетевыми адресами на PHP:
<?php
$ip = array(1 => 192, 2 => 168, 3 => 1, 4 => 2);
$mask = array(1 => 255, 2 => 255, 3 => 255, 4 => 0);
$ipl32 = ($ip[1] << 24) + ($ip[2] << 16) + ($ip[3] << 8) + $ip[4];
$maskl32 = ($mask[1] << 24) + ($mask[2] << 16) + ($mask[3] << 8) + $mask[4];
$netl32 = $ipl32 & $maskl32;
$net[1] = ($netl32 >> 24) & 255;
$net[2] = ($netl32 >> 16) & 255;
$net[3] = ($netl32 >> 8) & 255;
$net[4] = $netl32 & 255;
echo("IP: ".$ip[1].".".$ip[2].".".$ip[3].".".$ip[4]."\n");
echo("Mask: ".$mask[1] . ".". $mask[2] . ".". $mask[3] . ".". $mask[4] . "\n");
echo("Calculated Net: ". $net[1] . ".". $net[2] . ".". $net[3] . ".". $net[4] . "\n");
?>