В этой статье мы поговорим о том, как работает коммутатор Layer 2 OSI в сетях Ethernet.
Коммутатор осуществляет «перекидывание» опираясь на специальную MAC таблицу, в которой фиксируются такие значения как: MAC, порт.
Исходя из этого, можно разделить на несколько типов адресов, с которыми работает коммутатор.
1. Известный unicast (или иногда еще называют индивидуальный) адрес.
То есть, коммутатор получил фрейм, «смотрит» в заголовок, первое поле DA (Destination address), затем смотрит в свою таблицу mac адресов, и если такой адрес уже есть в таблице (а к адресу привязывается и порт), то направляет фрейм в нужный порт коммутатора.
2. Неизвестный unicast адрес. Если коммутатор получает фрейм, и такого адреса получателя в своей таблице не находит, то он отправляется на все порты, исключая тот порт, с которого этот фрейм пришел.
3. Широковещательный фрейм (все значения единицы, в двоичной системе или FF FF FF FF FF FF в 16-ой. ). Коммутатор делает все тоже самое, что и при неизвестном unicast адресе.
4. Мультикастовый тип адреса. Коммутатор работает так же как и в широковещательном случае, но здесь можно создать некие группы для рассылок.
Если мы вспомним, такие устройства как концентраторы (или hub), то там устройство не «смотрит» ни на какие заголовки второго уровня, а оперирует только электрическими сигналами.
Для того чтобы посмотреть MAC таблицу на устройстве, например на коммутаторе Cisco, необходимо ввести команду show mac-address-table
Вывод нам покажет примерно следующее:
Vlan Mac Address Type Ports
—- ———— ——— ——
1 0017.3151.ad78 DYNAMIC Gi0/1
1 001b.9095.dc00 DYNAMIC Gi0/2
1 001c.5863.950c DYNAMIC Gi0/3
Здесь нас сейчас интуресует только поле Mac Address , Type и Port. С MAC адресом мы разобрались, а вот что такое type?
Дело в том, что существует два типа записей MAC адресов в таблице, это динамический и статический.
Dynamic значит что, MAC адрес будет «привязываться» к порту автоматически (после получения и обработки фрейма), и через некоторый time out будет удаляться.
Static — это специальная настройка на порту коммутатора, в которой можно «привязать» конкретный MAC адрес к порту, другие MAC адреса здесь не пройдут 🙂 , ну и соответственно нет никаких time out.
Port, это собственно номер порта, через который «видно» устройство с таким MAC адресом.
Vlan нас пока не интересует, об этом в следующих статьях.
Как то я писал статью о том, как зная IP адрес узнать на каком порту находится устройство.
Коммутатор может работать в трех режимах.
- Store-and-forward. Коммутатор получает фрейм целиком (все байты), пересчитывает FCS и сверяет с 4 байтовым полем в фрейме. Если сумма совпадает, то пакет форвардируется в зависимости от MAC таблицы. Если не совпадает, то такой пакет дропается (drop).
- Cut-through. Этот режим работает следующим образом. Коммутатор получает фрейм и сразу начинает смотреть заголовок, а именно Destination Address (не дожидаясь пока фрейм полностью будет получен), и на основе этих данных форвардит туда, куда указывает MAC таблица. Это позволяет повысить скорость коммутации и уменьшить задержку. FCS не проверяется, в связи с этим даже если фрейм «битый» он будет скомутирован.
- Fragment-free. Этот режим работает так же как и Cut-through, с одним отличием. Коммутатор принимает первые 64 байта фрейма, это позволяет отсеить большинство ошибочных фреймов Таким образом в этом режиме форвардинг происходит практически так же быстро как и при Cut-through и с наименьшими задержками.