6 апреля 2010 г.

Сетевая математика. Деление на подсети и все такое....

Экзамен CCNA. Сетевая математика.С самого начала хочу обратить внимание на тот факт, что данное статья не является теоретическим материалом по VLSM, это всего лишь более простой способ расчета. Прежде чем   знакомиться с ним, нужно понимать теорию по данному вопросу и быть готовым в любой момент проверить полученный результат в двоичной форме.
Так вот, для того чтобы сдать экзамен CCNA нужно уметь рассчитывать подсети. Это занятие, само по себе, трудно назвать увлекательным. Особенно когда не получается. Залог успеха в данном  мероприятии - знание степеней 2-ки от 0 до 12. На экзамене больше не понадобится, а в большинстве реальных ситуаций этого будет даже много. Еще нужно знать некоторые закономерности IP - адреса и маски подсети.

Меня с этими закономерностями познакомил один, в прямом смысле этого слова, "бородатый админ", который сопровождал привезенный нам на контору CISCO-роутер. Занося в серверную новую железяку, он застал меня за расчетом подстей. Классика жанра: адреса  и маски в бинарной форме, огромное количество изведенной бумаги... В общем, все плохо... Мне было предложено аккуратно все собрать и отправить в урну. После этого мне был показан "мастер-класс" по расчету подсетей и масок. Этот способ позволяет рассчитать подсети в уме... 


Прежде чем начать считать сети и маски, нужно хорошо запомнить небольшую таблицу степеней 2-ки (Таблица 1). 
Таблица 1
Еще нужно помнить вот такую математику ( Таблица 2 и Таблица 3). Это в общем-то и посчитать можно, но лучше если это помнить... Это может сэкономить время на экзамене.
Таблица 2
Таблица 3
Кроме того, нужно помнить что маска сети, с значением отличным от 0 или 255 указывает на разделяемый октет, а ее значение указывает "шаг", с которым будут меняться адреса подсетей в данном октете. Т.е. нет необходимости переводить маску в двоичную систему исчисления, для того чтобы вычислить количество заимствованных бит для адресации подсетей и количество оставшихся бит для адресации узлов. Достаточно просто вычесть из 256 значение маски.

Пример:
Есть адрес сети класса С 192.168.5.0 / 255.255.255.0 деленной на подсети с маской 255.255.255.224
Для того чтобы рассчитать "шаг" адресации нужно из 256 вычесть 224

256 - 224 = 32

Это и есть "шаг" и, в тоже время, количество адресов в данной подсети. Необходимо помнить что количество адресов, которые могут быть назначены узлам в данной подсети меньше на 2.  Один из которых - это адрес подсети, а второй - широковещательный адрес. К тому же, рассчитанный "шаг" указывает на количество бит используемых для адресации в пределах подсети. В данном случае 32 = 2^5.  Т.е. в четвертом октете заимствованы 3 бита для адресов подсетей и 5 бит остается для адресации узлов. Имея такую информацию можно легко рассчитать префикс сети.

Вот так будут выглядеть адреса подстетей, рассчитанные с использование значения "шага" равным 32
192.168.5./ 255.255.255.224  -    192.168.5.31 / 255.255.255.224  
192.168.5.32 / 255.255.255.224 -   192.168.5.63 / 255.255.255.224
192.168.5.64 / 255.255.255.224 -   192.168.5.95 / 255.255.255.224
192.168.5.96 / 255.255.255.224 -   192.168.5.127 / 255.255.255.224
192.168.5.128 / 255.255.255.224 - 192.168.5.159 / 255.255.255.224
192.168.5.160 / 255.255.255.224 - 192.168.5.191 / 255.255.255.224
192.168.5.192 / 255.255.255.224 - 192.168.5.223 / 255.255.255.224
192.168.5.224 / 255.255.255.224 - 192.168.5.255 / 255.255.255.224

