Протокол маршрутизации в сети интернет – BGP

01.05.2010 00:00

Дмитрий Шилов,
системный инженер компании Cisco Systems

Речь пойдет о пр отоколе маршрутизации, который используется в сети Интернет – о BGP. Мы рассмотрим те механизмы, которые позволяют информации, отправляемой из одной точки Интернет в другую, найти правильный путь и достигнуть получателя.

Предположим, что мы собрали сеть из нескольких устройств и настроили внутренний протокол маршрутизации (Interior Gateway Protocol – IGP). Именно этот тип протоколов позволяет маршрутизаторам найти друг друга, обменяться маршрутами, обеспечить базовую IP-связь внутри автономной системы (АС ). К протоколам IGP-типа относятся OSPF, RIP, EIGRP, IS-IS.

И вот трафик внутри сети уже может перемещаться из одного конца в другой. Однако нам захотелось сое-динить свою сеть с соседней. Если таких соседей стало несколько, то появилось желание состыковаться со всеми. При объединении нашей и нескольких соседних автономных систем желательно, чтобы адреса, используемые соседями, отличались от тех, которые использует наша АС . Иначе появится неоднозначность и устройства растеряются –куда же отправлять пакет с информацией. Когда объединяются несколько автономных систем, то достаточно усилий администраторов, чтобы определить какой трафик и в какую сторону отправлять. Но когда в сеть объединяются сотни и тысячи автономных систем, практически невозможно управлять этим процессом вручную.

В такой ситуации необходим механизм автоматизации, позволяющий распространять информацию о том, что где-то подключилась новая АС с вот такими IP-адресами, просим любить и жаловать. Механизм распространения маршрутной информации называется протоколом маршрутизации. Протокол маршрутизации в сети Интернет является BGP – Border Gateway Protocol.

Каждый участник «всемирной паутины» имеет свой уникальный IP-адрес. Откуда он его берет? Получает от сервис-провайдера. А как распределяют IP-адреса между собой сервис-провайдеры? Чтобы не конфликтовать за обладание IP-адресами, провайдеры учредили независимую организацию IANA (прим. 1), которая и занимается распределением. Кроме IP-адресов сервис-провайдерам необходим также номер авто номной системы. Если говорить формальным языком, то автономной системой называется группа устройств, находящаяся под единым администрированием. У каждой АС в Интернет есть свой номер и диапазон IP-адресов для использования.

Протокол BGP предназначен для того, чтобы информация о номере и диапазоне IP-адресов АС распространялась по Интернет. Таким образом, все АС в Интернете делятся информацией о себе и приобретают знания о всех АС сети Интернет.

Какое же устройство в АС выполняет эти действия7 Автономная система состоит из линий связи и маршрутизаторов. Линия связи, соединяющая маршрутизатор из одной АС с маршрутизатором в другой АС, называется внешней. Маршрутизаторы при этом называются пограничными. Именно на пограничных маршрутизаторах чаще всего работает протокол BGP.

Протокол руководит процессом обмена информацией маршрутизатора с маршрутизаторами-соседями. Мы назовем апдейтами порции информации, которой они обмениваются. Апдейты содержат IP-адреса сетей, номера АС и другие поля. На основе полученной информации пограничный маршрутизатор строит таблицу маршрутизации. По таблице маршрутизации он определяет, какой путь выбрать, чтобы отправить пакет из данной точки на другой IP-адрес в Интернет. При этом протокол BGP хорош тем, что позво-ляет хранить и обмениваться с соседями информацией о сотнях тысяч маршрутов, а также имеет оченьгибкий механизм влияния на выбор лучшего пути в зависимости от пожеланий администратора АС.

