54152
[i] VLAN - коммутация пакетов в К1923КХ02GI
Дата последнего изменения: 26.07.2024 09:25:48
В статье рассматриваются аспекты реализации VLAN, связанные с К1923КХ02GI.
Далее пакет с тегом маршрутизируется согласно таблицам МАС и VLAN и рассылается на необходимые порты. Если порт назначения подключен к РС, принтеру или другому обычному абоненту, то фрейм уходит без тега. Если же порт назначения является Trunk- портом, то есть портом, подключенным к другому VLAN коммутатору, то необходимо передать тег в теле пакета. Это необходимо, так как абонент назначения подсети VLAN может находится на портах этого соседнего коммутатора.
PORTх_STRUC1:
1 - выключение порта.
1 - TaggedOnly - принимаются только тегированные фреймы;
2 - UntaggedOnly - принимаются только нетегированные фреймы.
1 - Blocked - выбросить пакет, ничего не делать;
2 - LearnOnly - послать для обучения на Хост.
Совпадают - фрейм посылается без тега.
НЕ совпадают - фрейм посылается с тегом фрейма!
1 - Действие с тегом берется из VLAN таблицы для тега фрейма. Если бит порта в маске UntagList равен:
0 - тег не снимается. Фрейм уходит тегированный.
1 - тег снимается. Фрейм уходит нетегированный.
Жирным шрифтом выделены основные параметры, необходимые для настройки портов для реализации сетей VLAN.
Trunk-порт - принимает и передает тегированный траффик, но только с теми тегами, которые разрешены для прохождения через данный порт.
Поскольку коммутатор является VLAN-based, то какой-то общий VLAN_ID всем портам задать необходимо. Таким значением VLAN_ID по умолчанию является 1. (Cisco использует VLAN 1 как default VLAN, и management протоколы (STP, CDP, DTP, etc) используют VLAN 1.)
Рассмотрим этапы прохождения фрейма между двумя портами в настройках по умолчанию (рисунок 1).
Рисунок 1 - Прохождение пакета между двумя портами микросхемы К1923КХ02GI при настройках по умолчанию.
Пояснения к рисунку 1
Рисунок 2 - Настройка MAC-таблицы
Пояснения к рисунку 2
Когда все МАС-адреса и порты известны, то общение между PC_A и PC_B идет напрямую (рисунок 3).
Рисунок 3 - Отправка пакета адресату с известным MAC-адресом
Пояснения к рисунку 3
Рисунок 4 - Отправка тегированного пакета адресату с неизвестным MAC-адресом
Пояснения к рисунку 4
Switch1.ForwList = 0x8003, маска портов входящих в сеть VLAN 100 и Trunk-портов.
0x8000 - маска Trunk-порта Port15. Сюда пересылаются пакеты для отправки в switch1, если МАС-адрес фрейма назначения не находится в данном коммутаторе.
0x1, 0x2 - маска Port0 и Port1, только между этими портами и Trunk-портом могут проходить пакеты VLAN_ID 100.
Switch1.UntagList = 0x0003. Маска портов, для которых нужно принудительно снимать тег при посылке фреймов абоненту. Для Trunk-порта снимать тег не нужно, бит остается нулевым!
Switch2.ForwList = 0x8003
0х0001 - Маска Trunk-порта Port0
0х8002 - маска портов входящих в сеть VLAN 100
Switch2.UntagList = 0x8002. Маска портов, входящих в сеть VLAN 100 (без Trunk--портов)
2. Настройка Access-портов на обоих коммутаторах: Switch1 Ports [0,1], Switch2 Ports [1,15]
VID = 100, теперь абонент на порте входит в состав подсети VLAN 100
AFT = UntaggedOnly. Access-порты обмениваются только нетегированным траффиком. Если придет тегированный фрейм, то он будет отброшен.
UntagFromBTable (UNT_TBL) - принудительное снятие тега в исходящем фрейме согласно флагу порта в маске UntagList в VLAN-таблице (для VLAN 100). Как уже было описано выше, по умолчанию при UNT_TBL = 0, в исходящем фрейме будет удален тег только, если тег в фрейме совпадает с тегом порта. И если вдруг случится, что на выход из порта придет фрейм с тегом, отличным от тега порта, то такой фрейм выйдет тегированным. Этого на Access-порте быть не должно! Флаг UNT_TBL = 1 и маска в VLAN_Table.UntagList гарантируют, что тег в исходящем фрейме будет удален в любом случае.
3. В VLAN-таблицах коммутаторов для дефолтного VLAN_ID 1 необходимо исключить из маски ForwardList биты портов, которые были выделены в отдельную сеть VLAN_ID 100. Иначе фреймы с данных портов будут рассылаться на порты VLAN 100, причем тегированные, так как тег фрейма 1 не снимется, выходя из порта 100, а UntagList для VLAN_ID 1 в рассматриваемом случае настроен в 0.
Рисунок 5 - Широковещательный пакет в VLAN-сети
Пояснения к рисунку 5
Switch1:
Рисунок 6 - Отправка нетегированных пакетов через VLAN Trunk-порт
Пояснения к рисунку 6
Switch1
Рисунок 7 - Отправка только тегированных пакетов через VLAN Trunk-порт
Пояснения к рисунку 7
В общем случае, таких выделенных портов может быть несколько, чтобы их разделить используются VLAN теги, которые называются Primary. В качестве примера можно представить, что один порт коммутатора К1923КХ02GI подключен к провайдеру интернета и траффик через этот порт тегируется тегом 10, а второй порт подключен к другому провайдеру и его траффик тегируется тегом 20. Остальные порты нужно распределить по провайдерам. Получаем, что Primary VLAN поделил порты коммутатора на первичные подсети.
Рисунок 8 - Организация PVLAN с помощью К1923КХ02GI
Известно, что траффик в отдельных VLAN не смешивается.
Выделенный порт, который коммутирует траффик от провайдера на остальные порты в своей Primary подсети, называется Promiscuous (англ. - беспорядочный, неразборчивый, смешанный). Promiscuous порт может обмениваться траффиком с любым из портов в своей подсети, не зависимо от режима работы этих портов.
Далее, порты каждого их первичных VLAN можно разбить на отдельные подсети, ограничив их взаимодействие друг с другом. Такие подсети организуются также за счет присвоения VLAN тегов портам, и называются они Secondary. Получаем как бы, Secondary VLAN-сети внутри Primary VLAN-сети (рисунок 9).
Рисунок 9 - Secondary VLAN-сети внутри Primary VLAN-сети
Для упрощения, на рисунке 9 показано только разбиение Primary VLAN 10. Primary VLAN 20 разбивается аналогично любым способом.
Порты, входящие во вторичные сети, могут быть настроены в трех режимах :
Isolated Broadcast PVLAN траффик
Необходимо подчеркнуть, что каждый порт, входящий в Secondary VLAN, идентифицируется двумя VLAN_ID:
Таблица 1 - Порт Isolated
Secondary[port] - это VID порта, принявшего пакет. Для изолированного порта запрещаются пересылки в порт фреймов с VID порта, поэтому прописано действие "отбросить" (ACT_DISCARD). Это нужно на тот случай, если соседний абонент, с таким же VID, каким-то образом узнал МАС-адрес порта и послал фрейм с МАС адресом порта. По умолчанию, МАС-таблица по совпадению МАС-адреса назначения и VID послала бы фрейм в изолированный порт, чего допустить нельзя. Поэтому такие фреймы отбрасываются.
Вторая запись - это разрешение пересылать в изолированный порт фреймы от провайдера (таблица 2, 3).
Таблица 2 - Порт Community
Здесь, в отличие от изолированного порта, разрешается перенаправлять абоненту фреймы от соседей с таким же VLAN_ID.
Таблица 3 - порт Promiscuous
В случае порт Promiscuous первая запись разрешает перенаправлять провайдеру фреймы от соседей с таким же Primary VLAN_ID, которые могут быть в соседнем коммутаторе, см. рисунки 10, 11. А остальные записи разрешают перенаправление абоненту фреймов от всех Secondary подсетей данного Primary VLAN. n - это количество Secondary VLAN в Primary VLAN.
Для прохождения широковещательного траффика необходимо прописать маски ForwardList и UntagList в таблицу VLAN. Маски UntagList нужны, чтобы теги, присваиваемые на входе и с которыми фрейм коммутируется внутри коммутатора, снимались при выходе фрейма в порт назначения.
Рисунок 10 - PVLAN. Широковещательный траффик от изолированного порта.
Пояснения по посылке запроса
Port15 - это Uplink PromiscuousTrunk, который пересылает фрейм в неизменном виде в соседний коммутатор Switch2 на такой же Uplink порт.
- Switch2.Port0 принимает фрейм и т.к. он уже тегированный то, фрейм обрабатывается с тегом фрейма.
- Фрейм широковещательный, поэтому рассылается по таблице VLAN на все Promiscuous порты коммутатора Switch2, то есть на Port15.
- Switch2.Port15 - это порт PromiscuousTrunk. Фрейм уходит к Server2 без тега, так как включен UNT_TBL и порт указан в маске UntagList.
Пояснения по получению ответа
- Порт 14 принимает фрейм и тегирует его Primary тегом 10.
- Адреса источника и назначения есть в таблице маршрутизации. Для VLAN 10 действие - Forward, поэтому фрейм пересылается сразу на Port0.
- Фрейм уходит к PC_A без тега, т.к. включен UNT_TBL и порт указан в маске UntagList.
Путь ответа является уже Unicast, потому что идет по двум известным адресам. Если смотреть Broadcast от севера, то он пройдет во все порты, потому что в ForwardList порта Promiscuous как раз указаны все порты для Primary VLAN_ID.
Isolated Unicast PVLAN траффик
На рисунке 11 изображен Unicast траффик от РС_А. Здесь все стандартно идет через таблицы МАС. На рисунке 11 лишь уточнено, какая запись в МАС-таблице за что отвечает.
Рисунок 11 - Unicast-траффик в PVLAN
Сохранить статью в PDF
- Разбиение абонентов одной сети на принадлежность к различным VLAN-сетям необходима, чтобы широковещательные пакеты (фреймы) передавались только в пределах своей VLAN- сети. Абоненты из разных сетей VLAN изолированы друг от друга, потому что коммутатор пересылает сообщения от порта с заданным VLAN_ID только портам с таким же VLAN_ID.
- В случае нешироковещательных фреймов коммутация осуществляется по МАС-адресу источника и МАС-адресу назначения, что само по себе дает локализацию такого траффика между двумя абонентами. Но, если МАС таблицы еще не настроены ("не обучены"), и не знают, в каком порту находится МАС-адрес назначения, то траффик рассылается всем портам, у которых VLAN_ID такой же, как у порта, принявшего фрейм.
- Тегированный VLAN-траффик обычно ходит лишь между коммутаторами. Устройства, подключенные к коммутаторам, ничего про VLAN не знают - они общаются обычным нетегированным траффиком. То есть сегментирование сети на виртуальные подсети (Virtual Local Area Network) происходит за счет настройки портов коммутаторов.
Далее пакет с тегом маршрутизируется согласно таблицам МАС и VLAN и рассылается на необходимые порты. Если порт назначения подключен к РС, принтеру или другому обычному абоненту, то фрейм уходит без тега. Если же порт назначения является Trunk- портом, то есть портом, подключенным к другому VLAN коммутатору, то необходимо передать тег в теле пакета. Это необходимо, так как абонент назначения подсети VLAN может находится на портах этого соседнего коммутатора.
Настройки портов К1923КХ02GI
Настройки для каждого из 16-ти портов К1923КХ02GI хранятся в паре регистров классификатора PORT0_STRUC1/PORT0_STRUC2, PORT1_STRUC1/PORT1_STRUC2, и т.д. Последняя пара PORT16_STRUC1/PORT16_STRUC2 относится к порту Хоста, т.е. для классификатора Хост является 17-м портом. Биты настройки портов в данных регистрах следующие:PORTх_STRUC1:
- 0 ..15: TPID - Идентификатор протокола тегирования, для стандарта VLAN 802.1Q значение TPID - 0x8100.
- 16..28: VID - VLAN_ID порта, идентификатор подсети VLAN. Все нетегированные фреймы, принятые из сети на данный порт, получают тег порта для последующей коммутации. Тегированные фреймы сохраняют свой собственный тег.
- 0: SHUTDOWN - выключение порта:
1 - выключение порта.
- 4..7: AFT (AcceptFrameType) - выбор какие пакеты может принимать данный порт (остальные отбрасываются):
1 - TaggedOnly - принимаются только тегированные фреймы;
2 - UntaggedOnly - принимаются только нетегированные фреймы.
- 8..11: BLOCK_STATE - действие при приеме RSTP фрейма с данного порта:
1 - Blocked - выбросить пакет, ничего не делать;
2 - LearnOnly - послать для обучения на Хост.
- 12: CFI (CanonicalFrameIdentificator) - Не используется. Использовался раньше, для совместимости с сетями Token Ring.
- 13..15: PRI - Приоритет обработки пакета для ClassOfService (CoS).
- 16..18: TC - TrafficControl, выбор маппирования для режима MACDA2TC CoS.
- 19: TRUSTED - Указывает, что порт является доверенным.
- 20: VID_PREFIX.
- 21: UNTAG_FROM_BTABLE - Режим снятия тега в выходящем из порта фрейме:
Совпадают - фрейм посылается без тега.
НЕ совпадают - фрейм посылается с тегом фрейма!
1 - Действие с тегом берется из VLAN таблицы для тега фрейма. Если бит порта в маске UntagList равен:
0 - тег не снимается. Фрейм уходит тегированный.
1 - тег снимается. Фрейм уходит нетегированный.
Жирным шрифтом выделены основные параметры, необходимые для настройки портов для реализации сетей VLAN.
- VID (VLAN_ID) задает принадлежность абонента на данном порту к той или иной VLAN-сети.
- AFT и UNTAG_FROM_BTABLE необходимы для настройки одного из двух режимов работы порта VLAN:
Trunk-порт - принимает и передает тегированный траффик, но только с теми тегами, которые разрешены для прохождения через данный порт.
Прохождение пакетов с настройками по умолчанию
Рассмотрим настройку коммутатора К1923КХ02GI, когда он не разделяет общую сеть на подсети, то есть абоненты на всех портах находятся в одной VLAN-сети. Из-за того, что VLAN_ID на всех портах одинаков, коммутатор будет работать как будто никаких VLAN нет. Следовательно, и настройка будет максимально простой - все порты настраиваются одинаково.Поскольку коммутатор является VLAN-based, то какой-то общий VLAN_ID всем портам задать необходимо. Таким значением VLAN_ID по умолчанию является 1. (Cisco использует VLAN 1 как default VLAN, и management протоколы (STP, CDP, DTP, etc) используют VLAN 1.)
Рассмотрим этапы прохождения фрейма между двумя портами в настройках по умолчанию (рисунок 1).
Рисунок 1 - Прохождение пакета между двумя портами микросхемы К1923КХ02GI при настройках по умолчанию.
Пояснения к рисунку 1
- Компьютер А с МАС-адресом МАС_А посылает фрейм, допустим, компьютеру В с МАС-адресом МАС_В.
- Фрейм от компьютера нетегированный, поэтому Port_1 при приеме фрейма присваивает ему свой VLAN_ID. Внутри коммутатора фрейм маршрутизируется с тегом VLAN_ID = 1.
- Поиск по таблице МАС показывает, что МАС_А еще не известен коммутатору. То есть это первый пакет, пришедший с данного порта, поэтому требуется обучение МАС-таблицы.
- Фрейм отправляется в порт, бит которого указан в регистрах классификатора CLASS_NPU_CTRL[7..0]/CLASS_NPU_CTRL1[11..0], это маска PUNT_PORT. Только один бит может быть установлен! Если хостом является РС, подключенный через PCI-Express, то для посылки в него фрейма используется Port16, и PUNT_PORT необходимо выставить в 0x10000.
- Далее драйвер в Linux обработает запрос и добавит запись в таблицу МАС, где укажет, на каком порте коммутатора находится адрес МАС_А и к какой сети VLAN он принадлежит.
- В итоге, пакет не пересылается коммутатором К1923КХ02GI, а "тратится" на обучение таблицы МАС. Но Хост при обучении может самостоятельно переслать фрейм по необходимым портам, тогда фрейм не потеряется.
Рисунок 2 - Настройка MAC-таблицы
Пояснения к рисунку 2
- Компьютер А не получил ответа от компьютера B, и через некоторое время снова посылает пакет. При приеме фрейму присваивается тег порта VLANID 1.
- Классификатор коммутатора находит запись о том, что MAC_A (Source MAC) находится в VLAN сети 1. Но не находит записей о MAC_B (Destination MAC). Поэтому он обращается в таблицу VLAN.
- В таблице VLAN указано, что фреймы с тегом VLANID = 1 должны пересылаться в порты, заданные маской ForwList = 0xFFFF. То есть это все порты Ethernet-коммутатора. Далее из таблицы извлекается действие из поля UnicastMiss, оно показывает, что делать с Unicast- фреймом, если для него не нашлось записи в таблице МАС. (Остальные поля таблицы VLAN и возможные действия описаны тут - VLAN Table.) По умолчанию, все действия в таблице прописываются драйвером как ACT_FORWARD, то есть фрейм будет переслан на все порты в маске ForwList для VLAN_ID 1.
- Фрейм пересылается на все порты, кроме того, откуда пришел данный фрейм. Тег снимается, потому что тег фрейма равен фрейму порта.
- Теперь компьютер В получает фрейм от компьютера А и сможет послать ответ.
Когда все МАС-адреса и порты известны, то общение между PC_A и PC_B идет напрямую (рисунок 3).
Рисунок 3 - Отправка пакета адресату с известным MAC-адресом
Пояснения к рисунку 3
- РС_В посылает фрейм, он при приеме тегируется VLAN_ID 1.
- В МАС-таблице есть записи для МАС-адресов источника и назначения.
- Оба абонента находятся в одной VLAN_ID 1, поэтому фрейм пересылается в Port0 для РС_А. Тег при выдаче снимается, так как тег фрейма равен фрейму порта.
- из тега проходящего пакета, если пакет тегированный;
- из VLAN_ID принимающего порта, если пакет НЕ тегированный.
Рисунок 4 - Отправка тегированного пакета адресату с неизвестным MAC-адресом
Пояснения к рисунку 4
- К Port0 и Port1 подключены Trunk-порты соседних коммутаторов. В Port0 приходит тегированный пакет. Поскольку пакет уже тегированный, то VID-порта пакету не присваивается и в внутри коммутатора фрейм обрабатывается со своим VLAN_ID 100.
- Допустим, что это уже второй пришедший фрейм, а обучение по первому фрейму прошло ранее. Тогда таблица МАС уже содержит запись для MAC_A, но записи для MAC_B пока еще нет - пересылка по МАС-адресам не возможна. Поэтому происходит обращение к таблице VLAN для поиска маски для пересылки фрейма по VLAN_ID.
- Но записи для VLAN_ID в таблице нет, поэтому идет обращение за действием над пакетом, которое задано по умолчанию в регистрах CLASS_GLOBAL_CFG и CLASS_GLOBAL_CFG1. Запись в регистрах, в поле ForwardList содержит список портов, куда следует переслать фрейм.
- Пересланный фрейм уходит через порты в неизменном тегированном виде.
Разделение сети на несколько VLAN
В расcмотренных выше случаях все порты коммутатора имели одинаковые настройки, то есть находились в одной сети. Выделим теперь два порта в отдельную сеть с помощью VLAN. Пусть это будут Port0 и Port1, идентификатор сети VLAN_ID зададим 100. Эти порты будут работать в режиме ACCESS, то есть должны общаться со всеми другими портами, у который такой же VLAN_ID 100. В итоге в коммутаторе получилось две сети:- сеть с VLAN_ID 100 на портах 0 и 1.
- сеть с VLAN_ID по умолчанию 1 на всех остальных портах.
- PORT15 в Switch1
- PORT0 в Switch2
- В таблицы VLAN-коммутаторов добавляем запись:
Switch1.ForwList = 0x8003, маска портов входящих в сеть VLAN 100 и Trunk-портов.
0x8000 - маска Trunk-порта Port15. Сюда пересылаются пакеты для отправки в switch1, если МАС-адрес фрейма назначения не находится в данном коммутаторе.
0x1, 0x2 - маска Port0 и Port1, только между этими портами и Trunk-портом могут проходить пакеты VLAN_ID 100.
Switch1.UntagList = 0x0003. Маска портов, для которых нужно принудительно снимать тег при посылке фреймов абоненту. Для Trunk-порта снимать тег не нужно, бит остается нулевым!
Switch2.ForwList = 0x8003
0х0001 - Маска Trunk-порта Port0
0х8002 - маска портов входящих в сеть VLAN 100
Switch2.UntagList = 0x8002. Маска портов, входящих в сеть VLAN 100 (без Trunk--портов)
2. Настройка Access-портов на обоих коммутаторах: Switch1 Ports [0,1], Switch2 Ports [1,15]
VID = 100, теперь абонент на порте входит в состав подсети VLAN 100
AFT = UntaggedOnly. Access-порты обмениваются только нетегированным траффиком. Если придет тегированный фрейм, то он будет отброшен.
UntagFromBTable (UNT_TBL) - принудительное снятие тега в исходящем фрейме согласно флагу порта в маске UntagList в VLAN-таблице (для VLAN 100). Как уже было описано выше, по умолчанию при UNT_TBL = 0, в исходящем фрейме будет удален тег только, если тег в фрейме совпадает с тегом порта. И если вдруг случится, что на выход из порта придет фрейм с тегом, отличным от тега порта, то такой фрейм выйдет тегированным. Этого на Access-порте быть не должно! Флаг UNT_TBL = 1 и маска в VLAN_Table.UntagList гарантируют, что тег в исходящем фрейме будет удален в любом случае.
3. В VLAN-таблицах коммутаторов для дефолтного VLAN_ID 1 необходимо исключить из маски ForwardList биты портов, которые были выделены в отдельную сеть VLAN_ID 100. Иначе фреймы с данных портов будут рассылаться на порты VLAN 100, причем тегированные, так как тег фрейма 1 не снимется, выходя из порта 100, а UntagList для VLAN_ID 1 в рассматриваемом случае настроен в 0.
Тегированный траффик через VLAN Trunk-порт
Рассмотрим ситуацию, когда абонент сети посылает широковещательный фрейм (рисунок 5).Рисунок 5 - Широковещательный пакет в VLAN-сети
Пояснения к рисунку 5
Switch1:
- PC_A посылает широковещательный фрейм. Коммутаторы Switch1 и Switch2 уже поделили своих абонентов на подсети. Поэтому данный фрейм должен дойти всем абонентам коммутаторов, на портах которых VLAN_ID равен 100. Так как именно этот VLAN_ID присваивается в теге, когда нетегированный пакет от РС_А принимается в PORT0. Если бы фрейм был послан тегированным, то он был бы отброшен портом, так как поле AFT (AcceptFrameType) порта выставлено в UntaggedOnly.
- Допустим, что таблица МАС уже обучена - МАС-адрес источника есть в таблице. Но пакет широковещательный, а такого адреса назначения в таблице МАС быть не может. Поэтому обработка пакета обращается в таблицу VLAN. В этой таблице для VLAN 100 в поле ForwardList записано, на какие порты необходимо переслать пакет.
- Пакет отправляется на порты согласно маске ForwardList, за исключением порта откуда фрейм пришел.
- Согласно рисунку 5 PORT1 коммутатора Switch1 находится в той же сети VLAN 100, поэтому фрейм уходит абоненту PC_C. Пакет выходит нетегированным, потому что в порте включен UntagFromBTable (UNT_TBL), а в поле UntugList для VLAN 100 бит порта выставлен в "1" (0x003).
- PORT15 тоже указан в маске ForwardList, поэтому пакет отправляется и сюда тоже. Настройки PORT15 остались по умолчанию, поэтому фрейм выходит со своим тегом VLAN_ID 100.
- Фрейм из Switch1 приходит на порт Switch2.PORT0. Настройки данного порта также остались по умолчанию. Порт принимает пакет, видит что тот уже тегированный, поэтому свой тег он пакету не назначает, а оставляет исходный. Далее пакет обрабатывается с тем же тегом 100, который был ему присвоен изначально при входе в Switch1 от абонента РС_А.
- Допустим что МАС-таблица в Switch2 уже настроена и запись для МАС_А уже есть. Далее всё как в Switch1 - пакет широковещательный, значит адреса назначения в таблице нет, поэтому пакет рассылается согласно ForwardList из таблицы VLAN.
- Таблице VLAN настроена так, что к подсети VLAN 100 относятся порты 1 и 15. Поэтому фрейм посылается к абонентам на этих портах. Фрейм выходит нетегированный, потому что в портах включен режим UntagFromBTable (UNT_TBL), и оба порта указаны в маске UntagMask таблицы VLAN.
Нетегированный траффик через VLAN Trunk-порт
Trunk-порты могут обмениваться и нетегированным траффиком. Представим, что в рассмотренном только что примере, абонент на PORT4, который остался в дефолтной подсети 1, посылает свой фрейм. Посмотрим как это происходит (рисунок 6).Рисунок 6 - Отправка нетегированных пакетов через VLAN Trunk-порт
Пояснения к рисунку 6
Switch1
- PC_X посылает широковещательный нетегированый фрейм. PORT4, принимая фрейм, тегирует его своим VLAN_ID = 1.
- Пусть таблица МАС уже обучена, но пакет широковещательный, поэтому обработка проверяет таблицу VLAN для VLAN_ID = 1.
- Запись ForwardList = 0х8010 говорит, что фрейм необходимо переслать на PORT4 и PORT15. (Маска 0х8010 была прописана, чтобы показать то, как фрейм доходит до Switch2 через Trunk-порт. При другой маске, пакеты пересылается на все порты данной маски.) PORT4 - это порт, откуда пришел фрейм, поэтому фрейм туда не посылается, а посылается лишь в PORT15.
- PORT15 посылает фрейм, но при этом снимает тег, потому что тег фрейма совпал с тегом порта.
- В коммутаторе Switch2 все отрабатывает точно так же, как в Switch1. Здесь только маска ForwardList портов для VLAN 1 была прописана 0х0061. Поэтому фрейм пересылается в PORT5 и PORT6.
Только тегированный траффик через VLAN Trunk-порт
Если есть необходимость организовать только тегированный траффик через Trunk-порты, то это можно реализовать следующей настройкой (выделено красным):Рисунок 7 - Отправка только тегированных пакетов через VLAN Trunk-порт
Пояснения к рисунку 7
- Для того, чтобы траффик принимался только тегированный, в настройках Trunk-портов необходимо выставить AFT(AcceptFrameType) в TaggedOnly.
- Чтобы порт не сверял свой тег с тегом фрейма и не манипулировал выходным тегом, необходимо включить режим UntagFromBTable(UNT_TBL). При этом в маске UntagList для VLAN_ID фрейма надо уставить 0. Тогда фрейм, выходя из порта, не потеряет свой тег, каким бы этот тег ни был.
Приватный VLAN (PVLAN)
PVLAN позволяет выделить отдельный порт в коммутаторе, который будет выступать как провайдер или выделенная точка доступа к внешнему роутеру/серверу для остальных портов коммутатора, разбитых на группы. То есть абоненты этих групп портов взаимодействуют с внешним миром через выделенный порт - точку доступа.В общем случае, таких выделенных портов может быть несколько, чтобы их разделить используются VLAN теги, которые называются Primary. В качестве примера можно представить, что один порт коммутатора К1923КХ02GI подключен к провайдеру интернета и траффик через этот порт тегируется тегом 10, а второй порт подключен к другому провайдеру и его траффик тегируется тегом 20. Остальные порты нужно распределить по провайдерам. Получаем, что Primary VLAN поделил порты коммутатора на первичные подсети.
Рисунок 8 - Организация PVLAN с помощью К1923КХ02GI
Известно, что траффик в отдельных VLAN не смешивается.
Выделенный порт, который коммутирует траффик от провайдера на остальные порты в своей Primary подсети, называется Promiscuous (англ. - беспорядочный, неразборчивый, смешанный). Promiscuous порт может обмениваться траффиком с любым из портов в своей подсети, не зависимо от режима работы этих портов.
Далее, порты каждого их первичных VLAN можно разбить на отдельные подсети, ограничив их взаимодействие друг с другом. Такие подсети организуются также за счет присвоения VLAN тегов портам, и называются они Secondary. Получаем как бы, Secondary VLAN-сети внутри Primary VLAN-сети (рисунок 9).
Рисунок 9 - Secondary VLAN-сети внутри Primary VLAN-сети
Для упрощения, на рисунке 9 показано только разбиение Primary VLAN 10. Primary VLAN 20 разбивается аналогично любым способом.
Порты, входящие во вторичные сети, могут быть настроены в трех режимах :
- Isolated - Порт может обмениваться пакетами только с Promiscuous портами. Он не может обмениваться с другими Isolated портами, даже если он находится с ними в одной под сети!
- Community - Эти порты могут обмениваться пакетам с Promiscuous портами и с портами своей группы.
- Uplink - это рromiscuous trunk порт необходимый для объединения коммутаторов друг с другом для общей коммутации. Этот порт может обмениваться фреймами со всеми остальными портами. Данный порт будет представлен на картинках ниже
Isolated Broadcast PVLAN траффик
Необходимо подчеркнуть, что каждый порт, входящий в Secondary VLAN, идентифицируется двумя VLAN_ID:
- Primary VLAN_ID - это VID Primary сети, к которой принадлежит Secondary сеть. Данный параметр сохраняется в управляющем ПО и используется при обучении таблиц маршрутизации.
- Secondary VLAN_ID - это VID Secondary сети, к которой принадлежит порт. Это значение прописывается в регистры настройки порта в поле VID. И также используется в ПО при обучении.
Таблица 1 - Порт Isolated
MAC | VID | ForwList | Action |
MAC-абонента | Secondary[port] | Маска порта | Отбросить |
MAC-абонента | Primary | Маска порта | Переслать |
Secondary[port] - это VID порта, принявшего пакет. Для изолированного порта запрещаются пересылки в порт фреймов с VID порта, поэтому прописано действие "отбросить" (ACT_DISCARD). Это нужно на тот случай, если соседний абонент, с таким же VID, каким-то образом узнал МАС-адрес порта и послал фрейм с МАС адресом порта. По умолчанию, МАС-таблица по совпадению МАС-адреса назначения и VID послала бы фрейм в изолированный порт, чего допустить нельзя. Поэтому такие фреймы отбрасываются.
Вторая запись - это разрешение пересылать в изолированный порт фреймы от провайдера (таблица 2, 3).
Таблица 2 - Порт Community
MAC | VID | ForwList | Action |
MAC-абонента | Secondary[port] | Маска порта | Переслать |
MAC-абонента | Primary | Маска порта | Переслать |
Здесь, в отличие от изолированного порта, разрешается перенаправлять абоненту фреймы от соседей с таким же VLAN_ID.
Таблица 3 - порт Promiscuous
MAC | VID | ForwList | Action |
MAC-абонента | Primary | Маска порта | Переслать |
MAC-абонента | Secondary[0] | Маска порта | Переслать |
... | ... | ... | ... |
MAC-абонента | Secondary[n] | Маска порта | Переслать |
В случае порт Promiscuous первая запись разрешает перенаправлять провайдеру фреймы от соседей с таким же Primary VLAN_ID, которые могут быть в соседнем коммутаторе, см. рисунки 10, 11. А остальные записи разрешают перенаправление абоненту фреймов от всех Secondary подсетей данного Primary VLAN. n - это количество Secondary VLAN в Primary VLAN.
Для прохождения широковещательного траффика необходимо прописать маски ForwardList и UntagList в таблицу VLAN. Маски UntagList нужны, чтобы теги, присваиваемые на входе и с которыми фрейм коммутируется внутри коммутатора, снимались при выходе фрейма в порт назначения.
- Isolated VID: ForwardList = UntagList = только порты Promiscuous
- Community VID: ForwardList = UntagList = порты Promiscuous | порты группы
- Primary VID (Promiscuous): ForwardList = UntagList = все порты
Рисунок 10 - PVLAN. Широковещательный траффик от изолированного порта.
Пояснения по посылке запроса
- Абонент РС_А посылает широковещательный фрейм, например ARP-запрос. Фрейм тегируется Secondary VLAN_ID порта, то есть 100.
- Так как адрес назначения широковещательный, то фрейм пересылается по VLAN- таблице.
- VLAN-таблица для Secondary сети 100 содержит маску всех Promiscuous портов:
Port15 - это Uplink PromiscuousTrunk, который пересылает фрейм в неизменном виде в соседний коммутатор Switch2 на такой же Uplink порт.
- Switch2.Port0 принимает фрейм и т.к. он уже тегированный то, фрейм обрабатывается с тегом фрейма.
- Фрейм широковещательный, поэтому рассылается по таблице VLAN на все Promiscuous порты коммутатора Switch2, то есть на Port15.
- Switch2.Port15 - это порт PromiscuousTrunk. Фрейм уходит к Server2 без тега, так как включен UNT_TBL и порт указан в маске UntagList.
Пояснения по получению ответа
- Ответ от Server1:
- Порт 14 принимает фрейм и тегирует его Primary тегом 10.
- Адреса источника и назначения есть в таблице маршрутизации. Для VLAN 10 действие - Forward, поэтому фрейм пересылается сразу на Port0.
- Фрейм уходит к PC_A без тега, т.к. включен UNT_TBL и порт указан в маске UntagList.
- Ответ от Server2:
Путь ответа является уже Unicast, потому что идет по двум известным адресам. Если смотреть Broadcast от севера, то он пройдет во все порты, потому что в ForwardList порта Promiscuous как раз указаны все порты для Primary VLAN_ID.
Isolated Unicast PVLAN траффик
На рисунке 11 изображен Unicast траффик от РС_А. Здесь все стандартно идет через таблицы МАС. На рисунке 11 лишь уточнено, какая запись в МАС-таблице за что отвечает.
Рисунок 11 - Unicast-траффик в PVLAN
Сохранить статью в PDF
Документация
Программное обеспечение
Теги
К1923КХ02GI - коммутатор сети Ethernet (10/100/1000 Мбит/сек)