Так как адресация начинается с 0, то инкрементируя адрес с использованием значения "шага" получаем следующий адрес сети.
Для того чтобы зная "шаг" вычислить сколько получится подсетей, необходимо 256 разделить на "шаг"

256 / 32 = 8

Если вместо маски указан префикс, то все еще проще. В случае с маской 255.255.255.224 префикс выглядел бы как /27.  В это случае придется вооружится знанием степеней 2-ки.
Стандартное количество бит в префиксе для сети класса С - /24, максимальное количество бит в маске 32.

Количество адресов в подсети 2 ^(32 - 27) = 2 ^5 = 32
Количество подсетей 2 ^(27 - 24) = 2 ^3 = 8

Т.е. из одной сети класа С 192.168.5.0/255.255.255.0  получается 8 подсетей по 32 адреса ( 30  из которых можно назначить узлам) если использовать маску 255.255.255.224 или префикс /27.

Немного иначе обстоят дела с сетью класса В. Общие принципы расчета остаются прежними.  В тоже время, когда речь ведется о расчете подсетей в пределах сети класса В, нужно быть предельно внимательным, так как именно в этом случае может возникнуть возможность для "вопроса с подвохом". По крайней мере, две таких возможности:
1. 4-й октет адреса равный 0 не всегда указывает на адрес подсети;
2. 4-й октет адреса равный 255 не всегда указывает на широковещательный адрес;
Это обусловлено тем, что адрес узла начинается в третьем октете, и если в четвертом октете 0 (все биты 4-го октета установлены в 0 ) или 255 (все биты 4-го октета установлены в 1 ), то это не означает на 100%,  что в третьем октете, в части адреса используемой для адресации узлов,  тоже самое.  Так что если в вопросе просят указать адреса сетей или широковещательные адреса, и если среди вариантов есть разделенная сеть класса В, то нужно сразу начинать подозревать создателей экзамена в подвохе. Хотя более правильным будет подозревать их в этом с самого начала экзамена, с самого первого вопроса...

Пример:
Есть адрес сети класса В 172.16.0.0 деленная на подсети с маской 255.255.240.0
Для того чтобы рассчитать "шаг" адресации нужно из 256 вычесть 240

256 - 240 = 16

Это и есть "шаг", но в отличии от предыдущего примера с сетью класса С , это значение не является количеством адресов в данной подсети. Это обусловлено тем, что разделение происходит в третьем октете, и еще есть четвертый октет, значения которого может меняться от 0 до 255 (всего 256 возможных вариантов). Для того, чтобы рассчитать количество  адресов в подсети, нужно "шаг" ( в нашем случае 16 ) умножить на 256. Звучит угрожающе, и кажется, что не обойтись без калькулятора, но в действительности это всего-лишь 4 раза по 1024, что уже не так уж страшно.

256*16 = 1024 * 4 = 4096

Не забываем о том, что количество адресов, которые могут быть назначены узлам в данной подсети меньше на 2.  Один из которых - это адрес подсети, а второй - широковещательный адрес. К тому же, рассчитанный "шаг" указывает на количество бит данного октета, используемых для адресации в пределах подсети. В данном случае 16 = 2^4.  Т.е. в третьем октете заимствованы 4 бита для адресов подсетей и 4 бита третьего октета для адресации узлов В данном случае, это не полное количество бит, используемое для адресации внутри подсети,  так как есть еще и четвертый октет с его 8-и битами.

Вот так будут выглядеть адреса подстетей, рассчитанные с использование значения "шага" равным 16

