25 апреля 2011 г.

Сетевая математика. Суммирование маршрутов.

Сетевая математика CCNA
Не смотря на то, что IPv4 доживает свои последние дни, вопросы связанные с сетевой адресацией все еще актуальны для всех претендентов на почетное звание CCNA. В прошлой публикации, посвященной сетевой математике, не была затронута одна тема - суммирование маршрутов. Эта тема не намного сложней деления сетей. К сожалению, суммирование маршрутов невозможно делать без перевода адресов суммируемых сетей в двоичную форму.  Но это не должно доставить много хлопот, так как есть некоторые методы, позволяющие упростить данную задачу. Рассмотрению данных методов и посвящена данная публикация.
Для того, чтобы более эффективно решать задачи по суммированию маршрутов нужно с самого начала правильно выбрать адреса сетей, на основе которых будет вычисляться суммарный адрес сети. Это абсолютно не сложно. Их всего два:  самый младший и самый старший.  Для этого анализируем группу предоставленных адресов начиная от старшего октета к младшему, до тех пор пока не находим старший разделяемый октет. Именно на основе старшего разделяемого октета принимается решение. Все что происходит дальше нам не интересно. После того, как будет найден старший разделяемый октет, его максимальное десятичное значение и есть наш старший адрес, а его минимальное десятичное значение - младший. Нет необходимости, как это показано в большинстве примеров по суммированию, переводить все предоставленные адреса сетей в двоичную форму. 
Второе что нужно уметь делать - это быстро переводить числа от 0 до 255 в двоичную форму. Тот факт, что диапазон чисел, переводимых из десятичной формы в двоичную, ограничивается этим диапазоном, а также знание значений степени 2 от 0 до 7, позволяет делать это более быстро.

7
6
5
4
3
2
1
0
128
64
32
16
8
4
2
1
Значения степени 2 от 0 до 7

Перевод десятичного числа от 0 до 255 в двоичную форму наиболее эффективно делается простым вычитанием  максимально возможного значения степени 2.   С результатом данного вычитания ( остатком ) поступают так же как и с самим числом до тех пор пока остаток не будет равен 0. Каждое "успешное" вычитание показывает нам, какой бит адреса установлен в 1. Если остаток будет равен 0, еще до того как будет произведено вычитание 2 в степени 0, то это будет означать, что все оставшиеся биты равны 0. Возможно это кажется немного запутанным, но на практике это очень просто.  Пример перевода числа 187 в двоичную  форму.


Вычитание
Значение бита
Номер бита
187 - 128  =  59
1
7
  59  -  64
0
6
  59  -  32  =  27
1
5
  27  -  16  =  11
1
4
  11  -    8  =    3
1
3
    3  -    4
0
2
    3  -    2  =    1
1
1
    1  -    1  =    0
1
0

В результате этих вычислений получаем двоичное число 10111011. Это и есть двоичная запись десятичного числа 187.  Не так уж сложно.  Этот метод граничит с простым перебором, и конечно же не подходит для перевода больших чисел из десятичной формы в двоичную. Но в случае с числами от 0 до 255, это проще и быстрей, чем переводить число методом последовательного деления на 2. 
Описанные выше методы не меняют в корне саму идею суммирования, но позволяют делать ее более эффективно.  Далее пример суммирования адресов.

Дана группа сетей.

140.176.56.128 / 25
140.176.31.0 / 25
140.176.16.192 / 26
140.176.63.128 / 26
140.176.34.0 / 25

Необходимо эту группу сетей представить одним суммарным адресом.

Для начала необходимо найти старший и младший адрес в этой группе. Третий октет является страшим  разделяемым октетом.  Максимальное значение 63, минимальное - 16. Получаем два адреса. значения третьего октета которых необходимо перевести в двоичную форму:

140.176.56.128 / 25
140.176.31.0 / 25
140.176.16.192 / 26
140.176.63.128 / 26
140.176.34.0 / 25

Переводим оба числа в двоичную форму.

63 = 00111111
16 = 00010000

У этих двух последовательностей нулей и единиц в левой части есть два бита, значения которых совпадают.   Все что после этих двух бит заполняем нулями, и в результате получаем суммарный адрес сети.  Эти же два общих бита указывают на границу маски сети или число бит в префиксе суммарного адреса. 

140.176.0.0 / 18

Тоже самое, но для другой группы сетей:

140.176.156.128 / 25
140.176.143.192 / 26
140.176.129.128 / 25
140.176.135.128 / 26
140.176.156.192 / 26

1.  Находим старший и младший адреса