Рассмотрим пример, когда между двумя пограничными маршрутизаторами запущен протокол BGP и происходит обмен информацией. Обозначим маршрутизаторы как А и В. Для обмена информацией маршрутизаторы А и В должны установить между собой связь. Администратор явно настраивает на маршрутизаторе, с каким соседом он должен установить связь, указывая IP-адрес соседа. Протокол BGP для связи между маршрутизаторами использует IP-протокол и tcp-порт номер 179. Для инициализации
tcp-сессии маршрутизатор А посылает на В пакет-запрос, В отвечает, что он не против установить сессию; сессия устанавливается. Затем маршрутизаторы обмениваются всей маршрутной информацией, какая у них есть в BGP-таблице. В дальнейшем, если в сети что-то поменялось и в BGP-таблице произошли изменения, маршрутизаторы обмениваются изменениями в маршрутной информации. Если изменения происходят довольно часто, то маршрутизаторы, прежде чем поделиться новой информацией с внешним соседом, выжидают 30 секунд.

Если же изменения происходят очень редко, то для поддержания соседских отношений каждые 60 секунд маршрутизаторы обмениваются сообщениями, говоря друг другу, что они живы. Но если в течение 180 секунд от соседа не пришло никаких сообщений, то считается, что связь с ним потеряна и соседские отношения разорваны. (Справедливости ради заметим, что если два маршрутизатора находятся в одной АС , то временные промежутки другие, несколько короче.)

Предположим, что маршрутизатор А сообщает марш-рутизатору В, что сеть 10.0.0.0/8 доступна через А, а маршрутизатор В сообщает маршрутизатору А что через В доступна сеть 20.0.0.0/8.

Маршрутная информация, поступающая с А на В, выглядит в виде записи:

В данной записи на первом месте идет префикс сети, о которой А рассказывает В, далее идут атрибуты. В протоколе BGP к префиксу сети может быть прикреплено множество различных атрибутов. Атрибуты используются, чтобы маршрутизатор мог сделать ре-шение об использовании данного маршрута. Давайте посмотрим, какие атрибуты прикрепляются к префиксу IP-сети и как они используются.

Одним из обязательных атрибутов является атрибут Next-hop. Он указывает, на какой следующий адрес в сети надо отправить пакет, чтобы он продвигался в сторону сети, указанной в поле префикса. Т.е. в данном случае маршрутизатор А говорит В, что если у В появятся IP-пекеты, идущие в сеть 10.0.0.0, то В должен отправить их на А (на адрес 10.1.1.1), а уж он-то знает, как с ними поступить. Этот атрибут может меняться при прохождении апдейта через АС . Менять его или нет, зависит от администратора сети. Если апдейт пришел из внешней АС на наш пограничный маршрутизатор, атрибут Next-hop будет содержать адрес маршрутизатора, который прислал нам апдейт.

Наш пограничный маршрутизатор может поменять атрибут Next-hop на свой адрес и отправить его вовнутрь своей АС . Но в том случае, если атрибут Nexthop не изменен, маршрутизаторы внутри нашей АС получат апдейт, в котором в качестве Next-hop указан адрес маршрутизатора, принадлежащего соседней АС . Возможно, маршрутизаторы внутри нашей АС не знают этого адреса – протокол IGP не распространил этот адрес внутри АС . Тогда они не смогут воспользоваться информацией, пришедшей по BGP, и должны будут проигнорировать ее и не вносить в таблицу маршрутизации. Чтобы этого избежать, нужно при прохождении апдейта через границу сети менять атрибут Next-hop, либо по протоколу IGP рассказывать внутри нашей АС адрес внешнего маршрутизатора. Обычно используют первый вариант.

Также в записи всегда присутствует атрибут AS_Path. Этот атрибут состоит из списка номеров автономныхсистем, которые данный префикс прошел. Т.к. в примере сеть 10.0.0.0 принадлежит АС 100, то и список состоит только из номера данной автономной системы. Можно сказать, что данная запись рождена в автономной системе 100. Если эта запись будет передана из автономной системы 100 в 200 и далее, то в следующую автономную систему она поступит с атрибутом AS_Path в виде последовательного перечисления пройденных автономных систем: 100 200. И так каждая автономная система, передавая через себя информацию о сети 10.0.0.0, будет добавлять в атрибут AS_Path свой номер. Информация, хранимая данным атрибутом, исключительно полезная. Предположим, что маршрутизатор получил информацию о сети 10.0.0.0 из двух разных соседних АС . В каждом из апдейтов перечислены номера АС , которые они прошли.