172.16.0.0 / 255.255.240.0  -    172.16.15.255 / 255.255.240.0
172.16.16.0 / 255.255.240.0 -   172.16.31.255 / 255.255.240.0  
172.16.32.0 / 255.255.240.0 -   172.16.47.255 / 255.255.240.0  
172.16.48.0 / 255.255.240.0 -   172.16.63.255 / 255.255.240.0  
172.16.64.0 / 255.255.240.0 -   172.16.79.255 / 255.255.240.0  
172.16.80.0 / 255.255.240.0 -   172.16.95.255 / 255.255.240.0  
172.16.96.0 / 255.255.240.0 -   172.16.111.255 / 255.255.240.0   
172.16.112.0 / 255.255.240.0 - 172.16.127.255 / 255.255.240.0    
172.16.128.0 / 255.255.240.0 - 172.16.143.255 / 255.255.240.0  
172.16.144.0 / 255.255.240.0 - 172.16.159.255 / 255.255.240.0  
172.16.160.0 / 255.255.240.0 - 172.16.175.255 / 255.255.240.0  
172.16.176.0 / 255.255.240.0 - 172.16.191.255 / 255.255.240.0  
172.16.192.0 / 255.255.240.0 - 172.16.207.255 / 255.255.240.0  
172.16.208.0 / 255.255.240.0 - 172.16.223.255 / 255.255.240.0  
172.16.224.0 / 255.255.240.0 - 172.16.239.255 / 255.255.240.0  
172.16.240.0 / 255.255.240.0 - 172.16.255.255 / 255.255.240.0    

Тоже самое, но  с использованием префикса. В случае с маской 255.255.240.0 префикс выглядел бы как /20.  Снова вооружаемся знанием степеней 2-ки.
Стандартное количество бит в префиксе для сети класса В - /16, максимальное количество бит в маске 32.

Количество адресов в подсети 2 ^(32 - 20) = 2 ^12 = 4096
Количество подсетей 2 ^(20 - 16) = 2 ^4 = 16

Т.е. из одной сети класа В 172.16.0.0 / 255.255.0.0  получается 16 подсетей по 4096 адресов ( 4094 из которых можно назначить узлам) если использовать маску 255.255.240.0 или префикс /20.

В общем все не очень-то сложно. Если нужно просто "нарезать" подсети исходя из выдвигаемых требований к количеству узлов или сетей.  Но не нужно расслабляться. Таких вопросов будет не так уж много. Создатели экзамена не упустят возможности подловить нас на чем-нибудь не слишком очевидном. Для того чтобы не попасться на уловки, нужно постараться предусмотреть все или, хотя бы, большую часть возможных каверз.

Первое  о чем не стоит забывать это о том, что реальное доступное к использованию количество адресов всегда меньше на 2 от числа отсекаемого маской или префиксом. Адрес сети и широковещательный адрес нельзя назначать узлам сети.

Второе о  чем следует помнить - это наличие в CISCO CLI команды "ip subnet-zero", которая позволяет использовать первую и последнюю подсети. Как правило, в таких случаях использование данной команды явно указывается в  тексте вопроса. Но все равно не стоит об этом забывать.

Третье что можно предположить - это более короткие префиксы ( маски меньшего размера ) в цепочке сетей, которую нужно продолжить. Т.е. нужно выбрать адресацию для новой сети. Для примера приведены несколько сетей с префиксом, например, /28, а последняя префиксом, например, /27. В заданий будет требоваться выбрать адресацию для следующей сети.  Как правило в таких случаях на автомате выбирается вариант ответа который не учитывает размер последней сети из примера.
Пример того как может выглядеть последовательность сетей на схеме

192.168.104.0/28
192.168.104.16/28
192.168.104.32/28
192.168.104.48/28
192.168.104.64/27

Возможный варианты ответов,  два из которых могут выглядеть примерно так

192.168.104.80/28
192.168.104.96/28

В таком случае, если не обратить внимание на префикс последней сети, логичным будет выбрать 192.168.104.80/28, но из-за более короткого префикса 192.168.104.64/27, получается что адреса накладываются, что неприемлемо. В таком случае правильный ответ 192.168.104.96/28.


Последним предполагаемым каверзным вариантом может оказаться адреса подсетей  и широковещательные адреса для сетей класса В, разделенных в 3-и октете.  В задании может требоваться указать широковещательные адреса, и приведены варианты ответов часть из которых легко распознается как широковещательные адреса, а также два адреса которые могут выглядеть так: 


