Наиболее значимыми технологиями обработки передаваемых данных (пакетов) являются коммутация и маршрутизация. До недавнего времени эти два понятия имели абсолютно разные значения — как по технологии обработки пакетов, так и по уровням модели OSI (о модели OSI мы рассказывали в КомпьютерПресс 2’2000), на которых работают оба эти метода управления данными в сети, — и не могло быть и речи, чтобы объединить эти понятия. Сегодня развитие сетевых технологий идет быстрыми темпами. Все возрастающий объем передаваемой информации, физический рост сетей и межсетевого трафика подстегивают производителей к выпуску все более мощных и «умных» устройств, использующих новые (совсем новые или комбинации традиционных) методы передачи и сортировки данных.Следующие две лекции курса, публикуемого совместно с «Академией АйТи», посвящены обзору «классических» технологий — коммутации и маршрутизации, а также методам их комбинирования для оптимизации межсетевого трафика и увеличения производительности.
Курс лекций по сетевым технологиям. Часть II
Традиционная коммутация
Что же такое коммутатор? Согласно определению IDC «коммутатор — это устройство, конструктивно выполненное в виде концентратора и действующее как высокоскоростной многопортовый мост; встроенный механизм коммутации позволяет осуществлять сегментирование локальной сети и выделять полосу пропускания конечным станциям в сети».
Другими словами, коммутаторы 2-го уровня являются по сути обычными очень быстрыми многопортовыми мостами на основе стандарта IEEE 802.1d.
Концепция работы коммутатора 2-го уровня очень проста. Рассмотрим в качестве примера функционирование узла А (рис. 1.). Любой кадр, отправленный узлом А и имеющий адрес получателя в узле на сегменте Бета (например, Q), приходит в порт 1 коммутатора 2-го уровня и выходит из порта 2, чтобы быть полученным узлом Q. Этот процесс называется ретрансляцией (forwarding). Говорят, что кадр ретранслирован, если он получен одним портом коммутатора 2-го уровня и передан через другой.
Кадр, переданный узлом А и имеющий адрес получателя, который соответствует узлу В, естественно, приходит и на узел В, и на коммутатор 2-го уровня. Тем не менее коммутатор 2-го уровня знает, что узлы А и В находятся в одном сегменте, поэтому кадр не ретранслируется. Данный процесс называется фильтрацией (filtering). Говорят, что кадр отфильтрован, если он получен одним портом коммутатора и не ретранслирован другим.
Обратите внимание, что, мы используем термин «кадр», а не «пакет». Коммутатор — это устройство уровня 2, которое оперирует кадрами, а не пакетами как повторитель. Коммутатор работает с кадрами и понимает адреса MAC. Повторитель работает только с пакетами, в которых содержатся кадры. Порт коммутатора, как и узла, является обычным сетевым интерфейсом со средствами MAC. Фактически коммутатор представляет собой узел, обладающий несколькими сетевыми интерфейсами.
В литературе и технических описаниях коммутаторов и некоторых сетевых устройств часто говорят, что они работают (коммутируют или маршрутизируют трафик) на полной скорости канала (wire speed). Что это значит? Предположим, в ходе тестирования выяснилось, что устройство маршрутизирует 20 потоков Ethernet на полной скорости канала. Следовательно, оно маршрутизирует пакеты с такой же скоростью, с какой они поступали по 20 каналам Ethernet. При размере пакета 64 байт мы получаем скорость маршрутизации около 297 тыс. пакетов в секунду.
Важно подчеркнуть, что если маршрутизатор работает на скорости канала, то бессмысленно говорить о том, что он работает медленно.
В этом случае производительность маршрутизации определяется не скоростью работы устройства, а пропускной способностью каналов связи.
Для ретрансляции кадров из одного сегмента ЛВС в другой коммутатор может использовать следующие способы коммутации:
- Cut-Through (сквозная коммутация);
- Interim Cut-Through (модифицированная сквозная коммутация);
- Store-and-Forward (накопление и ретрансляция или промежуточная буферизация);
- гибридная коммутация.
Каждый из этих способов имеет свои преимущества и недостатки.
Технология коммутации 2-го уровня обеспечивает высокую производительность, позволяет строить достаточно сложные сети, являющиеся широковещательными доменами (областями).
Классическая маршрутизация
Главное различие между маршрутизатором и коммутатором 2-го уровня состоит не в производительности, а в способе принятия решения о ретрансляции. Маршрутизаторы используют для этой цели заголовок протокола, а не кадра. Как мы уже говорили ранее, разные сетевые технологии работают на различных уровнях модели OSI. Повторители являются устройствами уровня 1, мосты и коммутаторы — устройствами уровня 2, а маршрутизаторы — устройствами уровня 3.
Повторители работают с пакетами и не зависят от содержимого поля данных пакета, в котором заключен кадр. Мосты и коммутаторы работают с кадрами и не зависят от содержимого поля данных кадра, в котором обычно (но не всегда) заключена дейтаграмма. Маршрутизаторы работают с дейтаграммами, которые иногда называются пакетами данных, или сообщениями. Работа маршрутизаторов обычно не зависит от содержимого поля данных дейтаграммы, но тем не менее некоторые интеллектуальные маршрутизаторы должны разобраться в его содержимом, прежде чем принять весьма важное решение о ретрансляции или фильтрации.
При традиционной технологии каждый пакет обрабатывается маршрутизатором индивидуально, при этом устройство выполняет четко определенную последовательность операций, к тому же такие операции, как просмотр таблицы маршрутов, формирование нового MAC-адреса, уменьшение поля TTL и т.д., являются обязательными. Некоторые маршрутизаторы обладают дополнительными функциями, например фильтрацией. Выполнение основных и дополнительных операций отнимает много времени. В результате многие сетевые администраторы больших распределенных сетей со значительной нагрузкой довольно неохотно активизируют дополнительные функции обработки пакетов на маршрутизаторах. Рис. 2 иллюстрирует традиционную схему обработки пакетов.
И коммутаторы, и мосты, и маршрутизаторы соединены с сетью обычным сетевым интерфейсом. Тем не менее маршрутизатор работает не так, как коммутатор. Каждый узел, нуждающийся в передаче данных по маршрутизованной сети, должен участвовать в процессе, отправляя необходимые дейтаграммы непосредственно маршрутизатору. Коммутатор же получает все кадры сети вне зависимости от их назначения, а ретранслирует только кадры, предназначенные другим сегментам.
При отправке дейтаграммы узел помещает в поле отправителя собственный сетевой адрес, а в поле получателя — сетевой адрес получателя. Прежде чем передать дейтаграмму, узел должен установить, может ли он отправить ее непосредственно получателю или же ее нужно переслать маршрутизатору. Узел может отправить дейтаграмму непосредственно получателю, без использования маршрутизатора, если его собственный номер сети совпадает с номером сети получателя. В случае Ethernet это означает, что оба узла находятся в одной широковещательной области. Узел просто заполняет МАС-адрес кадра сетевым адресом получателя. Если же номера сетей отправителя и получателя не совпадают, то передающий узел должен поместить дейтаграмму в кадр, адресованный маршрутизатору, после чего маршрутизатор возьмет на себя заботу о доставке дейтаграммы получателю.
Большое преимущество маршрутизаторов перед коммутаторами и мостами состоит в том, что маршрутизированная сеть хорошо масштабируется. Под масштабируемостью в данном случае понимается способность маршрутизованной сети быть достаточно большой и сложной и в то же время работать должным образом, обеспечивать нужную производительность и оставаться управляемой. Сеть с коммутаторами (мостами) в отличие от нее масштабируется плохо.
Маршрутизованные сети могут быть исключительно сложными, намного сложнее сетей с мостами. Колоссальной маршрутизованной сетью, которая соединяет миллионы компьютеров всего мира, является Internet. Такие сети хорошо масштабируются именно благодаря наличию маршрутизаторов. Сети с коммутаторами (или мостами) не масштабируются при достижении определенного размера по следующим причинам:
- широковещательные кадры занимают слишком большую часть полосы пропускания;
- сеть всегда должна оставаться остовным деревом.
Коммутаторы и мосты хорошо подходят для сегментирования отдельных областей коллизий. В сети с коммутаторами однопунктовые кадры распространяются только по тем сегментам, которые необходимы для доставки кадра от отправителя к получателю. А в сети с мостами широковещательный кадр, переданный одним узлом, должен быть получен всеми узлами. Когда размер сети с мостами возрастает, то все большая часть общего сетевого трафика становится широковещательной, оставляя все меньше места для кадров, несущих полезную информацию. Другими словами, чем больше широковещательных кадров, тем меньше показатель использования сети. Тем самым устанавливается практический предел размеру сети с мостами или переключателями.
Сеть с коммутаторами должна также оставаться остовным деревом. Это означает, что один коммутатор должен быть первичным, или корневым, мостом (root bridge). Если корневой мост выходит из строя, то оставшиеся должны восстановить остовное дерево. В больших сетях с мостами это отнимает много времени и часто становится причиной катастрофы, поскольку сеть с мостами не может иметь активных избыточных связей. Трудно представить, что Internet зависит от единственного устройства!
Так как маршрутизаторы не пропускают широковещательных кадров и поддерживают множественные активные связи, то именно с их помощью можно решить указанные проблемы. Подобно тому, как мосты и переключатели используются для объединения нескольких областей коллизий, маршрутизаторы применяются для объединения широковещательных областей. На рис. 3 показано пять BD (broadcast domain — широковещательная область, ЛВС), соединенных тремя маршрутизаторами. Слово FAST обозначает связь Fast Ethernet, а слово SLOW — связь Ethernet. Связи, обозначенные словом WAN, работают еще медленнее.
Любой узел маршрутизованной сети может взаимодействовать с любым другим, однако широковещательные кадры никогда не покидают той ЛВС, где они возникли, и не используют полосы пропускания других локальных сетей. В отличие от ЛВС с коммутаторами (мостами), маршрутизованные сети поддерживают множественные активные пути между сегментами. Маршрутизаторы осуществляют это, всегда пересылая дейтграмму по наилучшему пути. Определение наилучшего пути дать очень сложно. Некоторые пути могут быть, например, быстрыми, а следовательно, предпочтительными. Тем не менее если один из таких быстрых путей перегружен, то маршрутизатор может выбрать для дейтаграммы альтернативный путь. Маршрутизаторы, запоминая топологию маршрутов, решают и проблему петель, от которой страдают сети с коммутаторами и мостами. Один из самых существенных недостатков классической маршрутизации — ее чрезвычайно низкая производительность, что делает ее малопригодной для современных высокоскоростных сетей.
Протоколы маршрутизации
Сущность маршрутизации
В пересылаемых по сетям пакетах данных содержится большой объем информации; увы, она ничего не говорит о том, каким образом данный пакет должен найти свой путь в хитросплетении маршрутизаторов, коммутаторов и других устройств в корпоративной глобальной сети. Пакету каким-то образом следует указать путь к цели. Протоколы маршрутизации помогают пакетам найти не только верную, но и самую короткую дорогу к станции назначения. Это экономит и время, и деньги.
Планируя глобальную сеть, связывающую пользователей, серверы и мэйнфреймы, администратору приходится решать множество серьезных проблем, одной из которых является проблема выбора протокола маршрутизации. В настоящее время существует несколько протоколов, обеспечивающих эффективную передачу данных. Администратору сети придется выбрать тот протокол, который наилучшим образом соответствует потребностям его компании; главнейшим критерием выбора является размер сети.
Протоколы маршрутизации определяют топологию сети и сохраняют информацию о ней в таблице маршрутизации. Если маршрутизатор не применяет протокол маршрутизации, он хранит статические маршруты или использует отдельный протокол на каждом интерфейсе. Обычно маршрутизаторы работают с одним протоколом маршрутизации.
Таблица маршрутизации, иногда называемая базой данных маршрутизации, — это набор маршрутов, используемых маршрутизатором в данный момент. Строки таблицы маршрутизации содержат по крайней мере следующую информацию:
- действительный адрес или множество действительных адресов в сети;
- информацию, вычисленную протоколом маршрутизации или необходимую ему;
- информацию, необходимую для того, чтобы переслать сообщение на один маршрутизатор ближе к получателю.
Информация о маршрутизации содержит метрику, то есть меру времени или расстояния, и несколько отметок о времени. Информация о пересылке включает в себя данные о выходном интерфейсе и адрес следующей системы по пути. Обычно маршрутизаторы хранят данные о нескольких возможных следующих транзитных маршрутизаторах в одной строке таблицы.
Протоколы маршрутизации выполняют две важнейшие функции.
Во-первых, с их помощью определяется оптимальный путь передачи пакета по сети. Обычно избирается путь, обеспечивающий минимальное время доставки при максимальной надежности. Как правило, это путь с минимальным числом транзитных узлов; передача данных в обход загруженных участков (с целью избежания заторов) — исключение из этого правила.
Протокол маршрутизации предполагает постоянный сбор информации о состоянии маршрутов и обновление таблиц маршрутизации при изменении топологии сети вследствие отказов или перегрузок. Таким образом, таблицы маршрутизации всегда содержат точную информацию о топологии сети.
Во-вторых, функцией протоколов маршрутизации является передача пакетов по сети. Получая очередной пакет, маршрутизатор считывает адрес назначения из заголовка пакета и определяет, в каком направлении (через какой узел) следует осуществить дальнейшую передачу пакета. Для принятия такого решения используется информация из таблицы маршрутизации.
Протокол маршрутизации может работать только тогда, когда формат пакетов соответствует одному из маршрутизируемых протоколов (routable protocol) — не путать с протоколами маршрутизации (routing protocols). Примеры маршрутизируемых протоколов — IP, IPX, Xerox Network System. Маршрутизируемые протоколы задают формат пакетов, в которые данные упаковываются для передачи по сети, а протоколы маршрутизации обеспечивают передачу этих пакетов, определяя путь их следования по адресам назначения, приведенным в полях заголовка.
Планируя сеть, следует использовать только один стандартный маршрутизируемый протокол. Некоторые маршрутизаторы могут работать с несколькими протоколами, однако применение разных протоколов в одной и той же сети снижает ее производительность и усложняет работу администраторов сети.
Например, такие протоколы, как NetBEUI или LAT, являются немаршрутизируемыми и не способны обеспечивать функции сетевого уровня. Конечно, данные в формате NetBEUI или LAT можно пересылать по глобальной сети, но для этого надо либо инкапсулировать их с использованием маршрутизируемого протокола (например, IP), либо организовать мост между маршрутизаторами. В последнем случае дорогостоящие ресурсы маршрутизатора применяются для организации мостового соединения, что снижает общую производительность сети. По-видимому, наилучшим выходом из положения оказывается IP-инкапсулирование, однако время передачи данных возрастает — на сей раз из-за увеличения накладных расходов. Следовательно, лучше всего вообще отказаться от использования немаршрутизируемых протоколов.
Протоколы, используемые при создании таблицы маршрутизации, можно разделить на три категории:
- протоколы длины вектора расстояния;
- протоколы состояния канала;
- протоколы политики маршрутизации.
Классификация протоколов маршрутизации показана на рис. 4.
Протоколы длины вектора — простейший и наиболее распространенный тип протоколов маршрутизации. Большинство используемых сегодня протоколов этого типа ведет свое начало от протокола Routing Information Protocol компании Xerox (иногда они даже так и называются). Протоколы данного класса включают IP RIP, IPX RIP, протокол управления таблицей маршрутизации AppleTalk RTMP и Cisco Interior Gateway Routing Protocol.
Свое название этот тип протоколов получил от способа обмена информацией. Периодически каждый маршрутизатор копирует адреса получателей и метрику из своей таблицы маршрутизации и помещает эту информацию в рассылаемые соседям сообщения об обновлении. Соседние маршрутизаторы сверяют полученные данные со своими собственными таблицами маршрутизации и вносят необходимые изменения.
Этот алгоритм прост и, как кажется на первый взгляд, надежен. К сожалению, он работает наилучшим образом в небольших сетях при (желательно полном) отсутствии избыточности. Крупные сети не могут обойтись без периодического обмена сообщениями для описания сети, однако большинство из них избыточны. По этой причине в сложных сетях возникают проблемы при выходе линий связи из строя, так как несуществующие маршруты могут оставаться в таблице маршрутизации в течение длительного периода времени. Трафик, направленный по такому маршруту, не достигнет своего адресата. Эвристически данная проблема решаема, но ни одно из таких решений не является детерминистским.
Подобные проблемы могут быть решены усовершенствованным алгоритмом, который называется алгоритм диффузионного обновления (DUAL). При этом маршрутизаторы используют алгоритм длины вектора для составления карты путей между ними и DUAL для широковещательного объявления об обслуживаемых ими локальных сетях. Информация об изменениях в топологии также рассылается по всей сети. Примером такого усовершенствованного протокола может служить Cisco Enhanced IGRP.
Вторую категорию протоколов обслуживания среды составляют протоколы состояния канала. Впервые предложенные в 1970 году в статье Эдсгера Дейкстры, протоколы состояния канала сложнее, чем протоколы длины вектора. Взамен они предлагают детерминистское решение типичных для их предшественников проблем. Вместо рассылки соседям содержимого своих таблиц маршрутизации каждый маршрутизатор осуществляет широковещательную рассылку списка маршрутизаторов, с которыми он имеет непосредственную связь, и напрямую подключенных к нему локальных сетей. Эта информация о состоянии канала рассылается в специальных объявлениях. За исключением широковещания периодических сообщений о своем присутствии в сети, маршрутизатор рассылает объявления о состоянии каналов только в случае изменения информации о них или по истечении заданного периода времени.
Недостатком таких протоколов состояния каналов, как OSPF, IS-IS и NLSP, является их сложность и высокие требования к памяти. Они трудны в реализации и нуждаются в значительном объеме памяти для хранения объявлений о состоянии каналов. При всем своем превосходстве над ранними протоколами длины вектора их реальное преимущество перед DUAL далеко не очевидно.
К третьей категории протоколов по обслуживанию среды относятся протоколы правил маршрутизации. Если протоколы маршрутизации на базе алгоритмов длины вектора и состояния канала решают задачу наиболее эффективной доставки сообщения получателю, то задача маршрутизации — наиболее эффективная доставка сообщения получателю по разрешенным путям. Такие протоколы, как BGP (Border Gateway Protocol) или IDRP (Interdomain Routing Protocol), позволяют операторам Internet получать информацию о маршрутизации от соседних операторов на основе контрактов или других нетехнических критериев. Алгоритмы, используемые для политики маршрутизации, опираются на алгоритмы длины вектора, но информация о метрике и пути базируется на списке операторов магистрали.
Одно из следствий применения протоколов такого рода заключается в том, что пути сообщения и ответа на него через Internet, вообще говоря, различны. В корпоративных же сетях Intranet, не использующих политику маршрутизации, эти пути, как правило, совпадают.
Рассмотрим более подробно наиболее популярные протоколы маршрутизации: протокол маршрутной информации (Routing Information Protocol, RIP), протокол предпочтения кратчайшего пути (Open Shortest Path First, OSPF), «транзитная система — транзитная система» (Intermediate System-to-Intermediate System, IS-IS). У каждого из перечисленных протоколов свои достоинства, однако администратору сети придется выбрать из них какой-нибудь один — тот, что более всего подходит для нужд его сети.
Протокол маршрутизации RIP
Протокол RIP очень популярен среди тех, кто имеет отношение к Internet. Это протокол с использованием алгоритма длины вектора, где маршрут определяется исходя из расстояния (числа транзитных узлов) на пути следования данных до точки назначения. RIP известен довольно давно — впервые он появился в 1982 году как часть набора протоколов TCP/IP в версии UNIX, предложенной Berkley Software Distribution. В настоящее время RIP служит основой для многих других протоколов маршрутизации, например для протокола маршрутизации AppleTalk. Другие компании (Novell и Banyan, кстати говоря, в их числе) также разработали протоколы на основе RIP. По существу, компании Microsoft удалось расширить возможности Windows NT для работы в глобальных сетях именно за счет поддержки маршрутизации пакетов на основе RIP.
В маршрутизаторе, работающем с RIP, вся информация хранится в виде таблицы маршрутизации, содержащей следующие поля:
- пункт назначения (в нем перечислены все конечные, в смысле адреса, локальные сети);
- следующий транзитный узел (оно определяет, на какой порт должен быть переслан пакет для отправки на следующий маршрутизатор);
- расстояние (число транзитных узлов, необходимых для того, чтобы достичь пункта назначения).
Таблица маршрутизации RIP содержит информацию о наилучшем пути к месту назначения. После получения новых данных от другого узла старая информация стирается, и на ее место записывается новая.
Выбор оптимального маршрута в RIP обеспечивается рассылкой соответствующих сообщений при изменении топологии сети. Например, если маршрутизатор выявляет отказ в одном из каналов связи, он вносит изменения в свою таблицу маршрутизации, а затем рассылает копии новой таблицы всем своим соседям. Соседи соответственно вносят изменения в свои таблицы и рассылают их копии своим соседям и так далее. В результате через короткое время необходимая информация достигает всех маршрутизаторов.
В соответствии с протоколом RIP каждый маршрутизатор автоматически посылает (примерно раз в 30 секунд) своим соседям пакет типа «ответ» со своей таблицей маршрутизации. Для передачи больших таблиц маршрутизации требуется несколько пакетов. Помимо этого в протоколе RIP предусмотрено, чтобы каждый маршрутизатор следил за тем, сколько времени прошло с момента получения последнего ответа; если ответ от кого-нибудь из соседей не поступает в течение длительного времени (обычно 90 секунд), соответствующий путь удаляется из таблицы маршрутизации данного устройства, а все соседи извещаются об этом событии.
В протоколе RIP предусмотрен ряд мер, призванных повысить стабильность работы протокола. Среди них: лимит числа промежуточных узлов (hop-count limit), временный отказ от приема информации (hold-down) и расщепление горизонта (split horizon). Лимит на число промежуточных узлов позволяет предотвратить зацикливание пакета при пересылке. Данный лимит в RIP равен 15, откуда следует, что этот протокол годится только для не слишком больших сетей. (Во второй версии протокола RIP это ограничение снято, и количество промежуточных узлов может достигать 255.)
Основным недостатком RIP является не слишком высокая функциональность: он не годится для больших сетей и не может эффективно определять альтернативные маршруты.
Протокол маршрутизации OSPF
Для замены RIP Группа инженерной поддержки (IETF) разработала протокол OSPF; предполагается, что новый протокол обеспечит лучшую поддержку TCP/IP. Протокол OSPF, основанный на алгоритме предпочтения кратчайшего пути, был разработан Болтом, Беранеком и Ньюменом (Кембридж, шт. Массачусетс) для сети ARPANet в 1978 году. Благодаря своей функциональности OSPF быстро приобретает черты отраслевого стандарта. Данный протокол обеспечивает поддержку нужд крупных вычислительных сетей: обслуживание запросов на специальные услуги, работу с несколькими протоколами сетевого уровня, а также аутентификацию. OSPF способен осуществлять эффективную маршрутизацию пакетов с учетом изменений топологии сети, соответствующим образом меняя путь прохождения сетевого трафика. Кроме того, накладные расходы на пересылку данных об изменении топологии в OSPF меньше: рассылке подлежит не таблица маршрутизации в целом, а только информация об изменениях. OSPF иногда называют протоколом на основе распределенных баз данных, хотя правильнее его называть протоколом маршрутизации на основе данных о состоянии каналов связи (link state routing protocol). Термин «link state routing protocol» означает, что в OSPF поддерживается топологическая база данных, где хранится информация о состоянии каналов связи в автономной сети. Данная информация используется для вычисления кратчайшего пути передачи пакета.
В настоящее время многие компании выпускают маршрутизаторы, поддерживающие OSPF.
Протокол OSPF предусматривает, что новый маршрутизатор, начав работу в сети, рассылает «приветствия» всем своим соседям. Такие же сообщения периодически рассылают все маршрутизаторы, подтверждая тем самым свою работоспособность. В итоге новый маршрутизатор очень быстро «знакомится» со всеми своими соседями.
OSPF работает с запросами верхнего уровня [Type of Service (ToS) или Quality of Service (QoS)], содержащимися в заголовке пакетов IP. Вычисление кратчайшего пути в OSPF осуществляется на основе информации, содержащейся в ToS. Всего насчитывается восемь комбинаций битов ToS, описывающих все возможные сочетания уровней задержки, пропускной способности и надежности связи. OSPF в состоянии подобрать путь таким образом, чтобы удовлетворить любую из этих восьми комбинаций. Например, если в ToS указано, что данный пакет должен быть передан с малой задержкой, высокой пропускной способностью и малой надежностью, то OSPF-маршрутизатор подберет путь передачи, как можно лучше отвечающий всем этим требованиям. OSPF — открытый стандарт, его описание приводится в документе RFC 1427.
КомпьютерПресс 3'2000