Теоретические основы и архитектура
Технология VPWS (Virtual Private Wire Service, RFC 4447), также известная как Ethernet over MPLS (EoMPLS) или Pseudowire (псевдопровод), предоставляет сервис виртуального выделенного канала точка-точка (Point-to-Point L2VPN). Маршрутизаторы PE инкапсулируют входящие канальные Ethernet-кадры клиента (или VLAN-теги) в пакеты MPLS без анализа их IP-содержимого. Клиенты могут запускать любые сетевые протоколы (IPv4, IPv6, OSPF, IS-IS, CDP/LLDP). Пересылка в VPWS использует стек из двух меток: 1. Внешняя транспортная метка (Tunnel Label) доставляет кадр через ядро MPLS к удалённому PE. 2. Внутренняя метка псевдопровода (VC/PW Label), согласованная между PE по протоколу Targeted LDP (tLDP) или BGP, идентифицирует конкретный клиентский порт или VLAN на приёмной стороне. На обоих концах псевдопровода настраивается одинаковый идентификатор VC ID (Virtual Circuit ID). Если MTU интерфейсов или Control Word не согласованы, псевдопровод не поднимется.
Что такое VPWS на уровне протоколов
VPWS (Virtual Private Wire Service) эмулирует один провод между двумя Attachment Circuit (AC): порт или VLAN на PE1 соединяется с портом или VLAN на PE2. Архитектура описана в RFC 3985 (PWE3), инкапсуляция Ethernet в RFC 4448, сигнализация по LDP в RFC 4447. PE не смотрит в L3-заголовок клиента и не строит MAC-таблицу: кадр, принятый на AC, целиком (без преамбулы и FCS) кладётся в pseudowire, на выходе извлекается и отдаётся в AC. Поэтому клиент может гонять поверх любые протоколы: IPv4/IPv6, IS-IS, LLDP, STP BPDU.
Пересылка использует стек из двух меток. Внешняя (transport/tunnel label) выбирается по LDP или RSVP-TE LSP до loopback удалённого PE и меняется на каждом P-маршрутизаторе. Внутренняя (PW label, VC label) стоит на дне стека (бит S=1), P её не видит; её значение выделяет принимающий PE и сообщает отправителю. Метки в двух направлениях независимы: local 24 на PE1 и remote 21 - это нормально, симметрии нет.
Сигнализация LDP, FEC 128 (RFC 4447)
PE1 и PE2 открывают targeted LDP-сессию (unicast Hello на UDP 646 на адрес peer, затем TCP 646). Ей нужна только IP-достижимость между loopback: сессия не обязана идти по тому же пути, что и PW. По умолчанию targeted hello у Cisco 10 c / hold 90 c, keepalive 60 c / hold 180 c, у link-hello 5/15 c. Сессия переживает падение отдельной link-adjacency, пока жив маршрут к peer.
Поверх сессии каждый PE отправляет Label Mapping с FEC-элементом типа 0x80 (PWid FEC, он же FEC 128). Поля: C-бит (1 = готов использовать control word), PW Type (15 бит), Group ID (32 бита, логическая группа PW для массового withdraw), PW ID (32 бита, это и есть VC ID) и Interface Parameters. Из параметров важны Interface MTU (sub-TLV 0x01), VCCV capability (0x0C) и Requested VLAN ID. Метка PW передаётся в Generic Label TLV. Два PE связывают PW, когда совпали PW ID, PW Type, MTU и (если C-бит у обоих) control word. Несовпадение приводит к отказу, на CLI это статусы MM (mtu mismatch), EM (encapsulation mismatch), CM (control-word mismatch).
FEC 129 (AGI/SAII/TAII, RFC 6074) вместо числового PW ID использует Attachment Group Identifier и идентификаторы источника/приёмника. Его применяют, когда PW находятся автообнаружением BGP (BGP-AD), а не руками.
Типы PW и режимы AC
PW Type 5 (Ethernet) передаёт кадры в raw mode: если на AC есть VLAN-тег, он считается значимым только на AC и обычно снимается (rewrite pop). PW Type 4 (Ethernet Tagged Mode) переносит тег в PW, и на выходе PE может заменить его (service-delimiting tag). Разные типы по концам не поднимутся без interworking. Из других типов: 0x0006 HDLC, 0x0007 PPP. Port-based AC: в PW уходит весь порт включая все VLAN клиента; VLAN-based AC: уходит только один VLAN.
Control word и MTU
Control word (RFC 4385) - 4 байта между PW-меткой и кадром: 0000 | флаги (4 бита) | FRG (2) | Length (6) | Sequence (16). Первый ниббл 0000 нужен, чтобы транзитные P с hashing по ECMP не приняли первый байт Ethernet-кадра за версию IP (4 или 6) и не раскидывали пакеты одного потока по разным путям, ломая порядок. Sequence number по умолчанию не используется (0). Control word также нужен для VCCV типа 1.
MTU считается так: L3 MTU клиента 1500 + заголовок Ethernet 14 (+4 если тег сохраняется) + control word 4 + PW label 4 + transport label 4 = 1526-1530 байт; при TE/FRR или двух транспортных метках добавьте ещё 4-8. Core-интерфейсы поднимают до 1600 и больше, но Interface MTU в FEC - это MTU именно AC (1500). Если на одном конце 1500, а на другом 1504, PW не поднимется (Cisco и Huawei проверяют строго, Junos покажет MM). Отключать проверку нельзя: большие кадры будут молча теряться в ядре.
Статус PW и OAM
PW Status TLV (RFC 4447, type 0x096A) - 32-битная маска: 0x1 Pseudowire Not Forwarding, 0x2 Local AC Receive Fault, 0x4 Local AC Transmit Fault, 0x8 Local PSN-facing PW Receive Fault, 0x10 Local PSN-facing PW Transmit Fault. Поддержка согласуется в Label Mapping. Благодаря ей падение AC на PE2 за секунды отражается на PE1 (PW переходит в Down со статусом Remote AC fault), а не ждёт таймаута LDP. Без Status TLV остаётся только Label Withdraw при удалении PW.
VCCV (RFC 5085) - канал проверки PW. CC-типы: 1 - control word с первым нибблом 0001, 2 - Router Alert label над PW-меткой, 3 - TTL=1 на PW-метке. CV-типы: ICMP Ping, LSP Ping (RFC 4379), BFD (RFC 5885). Практика: ping mpls pseudowire проверяет и PW-метку, и контекст VC ID.