Маршрутизатор может подсчитать, сколько АС содержит каждый из путей к сети 10.0.0.0 и выбрать более короткий, с меньшим числом транзитных АС . Второйвариант использования данного атрибута: информация о сети 10.0.0.0 ушла из АС 100 в соседние и, пройдя круг, вернулась обратно. В этом случае маршрутизатор, анализируя атрибут AS_Path и видя номер своей автономной системы в цепочке чисел, понимает, что данная информация уже проходила через него – и не принимает ее, игнорирует. Таким образом, в сетиИнтернет избегают зацикливания маршрутной информации.

Следующий атрибут LOCAL_PREFERENCE. Атрибут определяет локальные для данной автономной системы предпочтения администраторов на выбор направления для отправки трафика наружу. Данный атрибут ставится на входящие в АС апдейты при поступлении их на пограничный маршрутизатор. Так,например, маршрутизатор В, получая от А информацию о сетях, может все маршруты помечать с LOCAL_PREFERENCE равным 120.

Рассмотрим пример:
Таким образом, у Е окажется две записи о сети 10.0.0.0. Обе записи будут находиться в таблице BGP. Из двух записей маршрутизатор должен выбрать лучшую и переместить ее из BGP-таблицы в таблицу маршрутизации для использования в дальнейшем, при появлении трафика из какой-либо сети в адрес сети 10.0.0.0. В BGP-таблицу маршрутизатор помещает все пришедшие к нему по BGP апдейты, а в таблицу маршрутизации переносит только лучшие, а также только лучшие распространяет по протоколу BGP дальше, своим соседям. Как же маршрутизатор Е выберет, какая из записей лучшая? Первым делом Е проверит, нет ли каких-либо прямых указаний от администратора, с какого из двух направлений приходят лучшие апдейты. Администратор может на Е настроить для каждого направления параметр Weight (вес). Вес служит явным указанием для маршрутизатора признавать лучшими апдейты, приходящие с данного направления. Таким образом, маршрутизатор пометит информацию как лучшую и поместит ее в таблицу маршрутизации.

Но если параметр Weight не указан, а по умолчанию он одинаков для всех направлений, то маршрутизатор Е посмотрит на атрибут LOCAL_PREFERENCE. Этот атрибут назначен для одного апдейта на Е, а для второго апдейта на F. От того, на какой из апдейтов будет назначено большее значение, и будет зависеть, какой апдейт будет выбран лучшим. Пусть Е назначает на внешние маршруты, получаемые с D, атрибут LOCAL_PREFERENCE значением 110, а F – на апдейты от соседа J атрибут LOCAL_PREFERENCE 100. Тогда маршрутизаторы из АС 300 выберут путь к сети 10.0.0.0 через маршрутизатор D и АС 200 и занесут этот путь в таблицу маршрутизации.
А что будет, если значение LOCAL_PREFERENCE одинаковое для всех апдейтов? Тогда маршрутизатор будет сравнивать количество записей в атрибуте AS_PATH.
У какого апдейта путь короче, тот и лучше. Т.е. до сети назначения информация должна пройти меньшее количество автономных систем.

Также и другие атрибуты могут влиять на выбор маршрута, но эти случаи довольно редки. Подробно о них можно почитать в описании алгоритма выборалучшего пути протокола BGP в документации.

