6.9. Собирать информацию используя IP адрес и маску подсети

[+]6.9.1. Определение адреса подсети по маске
[+]6.9.2. Вычисление диапазона адресов IP и широковещательного адреса

Описание:  Зная IP адрес и маску подсети кандидат должен уметь определить адрес подсети, широковещательный адрес, адреса хостов возможные в данной подсети.

Комментарий

Для начала ещё раз сошлёмся на работу утилиты ipcalc:

$ ipcalc 192.168.0.1/26
Address:   192.168.0.1          11000000.10101000.00000000.00 000001
Netmask:   255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard:  0.0.0.63             00000000.00000000.00000000.00 111111
=>
Network:   192.168.0.0/26       11000000.10101000.00000000.00 000000
HostMin:   192.168.0.1          11000000.10101000.00000000.00 000001
HostMax:   192.168.0.62         11000000.10101000.00000000.00 111110
Broadcast: 192.168.0.63         11000000.10101000.00000000.00 111111
Hosts/Net: 62                    Class C, Private Internet
        

6.9.1. Определение адреса подсети по маске

Эта тема обсуждалась в Раздел 6.8.1, «Что такое маска подсети». Для определения адреса подсети надо побитово сложить маску подсети с IP-адресом:

192.168.0.1     = 11000000.10101000.00000000.00000001
255.255.255.192 = 11111111.11111111.11111111.11000000
сумма           = 11000000.10101000.00000000.00000000 = 192.168.0.0
        

Переводу десятичных чисел в двоичные был посвящён Раздел 6.8.3, «Перевод десятичных чисел в двоичные».

Таким образом, мы вручную вычислили строку, которая в листинге команды ipcalc начиналась со слова Network.

6.9.2. Вычисление диапазона адресов IP и широковещательного адреса

Возьмём адрес подсети и заполним единицами те поля, которым в маске подсети соответствуют нули:

192.168.0.0     = 11000000.10101000.00000000.00000000
255.255.255.192 = 11111111.11111111.11111111.11000000
                  11000000.10101000.00000000.00111111 = 192.168.0.63
        
[Замечание]Замечание
Для того, чтобы удобно в уме перевести число 111111 в десятичную систему, не надо складывать 20+21+22+23+24+25. Это тоже самое, что 26-1.

Таким образом, мы понимаем, что в подсети 192.168.0.0/26 возможны адреса от 192.168.0.0 до 192.168.0.63. При этом два адреса уйдут на адрес сети 192.168.0.0 и широковещательный адрес.

Какой адрес будет широковещательным? Быстрый ответ на этот вопрос — 192.168.0.63. Именно его мы видим в листинге команды ipcalc в строке озаглавленной Broadcast. Именно поэтому мы видим в этом листинге диапазон допустимых адресов машин от 192.168.0.1 до 192.168.0.62. Да, в подавляющем большинстве случаев это так, но тут есть одно лукавство:

Строго говоря, такого явления как широковещательный адрес IP вообще не существует. Широковещательная передача осуществляется на канальном уровне модели OSI. Широковещательный пакет, это пакет, у которого указан MAC-адрес назначения ff:ff:ff:ff:ff:ff. Т.е. аппаратный адрес назначения состоит только из единиц. Только такой пакет будет доставлен коммутаторами (работающими на канальном уровне OSI) ко всем сетевым интерфейсам.

Что же до широковещательного адреса IP, то это такой адрес, которому ваш сетевой интерфейс при маршрутизации (т.е. процессе выбора MAC-адреса назначения) поставит в соответствие широковещательный MAC-адрес. Какой именно IP будет соответствовать широковещательной передаче, это ваше личное дело. В подавляющем большинстве случаев выбирается последний адрес из доступного диапазона, т.е. в нашем случае 192.168.0.63, но это не догма.

[Замечание]Замечание
Конечно, существуют операционные системы, которые не в состоянии назначить нестандартный широковещательный IP, но BSD (да и Linux) не из их числа.