Практикум: расчёт подсетей, масок, широковещательных адресов, диапазонов хостов и VLSM-разбивка.
Как определить адрес сети по IP-адресу и маске подсети?
Как определить, находятся ли два хоста в одной подсети?
С какой подсети следует начинать при VLSM-разбивке?
Что такое «магическое число» при расчёте подсетей?
Как вычислить broadcast-адрес подсети?
Следующий модуль в курсе IC1 будет достаточно скучным для большинства из вас, но тем не менее необходимым, если вы хотите сдавать экзамен. Модуль будет посвящен задачкам. На экзамене будет очень много теоретических вопросов на тему того, что является адресом в Ethernet. И вам на выбор предлагают IP-адрес, MAC-адрес, DLCI-адрес или что-нибудь еще. Будут вопросы на тему того, сколько бит в IP-адресе, сколько бит в MAC-адресе. Но также достаточно много вопросов будет, назовем это, практических, на понимание того, как работает протокол IP. И соответственно там будут задачки на нахождение IP-адреса сети, на нахождение IP-адреса бродкаста. И эти задачи вы должны будете уметь решать. Можно выделить четыре основных класса задач, которые чаще всего встречаются на экзамене. И если вы научитесь решать эти задачи, то экзамен для вас должен пройти практически безболезненно.
Если вы научитесь их решать, то все, что связано с этими вычислениями, не будет отъедать у вас много времени, и экзамен пройдет легко и приятно. Поэтому я вам рекомендую, если вы хотите сдавать экзамен, эти задачки научиться решать тем, что называется спинным мозгом. Основные задачи, которые будут на экзамене встречаться, это преобразование формата маски IP-шника. Вам дают маску в одном формате, вы должны преобразовать ее в другой. Десятичную в префиксную или наоборот. Как вы понимаете, для этого нужна только шпаргалка, которую я вам давал. Она воспроизводится на экзамене за считанные десятки секунд, и она реально экономит время. Поэтому я рекомендую вам разобраться с тем, как устроена эта шпаргалка, научиться ее перерисовывать. И на экзамене вы, восстановив ее по памяти, можете очень много времени сэкономить. Время на экзамене — довольно ценный ресурс. Дальше. Вторая задача — вам дают IP-шник с маской, и вам нужно найти IP-адрес самой сети.
Разновидность этой задачи — найти бродкаст. Там чистая двоичная математика, мы сейчас эти задачи научимся решать, и я думаю, что если вдруг вы почувствуете какую-то неуверенность в решении этой задачи, то я вам смогу дать тренажеры, и вы на этих тренажерах процесс решения этих задач сможете отточить до совершенства. Третья разновидность задачи — посчитать количество узлов в сети, которые вы можете адресовать. И четвертый тип задачи — это сабнетинг. Иногда бывает обратная задача — супернетинг, она все равно к сабнетингу так или иначе сводится. Вы не можете пользоваться на экзамене калькуляторами. Бывают такие штуки, которые позволяют вам все эти задачи решить за единицы секунд. Называются IP-калькуляторы. Вы открываете какой-нибудь сайт с таким калькулятором или запускаете приложение на телефоне, и оно вам все это считает. На экзамене вы не имеете права пользоваться такими калькуляторами,
поэтому у вас будет проверяться знание, что вы умеете все это делать вручную. В реальном мире, конечно же, вам никогда не придется это вручную делать, но если вы понимаете, как устроен протокол IP, то такие задачки покажут, что вы в этом разобрались, вы понимаете, как устроена IP-адресация, и вы нигде не ошибаетесь. Да, там придется дополнительно продемонстрировать навык устного счета и умение складывать числа в пределах двух сотен, но тем не менее, если у вас с арифметикой проблем нет, если вы понимаете, как устроен протокол IP, еще раз подчеркну, проблем здесь возникнуть не должно. Если же у вас проблемы с базовой арифметикой или вы не понимаете, как устроена IP-адресация, то такие задачи, конечно, будут вызывать проблемы. Моя задача здесь очень простая — научить вас считать все это дело. Дополнительно я вам дам набор калькуляторов,
которые вы можете использовать для решения подобных задач и потренироваться на досуге, самостоятельно составлять такие задачи и решать их для того, чтобы к экзамену этот навык отточить до совершенства. Основной навык, который вам потребуется на экзамене — это преобразование формата записи числа, из десятичной системы счисления быстро переводить числа в двоичную и наоборот. Этот навык у вас должен действительно быть отработан до автоматизма. У меня в жизни был случай, когда мы в университете проходили, надо было определитель матрицы считать. И наш преподаватель заставлял нас эти определители считать спинным мозгом. Он рисовал матрицу на доске, позволял на нее посмотреть десять секунд, а дальше говорил: отворачивайся от доски, ты на нее смотрел затылком, если так можно выразиться, и говорил: считай. И ты за эти десять секунд должен был запомнить матрицу
и дальше по памяти произнести вслух, какие вычисления нужно произвести для того, чтобы этот определитель посчитать. Это достаточно затратная операция по мозгу, но тем не менее ничего невозможного там не было. И после некоторой практики эти определители реально можно научиться считать спинным мозгом, когда ты смотришь спиной на эту матрицу. Тем не менее ты ее запомнил, она несложная, и ты этот определитель можешь посчитать. То же самое я буду от вас требовать и здесь. Я вам буду писать число, а вы это число будете преобразовывать в другую запись. На всякий случай, если вдруг вы в школе не проходили преобразование чисел из десятичных в двоичные и наоборот, хотя это вы должны уметь, и в школе по идее все должны были это проходить, рассказываю, как устроена и десятичная, и двоичная система счисления. Наша система счисления, которой мы все пользуемся, называется десятичной. Называется она так потому, что если мы записываем некое число,
например 185, мы все понимаем интуитивно, что это означает. Но на самом деле оно состоит из трех цифр. Это единица, восьмерка и пятерка. Десятичная система счисления, которой мы пользуемся, является позиционной, каждая цифра не просто обозначает нечто, она обозначает разные вещи в зависимости от того, где конкретно эта цифра стоит. И соответственно запись 185 и, например, 851 обозначают разные числа, потому что цифры-то одни и те же, но они стоят в разных местах, в разных позициях. И поэтому важно не только, какие цифры используются, но и в каком месте они стоят. Десятичная система счисления называется именно так, потому что каждая цифра обозначает некое количество предметов, но дополнительно позиция этой цифры обозначает дополнительный мультипликатор, на который надо умножить это количество предметов для того, чтобы в итоге все получилось. Запись 185 по факту означает: это единица, умноженная на 10 во второй степени,
плюс 8, умноженная на 10 в первой степени, плюс 5. Пятерка обозначает количество предметов, умноженное на 10 в нулевой степени, восьмерка обозначает количество предметов, умноженное на 10 в первой степени, и единица обозначает количество предметов, умноженное на 10 во второй степени. Это 100, это 80, и это 5. Поэтому, когда мы читаем 1, 8, 5, мы не читаем 1, 8 и 5, мы читаем 185. В двоичной системе счисления все абсолютно точно так же устроено. Только вместо десятки, возведенной в какую-то степень, у нас получаются двойки, тоже возведенные в определенную степень. И позиция определенного бита, определенной цифры, будет определять, в какую степень двойки нужно будет соответствующее число возвести. Если у нас есть некое число, записанное в двоичной системе счисления, допустим, 1, 1, 0, 0, 1, 0, 0, 1.
Какое-то совершенно произвольное число я записал. Что это за число в двоичной системе счисления? Это самая первая единица, умноженная на двойку в седьмой степени, плюс следующая единица, умноженная на двойку в шестой степени, плюс 0, умноженный на двойку в пятой степени, плюс 0, умноженный на двойку в четвертой степени, плюс 1, умноженная на двойку в третьей степени, плюс 0, умноженный на двойку во второй степени, плюс 0, умноженный на двойку в первой степени, плюс 1, умноженная на двойку в нулевой степени. Любое число в нулевой степени — это единица, поэтому я для красоты последнее умножение на двойку в нулевой степени сотру, потому что оно у меня не помещается на слайде, и меня это раздражает. Как бы там ни было. Мы просто записали все единицы и нолики, которые у нас есть,
в дополнение с множителями — двойка в определенной степени. И дальше, если вдруг мы хотим перевести число из двоичной системы в десятичную, мы просто должны будем сказать: единица, умноженная на двойку в седьмой степени — это число 128, плюс единица, умноженная на двойку в шестой степени — это число 64, плюс 0, умноженный на двойку в пятой степени. Двойка в пятой степени — 32, но когда мы на ноль умножаем, она внезапно превращается в ноль. Плюс 0, умноженный на двойку в четвертой степени — это 16, умноженная на ноль, опять обращается в ноль. Плюс единица, умноженная на двойку в третьей степени — восьмерка, плюс 0, умноженный на двойку во второй степени — четверка, но опять же превращается в 0, плюс 0, умноженный на двойку в первой степени — опять же 0, плюс единица. Это 128 плюс 64 плюс 8 плюс 1. У меня есть такое подозрение, что 128 плюс 64 будет 192, плюс 8 будет 200, плюс единица — это будет 201. Когда мы хотим указать, что у нас есть какое-то количество предметов
и мы записываем его в десятичной системе счисления, мы пользуемся десятичной нотацией и записываем число в виде комбинации цифр, каждая из которых принимает одно из десяти значений, от 0 до 9. В двоичной системе счисления мы пользуемся фактически тем же самым, но при этом используем только две цифры — 0 и 1, и этих цифр получается больше, потому что для записи одного и того же количества предметов нам потребуется больше цифр. Каждое число, которое у нас есть, некое количество предметов — у нас есть картина с яблоками, в ней сколько-то яблок. Это количество яблок вполне конкретное. Мы можем взять их и посчитать. И мы можем любое число разложить на сумму степеней двойки. Причем мы можем это сделать таким образом, чтобы у нас получилось всегда наиболее эффективное разложение.
Наиболее эффективное разложение всегда одинаковое. И смысл его заключается в следующем. Мы начинаем с самой старшей степени двойки, которая у нас есть. Например, есть число 222. Это число можно из десятичной системы перевести в двоичную систему, если вдруг мы это захотим сделать. Мы это число можем перевести ровно одним образом, наиболее эффективным. Алгоритм будет следующим. Найти такую степень двойки, которая не превосходит данное число, а дальше вычесть из того числа, которое мы хотим перевести, искомую степень двойки, получить какой-то остаток и дальше уже остаток раскладывать на степени двойки. Есть утверждение, что получится всегда один и тот же результат, и этот результат однозначно нам даст понять, как в двоичной системе счисления можно будет исходное число записать. Например, у нас есть число 185. Мы хотим это число разложить на степени двойки
и получить в итоге двоичную запись. Окей. Число 185. Это число, которое больше, чем 128, но меньше, чем 256. 256 — это 2 в восьмой степени, а 128 — это 2 в седьмой степени. Мы нашли ту самую степень двойки, которая не превосходит 185. Это 128 плюс какой-то еще остаток. Неважно, какой. Мы говорим: 185 — это 128 плюс что-то еще. А дальше надо посчитать, как это что-то еще раскладывается на степени двойки. Посчитать, конечно, не очень просто. 185 минус 128 — это и есть то самое что-то еще. Вычитаем, получаем 57. Дальше раскладываем 57 на сумму степеней двойки. Говорим: 57 — какая степень двойки должна быть, которая его не превосходит? 128 явно уже не подходит. 64, это 2 в шестой степени, тоже многовато, потому что оно больше, чем 57.
32 — это двойка в пятой степени. Мы 57 раскладываем на степени двойки, говорим: 32 — ближайшая степень двойки, которая не превосходит это число. И плюс еще какой-то остаток, который мы дальше будем раскладывать на степени двойки. Наше большое число 185 раскладывается на сумму 128 плюс 32 плюс еще какой-то остаток. Этот остаток будет 57 минус 32 — 25. Следующий шаг — раскладываем 25 на степени двойки. Опять же, 32 — много, 16 — это 2 в четвертой степени, в самый раз. Какой-то остаток плюс 16. Записываем, что 16 в нашу сумму входит и раскладываем все, что осталось. Девятку. Девятка — это что-то еще плюс восьмерка. 2 в третьей степени. Вот она, восьмерка. Дальше говорим: что осталось? 9 минус 8 – единица. Единица – это сама по себе двойка в нулевой степени. Мы разложили число 185
на сумму степеней двойки. Это 128 плюс 32 плюс 16 плюс 8 плюс 1. Вы можете взять и проверить, что действительно результат получается именно такой. 185 должно получиться. 128 плюс 32 – 160, плюс 16 – 176, плюс 8 – 184, плюс 1 – 185. Всё честно, действительно, мы разложили число 185 на сумму степеней двойки. Почему не может получиться какой-то другой результат? Потому что, если вдруг у вас будет какая-то другая степень двойки, например, внезапно вылезет 2 раза 16, то 2 раза по 16 превратится в 32. Поэтому никоим образом сюда ничего лишнего вклиниться не может. 32 – это уже другая степень двойки. Поэтому, если вдруг в какой-то момент выяснилось, что 32 изначально быть не должно, но по факту оно всё-таки там есть, значит, где-то что-то неправильно посчитали, неправильно сложили, неправильно вычли.
Если вы всё правильно делали, то это разложение у вас будет единственное. Если вы начинаете с самой большой степени двойки и дальше идёте вниз. Что такое 128? Это 2 в седьмой степени. Что такое 32? Это 2 в пятой степени. Что такое 16? 2 в четвёртой степени. Что такое 8? 2 в третьей степени. Что такое единица? Это 2 в нулевой степени. Соответственно, 2 в седьмой степени у нас в эту сумму входит. 2 в пятой степени входит, а 2 в шестой не входит. Фактически это эквивалентно тому, что 2 в шестой входит, но с нулевым мультипликатором. То же самое. 2 во второй степени тоже входит, но с нулевым мультипликатором. Мы говорим, что 2 во второй степени входит, но будучи умноженной на 0. И 2 в первой степени тоже входит, но будучи умноженной на 0. Таким образом, мы получаем некую сумму степеней двоек, всех степеней двоек, начиная с самой маленькой, с нулевой, и заканчивая некоторой самой большой, которая нас интересует. И напротив каждой степени двоек есть мультипликатор. Либо единичка, либо нолик.
И получается, что если мы хотим записать число 185 в десятичной записи, но записать его в двоичном виде, мы говорим: двойка в седьмой степени входит, двойка в шестой степени не входит, двойка в пятой входит, двойка в четвёртой входит, двойка в третьей входит, двойка во второй не входит, двойка в первой не входит, двойка в нулевой входит. Число 1, 0, 1, 1, 1, 0, 0, 1 в двоичной системе счисления – это и есть представление 185 в десятичной системе счисления. Это одно и то же число, просто записанное в двух разных нотациях. Оно обозначает одно и то же количество предметов. Ещё раз подчеркну, каким образом мы раскладываем числа. Если у нас есть десятичная запись числа, как мы из неё получаем двоичное? Мы находим степень двойки, которая не превосходит нужное нам значение, вычитаем из того числа, которое нас интересует, нужную степень двойки, при этом её запоминаем, и дальше то, что осталось, раскладываем на степени двойки уже отдельно. Потом все эти степени двойки мы выписываем в отдельную строчку,
и коэффициенты напротив каждой степени двойки выписываем в виде готового результата. Это и есть то, что мы ищем. Давайте сейчас в качестве самостоятельного упражнения я вам напишу какое-то совершенно рандомное число, а вы мне его разложите на степени двойки. И потом отдельную задачку: я вам напишу совершенно произвольное двоичное число и предложу его перевести в десятичный формат. Давайте число 111. Преобразуйте, пожалуйста, десятичное число 111 в двоичный вид. Так, запись немножко развалилась, но не страшно. Что у нас здесь должно получиться? Если число 111 десятичное мы пытаемся разложить на сумму степеней двойки, то мы делаем это по этому самому алгоритму. Первый шаг — найти степень двойки, которая не превосходит 111. И давайте я здесь выпишу. 2 в восьмой степени — это 256.
2 в седьмой степени — это 128. 2 в шестой степени — это 64. 2 в пятой степени — это 32. 2 в четвёртой степени — это 16. 2 в третьей степени — это 8. 2 во второй степени — это 4. 2 в первой степени — это, понятно, двойка. И 2 в нулевой степени — это единица. Соответственно, находим такую степень двойки, которая не превосходит 111. 256 много, 128 много, 64 в самый раз. Записываем 64. Дальше 111 минус 64 — это 47. Дальше надо 47 разложить на сумму степеней двойки. Соответственно, находим: 64 много, 32 нормально. 47 — это 32 плюс 15. Дальше 15 надо разложить на сумму степеней двойки. 16 много — 8.
Это 8 плюс 7. 7 тоже надо разложить на сумму степеней двойки. Но упростим ситуацию. Я сразу вижу, что это 4 плюс 2 плюс 1. Таким образом, наше 111 раскладывается как 64 плюс 32 плюс 8 плюс 4 плюс 2 плюс 1. Нигде я не ошибся. 64 плюс 32 — 96, плюс 8 — 104, плюс 4 — 108, плюс 2 — 110, плюс 1 — 111. У нас получается, что 64 входит, 32 входит, 16 не входит, 8 входит, 4 входит, двойка входит, единица входит. Вот такое число должно получиться в итоге. Это двоичное число, которое соответствует записи 111 десятичной.
Если у вас получается в итоге число, которое заканчивается на единицу, это число будет заведомо нечётное. Если у вас в итоге получается число, которое заканчивается на ноль, это число чётное. Потому что все слагаемые, кроме самого последнего, по определению делятся на 2. Поэтому если у вас какое-то число получилось, которое заканчивается на ноль, это очень подозрительно. Потому что 111 — число нечётное. Оно в качестве нечётного числа обязательно должно иметь последний знак — единицу. Потому что это единственный компонент, который может быть нечётным. Это двойка в нулевой степени. Все остальные числа, будете ли вы их умножать на ноль или будете ли вы их умножать на единицу, они в любом случае будут делиться на двойку. Либо вы умножите на ноль, и тогда ноль на двойку делится, либо вы умножите любую степень двойки на единицу, и она, естественно, на двойку тоже будет делиться. Двойка в нулевой степени, она гипотетически, если вы домножите на единицу, не делится на два.
Поэтому нечётные числа обязаны заканчиваться на бит единицы. Но в остальном получается, что мы взяли, посчитали, и у нас действительно получилось число, которое на единицу заканчивается. Проверили, действительно, вроде сходится. Давайте ещё один пример. Я ещё раз напишу совершенно произвольное число. 234 десятичное. И в качестве упражнения предполагается, что вы напишете, как его разложить на сумму степеней двойки. Давайте разбираться с тем, что у нас в итоге должно получиться. 234 – это число, которое больше, чем 128, но меньше, чем 256. Поэтому мы можем сразу сказать, что 128 в итоговую сумму входить будет. Дальше из 234 надо вычесть 128, и у нас получится 106. И дальше уже 106 надо разложить на сумму степеней двойки.
106 больше, чем 64. Поэтому мы говорим, что 64 плюс какая-то ещё ботва. 106 минус 64 – это 42. Дальше 42 надо разложить на сумму степеней двойки. Соответственно, 32 плюс 10. И 10 – это 8 плюс 2. У нас получается сумма степеней двойки, которая в итоге должна получиться. 128 плюс 64 плюс 32 плюс 8 плюс 2. Соответственно, записываем всё это дело в виде коэффициентов. 128 – это единица умножить на 2 в седьмой степени, плюс 64 – это единица на 2 в шестой степени, плюс 32 – это единица на 2 в пятой степени, плюс 0 умножить на 16 – это 2 в четвёртой степени, плюс единица – это восьмёрка, соответствующая 2 в третьей степени. Дальше 0 — это четвёрка, 2 во второй степени. Единица — 2 в первой степени.
И 0 — 2 в нулевой степени. 2 в седьмой, 2 в шестой, 2 в пятой, 2 в четвёртой нету, 2 в третьей есть, 2 во второй нету, 2 в первой есть, 2 в нулевой нету. Вот такое число: 1, 1, 1, 0, 1, 0, 1, 0. Проверяем на похожесть на реальный ответ. Во-первых, заметим, что это число больше, чем 128, но меньше, чем 256. Потому что 128 входит в сумму. Количество бит мы, по крайней мере, угадали. Дальше это число получается чётное. Оно заканчивается на 0. По таким формальным критериям мы сразу можем проверить, что ответ похож на правду. Или мы можем взять и преобразовать это число обратно в десятичный формат. 128 плюс 64 плюс 32 плюс 8 плюс 2. 128 плюс 64 это 192. Дальше плюс 32 — 224. Плюс 8 — 232, плюс 2 — 234.
Ровно то, что у нас изначально и было. Вот такой алгоритм позволяет быстро переводить числа из одной системы счисления в другую. Если мы берём число десятичное и переводим его в двоичный вид, мы его раскладываем на сумму степеней двойки. Это операция немножко более затратная по сравнению с обратной, поэтому она занимает немножко дольше времени. Если у вас просто есть какое-то число, которое вам надо преобразовать из двоичной системы в десятичную, то это делается сравнительно легко. Посчитаем количество бит, выясняем, какой бит за какую степень двойки отвечает, соответственно, нумеруем их, начиная с нуля. В уме всё это делаем, понятное дело, писать это не надо. Нумеруем их справа налево. И получаем, что 2 в седьмой степени — это 128. Дальше 2 в шестой степени умножается на 0, поэтому можно его не писать. 2 в пятой степени, единица — это 32. 2 в четвёртой степени умножается на 0, можно не писать.
2 в третьей степени — это восьмёрка. 2 во второй степени умножается на 0, можно не писать. Дальше плюс 4, плюс 1. Складываем: 128 плюс 32 — 160. Плюс 8 — 168. Плюс 4 — 172. Плюс единица — 173. Это двоичное число соответствует числу 173 десятичному. В принципе, это одна и та же операция, когда мы переводим число из одной системы счисления в другую. Этот механизм будет работать для совершенно произвольной системы счисления. Захотите семеричную систему счисления? Та же самая история. Просто надо будет знать на зубок степени семёрки, а не двойки. И это, конечно, операция, которая вам никогда не пригодится. Если вдруг вас когда-нибудь попросят преобразовать числа из двоичной системы счисления либо в восьмеричную, либо в шестнадцатеричную — скорее всего, в шестнадцатеричную, с восьмеричной очень редко приходится работать, с шестнадцатеричной — чаще — как это делать, если у вас есть двоичное представление? Очень просто.
Разбираете на группы по четыре разряда и дальше записываете каждую из этих четырёхразрядных групп в виде шестнадцатеричного числа. Шестнадцатеричная система счисления основана на цифрах от нуля до F. Соответственно, там цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Всего шестнадцать цифр. И есть представление такое, что цифра A в шестнадцатеричной системе счисления соответствует числу 10 в десятичной. B, соответственно, 11. C — 12. D — 13. E — 14. F — 15. Если у нас есть вот такое число 1, 0, 1, 0 в двоичной системе счисления, этот кусочек нам надо преобразовать в шестнадцатеричную систему счисления. Что мы делаем? Мы понимаем, что это восьмёрка и двойка.
В итоге это число соответствует десятичному числу 10. В десятичной системе счисления это будет число 10. В шестнадцатеричной системе счисления это будет цифра A. Поэтому 1, 0, 1, 0 — а 1, 0, 1, 1, на единицу больше, это будет цифра B. Это будет AB в шестнадцатеричной. Опять же, каждый разряд будет означать количество степеней 16 в конкретном числе. Но мы не будем заниматься тем, что будем вспоминать на память все степени числа 16. Намного проще перевести это число в двоичную систему счисления, а потом разбить на группы по 4 разряда и в итоге получить тот же самый результат. На самом деле, как вы понимаете, математически разницы нет. Но запоминать на память степени числа 16 – это очень сомнительное удовольствие. А запоминать степени двойки вам в любом случае придётся.
На экзамене нужно помнить степени двойки до восьмой включительно. С 2 в нулевой степени по 2 в восьмой степени. Это, понятное дело, 1, 2, 4, 8, 16, 32, 64, 128, 256. 256 – это 2 в восьмой степени. Будет полезно помнить до 2 в шестнадцатой. Это 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536. 65536 – это 2 в шестнадцатой степени. Лишним не будет. Можно сдать экзамен, если вы не помните степени двойки с девятой по шестнадцатую. Никаких проблем. Но в жизни иногда пригождается. Так. Мы можем, после того как научились преобразовывать числа из двоичной системы счисления в десятичную и наоборот, решить наши первые задачи, которые уже примерно экзаменационного уровня. Самая первая задача – это преобразовать формат маски. Проще всего эту задачу решать через шпаргалку, но гипотетически вы должны понимать, откуда там что берётся, поэтому давайте эту задачу решим по-честному.
Если вам дают десятичную запись маски, например, 255, 255, 248, 0, и просят найти префиксную запись этой же маски, то вы должны будете фактически взять и записать эту штуку в виде двоичного числа, 32-битного. И это 32-битное число, когда запишете, просто посчитаете количество единиц. В нашем случае 255 — это значит, что первые восемь разрядов – все единицы. Второй октет тоже 255 — это вторые восемь разрядов – все единицы. Третье число – 248. Это значит, что граница между левой и правой частью, между Network ID и Host ID, у нас проходит внутри третьего октета. По шпаргалке мы бы, конечно, сказали: находим третий столбец, помните, здесь у нас такая лесенка, здесь у нас кривые числа, которые могут встретиться в маске, здесь четыре столбца. И мы находим третий столбец, потому что кривое число у нас в третьем разряде, находим здесь это самое кривое число, и на пересечении тут будет стоять всё, что нужно.
Но на самом деле эта задача, если прямо по-честному её решать без шпаргалки, выглядит следующим образом. Мы число 248 раскладываем на сумму степеней двойки. Это 128 плюс 64 плюс 32. 128 плюс 64 – 192. Плюс 32 – 224. Плюс 16 – 240. Плюс 8. 248. Мы на 5 степеней двойки это разложили. И, соответственно, плюс 0, плюс 0, плюс 0. Если мы захотели перевести это число в двоичный формат, чтобы получить восьмизначное значение, у нас получается: 1, 1, 1, 1, 1, 0, 0, 0. Соответственно, мы говорим, что здесь 8 разрядов единицы, здесь 8 разрядов единицы, здесь 5 разрядов единицы. Соответственно, это 21-я маска. Естественно, вам не нужно приводить число 255, а потом считать все единицы.
Вы вполне можете сказать, что здесь 8 разрядов и здесь тоже 8 разрядов, просто не переводя первые два октета в двоичный формат. Понятно, что там 8 единиц. А потом отдельно складываете 8 единиц и 8 единиц и отдельно ручками считаете, сколько здесь у вас единиц получилось. 5 штук. Берём эти 16, которые очевидно есть, прибавляем к 5, получаем 21-ю маску. Обратная операция — в общем, то же самое. Нам нужно, например, 25-ю маску преобразовать в десятичный формат. 25-я маска означает, что в маске, записанной в 32-битном виде, будет 25 единиц, и всё остальное будет нулями. Понятно, что мы можем сразу сказать, что 25 – это больше, чем 24. Поэтому первые три октета все будут состоять из единиц. А в четвёртом октете будет некоторое количество единиц и некоторое количество нулей. То есть можно сразу сказать, что мы не пишем отдельно единицы в количество 25 штук. Мы можем сказать, что 25 – это 24 плюс что-то.
Ну плюс 1, в частности. Поэтому мы делаем только четвертый октет, который состоит из единицы и семи нулей. А дальше вот это число мы уже преобразуем из двоичного вида в десятичный. Это число 128. И вот наша маска 255, 255, 255, 128. Вот таким вот нехитрым образом мы можем преобразовать маску из одного формата в другой. Такого рода задачи на экзамене будут и будут обязательно. Так, далее. Второй тип задач, который на экзамене обязательно будет, это задача на нахождение IP-шника в сети. Вам дают IP-шник с маской, и вам нужно найти его, соответственно, адрес сети, в котором он находится. Как задачу эту решать? Мы должны будем зафиксировать те биты, которые в IP-шнике относятся к Network ID, потому что у нас есть маска, и мы, соответственно, понимаем, каков размер этой маски, можем сказать, что некоторые биты нашего IP-шника относятся к Network ID. А оставшиеся, они относятся к Host ID.
Для того, чтобы найти адрес самой сети, нам нужно зафиксировать те биты, которые относятся к Network ID, а все остальное обнулить. К примеру, у нас есть адрес 192.168.49.231 по 26-й маске. Что это означает? Что первые 24 бита плюс еще 2 битика из 4-го актета относятся к Network ID. Мы их должны оставить, они должны остаться такие же. А все остальное, которое вот здесь, вот Host ID, мы должны будем обнулить. Как фиксируется Network ID? Опять же, нет смысла говорить, что вот этот актет у нас будет в двоичном виде какой-то, вот этот актет тоже в каком-то, в двоичном виде. Нас не интересует это, потому что если от нас требуют найти IP-шник сети, ну, скорее всего, от нас требуют его записать в человека в понятном формате. Если в любом случае биты Network ID у конечного IP-шника, который требуется найти, такие же, как у оригинального IP-шника, мы можем сказать, 26 этих самых бит состоят из 24 бит первых трех актетов,
они точно такие же будут, их можно не считать. То есть мы уже сразу можем схалявить и сказать, вот это вот, это уже часть готового результата. И дальше нам нужен только последний актет 231 перевести в двоичный вид и получить готовый результат. Поэтому как это делается? Мы берем, фиксируем первые два бита у числа 231. Вот четвертый актет, который у нас подозрительный, 231 десятичный, мы его преобразуем в двоичное значение. 231 – это 128 плюс… Сколько там получается? 231 минус 128 – это 103. Дальше 103 раскладываем на сумму степеней двойки. Это 64 плюс… 103 минус 64 – это 39. Дальше. 39 – это у нас 32 плюс 5. И 5 – это у нас, соответственно, 4 плюс 1. Вот степень двойки, которой получили 128, 64, 32, 4 и 1. Соответственно, 231 десятичный – это 128 есть, 64 есть, 32 есть, 16 нет, 8 нет, 4 есть, двойки нет, единица есть.
Восьмизнаточное значение, нечетное, все хорошо. Так, я где-то ошибся, что ли? Что-то у меня здесь результат непохожий. Да, я ошибся. 39 – это не 32 плюс 5, это 32 плюс 7. Это 4 плюс 2 плюс 1. На экзамене надо быть, конечно, внимательным. Вот то, что я сейчас сделал, оно на экзамене привело бы к неправильному ответу. То есть 4 плюс 2 плюс 1, и это влияет на вот этот вот битик. 1, 1, 1, 0, 0, 1, 1, 1 двоичное. То есть 231 десятичное, эквивалентно вот такой вот записи двоичной. Из этих восьми разрядов, восьми битов, первые два бита относятся к Network ID, а оставшиеся биты к Host ID. Соответственно, все, что слева от границы, мы оставляем. Все, что справа, обнуляем. И у нас получается в четвертом актете у итогового IP-шника 2 единицы и 6 нулей. Вот красненьким выделены те биты, которые к Network ID относятся, а все остальное обнуленное, это, соответственно, Host ID.
У IP-шника, который относится к самой сети, это, соответственно, все биты будут нулевые. 128 плюс 64 – это 192. И получается итоговый результат. 192, 168, 49. Мы их не переводили в двоичный вид, потому что они точно гарантированно точно такие же. Мы их просто переписали. И 192 – это мы уже посчитали по-честному. Два бита, которые относились к Network ID из 26, которые в четвертом актете были. И, соответственно, все остальное обнуленное – это число 112. Давайте я вам еще IP-шничек напишу. Вы мне по известному IP-шнику, который я вам написал, посчитаете IP-шник сети, в которой этот узел будет находиться. Алгоритм точно такой же. Соответственно, берете, фиксируете левую часть и правую часть аналогично вот обнуляете. Так. Да. IP-шник будет какой-нибудь там, не знаю. 200. Ти.
Много? 16. Не много ли 16? 192 плюс 16. 208. Не, не много. Плюс 2 плюс 1. Проверяем. 128 плюс 64. 192. 208. 211. Да, все правильно. И, соответственно, если мы хотим записать 211 десятичное в двоичном виде, это будет 128, 64, 32 нету, 16 есть, 8 нету, четверки нету, двойка есть, единица есть. То есть вот такое вот число в двоичном выражении. Это 211 десятичное, это же 1101, 0011 двоичное. Дальше. Нас интересуют первые 27 бит адреса. Из них 24 бита адреса находятся в первых трех акцентах. Каждый из них по 8, их всего 3. И, соответственно, 3 бита нам нужно будет от числа 211 откусить и сказать, что это у нас, соответственно, network ID.
Все остальное относится к хост-ид. И если мы хотим найти IP-адрес самой сети, то все остальное нужно будет обнулить. Таким образом, получается, что если мы обнулим все остальное, то у нас получится 1.1.0. Оно переедет из network ID оригинального. И дальше получится 0.0.0.0.0. Это у нас, соответственно, хост-ид, обнуленный того самого IP-шника сети, к которому относится вот адрес 203.118.169.211 по 27 маске. Это число 128 плюс 64, 192 десятичное. Таким образом, ответ 203.118.169. Если я нигде не запутался, вот именно такой результат должен получиться. Это вот я переписал просто первые три актета. И дальше в четвертом актете, вот она наша 192. Это адрес сети, к которой принадлежит узел 203.118.169.211 по 27 маске.
Берем первые три, да, именно потому что у нас всего бит в network ID 27. Первые три актета содержат 24 бита. Оставшиеся недостающие биты будут в четвертом актете. 27 минус 24 – 3 бита. Для того, чтобы эти штуки решать, действительно требуется набить руки. То есть, может быть, даже если вдруг с первого раза не получается, но принцип понятен, надо просто их порешать, эти задачи, штук 10-20, до тех пор, пока не начнет получаться в 100% случаев. Как только вы понимаете, что там 10 подряд задач решили и все правильно, можно считать себя экспертом в этой области и, соответственно, дальше переходить уже к следующему упражнению. Так, следующее, что есть. В принципе, аналогичная задачка – это нахождение бродкаста. Каждый раз, когда вы на узел назначаете IP-адрес, он автоматически вычисляет и адрес самой сети, и адрес бродкаста.
И вот эту вот операцию, соответственно, нахождение адреса сети мы только что сделали, нахождение бродкаста – это фактически та же самая операция, и каждый раз узел, когда вы назначаете IP-шник, ее делает. Ну, давайте по этой операции тоже пройдемся. Что нужно для того, чтобы по известному IP-адресу найти широковещательный адрес той самой сети, в которой он находится? Зафиксировать биты Network ID, а все остальное объединичить. То есть там, где для нахождения адреса сети мы обнуляли правую часть Host ID, для нахождения бродкаста нужно будет выставить эти биты в единицу. Например, если у нас есть адрес 112.168.30.117.23 маски, то мы должны будем найти, какие биты из этого адреса относятся к Network ID, зафиксировать их, а все остальное выставить в единицу. Ну, в общем-то, ничего сложного нет. 23-я маска обозначает, что у нас границы между левой и правой частью проходят по третьему актету.
Соответственно, в первом актете 8 бит, во втором актете 8 бит и в третьем актете 7 бит будут относиться к Network ID. А один битик из третьего актета будет относиться к Host ID. И, соответственно, весь четвертый актет тоже будет относиться к Host ID. Вот всю вот эту вот часть нам нужно будет объединичить битовую. А вот эту, соответственно, сохранить, потому что это Network ID, и он как бы должен остаться. Поэтому третий актет, число 30, десятичное, мы переводим в двоичный вид. 128 не входит, 64 не входит, 32 не входит, 16 входит. Дальше 16 плюс 8, 24. 8 входит, 4 входит, 2 входит, 1 не входит. Да, все правильно. 16 плюс 8 это у нас 24, плюс 4 28, плюс 2 30.
Вот такое вот число. Дальше. Учитывая, что у нас 23 бита относятся к Network ID. 8 из них в первом актете, 8 во втором актете и 7 в третьем актете. Фиксируем первые 7 бит. Вот они. Это биты Network ID. Они останутся точно такие же. Для того, чтобы найти, соответственно, бродкаст, нам нужно все, что останется, объединичить. Вот этот вот битик мы выставляем в единицу для того, чтобы получить адрес бродкаста. И все, что в четвертом актете, тоже мы выставляем в единицы для получения адреса бродкаста. То есть у нас третий актет будет иметь вот такой вот вид. И четвертый актет будет иметь вот такой вот вид. Вот эту штуку мы можем сразу как бы не считать. Это будет число 255. А вот это вот число мы, на самом деле, можем посчитать по-честному. И это будет 16 плюс 8, 24, плюс 4, 28, плюс 4, 30, 16 плюс 8, 24, плюс 4, 28, плюс 2, 30, плюс 1, 31.
Ну или же мы можем схалявить. Мы можем сказать... Так, что-то я не понял. У меня здесь многовато, походу, единичек вылезло, да? Да, у меня здесь многовато единичек. Как-то подозрительный результат получился. Так, вот здесь вот одна единичка лишняя. Да, мы можем сказать, что число 0, 0, 0, 1, 1, 1, 1, 1, оно не сильно отличается от того числа, которое у нас получилось в итоге. Здесь вот. То есть оно отличается на единичку. Если мы попытаемся преобразовать вот это вот число двоичное в десятичное представление, на самом деле оно будет отличаться только в одном разряде от числа 30. По факту оно будет отличаться от числа 30 ровно на самое последнее свое слагаемое. Там, где в числе 30 мы говорили, что это какие-то там суммы степеней двойки, и двойка в нулевой степени не входила в итоговый результат,
соответственно, вот это вот то число, которое мы хотим найти, это фактически то же самое число 30. То есть вот это вот, это 30. Но только плюс еще двойка в нулевой степени. Это 30 плюс 1. И когда мы хотим вот это вот число преобразовать, это будет на самом деле 30 плюс 1, это будет 31. Если хотите, можете по-честному сделать. Я просто показал вам, как схалявить можно. Ну и получается, да, что в третьем актете у нас будет 31, в четвертом актете будет 255, а в первых двух актетах, ну, мы их просто переписываем. 192, 168, 31, 255. По сути своей, это та же самая задача, что и на нахождении адреса сети. Только вот хост-айди мы не обнуляем, а объединичиваем. Если вы можете решить задачу на нахождении адреса сети, то и на нахождение браткасты вы тоже сможете сделать. Здесь единственный момент заключается как бы неожиданно в том, что граница между левой и правой частью может проходить не обязательно по четвертому актету, она может проходить по третьему, по второму актету. И, соответственно, все, что справа, мы должны будем либо обнулять,
либо объединичивать. И да, может быть такое, что границы где-то здесь проходят. И в этом случае весь четвертый актет у нас превратится в 255. А так на двоичном уровне все то же самое. Можете на досуге потренироваться. Опять же, да, так, я что-то не понял. Здесь на этом слайде должен был быть наш тренажер. У нас на сайте есть замечательный тренажер, вы можете на нем попрактиковаться. Соответственно, www.networkeducation.ru slash practice. Давайте я вам попробую показать, что действительно это у нас есть. Вот здесь, если вы посмотрите на тренажер на бесклассовую адресацию, система находит вам IP-адрес случайный. Система предлагает вам маску сети, опять же, случайную. И предлагается, что вы в рамках этого задания самостоятельно посчитаете адрес сети и самостоятельно посчитаете, соответственно, адрес бэдкаста.
Ну вот здесь я сейчас попытаюсь показать, как это можно сделать. Так, соответственно, если я вижу, что маска сети 255.254.00, это означает, что первые 15 бит адреса относятся к Network ID, а, соответственно, остальные биты относятся к Host ID. Соответственно, первый октет точно у нас переезжает. Это будет 3. Дальше. Второй октет. Число 127. Это очень характерное число, которое состоит из нолика и кучи единичек. И мне надо от него взять первые 7 бит. Это будет 0.1.1.1.1.1.1. И все остальное для того, чтобы найти адрес сети, мне надо обнулить. Это будет число 126. Оно на единичку меньше, чем 127. Просто такая вот маска попалась, которую я в уме могу посчитать. Ну и, соответственно, 0.0. Вот этот вот адрес я посчитал, проверяю. Ну, видите, правильно посчитал. Могу сразу нажать «Новый вопрос». Могу сказать, что я хочу еще посчитать браткаст. Так, и браткаст будет 3.
Дальше 127. У него точно так же во втором октете будет 0.1.1.1.1.1. В первых семи разрядах. И в восьмом разряде, соответственно, будет единица, потому что все, что справа от границы между Network ID и Host ID, мне нужно для браткаста объединить. Поэтому 127, он как раз и будет иметь вид 0.1.1.1.1.1.1.1.1. И в браткасте все, что справа, 255.255. Проверяем. Ну, тоже вроде правильно. Дальше нажимаем «Новый вопрос». Система придумывает новое задание. Ну, вот как-то в таком вот духе. Так что посмотрите. Вот такой вот адрес. www.networkeducation.ru.slashpractice. Можно любым другим образом потренироваться. То есть, например, вот есть такой сайт randomlist.com. Вы можете там сказать, что вас интересует случайный IP-адрес. И просто берете случайным образом к IP-шнику, придумываете маску, проверяете, можете ли вы решить задачу, после чего смотрите, совпадает ли ваш результат с тем,
что подсказывает IP-калькулятор. Ну, то есть, да. Такого рода задачки вы можете, в принципе, самостоятельно подплодить сколько угодно. Так, ну, бывают задачки на подсчет количества узлов. В принципе, тут ничего такого интересного нет. Решаются эти задачи, как правило, в уме. И, соответственно, задача состоит из очень простого условия. Вам дают сетку некоторого размера и спрашивают, Сколько адресов в такой сети вы сможете адресовать. Здесь надо помнить, что в каждой сети два IP-адреса задействуются под служебные нужды, адрес самой сети и бродкаст. Узлам их выдать не получится, а все остальное выдавать можно. Если у вас есть сетка /27, это 5 бит под адрес хоста. В 5 битах вы сможете вписать 32 разных варианта. 30 хостов вы сможете адресовать, два адреса будут служебные. В /28 сети у вас 14 хостов и два служебных адреса. В /29 сети 6 хостов и два служебных адреса.
В /30 сети два хоста и два служебных адреса. /31 сети по стандарту делать нельзя, но RFC 3021 разрешает это делать, если на вашем железе оно поддерживается. /31 сетка дает вам два адреса. В некоторых случаях /32 сеть тоже можно встретить, это тоже особый случай. /32 сеть — это очень интересная сеть, у нее все 32 бита относятся к Network ID, и других адресов, кроме адреса самой сети, которые имели бы такие же первые 32 бита, но отличались бы в остальных битах, не существует. Поэтому в /32 сети всего один адрес, и возникает вопрос, зачем вообще нужна такая сеть, в которой только один IP-адрес, потому что сети нужны для взаимодействия между узлами. И сеть на один узел — это очень странно выглядит. На самом деле иногда бывает такое, что нужно иметь /32 сети, например, если у вас есть воображаемый интерфейс, который никуда не смотрит.
IP-адрес на нем есть, а соседей на этом интерфейсе нет. Такие интерфейсы в некоторых ситуациях очень сильно пригождаются. Дело в том, что из такого интерфейса нельзя выдернуть провод. Он всегда есть, он всегда работает. И для некоторых задач такие воображаемые интерфейсы, на которых есть IP-адреса, очень удобны именно тем, что этот интерфейс всегда в UP, с ним ничего не может произойти, он не зависит от внешних условий. Если вам нужен какой-то заведомо стабильный, заведомо рабочий интерфейс, который не зависит от того, что уборщица шваброй выдернула провод, или с другой стороны пользователь выключил компьютер, или что-то подобное, то как раз воображаемые интерфейсы для этого действительно удобны. Здесь надо просто знать формулу, что в сети с некоторой маской, допустим, /27, у вас 5 бит относятся под адрес хоста. 32 всего бита, 27 из них к Network ID, все остальное — под адрес хоста. 2 в степени x минус 2 — это количество хостов, которые вы можете адресовать.
Дополнительные условия, которые бывают: иногда говорят, что один из этих адресов, которые вам требуется назначить, это должен быть адрес роутера, или адрес принтера, или на каждое рабочее место вам нужно два адреса — один для компьютера, второй для телефона. Все эти ограничения, я думаю, вы можете самостоятельно учесть. Базовые навыки арифметики здесь вам должны помочь для решения подобных задач. Да. В рамках домашнего задания вы можете самостоятельно взять, написать на бумажке все возможные варианты сетей с /16 по /30. Их там будет немыслимое количество, аж 14 штук. И для каждой сети напишите... А, 15 штук, да. И для каждой сети напишите, сколько узлов в такой сети у вас должно получаться. Можете потом проверить результат на калькуляторе.
Так, если вдруг у вас есть задача на сабнетинг, их можно условно разделить на простой и сложный сабнетинг. Простой — это ситуация, где нам дали сетку и мы ее делим на части. Сложный сабнетинг — это когда нам дали сетку, мы ее поделили на части, а потом взяли какие-то куски и их снова поделили на части. Сложный он не потому, что он тяжелый или вычислительно более сложный, а потому, что он слагается из нескольких компонентов. Комплексный, если хотите. Простой сабнетинг выполняется за одну операцию. Сложный сабнетинг складывается из нескольких простых операций сабнетинга. Если нам дают родительскую сетку — известный IP-адрес сети, известную маску — и нас просят разделить эту сеть на подсети. Как правило, нам дают либо известное количество подсетей, либо говорят разделить на некоторое количество подсетей с известным количеством узлов. В любом случае вам нужно, исходя из этих требований, сказать, как мы будем делить эту сеть.
При разделении сети на подсети нам потребуется определить, сколько бит мы будем заимствовать от Host ID под Subnet ID. Если нас ставят в известность, сколько должно быть подсетей, — окей. Мы не можем разделить на какое-то кривое число подсетей, мы должны всегда делить на количество подсетей, которое является степенью двойки. Мы находим ближайшую степень двойки, которая не меньше, чем то количество подсетей, которое нас интересует. Находим, к примеру, что нам нужно поделить на 16 подсетей. 16 — это 2 в четвертой степени. Следовательно, нам нужно задействовать 4 бита под Subnet ID. Требуют от нас, чтобы мы разделили на 1024 сети. Например, говорят, поделите на 1000 подсетей. Окей, на 1000 поделить не можем, но на 1024 можем. 1024 — это 2 в десятой степени.
Следовательно, от Host ID мы должны заимствовать 10 бит. Если говорят найти такой способ разделения, чтобы в каждой подсети получилось определенное количество узлов, окей, не проблема. Нам говорят, что в одной сети должно быть, например, 20 узлов. Находим такую сеть, которая способна 20 узлов в себя принять. Хватит ли нам /28 сети? Не хватит. Потому что в /28 сети 14 хостов можно адресовать. Хватит ли нам /27 сети для размещения 20 узлов? Хватит. Потому что в /27 сети мы можем 30 хостов разместить. Соответственно, /27 сетки у нас должны будут появиться. Если нам известен размер Network ID родительской сети, нам известно, какие должны получиться итоговые сетки, мы вычитаем одно из другого и получаем количество Subnet ID битов, которые нам требуется заимствовать. К примеру, нам говорят, что у нас есть родительская сеть
192.168.0.128 с маской /25. И нас просят разделить эту подсеть на некоторое количество подсетей, чтобы в каждой можно было адресовать до 15 хостов. Никаких проблем. Определяем, какого размера сети у нас должны будут получаться в итоге. Если хостов 15 штук, то нам нужна такая сеть, в которой было бы как минимум 17 адресов, потому что два еще служебных. Для этого нам не хватит /28 сети, потому что в /28 сетке у нас 14 хостов плюс два служебных адреса. А в /27 сети это будет 30 хостов плюс два служебных адреса. 5 бит под Host ID дают нам 32 возможных варианта. Поэтому итоговый вариант у нас получается /27. У нас есть родительская сеть /25, мы ее режем на /27 сетки, следовательно, мы заимствуем два бита. Дальше. Фиксируем Network ID, который был у родительской сети.
192.168.0 плюс еще один бит от числа 128. 128 в десятичном виде — это вот такое в двоичном виде. Этот бит относится к Network ID, все остальное относится к Host ID. Мы заимствуем то количество бит, которое нам требуется. На предыдущем шаге мы посчитали, что требуется два бита под Subnet ID. И в эти два бита мы вписываем все возможные варианты. Единица, два нолика, куча нулей. Единица, 0, 1, куча нулей. Единица, один ноль и куча нулей. Единица, две единицы и куча нулей. Все возможные варианты этих двух бит мы перечислили. И получается, что эти четыре варианта у нас получились. Это IP-адреса тех кусочков сетей, которые мы получили в результате разделения большой сети 192.168.0.128 с маской /25 на четыре /27 сетки. Можно их перевести в десятичное представление и получить сами IP-адреса.
192.168.0.128 с маской /27. 192.168.0.160 с маской /27. 192.168.0.192, 192.168.0.224. Все с маской /27. Более сложный пример бывает тогда, когда нужно разделить сеть на подсети, и старая граница с новой границей будут визуально находиться в разных октетах. Это никак не влияет на битовую математику, но немножко смущает начинающих кандидатов на CCNA, потому что подозрительно, когда все это внезапно переезжает из одного октета в другой. Если у нас есть, например, сеть 172.31.224.0 с маской /20, нам нужно ее разделить на 32 подсети. 32 — это 2 в пятой степени, надо 5 бит заимствовать под Subnet ID. Оригинальная сетка была /20, граница между левой и правой частью проходила внутри третьего октета.
А после того как мы заимствуем 5 бит под Subnet ID, граница переедет в четвертый октет. Нам придется в двоичном представлении работать и с третьим, и с четвертым октетом одновременно. У оригинальной сети с маской /20 левые 16 бит относились к Network ID, плюс еще 4 бита от третьего октета тоже относились к Network ID. Число 224 — это 1, 1, 1, 0 и четыре нуля. Вот эта часть — это Network ID, вот эта — это Host ID. Дальше, от этих бит Host ID, которые здесь нули в третьем октете и нули в четвертом октете, нам нужно будет заимствовать 5 бит под Subnet ID. И мы заимствуем те 4 бита, которые были в третьем октете, и еще один бит в четвертом октете. Получается, что новая граница переезжает из третьего октета в четвертый октет, и нам потребуется в двоичном виде четвертый октет тоже записывать. И в выделенные 5 бит мы записываем все 32 возможных варианта.
0, 0, 0, 0, 0, затем 0, 0, 0, 0, 1 и так далее, вплоть до 1, 1, 1, 1, 1. Записываем все полученное в десятичном виде. Первые два октета в любом случае никуда не деваются — 172, 31. Они у всех итоговых вариантов получатся точно такие же. Третий и четвертый октеты у нас будут меняться. Меняются они следующим образом. Самый первый IP-адрес у нас сохранится. 172.31.224.0. Такой же, как было у родительской сети. Дальше, следующий. 4 бита Subnet ID находятся в третьем октете. 1 бит Subnet ID, единичка, находится в четвертом октете. Получается 224.128 с маской /25. Дальше — 172.31.225.0. 172.31.225.128 и так далее. Все эти адреса вас никогда не попросят выписывать на экзамене. Но если вдруг вы будете решать подобные задачки, вы должны понимать, откуда там что берется.
Мы заимствуем некоторое количество бит под Subnet ID и вписываем в эти биты все возможные варианты. Естественно, вас никогда не попросят выписывать все эти варианты. Но если вас попросят, например, найти какой-то конкретный по счету вариант, то вы можете сделать следующее: когда мы вписываем все возможные варианты в Subnet ID, мы фактически номер подсети в эти биты вписываем. Сюда мы вписываем номер 0, номер 1, номер 2, номер 3, номер 4. Эти числа 00000, 00001, 00010, 00011 — это все в двоичном выражении номер подсети. Если здесь мы пишем 1, 1, 1, 1, 0 — это число 30, а 1, 1, 1, 1, 1 — это число 31. Мы взяли и номер подсети записали в эти заимствованные 5 бит. Если нас просят найти какую-то сетку, допустим, 19-ю по счету, мы можем сказать: первая по счету имеет номер 0,
вторая по счету имеет номер 1, третья по счету имеет номер 2, N-я по счету сеть имеет Subnet ID N−1. Если нас просят найти 19-ю по счету сеть, 19-я по счету сеть имеет Subnet ID 18. 18 — это 16 плюс 2, и в двоичном виде это 1, 0, 0, 1, 0. Вот такое пятиразрядное число. Если вдруг нас просят найти число определенного размера, а у нас получилось число меньшей разрядности, мы всегда можем ноликов слева дописать. Число 1, 0, 0, 1, 0 и число 0, 1, 0, 0, 1, 0 — это одно и то же число. Нули слева на результат не влияют, но в нашем случае как раз получилось число пятиразрядное, и это хорошо. Это 1, 0, 0, 1, 0 мы вписываем в зеленые значения. Если нас попросили найти 19-ю по счету сеть,
которая получается в результате разделения такой сети на 32 части, никаких проблем: 1, 1, 1, 0 — эти биты третьего октета сохраняются, они относятся к родительскому Network ID. Дальше 4 следующих бита: 1, 0, 0, 1. Это 4 бита Subnet ID, которые мы посчитали. Дальше нолик — это пятый бит Subnet ID, который мы посчитали. И дальше все остальные нули, потому что мы находим адрес сети, и у этого адреса все биты должны быть нулевые в Host ID. Число 1, 1, 1, 0, 1, 0, 0, 1 нам нужно преобразовать в десятичное представление. 128 плюс 64 плюс 32 — 224, плюс 8 — 232, плюс 1 — 233. И четвертый октет — это 0. 19-я по счету сеть будет 172.31.233.0. Идею, я думаю, вы поняли.
Вряд ли на экзамене вас заставят это делать, но тем не менее вы можете, руководствуясь этой логикой, решить практически любые задачи на subnetting. Можете взять на досуге, написать себе произвольный IP-адрес, произвольную маску, найти IP-адрес сети, и потом сказать: давайте разрежем эту произвольную сеть на какое-то произвольное количество подсетей, и посмотреть, что получается в итоге. Не надо брать большое количество разрезаемых кусочков, чтобы вы могли понимать, откуда берется этот механизм разрезания и как он получается. Если вдруг вас просят разрезать сеть на куски неодинакового размера, то вы должны будете выполнить subnetting в несколько проходов. Алгоритм очень простой. Этот сложный subnetting — не пугайтесь, это не потому что он тяжелый, а потому что он выполняется в несколько проходов, состоит из нескольких операций, складывается из последовательных разрезаний подсети на части. Сначала определяем, что у нас в итоге должно получиться,
какого размера куски. Делите исходную сеть на самые большие куски, которые должны получиться. Если вам говорят: надо разрезать исходную /24 сеть так, чтобы получилось в итоге один кусок на 100 пользователей, один кусок на 50 пользователей, и два куска на 20 и 10 пользователей. Вас приглашают разделить сеть на 4 таких куска. /24 сетка вмещает в себя 256 адресов. Гипотетически нам должно хватить, потому что общее количество: 100 плюс 50 — 150, плюс 20 — 170, плюс 10 — 180. Вроде хватает. Для того чтобы 100 адресов в одной сети адресовать, нам потребуется /25 сеть. Нам достаточно, потому что /25 сеть вмещает в себя 128 адресов. Два из них служебные, 126 можно оставить хостам. 50 адресов. Для того чтобы их адресовать, нам потребуется /26 сетка как минимум.
/26 сетка — 64 адреса, два из них служебные, 62 можно назначить хостам. Для 20 хостов, мы уже знаем, /27 будет нужна. Для 10 хостов, которые у нас остаются, достаточно /28, но и /27 тоже достаточно. Это будет с запасом. Можем сказать: давайте разделим на /28 сетку. Еще одна /28 потом останется в итоге свободной. Самый крупный кусок, который должен получиться, — /25. Поэтому мы /24 сетку делим на две /25. Она пополам делится. Фактически, что такое /24 сеть? Это множество адресов, у которых левая часть одинаковая, правая пробегает все возможные значения. Это числа, которые идут по порядку. И те числа, у которых самый первый бит Host ID начинается на ноль, находятся в первой половине этого диапазона. Те числа, у которых первый бит начинается на единицу, находятся во второй половине этого диапазона. Мы диапазон делим пополам и тем самым делим эту сетку на две части. Дальше.
Левая часть, которая получилась, уже того размера, который надо. Говорим: давайте закроем этих 100 пользователей и дадим им полученную половинку всего диапазона, /25 сетку. А вторая половинка у нас останется пока в запасе, в работе, и мы ее используем для того, чтобы, разделив на последующие кусочки, закрыть остальные три отдела, которые нам требуются. Окей, не проблема, делаем так. /25 сетка у нас уже используется. Второе разрезание: вторую /25 сетку делим на две части. Получаем две /26 сетки. Одну из этих /26 сеток мы как раз хотели найти, потому что у нас есть отдел с 50 пользователями. А вторую /26 сетку снова делим пополам, потому что нам нужно найти как минимум одну /27, самую большую из того, что осталось. Делим ее пополам, получаем две /27 сетки. Одну назначаем пользователям, которых 20 в одном отделе,
и для второго отдела у нас остается кусок — тоже /27 сетка, где 10 пользователей. Можем сказать: давайте поделим снова пополам, и у нас останется еще одна /28 сетка в запасе. Там уж как захотите, так и делайте. Можно делить, можно не делить. Этот сабнетинг по сути своей состоит из последовательного разделения одной большой сетки на кусочки, а потом дополнительно эти кусочки режутся на более мелкие кусочки. И в итоге вы получаете тот результат, который от вас требуется, просто в несколько проходов. На экзамене такого рода задачи могут быть. Опять же, от вас вряд ли потребуется указание точного количества IP-адресов. Скорее всего, от вас потребуется просто понимание того, на какие куски вы должны будете резать эти сети. Бывают экстремально редко, но всё-таки задачи на агрегацию. Если вам дают кусочки мелких сетей и спрашивают, во что их можно объединить.
Более строго говоря, вы можете дать ответ на вопрос, во что можно объединить кусочки мелких сетей, не в любом случае, а только в том случае, если мелкие сети изначально были порезаны на части с какой-то крупной. Если есть обратная задача — как из крупной сети сделать кучу мелких, то в этом случае вы можете сказать, что да, мы можем сделать обратный процесс, обратно агрегировать эти сети в какую-то большую крупную сеть. Какие должны быть условия для того, чтобы мелкие сети можно было агрегировать в крупную? Во-первых, все IP-адреса, которые у вас есть, из того, что вы хотите агрегировать в что-то более крупное, должны идти по порядку. Это обязательно должно быть выполнено для того, чтобы можно было агрегировать мелкие сети в крупные. Нельзя сказать, что у нас есть одна сеть здесь, другая тут, и вы это всё объедините в одну большую сеть. Потому что вы таким образом объедините кучу дополнительных адресов, которые вообще говоря к вам не относились. Это, может быть, какие-то адреса слева,
адреса в серединке между двумя сетями, адреса справа. Не любые сети можно агрегировать. Более того, если вы выпишете гипотетически все IP-адреса в двоичном представлении, которые вы хотите агрегировать, у них какие-то начальные биты у всех адресов должны быть одинаковые, а все остальные — пробегать вообще все возможные значения. Понятное дело, что в реальности от вас никто не будет требовать, чтобы вы все IP-адреса, которые у вас есть, особенно если крупные сетки какие-то предлагают агрегировать, выписывали в двоичном выражении и смотрели, что там совпадает, что не совпадает. Задачу удобно решать, на самом деле, в обратном порядке. Угадать тот адрес сети, который у вас должен получиться. А угадать его очень просто. Он самый маленький из всех адресов, которые у вас есть. Если вам говорят, у вас есть сеть 192.168.16.0/20, 16.64/26, 16.128/26 и 16.192/26.
Какой адрес самый маленький? Вот он. Соответственно, у родительской сети, если действительно эти сети можно агрегировать в одну большую сеть, без пропусков, без захватывания каких-то левых IP-адресов, если действительно всё это агрегируется, то самый маленький IP-адрес, который у нас есть, он получится IP-адресом родительской сети в итоге. И маску родительской сети вы опять же можете угадать, предположить, что если действительно всё складывается в одну крупную сеть, то маска будет вот какая. У вас есть 26-е маски, которые вы должны сложить в большое нечто. И этих сетей у вас 4 штуки. Гипотетически, если бы обратная задача решалась — что-то большое разделить на кусочки мелкие, чтобы получились 26-е сети, вам для 4-х подсетей потребовалось бы 2 битика под subnet ID украсть от host ID. Поэтому 26 бит минус 2, которые потенциально могли бы потребоваться под subnet ID, даёт вам гипотезу, что родительская сеть могла бы быть /24.
И вы говорите, давайте мы, решая задачу от обратного, предположим, что у нас есть сеть 192.168.16.0/24. IP-адрес мы взяли самый маленький из тех, которые у нас есть, а маску посмотрели, какая она должна была бы быть, чтобы если её разрезать на 4 части, получились 26-е сетки. Вот такую сетку мы угадали. И мы её режем на 4 части. Мы говорим: что будет, если эту сеть порезать на 4 части? Получатся ли такие сети или нет? Если вы видите сразу, что не получается, что, например, эта штука вообще не является адресом сети, то вы говорите: нет, это нельзя сложить в одну большую сеть, так, чтобы это всё по-честному получилось. Если вы видите, что задача решается, что действительно можно взять эту сеть и разделить на 4 части и получить именно эти самые адреса,
значит, вы правильно угадали, задача решена. На экзамене никто не будет проверять, каким способом вы решили задачу. Там вам дают вопрос и к нему несколько вариантов ответа — вы должны выбрать правильный. Поэтому таким образом эту задачу вполне удобно будет решать. На сегодня, пожалуй, всё, хватит. Перед походом на экзамен обязательно потренируйтесь на тренажёре, обязательно отточите навыки работы с IP-адресами до совершенства, потому что на экзамене чем лучше вы будете понимать, как устроены IP-адреса, как устроена адресация, тем меньше нервов вы будете тратить на решение задач, тем быстрее вы будете задачу решать, потому что если не отточить этот навык, на решение даже одной задачи на какой-нибудь условный subnetting вы потратите там условно 15 минут. На экзамене времени мало. На экзамене у вас не будет 15 минут на то, чтобы тратить на каждую отдельную задачу. С отточенным навыком вы на эти задачи потратите 2 минуты,
и у вас хватит времени на всё остальное. Плюс к тому, вы не будете волноваться, вы не будете переживать за то, что вы, возможно, решили задачу неправильно, потому что если вы отточите этот навык до совершенства, даже если вдруг вы где-то ошибаетесь в решении одной конкретной задачи, это опять же на результат не повлияет. Времени вы много не потратите, в задачах вы будете уверены, что решили их правильно, волноваться как следствие вы будете меньше, и это ключевые факторы как раз для успешной сдачи экзаменов. На сегодня всё. Спасибо за внимание.