В мире автономных систем существует понятие транзитной АС . Если АС позволяет трафику проходить через нее насквозь, то такую АС можно считать транзитной. В нашем примере это могут быть все АС , в том числе и АС 200. Давайте посмотрим на AC 200 более подробно. Информация о сетях из соседних АС приходит на пограничный маршрутизатор В, c B передается на D, уходит далее. Через АС 200 также проходят апдейты и в обратную сторону от D к B. Маршрутизаторы B и D имеют полное представление о внешнем мире, выбрали лучшие пути для достижения тех или иных сетей и готовы к пересылке трафика. Допустим, что из сети 30.0.0.0 трафик послан в сеть 10.0.0.0.

С маршрутизатора Е трафик поступает на D, который анализирует адрес назначения по таблице маршрутизации и находит запись, что сеть 10.0.0.0 достижима через определенный Next-hop (адрес маршрутизатора В). D еще раз просматривает таблицу маршрутизации и находит запись, указывающую: чтобы отправить пакет к В, надо отправить его в сторону маршрутизатора С. Маршрутизатор С получает пакет, смотрит адрес назначения, ищет его у себя в таблице маршрутизации и не находит. Почему? Да потому что С не участвует в BGP-процессе обмена маршрутами. Да, B и D установили между собой связь, обменялись внешними маршрутами, но С не участвовал
в этом обмене и не получил маршрутов на внешние сети, в том числе и на сеть 10.0.0.0. Из этого можно сделать вывод, что в транзитной автономной системе необходимо, чтобы все маршрутизаторы на пути следования трафика имели полную таблицу маршрутизации внешних маршрутов. Таким образом получаем, что кроме iBGP-сессии между B и D необходимо устанавливать iBGP-сессии и с маршрутизатором С.

Для того чтобы избежать зацикливания передачи информации внутри АС , существует правило:
Если информация пришла с eBGP-сессии (снаружи), отдать ее во все iBGP и eBGP-сессии (внутрь и наружу). Если информация пришла с iBGP-сессии, отдать ее только в eBGP-сессии, а в iBGP не отдавать. Пояснить правило можно следующим образом. Необходимо, чтобы внутри АС между маршрутизаторами не возникло хождения информации по кругу. Для этого, когда информация пришла на пограничный маршрутизатор снаружи, он передает ее внутрь АС . А внутри АС маршрутизаторы уже не повторяют ее друг другу, а только те, у которых есть внешние связи, отправляют эту информацию наружу.

Из этого правила вытекает следующее правило: внутри автономной системы между маршрутизаторами должна быть полносвязная структура из iBGP-сессий, чтобы получивший снаружи информацию маршрутизатор мог рассказать ее всем маршрутизаторам внутри своей АС . Заметим, что полносвязная структура должна быть не из физических связей, а именно из iBGP-сессий. При большом количестве маршрутизаторов полносвязная структура имеет довольно большое количество iBGP-сессий. Чтобы эту конструкцию упростить, были сделаны так называемые Route Reflector (RR). RR представляет из себя маршрутизатор, в задачи которого входит принять апдейт от
одного из iBGP-соседей и отдать его всем остальным iBGP-соседям внутри АС.

Тогда структура из iBGP-сессий выглядит следующим образом:
При этом каждый из маршрутизаторов должен будет установить только одну iBGP-сессию с RR и только RR должен установить iBGP-сессии со всеми в данной АС. Если вы заметили, то RR нарушает правило и, приняв апдейт из iBGP-сессии, отдает его в остальные iBGP-сессии. Такова его роль. Кроме того, он не должен менять значение атрибута Next-hop в проходящих через него апдейтах. Его роль – просто быть отражателем для проходящих апдейтов. Еще одна особенность: RR распространяет только маршрутную информацию. Он может, но вовсе не обязан быть на пути прохождения трафика, использующего эту маршрутную информацию. Он может стоять в стороне от потоков трафика и только выполнять функцию по распространению маршрутной информации.

