4.7. Коммутация на канальном уровне
У многих организаций есть несколько LAN, которые желательно объединить. Может быть, удобно соединить их в одну большую LAN? Это можно сделать с помощью специальных устройств, называемых мостами (bridges). Коммутаторы Ethernet, описанные в разделе 4.3.4, — это современное название мостов. Они обеспечивают функциональность, которая выходит за рамки классического Ethernet и концентраторов Ethernet, — дают возможность соединить несколько LAN в большую и быструю сеть. Мы будем использовать термины «мост» и «коммутатор» как синонимы.
Мосты работают на канальном уровне. Они анализируют адреса, содержащиеся во фреймах этого уровня, и в соответствии с ними осуществляют маршрутизацию. Поскольку мосты не проверяют у фрейма поле Payload, они одинаково хорошо справляются как с пакетами IP, так и с другими типами пакетов, например AppleTalk. В отличие от мостов, маршрутизаторы анализируют адреса в пакетах и действуют, основываясь на этой информации, поэтому они могут работать только с теми протоколами, для которых предназначены.
В этом разделе мы изучим работу мостов и объединение с их помощью нескольких физических LAN в одну логическую. Кроме того, мы рассмотрим обратный процесс — разделение одной физической LAN на несколько логических, так называемых виртуальных LAN. Обе технологии предоставляют полезную гибкость в управлении сетями. Подробную информацию о мостах, коммутаторах и связанных с ними вопросами можно найти в работах Перлман (Perlman, 2000) и Юй (Yu, 2011).
4.7.1. Применение мостов
Прежде чем перейти к обсуждению мостов, рассмотрим несколько распространенных случаев их применения. Есть три причины, по которым в организации может появиться несколько LAN.
Во-первых, у многих подразделений университетов или корпораций есть свои LAN, соединяющие персональные компьютеры, серверы и другие устройства (например, принтеры). У разных факультетов и отделов свои цели, поэтому они создают собственные сети независимо друг от друга. Однако рано или поздно возникает потребность в коммуникации, и здесь на помощь приходят мосты. В данном примере несколько отдельных LAN образовалось из-за автономности их владельцев.
Во-вторых, организация может размещаться в нескольких зданиях на значительном расстоянии друг от друга. Скорее всего, выгоднее создать несколько отдельных LAN и затем соединить их с помощью мостов и нескольких магистральных оптоволоконных кабелей, вместо того чтобы протягивать все кабели к одному центральному коммутатору. Даже если кабели легко проложить, их длина ограниченна (например, максимум для витой пары Gigabit Ethernet составляет 200 м). Сеть не будет работать с более длинными кабелями из-за чрезмерного ослабления или задержки сигнала. Единственное решение — разделить LAN и соединить ее части с помощью мостов, увеличив общее физическое расстояние, на котором может работать сеть.
В-третьих, иногда необходимо логически разделить одну LAN на несколько отдельных сетей, соединенных мостами, чтобы снизить нагрузку. Например, во многих крупных университетах в сети объединены тысячи рабочих станций, на которых работают студенты и сотрудники. В компании также могут работать тысячи людей. Огромные масштабы не позволяют объединить все рабочие станции в одну локальную сеть — компьютеров больше, чем портов в любом Ethernet-концентраторе, а станций больше, чем может быть в одной классической сети Ethernet.
Даже если удастся соединить друг с другом все рабочие станции, добавление дополнительных станций в концентратор Ethernet или классическую сеть Ethernet не приведет к увеличению емкости. Все они будут совместно использовать ту же фиксированную полосу пропускания. Чем больше станций подключится, тем меньше будет средняя пропускная способность каждой из них.
С другой стороны, емкость двух отдельных LAN в два раза больше, чем одной сети. Мосты позволяют объединять сети, сохраняя их пропускную способность. Идея в том, чтобы не передавать трафик на порты, на которых он не требуется, тогда каждая LAN сможет работать на максимальной скорости. Данный принцип также повышает надежность. Поврежденный узел, непрерывно передающий поток бессмысленных данных, может нарушить работу всей сети. Решая, что пересылать, а что нет, мост действует как пожарные двери в здании, защищая всю систему от разрушения из-за одного ненормального узла.
Для наилучшего результата мосты должны быть полностью прозрачными. В идеале мы покупаем их, подключаем кабели LAN, и все сразу же идеально работает — без каких-либо изменений оборудования или ПО, без присвоения коммутаторам адресов, скачивания таблиц маршрутизации и т.п. Мы просто все соединяем и уходим по своим делам. Более того, необходимо, чтобы наличие мостов вообще не влияло на работу существующих LAN. Не должно быть заметной разницы, какой LAN (с мостами или без) принадлежат станции, — они должны легко перемещаться в любой из них.
Удивительно, но создать такие мосты возможно — для этого используются два алгоритма. Алгоритм обратного обучения останавливает отправку трафика туда, где он не нужен; алгоритм связующего дерева прерывает циклы, которые могут возникнуть при непроизвольном соединении коммутаторов. Далее мы разберем эти алгоритмы по очереди, чтобы понять, как они достигают целей.
4.7.2. Обучающиеся мосты
Топология двух LAN, соединенных мостом, показана на илл. 4.33 для двух случаев. Слева к двум многоточечным LAN (таким, как классический Ethernet) присоединяется специальная станция — мост, он является элементом обеих сетей, справа — несколько LAN с соединениями «точка-точка» и один подключенный концентратор. Мосты — устройства, к которым присоединены станции и концентратор. Если LAN является сетью Ethernet, мосты называются Ethernet-коммутаторами.
Илл. 4.33. Мосты. (а) Мост, соединяющий две многоточечные LAN. (б) Мосты (и концентратор), соединяющие семь станций по двухточечной схеме
Мосты были разработаны во времена классического Ethernet, поэтому они часто изображаются в топологии с многоточечными кабелями, как на илл. 4.33 (а). Однако все топологии, которые можно встретить сейчас, состоят из двухточечных кабелей и коммутаторов. Мосты работают одинаково в обоих случаях. Все станции, присоединенные к одному порту моста, принадлежат к одной области коллизий, которая отличается от областей коллизий других портов. Если система содержит более одной станции (как в классическом Ethernet) и концентратор или полудуплексный канал, для отправки фреймов используется протокол CSMA/CD.
Однако LAN с мостовыми соединениями строятся по-разному. Чтобы объединить многоточечные LAN, мост добавляется в качестве новой станции для каждой из них, как показано на илл. 4.33 (а). В случае двухточечных LAN мост соединяется с концентраторами либо (что более предпочтительно) заменяет их, чтобы увеличить производительность. На илл. 4.33 (б) мосты заменили все концентраторы, кроме одного.
К одному мосту могут быть присоединены разные виды кабелей. Например, мосты B1 и B2 на илл. 4.33 (б) могут соединяться магистральным оптоволоконным каналом, а кабель между мостами и станциями может оказаться витой парой ближней связи. Такая структура полезна для соединения LAN различных зданий.
Теперь обсудим, что же происходит в мостах. Каждый мост работает в неизбирательном режиме, то есть принимает каждый фрейм от станций, подключенных к его портам. При появлении фрейма мост должен решить, игнорировать его или передать, и если передать, то на какой порт. Выбор производится на основе адреса получателя. Например, рассмотрим топологию на илл. 4.33 (а). Если станция A отправит фрейм станции B, мост B1 получит его на порте 1. От этого фрейма можно немедленно отказаться без дальнейших хлопот, потому что он уже находится на правильном порте. Теперь предположим, что в топологии на илл. 4.33 (б) A посылает фрейм станции D. Мост В1 получит его на порте 1 и выведет его на порт 4. Затем мост В2 примет фрейм на своем порте 4 и выведет его на порте 1.
Для простой реализации этой схемы нужно, чтобы мост имел большую хеш-таблицу. Она может включать все возможные пункты назначения и то, к какому порту каждый из них относится. Например, на илл. 4.33 (б) в таблице моста B1 станция D была бы привязана к порту 4. Таким образом, мост B1 знал бы, на какой порт следует отправить фреймы для D. Фактически дальнейшая пересылка происходит позже, когда достигший моста B2 фрейм уже не представляет интереса для моста B1.
Когда мосты включаются первый раз, все их хеш-таблицы пусты. Ни один мост не знает, где находятся адресаты, поэтому применяется алгоритм лавинной адресации (flooding): каждый полученный фрейм с неизвестным адресом переправляется сразу по всем направлениям, кроме того, откуда он пришел. Со временем мосты узнают расположение получателей. Если адрес известен, лавинная адресация не используется и фреймы направляются только на нужный порт.
Мосты используют алгоритм обратного обучения (backward learning). Как уже упоминалось, они работают в неизбирательном режиме, поэтому видят все фреймы, приходящие на их порты. Просматривая адреса отправителей, они определяют, какая станция относится к конкретному порту. Например, если мост В1 на илл. 4.33 (б) получает фрейм от станции C на порт 3, то он понимает, что станция C привязана к порту 3, и записывает это в таблицу. Любой последующий фрейм для станции C, полученный мостом В1 по любому другому порту, будет переправляться на порт 3.
Топология сети может меняться по мере того, как отдельные станции и мосты включаются, выключаются, а также перемещаются. Чтобы зафиксировать эту динамику, в таблице указывается время прибытия фрейма от станции. При получении новых фреймов это время обновляется. Таким образом, для каждой станции известно время последнего полученного от нее фрейма.
Время от времени процесс сканирует хеш-таблицу и удаляет все записи старше нескольких минут. Таким образом, если компьютер был выключен, перенесен на новое место и включен снова, уже через несколько минут он войдет в обычный режим работы, и для этого не потребуется никаких специальных действий. Это также означает, что если станция «молчит» в течение нескольких минут, адресованный ей трафик снова будет рассылаться методом лавинной адресации, пока она сама не отправит какой-нибудь фрейм.
Процедура маршрутизации входящего фрейма зависит от того, на какой порт он прибыл (порт-источник) и на какой адрес направляется (адрес назначения). Алгоритм выглядит следующим образом:
1. Если порт-источник и порт для адреса назначения совпадают, фрейм игнорируется.
2. Если порт-источник и порт для адреса назначения различаются, фрейм переправляется на порт назначения.
3. Если порт назначения неизвестен, используется алгоритм лавинной адресации и фрейм пересылается на все порты, кроме источника.
Может ли первая ситуация произойти с двухточечными линиями? Ответ — да, если для соединения группы компьютеров с мостом используются концентраторы. Пример показан на илл. 4.33 (б), где станции E и F соединены с концентратором H1, который, в свою очередь, подключен к мосту B2. Если станция E отправит фрейм станции F, то концентратор передаст его и F, и мосту B2. Именно это делают концентраторы — они связывают все порты вместе так, чтобы фрейм, полученный на одном порте, просто выводится на всех остальных. Фрейм достигнет моста B2 на порте 2, который уже является правильным выходным портом для попадания в пункт назначения. Мост B2 должен просто отказаться от фрейма.
Поскольку этот алгоритм должен применяться к каждому входящему фрейму, обычно он осуществляется с помощью специальных чипов СБИС. Чип производит поиск и обновляет записи таблицы за несколько микросекунд. Мосты проверяют только MAC-адреса, чтобы решить, как отправить фреймы. Поэтому можно начать отправку, как только появилось поле заголовка назначения — еще до того, как дошла остальная часть фрейма (конечно, если выходная линия доступна). Это сокращает время прохождения через мост, а также количество фреймов, которые мост должен буферизовать. Такой способ называют коммутацией без буферизации пакетов (cut-through switching) или маршрутизацией способом коммутации каналов (wormhole routing), и обычно он реализуется аппаратными средствами.
Можно взглянуть на работу моста с точки зрения стека протоколов и разобраться, что собой представляет устройство канального уровня. Рассмотрим фрейм, посланный от станции А станции D в конфигурации на илл. 4.33 (а), где в качестве LAN выступает сеть Ethernet. Фрейм пройдет через один мост. Стек используемых при этом протоколов показан на илл. 4.34.
Илл. 4.34. Протоколы, которые реализуются в мосте
Пакет приходит с более высокого уровня и спускается на уровень MAC Ethernet. Он получает заголовок Ethernet (а также трейлер, не показанный на рисунке). Далее фрейм передается на физический уровень, проходит по кабелю и принимается мостом.
В мосте фрейм передается с физического уровня на уровень MAC Ethernet. Здесь фрейм обрабатывается дольше, чем на аналогичном уровне станции. Он передается на ретранслятор, все еще в пределах уровня MAC. Функция ретрансляции в мосте использует только заголовок MAC Ethernet, чтобы определить, как обработать фрейм. В нашем случае фрейм передается порту уровня MAC Ethernet, который связан со станцией D, и продолжает свой путь.
В общем случае ретрансляторы на конкретном уровне могут переписать для него заголовки. Позже будет показано, как это происходит в виртуальных LAN. Мост ни в коем случае не должен проверять содержимое фрейма и выяснять, что в нем находится IP-пакет. Для работы моста это значения не имеет, к тому же это нарушает иерархическое представление протокола. Обратите внимание, что мост, имеющий k портов, также включает k экземпляров MAC-уровня и физического уровня. В нашем простом примере k = 2.
4.7.3. Мосты связующего дерева
Для повышения надежности между мостами устанавливаются резервные соединения. На илл. 4.35 показаны два параллельных канала между В1 и В2. Эта конструкция гарантирует, что при разрыве одного соединения сеть не будет разделена на два набора компьютеров, которые не могут взаимодействовать друг с другом.
Илл. 4.35. Мосты с двумя параллельными соединениями
Впрочем, это создает некоторые дополнительные проблемы, поскольку в топологии возникают циклы. Рассмотрим следующий пример. Станция А отправляет фрейм в ранее неизвестный пункт назначения (илл. 4.35). Каждый мост, действуя по обычным правилам обработки фреймов с неизвестным получателем, использует метод лавинной адресации. Мост В1 получает фрейм от станции А. Обозначим его F0. Мост передает копии этого фрейма через все остальные порты. Мы рассмотрим только те из них, которые соединяют В1 и В2 (хотя фрейм будет отправлен и через другие). Так как между В1 и В2 имеется два соединения, в В2 попадут две копии фрейма. Они обозначены на илл. 4.35 как F1 и F2.
Вскоре после этого мост В2 получает их. Разумеется, он не знает (и не может знать), что это копии, а не два разных фрейма, отправленных друг за другом. Поэтому В2 принимает F1 и F2 и отправляет копии каждого из них со всех остальных портов. Так возникают фреймы F3 и F4, которые по двум соединениям отправляются обратно в В1. Мост В1 видит два новых фрейма с неизвестным адресом назначения и копирует их снова. Этот цикл продолжается бесконечно.
Эта проблема решается установлением связи между мостами и наложением на реальную топологию сети связующего дерева (spanning tree), которое охватывает оба моста. В результате некоторые потенциальные соединения между мостами игнорируются. Это позволяет создать фиктивную незацикленную топологию, которая является подмножеством реальной системы.
Для примера на илл. 4.36 показаны пять мостов, которые связаны между собой и имеют подключенные к ним станции. Каждая станция соединяется только с одним мостом. Есть несколько резервных каналов между мостами, так что если будут использоваться все соединения, фреймы будут зациклены. Эту систему можно представить в виде графа: мосты являются его вершинами, а соединения между ними — его ребрами. Такой граф можно редуцировать до связующего дерева, которое по определению не имеет циклов, удалив из него соединения, изображенные на илл. 4.36 пунктирными линиями. В получившемся связующем дереве между каждыми двумя станциями существует только один путь. После того как мосты договорятся друг с другом о топологии связующего дерева, все коммуникации осуществляются только по его ветвям. Поскольку путь от отправителя к получателю единственный, зацикливание невозможно.
Илл. 4.36. Связующее дерево, соединяющее пять мостов. Пунктирными линиями показаны соединения, которые в него не входят
Чтобы построить связующее дерево, мосты применяют распределенный алгоритм. Каждый из них периодически рассылает по всем своим портам конфигурационное сообщение соседним мостам и обрабатывает полученные от них сообщения, как описано ниже. Эти сообщения дальше не отправляются, так как их цель — построение дерева, которое затем используется для передачи.
Сначала необходимо выбрать один мост, который будет корнем связующего дерева. Для этого каждый мост включает в конфигурационное сообщение идентификатор, основанный на своем MAC-адресе, а также идентификатор потенциального корневого моста. MAC-адреса устанавливаются изготовителем и являются уникальными, что гарантирует уникальность и удобство идентификаторов. Мосты выбирают в качестве корня мост с наименьшим идентификатором. После обмена достаточным числом сообщений, чтобы распространить эту новость, мосты принимают общее решение. На илл. 4.36 мост B1 имеет наименьший идентификатор, он и становится корнем.
Далее создается дерево кратчайших путей от корня до каждого моста. На илл. 4.36 кратчайший путь от моста B1 до мостов B2 и B3 преодолевается за один шаг непосредственно. Мост B4 достигается за два шага, через B2 или через B3. В этой ситуации выбирается мост с наименьшим идентификатором, таким образом, путь до B4 лежит через B2. Путь до моста B5 преодолевается за два шага через B3.
Чтобы найти эти кратчайшие пути, мосты включают в конфигурационные сообщения расстояние от корня. Каждый мост помнит кратчайший путь, который он находит к корню. Затем мосты отключают порты, которые не являются частью кратчайшего пути.
Дерево охватывает все мосты, но не все соединения (или даже не все мосты) обязательно присутствуют в нем. Это происходит, поскольку отключение портов ликвидирует некоторые соединения в сети, чтобы предотвратить появление циклов. Алгоритм построения дерева продолжает работать постоянно, обнаруживая изменения в топологии и обновляя структуру дерева.
Алгоритм автоматического построения связующего дерева впервые предложила Радья Перлман (Radia Perlman). Она занималась проблемой объединения локальных сетей без циклов. На решение этой задачи была выделена неделя, но уже в первый день ей удалось придумать алгоритм связующего дерева. Благодаря этому у нее осталось время на то, чтобы изложить эту идею в стихотворной форме (Perlman, 1985):
I think that I shall never see
A graph more lovely than a tree.
A tree whose crucial property
Is loop-free connectivity.
A tree which must be sure to span.
So packets can reach every LAN.
First the Root must be selected
By ID it is elected.
Least-cost paths from Root are traced
In the tree these paths are placed.
A mesh is made by folks like me
Then bridges find a spanning tree.
Алгоритм связующего дерева описан в стандарте IEEE 802.1D и используется уже много лет. В 2001 году он был переработан, в результате новое связующее дерево после изменения топологии находится быстрее. Более подробную информацию о мостах вы найдете в работе Перлман (Perlman, 2000).
4.7.4. Повторители, концентраторы, мосты, коммутаторы, маршрутизаторы и шлюзы
В этой книге мы уже видели множество способов доставки фреймов и пакетов с одного компьютера на другой. Мы упоминали повторители, концентраторы, мосты, маршрутизаторы и шлюзы. Давайте рассмотрим все эти устройства вместе, отмечая их сходства и различия.
Чтобы разобраться, как работают упомянутые устройства, надо понять, что они задействованы на разных уровнях, как показано на илл. 4.37 (а). Уровень имеет значение, поскольку от него зависит, какую часть информации устройство использует для маршрутизации. Рассмотрим типичный сценарий. У пользователя появляются данные (User data), которые необходимо отправить на другой компьютер. Они передаются на транспортный уровень, который добавляет к ним свой заголовок (например, TCP header) и передает полученную единицу информации на сетевой уровень. Тот, в свою очередь, тоже добавляет свой заголовок (Packet header), в результате чего формируется пакет сетевого уровня (например, IP-пакет). На илл. 4.37 (б) IP-пакет выделен серым цветом. Пакет отправляется на канальный уровень, где дополняется еще одним заголовком (Frame header) и контрольной суммой (CRC). Наконец, формируется фрейм, который спускается на физический уровень для передачи, например, по LAN.
Приступим к рассмотрению коммутирующих устройств и разберемся, как они соотносятся с пакетами и фреймами. На самом нижнем, физическом, уровне находятся повторители. Это аналоговые устройства, которые работают с сигналами, идущими по подключенным к ним кабелям.
Илл. 4.37. (а) Уровни и расположенные на них устройства. (б) Фреймы, пакеты и заголовки
Сигнал, появившийся в одном кабеле, очищается, усиливается повторителем и выдается на второй. Повторители не знают, что такое пакет, фрейм или заголовок. Они знают символы, кодирующие биты в напряжение. В классическом Ethernet, например, допускается установка четырех повторителей для усиления сигнала, чтобы увеличить максимальную длину кабеля с 500 до 2500 м.
Теперь перейдем к концентраторам. Концентратор имеет несколько входных линий, объединяемых с помощью электричества. Фреймы, приходящие на какой-либо вход, передаются на все остальные линии. Если одновременно по разным линиям придут два фрейма, они столкнутся, как в коаксиальном кабеле. Все линии, идущие в концентратор, должны работать с одинаковой скоростью. Концентраторы отличаются от повторителей тем, что, как правило, не усиливают входной сигнал и предназначены для нескольких входных линий. Впрочем, разница между ними незначительна. И те и другие являются устройствами физического уровня; они не анализируют адреса канального уровня и никак не используют их.
Далее мы поднимемся на канальный уровень. Здесь расположены мосты и коммутаторы. Только что мы довольно подробно обсудили мосты, поэтому знаем, что они соединяют две или несколько LAN. Как и в концентраторах, в современных мостах имеются несколько портов, рассчитанных обычно на 4–48 входящих линий определенного типа. В отличие от концентратора, каждый порт изолирован, чтобы быть своей собственной областью коллизий; если у порта есть полнодуплексная двухточечная линия, в алгоритме CSMA/CD нет необходимости. Когда приходит фрейм, мост извлекает из заголовка адрес назначения и анализирует его, сопоставляя с таблицей и определяя, куда нужно его передать. Для Ethernet этот адрес — 48-битный адрес назначения (см. илл. 4.14). Мост только выводит фрейм на нужный порт; он может передавать несколько фреймов одновременно.
Мосты предлагают гораздо более высокую производительность, чем концентраторы, а благодаря изолированным портам входные линии могут работать на разных скоростях и даже с различными типами сетей. Распространенный пример — мост с портами, которые соединяются с 10-, 100 и 1000-Мбит/с Ethernet. Чтобы мост мог принять фрейм на одном порте и передать его на другой, необходима буферизация. Если фреймы приходят быстрее, чем передаются дальше, мост может исчерпать буферное пространство и начать отказываться от фреймов. Например, если Gigabit Ethernet заливает биты в 10-Мбит/с Ethernet на большой скорости, мост должен буферизовать их, надеясь, что памяти хватит. Эта проблема существует, даже если все порты работают на одной и той же скорости, потому что фреймы могут передаваться в порт назначения из нескольких портов.
Первоначально мосты предназначались для того, чтобы соединять разные виды LAN, например Ethernet и Token Ring. Однако из-за отличий между LAN это не сработало. Для фреймов различных форматов необходимо копирование и переформатирование. Это занимает время CPU, требует нового вычисления контрольной суммы и ведет к появлению необнаруженных ошибок из-за поврежденных битов в памяти моста. Еще одна серьезная проблема, не имеющая хорошего решения, — разная максимальная длина фреймов. По сути, слишком длинные для дальнейшей передачи фреймы должны быть отклонены. С идеей прозрачности можно распрощаться.
Еще две сферы, в которых LAN могут различаться, — это безопасность и QoS. У некоторых LAN (например, у 802.11) есть шифрование канального уровня и функции QoS (такие, как приоритеты), у других (например, у Ethernet) этого нет. Следовательно, при обмене между такими LAN трудно обеспечить безопасность или QoS, ожидаемые отправителем. По этой причине современные мосты обычно работают с сетями одного типа, а для соединения разных сетей используются маршрутизаторы, которые мы обсудим позже.
Коммутаторы — это другое название современных мостов. Различия больше связаны с маркетингом, чем с техническими особенностями, но есть несколько важных моментов. Мосты были разработаны, когда использовался классический Ethernet, поэтому они могут соединять относительно небольшое число LAN, а значит, имеют не так много портов. Сегодня чаще употребляется термин «коммутатор». Кроме того, все современные системы используют двухточечные линии, например витую пару. Отдельные компьютеры подключаются непосредственно к коммутатору, поэтому у него, как правило, много портов. Наконец, понятие «коммутатор» также используется в качестве общего термина. Функционал моста понятен. А вот слово «коммутатор» может относиться и к коммутатору Ethernet, и к совершенно другому устройству, принимающему решения о переадресации, например телефонному коммутатору.
Итак, мы кратко обсудили повторители и концентраторы, весьма схожие между собой, а также коммутаторы и мосты, между которыми еще меньше различий. Теперь перейдем к маршрутизаторам. Они существенно отличаются от рассмотренных выше устройств. Когда пакет приходит в маршрутизатор, заголовок и трейлер фрейма удаляются, а сам пакет, расположенный в поле данных (выделены серым на илл. 4.37), передается программному обеспечению маршрутизатора. Далее анализируется заголовок пакета и в соответствии с ним выбирается его дальнейший путь. Если это IP-пакет, то в его заголовке содержится 32-битный (IPv4) или 128-битный (IPv6), но не 48-битный IEEE 802 адрес. ПО маршрутизатора не видит адреса фреймов и даже не знает, как они пришли, по LAN или по двухточечной линии. Более подробно мы изучим маршрутизаторы и принципы маршрутизации в главе 5.
На следующем уровне расположены транспортные шлюзы. Они служат для соединения компьютеров, которые применяют различные транспортные протоколы, ориентированные на установление соединения. Например, одно устройство использует TCP/IP, а другое — SCTP. Транспортный шлюз может копировать пакеты между соединениями, одновременно переводя их в нужный формат.
Наконец, шлюзы приложений различают форматы и содержимое данных и могут менять формат сообщений. Например, шлюз e-mail может переводить электронные письма в формат SMS-сообщений для мобильных телефонов. Как и «коммутатор», «шлюз» — своего рода общий термин. Он относится к процессу передачи, который выполняется на верхнем уровне.
4.7.5. Виртуальные локальные сети
На заре развития технологий локальных сетей толстые желтые кабели прокладывались во множестве офисов. Можно было подключить к сети каждый компьютер, рядом с которым проходил такой провод. Никто не задумывался над тем, к какой именно LAN подключался конкретный компьютер. Сотрудники соседних офисов пользовались одной сетью, даже если они работали в разных отделах. «География» брала верх над корпоративной структурой.
В 1990-х с появлением витой пары и концентраторов все изменилось, и офисные здания были переоборудованы (что обошлось недешево). На смену желтым проводам, напоминающим садовые шланги, пришла витая пара, идущая от каждого кабинета к монтажному шкафу в конце коридора или к центральному машинному залу (илл. 4.38). Если сотрудник, ответственный за переоборудование, был дальновидным человеком, то прокладывалась витая пара категории 5. Если же он был крохобором, то использовались уже существующие телефонные кабели категории 3. Через пару лет, с приходом сетей Fast Ethernet, их все равно заменили.
Сегодня кабели поменялись, а концентраторы стали коммутаторами, но общая схема осталась прежней. Она позволяет настраивать LAN не физически, а логически. Если компании требуется k LAN, она может приобрести k коммутаторов. Аккуратно собрав сеть (то есть вставив нужные коннекторы в нужные разъемы), можно распределить пользователей таким образом, чтобы это имело некий реальный организационный смысл и не зависело от расположения станций в здании.
А разве важно, к какой сети подключен конкретный пользователь? Все равно почти во всех организациях LAN объединены между собой. На самом деле это часто имеет значение. Сетевые администраторы по целому ряду причин любят группировать пользователей LAN в соответствии со структурой организации, а не по принципу физического расположения компьютеров. Одной из таких причин является безопасность. Одна LAN может объединять веб-серверы и другие компьютеры для публичного доступа. Другая может содержать записи отдела кадров, которые не должны выходить за пределы компании. В этой ситуации наилучшим выходом является объединение компьютеров всех сотрудников отдела в одну LAN и запрет на передачу каких-либо данных за ее пределы. Обычно руководство не одобряет заявлений о том, что такое решение невозможно реализовать.
Второй причиной является нагрузка на сеть. Некоторые сети могут быть более загруженными, чем другие, в этом случае лучше их разделить. Например, если эксперименты отдела исследований приведут к перегрузке сети, то руководители вряд ли с энтузиазмом воспримут необходимость отказаться от части пропускной способности, которую планировалось использовать для видеоконференций. С другой стороны, это заставит их задуматься о необходимости внедрения более быстрой сети.
Илл. 4.38. Здание, где имеется централизованная проводка с концентраторами и коммутаторами
Еще одна причина — широковещание. Мосты применяют его, когда местонахождение адресата неизвестно, а протоколы верхних уровней также поддерживают эту технологию. Например, если пользователь хочет отправить пакет на IP-адрес x, как ему узнать, какой MAC-адрес указать во фрейме? Мы изучим этот вопрос более подробно в главе 5, а сейчас в двух словах опишем решение проблемы. Данная станция должна широковещательным методом разослать запрос: «Кто знает, какой MAC-адрес работает с IP-адресом x?» Затем она дожидается ответа. Поскольку компьютеров в LAN становится все больше, растет и число таких сообщений. Каждая широковещательная передача потребляет больше ресурсов, чем обычный фрейм, потому что она предназначена для всех компьютеров в сети. Если сдерживать размер LAN, чтобы она не разрасталась без необходимости, то нагрузка от широковещательного трафика уменьшается.
С широковещанием связана еще одна проблема: время от времени сетевой интерфейс выходит из строя или нарушается его конфигурация. Тогда он начинает генерировать бесконечный поток фреймов, получаемый всеми станциями. Если не повезет, некоторые фреймы вызовут ответы, которые приведут к еще большему трафику. В результате этого широковещательного шторма (broadcast storm) вся пропускная способность сети будет занята бессмысленными фреймами, а все устройства объединенных LAN будут вынуждены заниматься исключительно обработкой и удалением мусора.
Сначала может показаться, что широковещательный шторм можно ограничить, разделив сеть с помощью мостов или коммутаторов. Но если нужно обеспечить прозрачность (то есть предоставить возможность перемещать компьютеры в другие LAN без каких-либо изменений конфигурации), то мосты должны передавать широковещательные фреймы.
Мы выяснили, почему компаниям нужны многочисленные LAN ограниченного размера. Теперь вернемся к проблеме разделения логической и физической топологии. Создание физической конфигурации, которая отразит организационную структуру, может потребовать дополнительных усилий и увеличить стоимость проекта даже при наличии централизованной проводки и коммутаторов. Например, если два сотрудника из одного отдела работают в разных зданиях, легче подключить их компьютеры к разным коммутаторам, принадлежащим разным LAN. Другой пример — сотрудник может перейти в пределах компании из одного подразделения в другое, но остаться в том же офисе или, наоборот, сменить офис, не меняя отдел. В результате пользователь будет работать в неправильной LAN, пока администратор не подключит его кабель вручную к нужному коммутатору. Помимо этого, количество компьютеров в различных отделах может не соответствовать числу портов на коммутаторах. Некоторые подразделения могут быть слишком маленькими, а другие, наоборот, слишком крупными, и им не хватает одного коммутатора. Это приводит к тому, что у коммутаторов используются не все порты.
Во многих компаниях организационные перестановки происходят постоянно, и сетевой администратор вынужден постоянно производить манипуляции с коннекторами и разъемами. Иногда это невозможно, поскольку витая пара от пользовательского компьютера не дотягивается до нужного коммутатора (который находится в другом здании) или же доступные порты коммутатора относятся к другой LAN.
Пользователи нуждались в большей гибкости. В ответ на этот запрос были разработаны виртуальные LAN (Virtual LAN, VLAN). Для их внедрения необходимо было изменить только программное обеспечение. Виртуальные сети были стандартизованы комитетом IEEE 802 и сегодня широко применяются во многих организациях. Далее мы рассмотрим эту разновидность LAN.
Виртуальные сети строятся на основе VLAN-совместимых коммутаторов. Чтобы создать такую систему, сетевой администратор должен решить, сколько всего будет VLAN, какие компьютеры будут в них входить, а также придумать названия для этих VLAN. Часто их обозначают разными цветами — очень удобно распечатать цветную диаграмму, на которой наглядно показано расположение компьютеров. Пользователи красной сети будут изображены красным цветом, зеленой — зеленым и т.д. Таким образом, на одном рисунке можно отобразить физическую и логическую структуру одновременно.
В качестве примера рассмотрим LAN с мостом, изображенную на илл. 4.39. Девять компьютеров относятся к виртуальной сети «С» (серой), а еще пять — к сети «Б» (белой). Компьютеры серой сети распределены между двумя коммутаторами; два из них подключено к коммутатору через концентратор.
Чтобы VLAN функционировали корректно, в мостах должны быть конфигурационные таблицы. Они сообщают, через какие порты производится доступ к тем или иным VLAN. Например, когда фрейм прибывает из серой VLAN, его нужно разослать на все порты, помеченные буквой «С». Это справедливо как для ординарных (одноадресных) передач, при которых мосту не нужна информация о местоположении адресата, так и для групповых и широковещательных. Следует отметить, что порт может быть помечен сразу несколькими цветами VLAN.
Илл. 4.39. Две VLAN, серая и белая, в сети с мостом
Предположим, что одна из серых станций, подключенных к мосту В1 (илл. 4.39), отправляет фрейм адресату, местонахождение которого пока неизвестно. Мост B1 принимает фрейм и видит, что тот пришел с устройства с меткой «С». Поэтому его необходимо передать на все порты (кроме источника), принадлежащие серой VLAN. Фрейм будет направлен на остальные пять серых станций, подключенных к B1, а также по соединению B1 c мостом B2. Мост B2 аналогично перешлет фрейм на все порты с меткой «С», то есть одной оставшейся станции и концентратору (который передаст его всем своим станциям). Концентратор имеет обе метки («С» и «Б»), поскольку к нему подключены станции из обеих VLAN. Фрейм передается только на порты с меткой «С», поскольку мост знает, что другие порты не ведут к серым станциям.
В нашем примере фрейм передается от В1 к В2 только потому, что некоторые станции серой VLAN подключены к В2. Глядя на белую VLAN, можно увидеть, что порт В2, соединенный с В1, не снабжен меткой «Б». Это означает, что фрейм белой VLAN не будет отправлен от В2 к В1. Это логично, поскольку к мосту В1 не присоединено ни одной белой станции.
Стандарт IEEE 802.1Q
Чтобы реализовать эту схему, мосты должны знать, к какой VLAN принадлежит входящий фрейм. Иначе мост В2, получив фрейм от моста В1 (см. илл. 4.39), не поймет, куда его передавать — белой или серой VLAN. Если бы мы проектировали новый тип LAN, можно было бы просто добавить специальное поле заголовка. Но что делать с Ethernet — наиболее распространенной сетью, у которой нет запасных полей для идентификатора виртуальной сети?
Комитет IEEE 802 задался этим вопросом в 1995 году. После долгих дискуссий было сделано нечто невообразимое — изменен формат заголовка фрейма Ethernet. Новый формат был опубликован под названием 802.1Q в 1998 году. Он предусматривает тег VLAN; мы кратко обсудим его далее. Понятно, что вносить изменения в такую устоявшуюся систему, как Ethernet, непросто. Сразу возникает несколько вопросов:
1. И что, теперь надо выбросить несколько сотен миллионов уже существующих сетевых карт Ethernet?
2. Если нет, то кто создает новые поля фреймов?
3. Что произойдет с фреймами, которые уже имеют максимальный размер?
Конечно, комитет 802 знал об этих проблемах (даже слишком хорошо), и в итоге решение было найдено.
Оно состоит в том, что на самом деле поля VLAN реально используются только мостами и коммутаторами, а не компьютерами пользователей. Как видно на илл. 4.39, эти поля не так важны на линиях, ведущих к адресату; они необходимы, когда фреймы доходят до мостов. Кроме того, чтобы использовать VLAN, мосты должны быть VLAN-совместимыми. Это делает проект выполнимым.
Что касается старых сетевых карт Ethernet, то выкидывать их не пришлось. Комитет 802.3 даже не мог заставить пользователей изменить поле Type на Lenght. Можно представить реакцию общественности на заявление о том, что все существующие карты Ethernet больше не нужны. В любом случае новые карты Ethernet совместимы со стандартом 802.1Q и могут корректно заполнять поля идентификации VLAN.
Некоторые компьютеры (а также коммутаторы) могут быть несовместимы с VLAN. Поэтому первый встретившийся на пути фрейма VLAN-совместимый мост вставляет это поле, а последний — удаляет его. Пример смешанной топологии показан на илл. 4.40. Здесь VLAN-совместимые компьютеры генерируют снабженные тегами (то есть совместимые со стандартом 802.1Q) фреймы непосредственно, и последующие коммутаторы используют эти теги. Закрашенные элементы — VLAN-совместимые, пустые — нет.
В соответствии с 802.1Q, фреймы «окрашиваются» в зависимости от порта, на котором они получены. Чтобы этот метод работал, все станции одного порта должны принадлежать одной VLAN, что уменьшает гибкость. Например, на илл. 4.39 это свойство справедливо для всех портов, где отдельный компьютер соединяется с мостом, но не для порта, где концентратор соединяется с мостом B2.
Илл. 4.40. LAN с мостами, частично совместимая с VLAN. Закрашенные элементы — VLAN-совместимые устройства. Все остальные несовместимы с VLAN
Также отметим, что мост может использовать протокол более высокого уровня, чтобы выбрать цвет. Таким образом, фреймы, которые приходят на порт, могут попадать в различные VLAN в зависимости от того, что они содержат — IP-пакеты или PPP-фреймы.
Возможны и другие методы, но они не поддерживаются в 802.1Q. Например, для выбора цвета VLAN может использоваться MAC-адрес. Этот метод применяется для фреймов из соседних 802.11 LAN, где ноутбуки передают данные через разные порты по мере перемещения. Один MAC-адрес будет закреплен за одной и той же VLAN, независимо от порта, через который он попадает в сеть.
Что касается фреймов, длина которых превышает 1518 байт, то в стандарте 802.1Q эта проблема решается путем повышения лимита до 1522 байт. К счастью, только VLAN-совместимые компьютеры и коммутаторы обязаны поддерживать такие длинные фреймы.
Теперь рассмотрим формат 802.1Q (илл. 4.41). Единственное заметное изменение — добавление пары 2-байтных полей. Первое называется VLAN protocol ID (Идентификатор протокола VLAN). Оно всегда имеет значение 0х8100. Поскольку оно превышает 1500, то все сетевые карты Ethernet интерпретируют его как Type, а не как Lenght. Неизвестно, что будет делать с такими фреймами устаревшая карта, поскольку они, по идее, не должны на нее передаваться.
Илл. 4.41. Форматы фреймов Ethernet-стандартов 802.3 (устарел) и 802.1Q
Во втором двухбайтном поле есть три вложенных поля. Главное из них — VLAN Identifier (Идентификатор VLAN), который занимает 12 младших битов. Оно содержит информацию, из-за которой и была затеяна смена формата: цвет виртуальной сети, к которой относится фрейм. Трехбитное поле Priority (Приоритет) не имеет отношения к VLAN. Но поскольку изменение формата Ethernet-фрейма производится раз в десять лет и занимает три года работы сотни людей, почему бы не предусмотреть в нем место для некоторой дополнительной полезной информации? Это поле позволяет различать трафик жесткого и мягкого реального времени и трафик, для которого время передачи некритично. Благодаря этому улучшаются показатели QoS в Ethernet. Поле Priority используется также при передаче голоса по Ethernet (хотя справедливости ради вот уже четверть века в IP имеется подобное поле, и никто никогда его не использовал).
Последнее поле, CFI (Canonical Format Indicator — Индикатор классического формата), следовало бы назвать CEI (Corporate ego indicator — Индикатор эгоизма компании). Изначально оно предназначалось для того, чтобы показывать порядок битов в MAC-адресе (от младшего к старшему или наоборот), однако в пылу дискуссий об этом как-то забыли. Его присутствие сейчас означает, что поле данных содержит сублимированный фрейм 802.5, который ищет еще одну сеть формата 802.5, и Ethernet для него лишь промежуточный этап. Все это, конечно, никак не связано с VLAN. Но политика комитета стандартизации не слишком отличается от обычной политики: если ты проголосуешь за мой бит, я проголосую за твой. Торг чистой воды.
Как уже упоминалось выше, когда VLAN-совместимый коммутатор получает фрейм с тегом VLAN, он использует идентификатор VLAN в качестве индекса таблицы, в которой ищет, на какие порты передать фрейм. Но откуда берется эта таблица? Если она разрабатывается вручную, это означает возврат в исходную точку: ручное конфигурирование мостов. Вся прелесть прозрачности мостов состоит в том, что они настраиваются автоматически и не требуют никакого вмешательства извне. Было бы ужасно жаль потерять это свойство. К счастью, мосты для виртуальных сетей также настраиваются сами в зависимости от тегов входящих фреймов. Если фрейм, помеченный как VLAN 4, приходит на порт 3, это означает, что одна из станций, подключенных к этому порту, находится внутри VLAN 4. Стандарт 802.1Q вполне четко поясняет, как строятся динамические таблицы, преимущественно ссылаясь на соответствующие части стандарта 802.1D.
Прежде чем завершить обсуждение маршрутизации VLAN, отметим следующее. Многие пользователи интернета и Ethernet весьма привязаны к сетям без установления соединения и активно выступают против любых систем, в которых есть хотя бы намек на соединение на сетевом или канальном уровне. Однако в виртуальных сетях есть кое-что, сильно напоминающее установку соединения. Работа VLAN невозможна без идентификатора в каждом фрейме. Он используется как индекс таблицы в коммутаторе, чтобы определить дальнейший путь фрейма. Именно это и происходит в сетях, ориентированных на установление соединения. В системах без установления соединения маршрут определяется с помощью адреса назначения, а не идентификатора. Мы подробнее обсудим эту тенденцию в главе 5.