192.168.5.159 / 27

172.16.94.255 / 20


Так и тянет выбрать 172.16.94.255 / 20 в качестве широковещательного адреса, а это адрес узла. Из этих двух вариантов  192.168.5.159 / 27 является широковещательным адресом. 


Тоже самое, но вместо широковещательных адресов - адреса сети. Варианты ответов, часть из которых легко узнаются как адреса сети, а также два адреса которые могут выглядеть так: 


192.168.5.48 / 29


172.16.94.0 / 20








Опять хочется выбрать 172.16.94.0 / 20 в качестве адреса сети, а это опять адрес узла. Из этих двух вариантов  только 192.168.5.48 / 29 является адресом сети. 
Других вариантов пока не вижу. Буду очень признателен за идеи в данном направлении. Очень хочется, отдавая 250 американских монет за возможность сдать экзамен, хотя бы частично контролировать ситуацию на экзамене, а это возможно только в случае готовности ко большинству возможных вариантов развития событий.

36 комментариев:

Анонимный комментирует...

Спасибо

Unknown комментирует...

просто офигительно все расписано, спасибо

Unknown комментирует...

>>Т.е. из одной сети класа В 172.16.0.0 / 255.255.0.0 получается 16 подсетей по 4096 адресов

В маске опечатка?

Dave комментирует...

У сетей класса В маска 255.255.0.0 по умолчанию, а дальше написано >> если использовать маску 255.255.240.0 или префикс /20.

Анонимный комментирует...

Спасибо, очень большое!!!

leo комментирует...

Огромное спасибо, давно пытался понять как выбирать маски подсетей, и смутно понимал для чего они. Теперь всё предельно ясно и Для чего нужно, и Самое главное как делить сети :)

Анонимный комментирует...

Молодец! Спасибо за толковое изложение!

Анонимный комментирует...

непонял зачем мешать в кучу CIDR и классовую адресацию

Dave комментирует...

Это не научная статья описывающая идею CIDR, а небольшое практическое руководство для тех кто собирается сдавать экзамен CCNA и готовится отвечать на вопросы по теме "Subneting". Может быть где-то и не выдержал "чистоту идеи", главное чтобы было понятно...

Анонимный комментирует...

Молодец, автору 5+. Как раз готовлюсь к сдаче CCNA. Очень помог :)

Fayno комментирует...

Прежде всего большое спасибо. Пролило свет на многое. Однако для себя актуальным оставил один вопрос. Как можно проще рассчитывать префикс маски. Ведь изначально обычно дается маска с префиксом. Например 192.168.0.1/24. Как узнать что это 255.255.255.0?

Dave комментирует...

Тут не обойтись без двоичной математики. Маска состоит из 4 октетов. Максимальное десятичное значение 255. Это наши целые октеты. Т.е. пусть префикс будет не 24, а, например 26. В таком случае у нас 3-и октета заполненных единицами (24 бита), а в последнем только 7 и 6 биты (если считать начиная с 0 ) установлены в 1. Это 128(2^7) + 64(2^6) = 192. Вот и вся математика. Значения 2 в степени от 0 до 7 нужно знать наизусть.

Dave комментирует...

А если наоборот из маски префикс, то нужно разложить на слагаемые. Слагаемые могут быть только равны одному из степеней 2, начиная с самого большего 128 ( 128,64,32,16,8,4,2,0). Т.е. если маска, например 255.255.255.248, то получаем 248=128(2^7)+64(2^6)+32(2^5)+16(2^4)+8(2^3). При этом только подряд. После 128, может быть только 64, за ним 32 и т.д. В маске есть логика, биты принимают значение 1 только подряд. От большего к меньшему. Соответственно посчитать какой из битов установлен в 1 можно в уме. Получается 7,6,5,4 и 3 биты установлены в 1. Соответственно получаем префикс (3*8)+ 5 = 29.