140.176.156.128 / 25
140.176.143.192 / 26
140.176.129.128 / 25
140.176.135.128 / 26
140.176.156.192 / 26

2. Переводим значения старшего и младшего октетов в двоичную форму

129  = 10000001
156 =  10011100

3. В левой чести двух последовательностей три одинаковых бита.

10000001
10011100

4.  В результате получаем наиболее приемлемый суммарный адрес

140.176.128.0/19

Для того чтобы более уверенно решать подобные задачи на экзамене CCNA можно дополнительно попрактиковаться в Cisco Binary Game. Эта игра дает возможность производить в уме большую часть вычислений, связанных с переводом десятичного числа в двоичную форму. 

22 комментария:

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

Привет, обратите внимание на цифры в подсетях, есть расхождения!

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

Ага. Исправил. Номера сетей из первого варианта статьи. Потом поменял решение, а условие не изменил.

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

Скажите, а еслив левой части числа нет одинаковых битов? Например,
Старший адрес:
140.176.1.128 / 25
Младший адрес:
140.176.156.192 / 26

Таким образом,
1 = 00000001
156 = 10011100

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

Ну как же нету. Навскидку, не переводя в двоичную форму вижу как минимум 16 штук одинаковых бит 140.176.Х.Х :). Так что есть что суммировать. Может быть не очень красиво и достаточно широкий диапазон получится, но просуммировать можно. Вот - 140.176.0.0/16.

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

мог бы и расписать по подробнее

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

Что именно непонятно или недостаточно подробно описано?

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

Здравствуйте! Скажите пожалуйста,а можно суммировать маршруты только с одинаковыми масками или можно с разными?

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

Да :)

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

не видишь что-ли, в примерах написаны разные маски.. можно с любыми масками суммировать

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

Добрый день. Скажите пожалуйста, допустим у нас есть несмежная сеть. Применяется технология суммирования. Должны ли мы прописывать какие-то команды на маршрутизаторах для того чтобы он суммировал, либо он это делает сам?

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

Не плохо бы увидеть схему. Лучше в обсуждения группы ВКонтаке http://vkontakte.ru/ccnastepbystep.

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

адрес группы поменялся http://vk.com/ciscocertified

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

поясните как высчитывается число бит в префиксе суммарного адреса?

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

Подскажите пожалуйста, как префикс получается в первой и второй задаче.

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

Префикс указывает на границу общих бит в адересе. Если рассматривать первый пример, то в обоих адресах первые два октета идентичны (это дает нам 16 бит префикса), и из двоичной формы чисел 16 (00010000) и 63 (00111111) мы видим еще два общих бита (в статье общие биты выделены жирным). В итоге мы получаем префикс 18. Идентичным образом расчитывается префикс и для второго примера, но во втором случае в третьем октете на 1 общий бит больше, и префикс чуть длинней. Все остальное во втором примере идентично.

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

Хочу обратить внимание на обсчет 3 октета результата в примере:
140.176.0.0 / 18 Третий октет 0. Почему так получилось:
8 бит октета минус 2 высчитанных в примере дает 6 бит 2в6= 64. т.е 4 сети в пределах 0 до 255. и .16. и .63. входят в первую сеть с диапазоном IP .0.0-63.255

Второй резултат
140.76.128.0/19: 8-3=5; 2в5=32 8 подсетей наиболее близкая к диапазону .129. .156. подсеть 128.0-159.255

Пример из коментария имеет размах больше чем 2в7=128 и потому требует маски 16- ни одного бита добавить не получится.

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

Не сразу понял о каких примерах суммирования сетей идет речь. Вот этот пример из коментария?

>>Скажите, а еслив левой части числа нет >>одинаковых битов? Например,
>>Старший адрес:
>>140.176.1.128 / 25
>>Младший адрес:
>>140.176.156.192 / 26

>>Таким образом,
>>1 = 00000001
>>156 = 10011100

В этом случае действительно невозможно сделать другой префикс, кроме как /16

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

Чувствую себя роботом сейчас после прочтения сообщения...цыфры в голове летают туда-сюда

Вячеслав Потапов комментирует...

Как там маски получаются 18 и 19...я не понял...

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

В обоих примерах суммирование происходит в третьем октете. В первом примере у младшего и старшего адресов есть 2 одинаковых бита при переводе в двоичную форму, во втором примере - 3. Плюс еще два октета по 8 бит. В итоге получаем 18 и 19 соттветственно.

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

10000001
10011100

4. В результате получаем наиболее приемлемый суммарный адрес

***140.76.128.0/19


->> 140.176, instead of .76.

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

Да, точно. Опечатка.

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