Проектируем локальную сеть

Часть третья. Ethernet: теория и топология

В предыдущих статьях мы касались тем использования модели OSI и создания кабельной системы. В этой рассмотрим технологии сетей Ethernet и методы их проектирования. Технология Ethernet давно и прочно заняла нишу локальных сетей благодаря своей простоте и низкой стоимости. Как оказалось, именно эти факторы стали доминирующими, поэтому сейчас при выборе технологии для локальной сети у подавляющего большинства специалистов не возникает вопрос о том, какую технологию использовать. Ответ очевиден - Ethernet.


Теория

Кадр классического Ethernet имеет максимальный размер 1518 байт и включает в себя данные и служебные заголовки, из которых нам интересны MAC-адрес отправителя и MAC-адрес получателя. В поле данных кадра содержится инкапсулированный пакет протокола 3-го уровня, о чем мы рассказывали в статье о модели OSI.

Для передачи кадров Ethernet по локальной сети, в основном, применяются два типа сетеобразующих устройств - концентраторы ("хабы", "hubs") и коммутаторы ("свичи", "switches").

 

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

Наложение кадров часто происходит и в процессе нормальной работы сети, построенной на концентраторах, и называется "коллизией". Обычным оно считается потому, что протокол Ethernet не содержит в себе механизма контроля захвата среды передачи на момент передачи кадра, а вместо этого использует механизм обнаружения коллизий ("collision detection", "CD"). Суть данного механизма в том, что каждое клиентское устройство "слушает" среду передачи и начинает передачу только в том случае, если среда свободна. Но возможна и ситуация, когда между тем, как устройство "прослушало" среду, решило, что она свободна, и начало передачу, проходит какое-то время, и именно в это время какое-то другое устройство начало передачу, в итоге произошла коллизия и пакеты были отброшены. При обнаружении коллизии оба устройства прекращают передачу и делают паузу на некоторое время, которое выбирается случайным образом. По истечении этого времени устройства вновь пытаются передать данные, и высок шанс, что в этот раз пакеты не наложатся. Таким образом в Ethernet решается проблема разделения общей среды передачи между сетевыми устройствами.

Сегмент сети, который использует в качестве активного оборудования концентраторы, называют "коллизионный домен", поскольку при обнаружении одной коллизии на некоторое время приостанавливается передача данных по всему сегменту. Фактически, коллизионный домен - это аналог общей среды передачи, который просто объединяет сетевые устройства так, что они могут вещать на все остальные устройства напрямую. Это очень похоже на сеть, построенную на коаксиальном кабеле, когда устройства просто подключались к кабелю параллельно, а активное оборудование вообще не требовалось. Фактически, концентраторы являются устройствами 1-го уровня модели OSI, т.е. устройствами для физической передачи данных.

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

Итак, сегментам, построенным на основе концентраторов, присущи серьезные недостатки:

  1. Невозможность одновременной передачи данных более чем от одного устройства.
  2. Режим полудуплекса, который позволяет в один момент времени только или передавать информацию, или принимать ее.
  3. Наличие коллизий, вносящих паузы в передачу данных по всему сегменту.
  4. Необходимость повторять пакеты на все порты, что снижает безопасность.
  5. Относительно сложный алгоритм расчета размера коллизионного домена.

Как видно, сегменты, построенные на концентраторах, имеют низкую производительность и безопасность. Причем производительность такого сегмента тем ниже, чем больше в ней клиентских устройств, поскольку с ростом их числа становится все больше кадров, а значит, и коллизий, тем больше времени сеть "простаивает".

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

Все эти недостатки устраняет следующий тип сетеобразующих устройств - коммутатор. Коммутатор, в отличие от концентратора, не повторяет каждый кадр на все порты, а имеет более высокий "интеллект" - он просматривает заголовки и использует MAC-адреса для построения таблицы коммутации кадров. Тем самым, он работает на втором уровне модели OSI, точнее, на подуровне MAC второго уровня.

Рассмотрим схематическую модель коммутатора (рис. 1).

Рис. 1

На ней обозначены порты, фабрика коммутации и таблица коммутации. "Интеллект" коммутатора второго уровня содержится как раз в "фабрике коммутации" (switch fabric), которая и оперирует с MAC-адресами кадров.

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

Нетрудно заметить, что производительность коммутатора возрастает в разы за счет того, что он практически одновременно передает пакеты между многими своими портами. Учитывая тот факт, что практически все современные коммутаторы содержат фабрики коммутации, которые способны одновременно передавать кадры между всеми портами, то производительность коммутатора больше производительности концентратора в x раз, где x - количество портов коммутатора.

За счет того, что коммутатор работает с каждым клиентским устройством "индивидуально", устройству не требуется занимать всю среду передачи на время передачи кадра - оно передает кадр только на фабрику коммутации, откуда кадр будет передан непосредственно на нужный порт (тот, к которому подключен получатель). Соединение коммутатора с клиентским устройством может одновременно и передавать кадр, и принимать другой. При использовании витой пары наложение кадров отсутствует, поскольку для передачи и приема используются разные пары, а значит, не может быть коллизий.

Кадры передаются только на порт для устройства и не могут попасть к злоумышленнику, соответственно, существенно выше безопасность.

Также, существенно упрощается расчет коллизионного домена, ведь сеть, построенная на коммутаторах, как правило, использует только полный дуплекс, что исключает коллизии. Соответственно, при проектировании сетей на основе коммутаторов требуется соблюсти только требования по кабельной системе, а именно - протяженность кабеля не более 100 метров (в случае для витой пары) либо 90 метров, если предполагается подавать питание по этому кабелю по технологии PoE. О построении кабельной системы мы рассказывали в первой статье из цикла (№28).

