Базовая часть технологии EVPN

Маленькое лирическое отступление: возможно иллюстрации в стиле Brocade кому-то не понравятся, но использование данных иллюстраций обусловлено тем, что если использовать обозначения маршрутизаторов и коммутаторов в стиле Juniper или Cisco, то мы на некоторых рисунках получим не читаемое месиво, а нам этого не хочется. Ну и лично мне такие рисунки как то больше нравятся (но это, как говорится, на вкус и цвет...).

  1. Так как у CE1 нет MAC-адреса CE2, то CE1 делает широковещательный ARP запрос на резолв адреса CE2.

  2. PE1, получив от CE1 широковещательный пакет, анализирует его заголовок и понимает, что этот пакет надо переслать всем остальным PE маршрутизаторам в данном широковещательном домене. Помимо этого, PE1 записывает source MAC в MAC-таблицу соответствующего bridge-домена.

    Если бы у нас был VPLS, то больше никаких операций PE1 не стал бы производить. Но у нас EVPN, поэтому PE1 генерирует BGP Update, в котором указывает MAC-адрес CE1 и метку VPN, и отправляет его на все остальные PE маршрутизаторы (естественно, через роутрефлектор).

  3. PE2 и PE3 получают данный широковещательный пакет и отправляют его всем подключенным CE-маршрутизаторам. Как и в VPLS, в EVPN есть функция split horizon — пакет, полученный от PE маршрутизатора, не будет отправлен на другие PE маршрутизаторы.

    В VPLS PE2 и PE3, при получении пакета от PE1, должны были бы записать MAC-адрес CE1 в MAC-таблицы и ассоциировать его с PW в сторону PE1. Но в EVPN изучать MAC-адреса по source адресам пакетов, пришедшим от других PE маршрутизаторов, нет необходимости, ведь PE1 уже сделал анонс MAC+label, а значит PE1 и PE2 запись в таблицу MAC-адресов сделают по данному анонсу (да, как в L3VPN с IPv4 префиксами).

  4. PE2 получает от CE2 ответ на данный ARP запрос. Так как MAC-адрес CE1 и метка до него уже известны из полученного от PE1 BGP анонса, то пакет отправляется юникастом прямиком на PE1. Помимо этого PE2 записывают MAC-адрес CE2 в MAC-таблицу и генерирует BGP Update, в котором указывает MAC-адрес CE2 и метку, и отправляет его на остальные PE маршрутизаторы.

  5. PE1 получает уже юникастовый пакет и по MAC-таблице отправляет его в соответствующий интерфейс.

Как вы уже поняли, EVPN использует MAC-адреса, как роутинговые адреса. Это можно сравнить с распределением маршрутов внутри L3VPN.

Думаю все прочитавшие статью о L2VPN помнят, что в VPLS распределение меток с помощью BGP производится блоками, так как получателю пакета (в смысле PE маршрутизатору) необходимо знать, с какого PE-маршрутизатора прилетел данный пакет, и ассоциировать MAC-адрес с PW до этого PE маршрутизатора. В EVPN такой необходимости уже нет. Это происходит из за того, что EVPN обрабатывает MAC-адреса, так же, как L3VPN IPv4 префиксы — PE маршрутизатор, изучив новый MAC-адрес через data plane от подключенного CE маршрутизатора, сразу анонсирует данный MAC по BGP. В BGP анонсе указывается MPLS метка и protocol next-hop (как правило, это лупбек PE маршрутизатора). В итоге все остальные PE маршрутизаторы знают куда отправлять пакет и с какой меткой.

Интересный факт: в VPLS (любом его виде), в описанном выше сценарии, PE3 узнала бы только MAC-адрес CE1, так как от CE2 к CE1 пакет передается уже юникастом и не попадет на PE3. А при использовании EVPN PE3 изучает оба MAC-адреса: и CE1 и CE2, первый узнает из анонса от PE1, второй из анонса от PE2.

Надеюсь, принцип работы технологии понятен, и теперь мы можем перейти от теории к практике и посмотреть на работу EVPN на примере.

Last updated