BGP или border gateway protocol – протокол маршутизации всея Интернетов. В CCNP трэке о BGP речь идет с точки зрения ынтерпрайза, в том числе о тех случаях, когда у вас есть свой блок PI (Provider Independent) адресов и вам нужно анонсировать его через нескольких провайдеров интернета (ISP).
Сложно найти более-менее крупный бизнес, которых обходится в своей внутренней сети без протоколов динамический маршрутизации – IGP (interior gateway protocol). BGP был разработан IBM и Cisco и продолжал свою эволюцию (на данный момент версия 4), как EGP – exterior gateway protocol. А значит цели, которые он преследует будут в какой-то степени отличаться от используемых в IGP.
BGP, в отличии от EIGRP/OSPF, использует TCP протокол. Для формирования сессии используется 179 порт. В процессе работы BGP формирует следующие таблицы:
- neighbor table – содержит в себе информацию о всех соседях;
- BGP table – содержит в себе все возможные маршруты;
- routing table – содержит только лучшие маршруты;
Для формирования соседства и в процессе работы имею место быть следующие типы пакетов:
- Open – инициирует соседство и используется для обмена базовыми параметрами, такими как значения ASN и MD5.
- Keepalive – отправляется время от времени, чтобы подтвердить факт того, что сосед все еще жив и здоров.
- Update – используется для обмена PA и связанными с ними префиксами (NLRI)
- Notification – случилось что-то ужасное. Notification используется как сигнализация о какой-либо ошибки. Например, закрытие сессии или не совпадение параметров.
Так же как и IGP BGP анонсирует сети и префиксы (Network Layer Reachability Information – NLRI), дополнительную информацию, по которой можно сделать выбор и предпочитать тот или иной маршрут. Так же как IGP BGP формирует соседства перед тем как начать обмен маршрутной информацией, однако соседи не обязаны находиться в одной подсети. Более того, они могут быть разделены десятками маршрутизаторов. Следующее различие заключается в выборе лучшего пути: вместо целочисленной метрики BGP использует целый набор данных, на основании которых происходит выбор. Этот набор данных носит название BGP path attributes (PA).
BGP PA: ASN и AS_SEQ
По умолчанию BGP маршрутизаторы будут использовать AS_PATH (autonomous system path) для выбора лучшего маршрута. AS_PATH сама по себе содержит множество компонентов. Один из них – AS_SEQ – последовательность автономных систем.
Каждой автономной системе присваивается уникальный номер – ASN. Когда маршрутизатор, использующий BGP анонсирует маршрут, то он ассоциируеться с несколькими PA, включая AS_PATH, как бы говоря: “если будет выбран этот маршрут, то путь до сети пройдет через следующие AS”.
BGP использует AS_PATH для двух целей:
- предотвращение петель – если маршрутизатор видит свою автономную систему в AS_SEQ, то такой маршрут будет проигнорирован;
- выбор лучшего маршрута, основываясь на самом коротком пути-последовательности AS;
Рассмотрим кусочек Интернетов и процесс анонса 18.202.1.0/24:
- Маршрутизатор в AS 200 рассказывает вся Интернетам о сети 18.202.1.0/24 и добавляет в AS_PATH PA свой ASN – 200.
- Маршрутизаторы в AS 12 анонсируют этот маршрут в AS 3400 и AS 809, добавляя в AS_PATH свой номер, получая [200,12] AS_SEQ.
- Маршрутизаторы в AS 809 и AS 3400 анонсируют маршрут дальше соседям (в том числе друг другу), не забывая добавить номер своей AS – [200,12,809] и [200,12,3400].
- В итоге маршрутизатор в AS 10 получает два пути до 18.202.1.0/24 – [200,12,3400] и [200,12,809,3400]. Маршрутизаторы в AS 12, увидев в пути номер своей автономной системы такие маршруты принимать во внимание не будет.
Internal и External BGP
В BGP существует два типа соседей – internal (iBGP) – соседи в рамках одной AS и external (eBGP) – соседи из разных AS. BGP маршрутизаторы ведут себя по разному в зависимости от того установлено соседство с iBGP или eBGP соседом. К примеру, когда маршрут анонсируется из одной AS в другую происходит замена next-hop адреса, а если в рамках одной, то нет. Более подробно о различиях iBGP и eBGP мы поговорим в следующих частях.
Публичные и приватные ASN
Публичные номера AS распределяются IANA (Internet Assigned Numbers Authority), что позволяет избежать дублирующий номеров AS.
16-битовые категории ASN выглядят следующим образом:
значение | назначение |
0 | в резерве |
1-64495 | публичные ASN, назначаются IANA |
64496-65511 | используются в примерах |
64512-65534 | приватные ASN |
65535 | в резерве |
Тут есть нюанс, который не описываются в CCNP Route трэке. Если я правильно понял, то 16-битовые ASN не выдаются аж с 2010 года, а вместо них назначаются 32-битовые адреса. Оборудование, которое не имеет понятия о 32-битовых адреса видит такие AS как AS с номером 23456 (RFC 4893), что представляет собой механизм предоставления обратной совместимости. Судя по этому документу на март 2012 года выданы все 16-и битные AS номера, а те, которые не выданы, остались зарезервированы IANA.
32-bit ASN (ASN32)
Дают нам в итого 2^32 номеров. В 32-битных ASN номера с 0 до 65535 называются “mappable ASN”, первые 16 бит в таких ASN – нули. Что мешало поступить так же с IPv6 я отказываюсь понимать :)
Существует два метода отображения ASN32:
- число от 0 до 4294967295;
- как точка, разделяющая ASN32 на два 16 битовых значения. Старая ASN16 3200 в таком случае превращается в 0.3200, а “новая” ASN32 65545 как 1.10, 78960 как 1.13424 и т.д;
Обратная совместимость между ASN16 и ASN32
В процессе установления соседства маршрутизаторы обменяются, в том числе, списком поддерживаемых атрибутов (Capabilities Advertisement). Если маршрутизатор объявляет свой ASN32 в этом списке атрибутов, значит он способен с ними работать. В случае если от соседа получен такой же ответ с его ASN32, значит все ок, можно работать без использования ASN16. Если соседи являются членами AS с номерами из “старого” 16 битного пула, то в дополнению к ним, еще анонсируются и mappable ASN32 в Capabilities Advertisement.
В том случае если сосед всей этой радости не поддерживает, то, по понятным причинам, ASN32 ему анонсировать никто не будет. Вместо это будет использоваться зарезервированный в RFC 4893 номер автономной системы 23456, называемой AS_TRANS.
Обратная совместимость между PA
Когда маршруты анонструются соседу, поддерживающему ASN32 от соседа их не поддерживающего, первый модифицирует AS_PATH атрибуты. В обратном порядке такой фокус не пройдет. Вместо того, чтобы добавить собственный ASN32 добавляется своеобразный placeholder – AS23456 для собственного и любого другого номера в 32 битном формате. Так же добавляется новый атрибут AS4_PATH который содержит список все реальных ASN как 16, так и 32 битных, что позволяет избежать петель.
Заменяя ASN32 в AS_PATH на AS_TRANS маршрутизатор, который не поддерживает 32 битную нотацию, все равно сможет аккуратно рассчитать путь до той или иной сети основываясь на количестве автономных систем.
Исходящая маршрутизация в Интернеты
Исходящая маршрутизация может быть настроена тремя способами – маршрут по умолчанию, полные и частичные BGP анонсы.
Первый вариант совсем не плох. Он значительно экономит ресурсы маршутизатора, в разы проще в настройке. Он может задаваться как статическими маршрутами со стороны R1 и ISP1, так и с помощью BGP. В случае использования BGP провайдер станет анонсировать вам все тот же маршрут по умолчанию, но уже средствами протокола динамической маршрутизации. В дальнейшем происходит редистрибуция такого маршрута в IGP с тем, чтобы корпоративная сеть имела представление о точке выхода в интернет. Такой тип подключение – 1 канал до одного ISP называется single homed. Помимо него существуют еще dual homed (2+ канала, 1 ISP), single multihomed (один канал до каждого из 2+ ISP), dual multihomed (2+ канала для каждого из 2+ ISP).
Полные или частичные BGP анонсы
Частичные анонсы могут быть полезны когда у вас 2 ISP и две удаленных площадки. Рассмотрим схему:
ISP1 и 2 анонсируют специфичные маршруты до офисов в NY и Сиднее, а так же маршруты по умолчанию. В случае если маршрутизатору MSK понадобиться отправить пакет до NY или Сиднея, то он будет в состоянии выбрать лучший маршрут из предлагаемых двумя ISP.
В случае полного анонса маршрутизатор MSK получит информацию о всех сетях, доступных от всех четырех ISP. В двукратном размере. На этой картинке 4 автономные системы, а в Интернетах их десятки тысяч. Количество анонсируемых префиксов приближается к 500.000, а с большим проникновением IPv6 это цифра будет только лавинно расти. По этому на месте MSK должен быть маршрутизатор, способный пережевать весь этот объем и заботливо сложить 2+ полные BGP таблицы в оперативную память.