Теперь немного об "интеллекте" коммутатора. Таблица коммутации составляется довольно просто - при приеме кадра с какого-то порта коммутатор "смотрит" MAC-адрес отправителя и заносит запись о том, что "устройство с MAC-адресом таким-то находится на порту таком-то". Очищается таблица коммутации либо по таймеру, когда для определенной записи в таблице коммутации истекает срок действия, либо при выключении устройства. Отдельным случаем является, когда в таблице коммутации есть запись, что "устройство с таким-то MAC-адресом находится на порту x" и вдруг приходит кадр с таким же MAC-адресом отправителя, но с порта y. В этом случае таблица коммутации корректируется и после этого отражает реальную картину, а именно, что теперь это устройство находится на порту y. Таким образом, коммутатор постоянно поддерживает актуальную таблицу коммутации, которая отражает, к какому порту какое клиентское устройство подключено. Этот процесс называется "автообучение" (autolearning) фабрики коммутации.

Процесс коммутации кадра выглядит следующим образом: когда коммутатор получает кадр для какого-устройства, то он просматривает таблицу коммутации, если запись с соответствующим MAC-адресом получателя найдена, то кадр транслируется именно на этот порт. А если запись с таким адресом не обнаружена, то кадр передается на все порты коммутатора. За счет последнего коммутатор 2-го уровня прозрачен для широковещательных (broadcast) и групповых (multicast) кадров.

Пытливый ум заметит, что в случае передачи широковещательных и групповых кадров занимаются все порты коммутатора и это приостанавливает передачу данных по сегменту. Совершенно верно - сегмент, построенный на коммутаторах, называется "широковещательным доменом", т.е. широковещательные пакеты передаются по всему сегменту и на время передачи блокируют другие данные. Причем, ситуация несколько похожа на ситуацию с коллизиями - чем больше устройств в широковещательном домене, тем большее время сеть занимается передачей широковещательных кадров, тем больше она "простаивает". Однако следует понимать, что коллизионный домен и широковещательный - это совершенно разные явления: коллизионный является одновременно и широковещательным (по определению), но широковещательный не является коллизионным, поскольку в коммутируемом сегменте коллизий не бывает. Помимо этого, коллизионный домен требует специального расчета при проектировании.

Недостаток со снижением производительности широковещательного домена присущ сегментам на базе устройств второго уровня и решается сегментированием сети с помощью устройств третьего уровня - маршрутизаторов или маршрутизирующих коммутаторов. Но про них пойдет речь в статье про третий уровень модели OSI.


Топология

Из теории следует, что в классическом виде Ethernet нельзя соединять по топологии "кольцо", поскольку в случае использования концентраторов это закончится постоянными коллизиями - кадры, пришедшие по двум путям, будут постоянно накладываться, а в случае использования коммутаторов будет происходить т.н. "широковещательный шторм". Это когда первый же широковещательный кадр начинает бесконечно циркулировать по кольцу из двух соединений. Нетрудно догадаться, что в обоих случаях сеть будет практически выведена из строя. Поэтому для классического Ethernet'а можно применять только топологию типа "звезда", которая является древовидной с непересекающимися ветвями (рис. 2).

Рис. 2

Правда, в современных коммутаторах начали встраивать защиту от широковещательных штормов, но это само по себе, конечно, не дает возможности делать топологию типа "кольцо".

Кстати говоря, возможность широковещательного шторма - одна из серьезных уязвимостей протокола Ethernet к атакам типа DOS: для выведения из рабочего состояния коммутатора бывает достаточно просто взять кросс-патчкорд и подключить его к двум портам одного и того же коммутатора. Нетрудно догадаться, что если какой-то пользователь так "замкнет" две сетевых розетки в своей комнате, то коммутатор на это время, скорее всего, перестанет работать.

Продолжая разговор о физической топологии, хотелось бы коснуться темы резервирования соединений, ведь если два коммутатора соединены одним кабелем, то это не так надежно - кабель могут повредить, его может залить водой, могут просто отойти контакты и т.п... А топология классического Ethernet не подразумевает параллельных соединений двух коммутаторов или "колец" между звеньями сети. На этот случай был разработан протокол Spanning Tree Protocol (STP). По сути своей, STP просто отслеживает логическую топологию всей "видимой" ему сети и отключает те порты, которые могут "замкнуть" ветви "дерева". Тем самым, можно искусственно организовать кольцо или несколько колец между коммутаторами, поддерживающими STP, при этом часть соединений будет постоянно отключена, но активирована только в случае обрыва основного соединения. Обычная практика при этом - пускать основное и резервные соединения разными физическими путями, чтобы кабели не повредились одновременно. Правда, у STP есть один недостаток - время переключения на резервное соединение может занимать до минуты, а в современных сетях это довольно много. Поэтому был разработан протокол Rapid Spanning Tree Protocol (RSTP), который является более "быстрой" версией STP. В современных сетях, в основном, применяется RSTP или частные протоколы производителей, которые не стандартизованы и поддерживаются только оборудованием этих же производителей.

В следующем номере мы расскажем о пропускной способности и транковых каналах, типах и видах коммутаторов, и использовании технологии VLAN...

Алексей ГРЕЧАНИНОВ,
портал IT'шников Беларуси,
www.administrators.ws

Версия для печатиВерсия для печати

Номер: 

34 за 2005 год

Рубрика: 

Hardware
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!