Мы говорили о транзитной АС , а как быть, если мы не хотим, чтобы через нашу АС проходил транзитный трафик? Чтобы транзитный трафик не проходил через нашу АС , необходимо отключить транзитное прохождение маршрутной информации через нашу АС . Это значит, что наши пограничные маршрутизаторы должны принимать информацию от своих соседей, обмениваться ею внутри АС , но никому наружу обратно не рассказывать. Наружу должна уходить информация только о нашей собственной АС, наши IP-адреса и наш номер АС . Сделать это можно несколькими разными способами. Есть, например, такой атрибут – no-export. Когда апдейт приходит снаружи на наш пограничный маршрутизатор, к нему прикрепляется данный атрибут. Апдейт распространяется соседям внутри нашей АС , но маршрутизаторы наружу этот апдейт уже не отправляют, т.к. видят, что эта информация не для распространения наружу.

При соединении АС с внешним миром может потребоваться, чтобы не вся приходящая из внешнего мира информация принималась – или может потребоваться, чтобы часть из принятых маршрутов помечалась каким-то особым образом, отдельным атрибутом. Для этих целей разработали механизмы фильтрации маршрутной информации. С их помощью пограничный маршрутизатор может просматривать, префиксы каких сетей несет в себе приходящая на него информация от соседа и из каких АС . С помощью префикс-листов, в которых перечислены интересующие нас префиксы сетей, мы можем отфильтровывать информацию и производить с ней необходимые действия – например, не пропустить в нашу АС , или пометить атрибутом no-export, или пометить большим значением атрибута LOCAL_PREF, чтобы выбрать именно этот путь в интересующую нас сеть.

С помощью AS_PATH-фильтров мы можем фильтровать информацию на основе номеров автономных систем, которые содержатся внутри атрибута AS_PATH. В этом случае механизм поиска нужных нам номеров АС или комбинаций из нескольких номеров улучшен за счет применения регулярных выражений. Т.е. вы можете задать шаблон, по которому будет производиться поиск. Например, искать во всех апдейтах АС с номерами, начинающимися на 3, или искать те апдейты, в которых атрибут AS_PATH начинается с номера АС 123, а также множество других вариантов. Применяя префикс-листы и AS_PATH-фильтры, мы добиваемся желаемого направления исходящего от нас трафика к разным получателям.

Мы полностью можем влиять на прием маршрутной информации, ее обработку и построение на ее основе таблиц маршрутизации нашими маршрутизаторами. Это означает, что мы полностью контролируем, каким образом трафик, попавший в нашу АС , пройдет через нее и каким путем уйдет наружу. Однако повлиять на то, каким путем трафик из внешних АС придет к нашей АС довольно трудно, ведь администраторы в соседних АС решают, как им обращаться с трафиком. Однако кое-что сделать возможно. Например, мы знаем, что соседняя АС принимает решение, какой путь к нам лучший, на основе количества номеров АС в атрибуте AS_PATH. Тогда мы можем по одному из путей отправить апдейт, содержащий искусственно удлиненный атрибут AS_PATH. Тогда по этому пути трафик к нам не придет – будет выбран другой путь с более коротким атрибутом AS_PATH. Удлинение атрибута AS_PATH производится вставлением номера нашей АС в атрибут AS_PATH несколько раз. Кроме того, есть еще атрибут «Метрика» или MED, служащий для того, чтобы можно было попросить соседнюю АС использовать определенный путь для передачи трафика в нашу сторону. Именно попросить, т.к. окончательное решение, принимать ли нашу просьбу к рассмотрению, остается на стороне соседней автономной системы.

Вот в общих словах то, что хотелось рассказать о протоколе BGP. При написании статьи я, возможно, опустил какие-то моменты, не описал все возможности и сценарии. Но, надеюсь, этот материал станет вашей отправной точкой в мир интернет-технологий и поможет вам разобраться в том, что и как работает.

Примечание
IANA (Internet Assigned Numbers Authority – Администрация адресного пространства Интернет) – американская некоммерческая организация, управляющая пространствами IP-адресов, доменов верхнегоуровня. Находится под контролем ICANN.