Анонимный комментирует...

Огромнейшее спасибо!!!!!!!

Fayno комментирует...

Первый вариант очень даже ничего. Спасибо. Только попривыкнуть к нему надо:)

Анонимный комментирует...

Гуд объяснил, до этого как то не приходило в голову расчитывать шаг в десятичной) Оказ проще некуда)

Анонимный комментирует...

спасибо огромное.. все предельно ясно.

Анонимный комментирует...

Спасибо! Теперь делю сети на раз!!!

Анонимный комментирует...

парни помогайте поделите мне пожалуйста сеть
15,152,15,0\24 на пять под ситей )))
очень срочно надо я на экзамене )

Анонимный комментирует...

15.152.15.0 255.255.255.128 и четыре подсети с маской 255.255.255.224 начиная с 15.152.15.128 по 32 адреса.

Анонимный комментирует...

Привет Dave, очень интересный топик , только это очень всё понятно нужен такой только по IPv6 )) будет интереснее )

Dave комментирует...

Это уж точно. Одна проблема - у меня еще не очень хорошо умещаются в голове эти длинные числа адреса IPv6.

Анонимный комментирует...

Отличный пример деления на подсети без применения двоичной математике. Намного удобней делить сети в десятичном представлении. Это ближе и понятней.

Анонимный комментирует...

добрый день, если не трудно добавьте пример с сетями класса А

Dave комментирует...

Сети класса А выходят за пределы чисел, которыми можно оперировать в уме. К тому же, на экзамене вам не придется оперировать префиксами короче 16.

Анонимный комментирует...

я ваще ни че не понял!

Dave комментирует...

И такое возможно. Эта статья не объясняет зачем и почему, а только объясняет как это сделать проще. В первом абзаце так и написано.

Анонимный комментирует...

помогите решитъ задачку: дана Сеть класса А 84.0.0.0. с маской 255.0.0.0 , нужно подсчитать сколько субсетей можно из этого сделать?

Dave комментирует...

Ответ зависит от того какой префикс будет выбран для подсетей.

Анонимный комментирует...

вот именно, но в задании есть только то что я написал, получается что одна? только для префикса 8

Анонимный комментирует...

блин нужно максимальное количество сетей, задание неправильно перевел на русский

Dave комментирует...

Самая маленькая подсеть, которую можно отрезать - это сеть на четыре адреса. Маска 255.255.255.252, прификс 30. Итого 4194304 сети по 4 адреса, 2 из которыз могут быть назначены хостам. Это где ж такие вопросы задают? Уж точно не на экзамене CCNA, потому как на экзамене нет вычислений которые нельзя проделать в уме.

Анонимный комментирует...

"Количество адресов в подсети 2 ^(32 - 20) = 2 ^12 = 4096
Количество подсетей 2 ^(20 - 16) = 2 ^4 = 16


Т.е. из одной сети класа В 172.16.0.0 / 255.255.0.0 получается 16 подсетей по 4096 адресов ( 4094 из которых можно назначить узлам) если использовать маску 255.255.240.0 или префикс /20."
Добрый день!
замечание, либо я что-то не понял (:
В каждой сети должно быть по 2 адреса, которые не возможно указать (сеть и broadcast), т.е. получается не 4094, а 4064 (4096 - 2*16) при использовании /20.
разве не так?
зы.сы. очень благодарю за блог!

Анонимный комментирует...

не правильно понял формулировку - вопрос отпал :)

Dave комментирует...

16 подсетей по 4096 адреов. Всего 4096 адресов в одной подсети, два из которых броадкаст и адрес сети. Т.е в каждом адресном пространстве из 16 будет всего два адеса, которые нельзя использовать по описанной выше причине. 32 неиспользуемых адреса будет в 16 подсетях, но это не касается отдельно взятой подсети, в которой их всего 2.

Анонимный комментирует...

Спасибо большое - хорошая статья.

Отправить комментарий