Практикум: преобразование масок, вычисление адреса сети и broadcast, подсчёт узлов, простой и сложный сабнетинг, агрегация.
Сколько адресов доступно для назначения узлам в сети с маской /24?
Какая маска традиционно используется для соединения точка-точка между двумя маршрутизаторами?
При сложном сабнетинге, в каком порядке следует выделять подсети?
При каком условии возможна агрегация нескольких подсетей в один маршрут?
Сколько рабочих адресов для узлов даёт маска /30?
Какой адрес сети у хоста 192.168.10.67/26?
Если вы собираетесь сдавать сертификационные экзамены, то решать задачи на IP-адресацию вам, конечно, будет нужно.
В реальном мире часто можно встретить точку зрения, что решать в уме вопросы, связанные с IP-адресацией, с нахождением адреса сети, с нахождением broadcast-адреса не нужно, потому что есть калькуляторы. И если вдруг такая задача возникнет, всегда можно достать калькулятор и решить её.
Точка зрения имеет право на существование, потому что в реальности люди, которые хорошо решают задачи в уме, как правило, по работе связаны с решением таких задач. А люди, которые не связаны по работе, им эту задачу надо решать крайне редко, и действительно на калькуляторе может быть проще.
Так же, как в случае с математикой и арифметикой, обоснование достаточно простое: если вы хотите знать и понимать, как работает этот механизм, вы должны уметь решать задачи на него. Если вам это нужно раз в год и вы не чувствуете необходимости дальше развиваться, то можно, в принципе, решать всё на калькуляторах.
Протокол IP — базовый протокол. Многие технологии, которые дальше изучаются в сетях, основаны на протоколе IP. Они являются костылями для протокола IP, его продолжением, логическим развитием. И для того, чтобы понимать, как они работают, вам нужно будет базовые задачи, которые ставит перед вами протокол IP, уметь решать спинным мозгом.
Основных задач не так много:
На сертификационном экзамене пользоваться калькулятором нельзя. Там будет только простой примитивный калькулятор, который умеет складывать и вычитать десятичные числа. В двоичной системе не умеет. Но при подготовке к экзамену и в реальном мире вы можете и, наверное, даже должны пользоваться калькулятором, особенно специализированными subnet-калькуляторами. В Google можно набрать "subnet calculator" и получить большой список IP-калькуляторов.
Самый простой способ: записываем маску в двоичном виде, считаем количество единиц.
Пример: маска 255.255.248.0
Каждый октет записываем в двоичном виде:
255 = 11111111 (8 единиц)255 = 11111111 (8 единиц)248 = 11111000 (5 единиц)0 = 00000000 (0 единиц)Итого: 8 + 8 + 5 + 0 = 21 единица, значит это маска /21.
Можно схитрить и не переводить 255 и 0 в двоичный вид. Достаточно перевести только число 248 и получить 5 единиц, а к этому прибавить 16 единиц (по 8 от каждого октета 255).
Берём число 21 и рассуждаем:
11111000 = 248255.255.248.0Ещё пример: маска /25
10000000 = 128255.255.255.128Тренироваться можно самостоятельно: придумываете произвольную маску в одном формате, преобразуете в другой, а потом проверяете себя на subnet-калькуляторе.
В десятичной записи маски октет может принимать только следующие значения:
| Двоичное значение | Десятичное | Кол-во единиц |
|---|---|---|
00000000 |
0 | 0 |
10000000 |
128 | 1 |
11000000 |
192 | 2 |
11100000 |
224 | 3 |
11110000 |
240 | 4 |
11111000 |
248 | 5 |
11111100 |
252 | 6 |
11111110 |
254 | 7 |
11111111 |
255 | 8 |
Структура маски всегда такая:
Три частых частных случая (граница проходит ровно по границе октетов):
255.0.0.0255.255.0.0255.255.255.0Каждый из "промежуточных" октетов может находиться в одной из четырёх позиций:
| Октет | 1-й октет | 2-й октет | 3-й октет | 4-й октет |
|---|---|---|---|---|
| 128 (1 ед.) | /1 | /9 | /17 | /25 |
| 192 (2 ед.) | /2 | /10 | /18 | /26 |
| 224 (3 ед.) | /3 | /11 | /19 | /27 |
| 240 (4 ед.) | /4 | /12 | /20 | /28 |
| 248 (5 ед.) | /5 | /13 | /21 | /29 |
| 252 (6 ед.) | /6 | /14 | /22 | /30 |
| 254 (7 ед.) | /7 | /15 | /23 | /31 |
Эту шпаргалку можно быстро нарисовать на экзамене. С собой приносить нельзя, а нарисовать на месте -- легко, если понимаете, как устроена маска.
Пример использования: нужна десятичная запись /29 маски. Находим 29 в таблице -- это четвёртый октет со значением 248. Значит три первых октета 255, а четвёртый -- 248: 255.255.255.248.
Обратный пример: дана маска 255.255.224.0. Октет 224 стоит в третьей позиции -- значит это /19 маска.
На экзамене задачи на IP-адресацию предполагается решать очень быстро. Если вы на них закопаетесь, то на лабораторную работу (которая оценивается как обычный вопрос, но требует больше времени) времени не останется.
Например, на цисковских экзаменах есть порядка 35 вопросов, каждый оценивается примерно в 20 баллов. Лабораторная работа стоит столько же, сколько обычный вопрос, но времени на неё нужно больше. Если быстро разделались с задачами на IP-адресацию, лабу будете делать комфортно.
Сеть -- это совокупность IP-адресов, у которых левые биты (Network ID) зафиксированы, а правые биты (Host ID) пробегают все возможные значения. Адрес сети -- это IP-адрес, у которого все биты Host ID обнулены. Широковещательный адрес -- все биты Host ID выставлены в единицу.
Маска /26 означает: 24 бита Network ID в первых трёх октетах + 2 бита в четвёртом октете.
Первые три октета остаются как есть: 192.168.49.
Переводим четвёртый октет в двоичный вид:
231 = 128 + 64 + 32 + 4 + 2 + 1 = 11100111
Из 8 бит четвёртого октета первые 2 относятся к Network ID (выделены):
[11] 100111
^^ ^^^^^^
NID HID
Обнуляем биты Host ID:
[11] 000000 = 11000000 = 192
Ответ: адрес сети -- 192.168.49.192/26
Маска /23: 16 бит в первых двух октетах + 7 бит в третьем октете.
Первые два октета не меняются: 192.168.
Переводим третий октет (30) в двоичный:
30 = 16 + 8 + 4 + 2 = 00011110
Первые 7 бит -- Network ID, последний бит -- Host ID:
[0001111] 0
^^^^^^^ ^
NID HID
Выставляем бит Host ID в единицу:
[0001111] 1 = 00011111 = 31
Четвёртый октет целиком относится к Host ID, выставляем все биты в единицу: 255.
Ответ: широковещательный адрес -- 192.168.31.255
Это значит, что машина с адресом 192.168.30.117 и маской 255.255.254.0 будет слушать пакеты и на свой собственный IP, и на адрес 192.168.31.255 (широковещательный адрес своей сети). Этот адрес нигде явно не прописывается -- машина сама его вычисляет.
Найдите адреса сетей и широковещательные адреса для произвольных IP-адресов с произвольными масками. Проверяйте себя IP-калькулятором.
Внимание: на экзаменах часто используются IP-адреса, похожие на частные, но ими не являющиеся. Например,
172.168.x.x(публичный) очень похож на172.16.x.x(частный), а192.16.x.x(публичный) похож на192.168.x.x(частный). Будьте внимательны!
Это один из самых каверзных вопросов. Маска /1 означает, что только один бит относится к Network ID.
Число 1 в двоичном виде: 00000001. Старший бит (Network ID) равен 0. Обнуляем все остальные биты:
[0] 0000000 = 00000000 = 0
Все остальные три октета тоже обнуляются.
Адрес сети: 0.0.0.0/1
Широковещательный адрес:
[0] 1111111 = 01111111 = 127
Остальные октеты -- все единицы.
Широковещательный адрес: 127.255.255.255
В реальном мире маску /1 не используют, потому что она означает, что в одной канальной среде находится половина всех IP-адресов (~2 миллиарда). Но математика работает корректно.
Если вы знаете маску сети, вы можете подсчитать количество IP-адресов:
32 - длина_маски2^(бит Host ID)2^(бит Host ID) - 2Два адреса являются служебными и не могут назначаться узлам:
При маске /31 в Host ID всего 1 бит, то есть только 2 адреса. Если оба служебные, назначать нечего. Существует отдельный RFC, который разрешает использовать оба адреса в сетях /31 для соединений точка-точка. Поддержка /31 зависит от оборудования.
Не забывайте, что IP-адреса нужны:
Если нужна сеть на 30 рабочих станций, маска /27 (30 адресов для узлов) впритык -- не хватит места для маршрутизатора и периферии. Потребуется /26 (62 адреса для узлов).
Для соединения двух узлов напрямую (линк точка-точка):
Простой subnetting -- разделение сети на подсети одинакового размера за один проход.
ceil(log2(N)) битСколько бит под Host ID?
Сколько бит заимствуем?
Четвёртый октет адреса (128):
128 = 10000000
^ ^^ ^^^^^
NID SUB HID
Перебираем 2 заимствованных бита (4 варианта):
| Subnet ID | Двоичное | 4-й октет | Адрес подсети |
|---|---|---|---|
| 00 | 1 00 00000 |
128 | 192.168.0.128/27 |
| 01 | 1 01 00000 |
160 | 192.168.0.160/27 |
| 10 | 1 10 00000 |
192 | 192.168.0.192/27 |
| 11 | 1 11 00000 |
224 | 192.168.0.224/27 |
Из исходных 128 адресов (/25) получились 4 подсети по 32 адреса (/27).
Третий октет (224):
224 = 11100000
^^^^ ^^^^
NID HID (4 бита)
Заимствуем все 4 бита из третьего октета + 1 бит из четвёртого = 5 бит.
Результат: 32 подсети по /25 маске:
Как найти N-ю подсеть по счёту? Вписать в заимствованные биты число (N - 1).
Например, 7-я подсеть: число 6 = 00110 в 5 бит.
Третий октет: 1110 0011 0 ... = 227
Четвёртый октет: 0 0000000 = 0
Адрес: 172.31.227.0/25
Для 179-й подсети вписываем число 178 (нумерация с нуля):
178 = 10110010
В 10 бит: 00 10110010
Разбиваем на октеты:
00101100 = 4410 000000 = 128Ответ: 10.44.128.0/18
Маска /29: Host ID = 3 бита, всего 8 адресов.
Для линка точка-точка нужны 2 адреса для узлов.
Стандартный подход (/30): каждый линк требует 4 адреса (2 служебных + 2 рабочих). Из /29 получается только 2 сети /30. Трёх линков не хватит -- задача не решается в рамках стандартного IP.
С использованием /31: если оборудование поддерживает маски /31, можно получить 4 подсети:
Три линка получают адреса, ещё одна подсеть остаётся в резерве.
Условие: в каждом филиале не более 50 узлов, каждому нужен публичный адрес из этой сети.
Рассуждение:
Сеть 180.199.0.0 -- класс B, классовая маска /16. Из /16 нарезаем /26:
Сложный subnetting -- это не "сложный" в смысле трудности, а многоступенчатый: сеть режется в несколько этапов на подсети разного размера.
Обратная задача к subnetting: несколько сетей нужно объединить в одну большую.
Фактически это следствие задачи на разрезание -- нужно угадать, какую сеть изначально резали на части, и проверить это.
Не любые сети можно агрегировать. Требования: