tanenbaum_seti_all.pages (525408), страница 135
Текст из файла (страница 135)
Если номера сети, в которую посылается пакет, в таблице маршрутизатора нет, пакет пересылается маршрутизатору по умолчанию, с более подробными таблицами. Такой алгоритм ббб Глава 6. Сетевой уровень означает, что казсдый маршрутизатор должен учитывать только другие сети и докальные хосты, а не пары <сеть, хост>, что значительно уменьшает размер таблиц маршрутизатора. Прн разбиении сети на подсети таблицы маршрутизации меняются — добавляются записи вида ~эта сеть, подсеть, О> и <эта сеть, эта подсеть, хост>. Таким образом, маршрутизатор подсети ь' знает, как получить доступ ко всем другим подсетям и как добраться до всех хостов своей подсети.
Ему нет нужды знать детали адресации хостов в других подсетях. На самом деле, все, что для этого требуется от маршрутизатора, это выполнить двоичную операцию И над маской подсети, чтобы избавиться от номера хоста, а затем найти получившийся адрес в таблицах (после определения класса сети). Например, пакет, адресованный хосту с 1Р-адресом 130.50.15.6 и прибывающий на центральный маршрутизатор, после выполнения операции И с маской 255.255.252,0/22 получает адрес 130,50.12.0.
Это значение ищется в таблицах маршрутизации, и с его помощью определяется выходная линия маршрутизатора к подсети 3. Итак, разбиение на подсети уменьшает объем таблиц маршрутизаторов путем создания трехуровневой иерархии, состоящей из сети, подсети и хоста. С10й — бесклассоаая междомеииая маршрутизация В течение многих лет 1Р оставался чрезвычайно популярным протоколом. Он работал просто прекрасно, и основное подтверждение тому - экспоненциальный рост сети Интернет.
К сожалению, протокол! Р скоро стал жертвой собственной популярности: стало подходить к концу адресное пространство. Эта угроза вызвала бурю дискуссий и обсуждений в Интернет-сообшестве. В этом разделе мы опишем как саму проблему, так и некоторые предложенные способы ее решения. В теперь уже далеком 1987 году некоторые дальновидные люди предсказывали, что настанет день, когда в Интернете будет 100 000 сетей. Большинство экспертов посмеивались над этим и говорили, что если такое когда-нибудь и произойдет, то не раньше, чем через много десятков лет. Стотысячная сеть была подключена к Интернету в 1996 году.
И, как уже было сказано, нависла угроза выхода за пределы пространства 1Р-адресов. В принципе, существует 2 миллиарда адресов, но на практике благодаря иерархической организации адресного пространства (см. Рис. 5.48) это число сократилось на миллионы. В частности, одним из виновников этого является класс сетей В.
Для большинства организаций класс А с 16 миллионами адресов — это слишком много, а класс С с 256 адресами — слишком мало. Класс В с 65 536 адресами — это то, что нужно. В интернет- фольклоре такая дилемма известна под названием проблемы трех медведей (вспомним Машу и трех медведей). На самом деле и класс В слишком велик для большинства контор, которые устанавливают у себя сети. Исследования показали, что более чем в половине случаев сети класса В включают в себя менее 50 хостов. Безо всяких сомнений, всем этим организациям хватило бы и сетей класса С, однако почему-то все уверены, что в один прекрасный день маленькое предприятие вдруг разрастется настолько, что сеть выйдет за пределы 8-битного адресного пространства хостов.
Сейчас, оглядываясь назад, кажется, что лучше было бы использовать в классе С Сетевой уровень в Интернете 507 10-битную адресацию (до 1022 хостов в сети). Если бы это было так, то, возможно, большинство организаций приняло бы разумное решение устанавливать у себя сети класса С, а не В, Таких сетей могло бы быть полмиллиона, а не 16 384, как в случае сетей класса В. Нельзя обвинять в создавшейся ситуации проектировщиков Интернета за то, что они не увеличили (или не уменьшили) адресное пространство сетей класса В. В то время, когда принималось решение о создании трех классов сетей, Интернет был инструментом научно-исследовательских организаций США (плюс несколько компаний и военных организаций, занимавшихся исследованиями с помощью сети).
Никто тогда не предполагал, что Интернет станет коммерческой системой коммуникации общего пользования, соперничающей с телефонной сетью. Тогда кое-кто сказал, ничуть не сомневаясь в своей правоте: «В США около 2000 колледжей и университетов. Даже если все они подключатся к Интернету и к ним присоединятся университеты из других стран, мы никогда не превысим число 16 000, потому что высших учебных заведений по всему миру не так уж много. Зато мы будем кодировать номер хоста целым числом байт, что ускорит процесс обработки пакетовь.
Даже если выделить 20 бит под адрес сети класса В, возникнет другая проблема: разрастание таблиц маршрутизации. С точки зрения маршрутизаторов, адресное пространство 1Р представляет собой двухуровневую иерархию, состоящую из номеров сетей и номеров хостов. Маршрутизаторы не обязаны знать номера вообще всех хостов, но им необходимо знать номера всех сетей. Если бы использовалось полмиллиона сетей класса С, каждому маршрутизатору пришлось бы хранить в таблице полмиллиона записей, по одной для каждой сети, в которых сообщалось бы о том, какую выходную линию использовать, чтобы добраться до той или иной сети, а также о чем-ннбудь еще. Физическое хранение полумиллиона строк таблицы, вероятно, выполнимо, хотя и дорого для маршрутизаторов, хранящих таблицы в статической памяти плат ввода-вывода.
Более серьезная проблема состоит в том, что сложность обработки этих таблиц растет быстрее, чем сами таблицы, то есть зависимость между ними не линейная. Кроме того, большая часть имеющихся программных и программно-аппаратных средств маршрутизаторов разрабатывалась в те времена, когда Интернет объединял 1000 сетей, а 10 000 сетей казались отдаленным будущим. Методы реализации тех лет в настоящее время далеки от оптимальных. Различные алгоритмы маршрутизации требуют от каждого маршрутизатора периодической рассылки своих таблиц (например, протоколов векторов расстояний). Чем больше будет размер этих таблиц, тем выше вероятность потери части информации по дороге, что будет приводить к неполноте данных и возможной нестабильности работы алгоритмов выбора маршрутов. Проблема таблиц маршрутизаторов может быть решена при помощи увеличения числа уровней иерархии.
Например, если бы каждый 1Р-адрес содержал поля страны, штата, города, сети и номера хоста. В таком случае каждому маршрутизатору нужно будет знать, как добраться до каждой страны, до каждого штата или провинции своей страны, каждого города своей провинции или штата и до 61)8 Глава 5. Сетевой уровень каждой сети своего города. К сожалению, такой подход потребует существенно более 32 бит для адреса, а адресное поле будет использоваться неэффективно (для княжества Лихтенштейн будет выделено столько же разрядов, сколько для Соединенных Штатов), Таким образом, большая часть решений разрешает одну проблему, но взамен создает новую.
Одним из решений, реализуемым в настоящий момент, является алгоритм маршрутизации СПЖ (С!азз!езз 1пгегРоша!и Кош!пй — бесклассовая междоменная маршрутизация). Идея маршрутизации СПЖ, описанной в КЕС 1519, состоит в объединении оставшихся адресов в блоки переменного размера, независимо от класса. Если кому-нибудь требуется, скажем, 2000 алресов, ему выделяется блок из 2048 адресов на границе, кратной 2048 байтам.
Отказ от классов усложнил процесс маршрутизации. В старой системе, построенной на классах, маршрутизация происходила следующим образом. По прибытии пакета на маршрутизатор копия 1р-адреса, извлеченного из пакета и сдвинутого вправо на 28 бит, давала 4-битный номер класса. С помощью 16-альтернативного ветвления пакеты рассортировывались на А, В, С и Р (если этот класс поддерживался): восемь случаев было зарезервировано для А, четыре для В, два для С и по олному для Р и Е. Затем при помощи маскировки по коду каждого класса определялся 8-, 16- или 32-битный сетевой номер, который и записывался с выравниванием по правым разрядам в 32-битное слово. Сетевой номер отыскивался в табдице А, В или С, причем для А и В применялась индексация, а лля С вЂ” хэш-функция.
По найденной записи определялась выходная линия, по которой пакет и отправлялся в дальнейшее путешествие. В С1РК этот простой алгоритм применить не удается. Вместо этого применяется расширение всех записей таблицы маршрутизации за счет добавления 32-битпой маски. Таким образом, образуется елиная таблица для всех сетей, состоящая из набора троек (1р-адрес, маска подсети, исходящая линия). Что происходит с приходящим пакетом при применении метода С1РК? Во-первых, извлекается 1Р-адрес назначения. Затем (концептуально) таблица маршрутизации сканируется запись за записью, адрес назначения маскируется и сравнивается со значениями записей. Может оказаться, что по значению подойдет несколько записей (с разными длинами масок подсети).
В этом случае используется самая длинная маска. То есть если найдено совпадение для маски /20 и /24, то будет выбрана запись, соответствующая /24. Выл разработан сложный алгоритм для ускорения процесса поиска адреса в таблице (Кшх-Яансон и др., 2001). В маршрутизаторах, предполагающих коммерческое использование, применяются специальные чипы Ъ'1 51, в которые джные алгоритмы встроены аппаратно. Чтобы лучше понять алгоритм маршрутизации, рассмотрим пример. Допустим, имеется набор из миллионов адресов, начиная с 194.24.0.0.
Допустим также, что Кембриджскому университету требуется 2048 адресов, и ему выделяются адреса от 194.24.0.0 до 194.24.7.255, а также маска 255.255.248.0. Затем Оксфордский университет запрашивает 4096 адресов. Так как блок из 4096 адресов должен располагаться на границе, кратной 4096, то ему не могут быть выделены адреса начиная с 194.24.8.0. Вместо этого он получает адреса от 194,24.16.0 до Сетевой уровень в Интернете БОО 194.24.31.255 вместе с маской 255.255.240.0. Затем Эдинбургский университет просит выделить ему 1024 адреса и получает адреса от 194.24.8.0 до 194.24.11,255 и маску 255.255.252.0.