Поиск по этому блогу

24.09.2010

Двойное тегирование QinQ

Двойное тегирование "Q-in-Q" - функционал коммутаторов по упаковке всех приходящих тегированных и нетегированных фреймов в один vlan, который называется внешний (outer vlan). Упакованные внутрь него vlan'ы соответственно называются внутренними (inner vlan).
Применяется на операторских сетях, как правило, по нескольким причинам:
- количество бит в ethernet-фрейме, выделяемое под идентификатор виртуальной локальной сети (VID), равно 12. То есть, максимально число это 111111111111 или 4095. При использовании модели оказания услуг "vlan на пользователя" , когда порт каждого клиента изолирован от другого и обмен между возможен только на маршрутизаторе оператора, ограничение на количество vlan'ов оказывается критическим.
- оператор оказывает услуги по передаче тегированных клиентских пакетов, когда все клиентские vlan'ы упаковываются в один операторский. Без технологии QinQ это было бы невозможным, так как бы пришлось согласовывать каждый vlan. При массовой услуге такое было бы абсурдным. Пример на картинке.
- оператор оказывает клиенту услуги по организации "последней мили". Клиент использует двойное тегирование на стыке с оператором по причинам безопасности и целесообразости. Такая схема является достаточной, если коммутатор и маршрутизатор клиента обладает необходимым функционалом.

Двойное тегирование подразумевает увеличение оверхеда:
Тип инкапсуляцииЧисло байтОписание
802.1Q186-byte destination MAC address + 6-byte source MAC address + 2-byte protocol ID (0x8100) + 2-byte VID/CFI/PRIORITY + 2-byte length/type
qinq226-byte destination MAC address + 6-byte source MAC address + 2-byte protocol ID (0x8100) + 2-byte VID/CFI/PRIORITY + 2-byte protocol ID + 2-byte inner tag + 2-byte length or type

Увеличение заголовка на 4 байта подразумевает изменение настроек MTU коммутаторов, которые будут передавать фреймы с двойным тегированием, а так же изменение MTU на физических интерфейсах маршрутизаторов.
Системное MTU коммутатора необходимо увеличить минимум до 1504. В данном примере сделано чуть больше, так как каждое изменение MTU требует перезагрузки коммутатора Cisco.
switch#show system mtu

System MTU size is 1546 bytes
System Jumbo MTU size is 9000 bytes
Routing MTU size is 1500 bytes

switch(config)#system mtu ?
<1500-1998> MTU size in bytes
jumbo Set Jumbo MTU value for GigabitEthernet or TenGigabitEthernet interfaces
routing Set the Routing MTU for the system
На маршрутизаторе я предпочел использовать отдельный физический интерфейс, на котором будет увеличено MTU. Это можно не делать. Все будет работать на маршрутизаторе и со стандартным MTU 1500 на интерфейсе.
router#show run interface gi0/3
Building configuration...

Current configuration : 121 bytes
!
interface GigabitEthernet0/3
mtu 1546
no ip address
duplex auto
speed auto
media-type rj45
negotiation auto
end
Объясняю почему. На другом физическом интерфейсе достаточное количество подинтерфесов, которые участвуют в динамической маршрутизации. Динамические протоколы маршрутизации чувствительны к MTU, поэтому его изменение должно сопровождаться переконфигурированием подинтерфейсов. Это добавление ip mtu 1500, как минимум, потому что оно так же увеличивается. Вот для сравнения:
router(config)#int GigabitEthernet0/1.100
router(config-subif)#ip mtu ?
<68-1500> MTU (bytes)

router(config-subif)#exit

router(config)#int GigabitEthernet0/3.100
router(config-subif)#ip mtu ?
<68-1546> MTU (bytes)
Вот небольшая таблица для случаев, когда MTU отличается на одном маршрутизаторе от стандартного в 1500 байт
Протокол маршрутизацииКоманды на подинтерфейсеЧто если не сделать
BGPip mtu 1500Сессия устанавливается, но в одну из сторон не передаются анонсы
OSPFip mtu 1500
ip ospf mtu-ignore
Не работает
%OSPF-5-ADJCHG: Process 1, Nbr x.x.x.x on VlanXX from EXSTART to DOWN, Neighbor Down: Too many DBD retransmitions
ISISclns mtu 1497Не работает

Давайте рассмотрим случай с предоставлением "последней мили" по оптике, которой много по городу не накидаешь, чтобы под каждое подключение выделить отдельный порт в в коммутаторе. Итак, оператор настраивает свой порт trunk'ом и отдает два vlan'a. Их нумерация по его усмотрению, например, 800 и 801
ISPswitch#show run interface Gi1/0/10
Building configuration...

Current configuration : 281 bytes
!
interface GigabitEthernet1/0/3
description *** TO MY BEST COSTUMER ***
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 800,801
switchport mode trunk
no lldp transmit
no lldp receive
no cdp enable
end
На стороне клиента настраивается порт коммутатора с увеличенным MTU следующим образом:
switch#show run interface Gi1/0/11
Building configuration...

Current configuration : 193 bytes
!
interface GigabitEthernet1/0/11
description *** ISP ***
switchport access vlan 300
switchport mode dot1q-tunnel
no lldp transmit
no lldp receive
no cdp enable
end
На маршрутизаторе надо все это распаковать должным образом и настроить подинтерфейсы:
interface GigabitEthernet0/3.30000800
description *** Remote branch 1 ***
encapsulation dot1Q 300 second-dot1q 800
ip address 10.0.30.1 255.255.255.252
ip mtu 1500
!
interface GigabitEthernet0/3.30000801
description *** Remote branch 2 ***
encapsulation dot1Q 300 second-dot1q 801
ip address 10.0.40.1 255.255.255.252
ip mtu 1500
Дополнительно читайте Упаковка STP при использовании QinQ, если нужно передать несколько своих вланов через сеть оператора