Рисунок 5. Гипотетическая сеть с OSPF маршрутизаторами
На протяжении интервала отказа маршрутизаторы продолжают посылать сообщения HELLO. Когда какой-либо маршрутизатор посылает такое сообщение, другие его получают и отмечают, что в локальной сети есть другой маршрутизатор. Когда они посылают следующее HELLO, они перечисляют там и своего нового соседа.
Когда период отказа маршрутизатора истекает, то маршрутизатор с наивысшим приоритетом и наибольшим идентификатором объявляет себя выделенным (а следующий за ним по приоритету маршрутизатор объявляет себя резервным выделенным маршрутизатором) и начинает синхронизировать свою базу данных с другими маршрутизаторами.
С этого момента времени база данных маршрутных объявлений каждого маршрутизатора может содержать информацию, полученную от маршрутизаторов других локальных сетей или из выделенных линий. Роб, например, вероятно получил информацию от Мило и Робина об их сетях, и он может передавать туда пакеты данных. Они содержат информацию о собственных связях маршрутизатора и объявления о связях сети.
Базы данных теперь синхронизированы с выделенным маршрутизатором, которым является Джон. Джон суммирует свою базу данных с каждой базой данных своих соседей – базами Фреда, Роба и Джеффа – индивидуально. В каждой синхронизирующейся паре объявления, найденные только в какой-либо одной базе, копируются в другую. Выделенный маршрутизатор, Джон, распространяет новые объявления среди других маршрутизаторов своей локальной сети. Например, объявления Мило и Робина передаются Джону Робом, а Джон в свою очередь передает их Фреду и Джеффри. Обмен информацией между базами продолжается некоторое время, и пока он не завершится, маршрутизаторы не будут считать себя работоспособными. После этого они себя таковыми считают, потому что имеют всю доступную информацию о сети.
Посмотрим теперь, как Робин вычисляет маршрут через сеть. Две из связей, присоединенных к его портам, представляют линии T-1, а одна – линию 56 Кб/c. Робин сначала обнаруживает двух соседей – Роба с метрикой 65 и Мило с метрикой 1785. Из объявления о связях Роба Робин обнаружил наилучший путь к Мило со стоимостью 130, поэтому он отверг непосредственный путь к Мило, поскольку он связан с большей задержкой, так как проходит через линии с меньшей пропускной способностью. Робин также обнаруживает транзитную локальную сеть с выделенным маршрутизатором Джоном. Из объявлений о связях Джона Робин узнает о пути к Фреду и, наконец, узнает о пути к маршрутизаторам Келли и Джеффу и к их тупиковым сетям.
После того, как маршрутизаторы полностью входят в рабочий режим, интенсивность обмена сообщениями резко падает. Обычно они посылают сообщение HELLO по своим подсетям каждые 10 секунд и делают объявления о состоянии связей каждые 30 минут (если обнаруживаются изменения в состоянии связей, то объявление передается, естественно, немедленно). Обновленные объявления о связях служат гарантией того, что маршрутизатор работает в сети. Старые объявления удаляются из базы через определенное время.
Представим, однако, что какая-либо выделенная линия сети отказала. Присоединенные к ней маршрутизаторы распространяют свои объявления, в которых они уже не упоминают друг друга. Эта информация распространяется по сети, включая маршрутизаторы транзитной локальной сети. Каждый маршрутизатор в сети пересчитывает свои маршруты, находя, может быть, новые пути для восстановления утраченного взаимодействия.
Имеем следующую BGP-сеть
Рисунок 6.
Если AS связана с двумя ISP через EBGP, IBGP должен использоваться между роутерами внутри данной AS для лучшего управления маршрутами.
Рассмотрим AS100, имеющую два EBGP соединения (роутеры «A» и «B») с внешним миром (роутеры «C» и «D»). «A» и «B» общаются между собой по IBGP.
Между роутерами «A-F», «A-B» и «B-F» этой AS также используется OSPF (протокол семейства IGP).
Приведенная ниже конфигурация роутеров – предварительная, поскольку она не полная. Это сделано для того, чтобы продемонстрировать методы BGP исправления ошибок.
! Router A
hostname RouterA!interface loopback 0ip address 203.250.13.41 255.255.255.0!interface ethernet 0ip address 203.250.14.1 255.255.255.0!interface serial 0ip address 128.213.63.1 255.255.255.252!router ospf 10network 203.250.0.0 0.0.255.255 area 0router bgp 100network 203.250.13.0 mask 255.255.255.0network 203.250.14.0 mask 255.255.255.0neighbor 128.213.63.2 update-source loopback 0 ! Router B!hostname RouterB!interface serial 0ip address 203.250.15.2 255.255.255.252!inetrface serial 1ip address 192.208.10.6 255.255.255.252!router ospf 10network 203.250.0.0 0.0.255.255 area 0!router bgp 100network 203.250.15.0neighbor 192.208.10.5 remote-as 300neighbor 203.250.15.1 remote-as 100 ! Router Chostname RouterC!interface loopback 0ip address 128.213.63.130 255.255.255.192!interface serial 2/0ip address 128.213.63.5 255.255.255.252!interface serial 2/1ip address 128.213.63.2 255.255.255.252!router bgp 200network 128.213.0.0neighbor 128.213.63.1 remote-as 100neighbor 128.213.63.6 remote-as 400 ! Router Dhostname RouterD!interface loopback 0ip address 192.208.10.174 255.255.255.192!interface serial 0/0ip address 192.208.10.5 255.255.255.252!interface serail 0/1 (ERROR: здесь и строчка ниже в оригинале – с опечаткой)ip address 192.208.10.2 255.255.255.252!router bgp 300network 192.208.10.0neighbor 192.208.10.1 remote-as 500neighbor 192.208.10.6 remote-as 100 ! Router Ehostname RouterE!interface loopback 0ip address 200.200.10.1 255.255.255.0!interface serial 0ip address 195.211.10.2 255.255.255.252!interface serial 1ip address 128.213.63.6 255.255.255.252!router bgp 400network 200.200.10.0neighbor 128.213.63.5 remote-as 200neighbor 195.211.10.1 remote-as 500 ! Router F!hostname RouterF!interface ethernet 0ip address 203.250.14.2 255.255.255.0!interface serial 1ip address 203.250.15.1 255.255.255.252!router ospf 10network 203.250.0.0 0.0.255.255 area 0 ! Router Ghostname RouterG!interface loopback 0ip address 195.211.10.174 255.255.255.192!interface serial 0ip address 192.208.10.0 255.255.255.252!interface serial 1ip address 195.211.10.1 255.255.255.252!router bgp 500network 195.211.10.0neighbor 192.208.10.2 remote-as 300neighbor 195.211.10.2 remote-as 400Предположим, что (см. рисунок 6) связь между роутерами «B» и «D» испортилась. Выполним на роутере «B» команду show ip bgp:
RouterB# show ip bgp table version is 4, local router ID is 203.250.15.2Status codes: s suppesed, d damped, h history, * valid, > best, i internalOrigin codes: i – IGP, e – EGP,? – incomplete Network Next Hop Metric LocPrf Weight Path*i128.213.0.0 128.213.63.2 0 100 0 200 i*i192.208.10.0 128.213.63.2 100 0 200 400 500 300 i*i195.211.10.0 128.213.63.2 100 0 200 400 500 i*i200.200.10.0 128.213.63.2 100 0 200 400 i*>i203.250.13.0 203.250.13.41 0 100 0 i*>i203.250.14.0 203.250.13.41 0 100 0 i*> 203.250.15.0 0.0.0.0 0 32768 iСимвол «i» в начале строки означает, что о данном маршруте стало известно от IBGP peer'а.
Символ «i» в конце строки означает, что информация о данном пути пришла от IGP.
Первая строка читается так:
Информация о доступности сети 128.213.0.0 получена через AS_path 200, и для того, чтобы с данного роутера достичь этой сети, в качестве Next hop'а следует использовать 128.213.63.2.
Замечание: любой маршрут, который сгенерирован на данном роутере (см. 203.250.15.0) имеет next hop = 0.0.0.0.
Символ «>» означает, что BGP выбрал данный маршрут, как лучший. Процесс выбора наилучшего маршрута описан выше в главе «Summary of the BGP Path Selection Process». BGP всегда выбирает только один маршрут, как лучший. После чего он записывает этот маршрут в IP routong table и анонсирует этот путь другим BGP peer'ам.
Заметим, что next hop attribute 128.213.63.2, имеющий место для части маршрутов, унаследован от EBGP.
Теперь проверим IP routing table на роутере «B»:
RouterB# show ip route Codes: C – connected, S – static, I – IGRP, R – RIP, M – mobile, B – BGPD – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter areaE1 – OSPF external type 1, E2 – OSPF external type 2, E – EGPi – IS-IS, L1 – IS-IS level-1, L2 – IS-IS level-2, * – candidatedefaultGateway of last resort not set 203.250.13.0 255.255.255.255 is subnetted, 1 subnetsO 203.250.13.41 [110/75] via 203.250.15.1, 02:50:45, Serial0203.250.15.0 255.255.255.252 is subnetted, 1 subnetsC 203.250.15.0 is directly connected, Serial0O 203.250.14.0 [110/74] via 203.250.15.1, 02:40:46, Serial0Заметим, что ни один BGP маршрут не появился в IP routing table. Это произошло потому, что в данной конфигурации мы имеем одну проблему: маршруты к некоторым сетям, содержащиеся в BGP route table на «B», имеют next hop = 128.213.63.2, который недоступен с «B».
Адрес 128.213.63.2 недоступен потому, что в таблице маршрутизации на «B» отсутствует запись о том, как достичь данный адрес через IGP (в данном случае, через OSPF). Итак, роутер «B» не знает о 128.213.63.0 из OSPF.
В данном примере проблема с next hop может быть решена двумя способами:
* Использованием на роутере «A» команды «next-hop-self» для изменения значения next hop между роутерами «A» и «B».
* На роутере «A» настроить OSPF _на интерфейсе_ Serial 0, указав его как passive. В этом случае роутер «B» будет знать, каким образом достичь next hop 128.213.63.2.
Итак, следующая конфигурация роутера «A» устанавливает OSPF на Serial 0 и делает его passive:
! Router Ahostname RouterA!interface loopback 0ip address 203.250.13.41 255.255.255.0!interface ethernet 0ip address 203.250.14.1 255.255.255.0!interface serial 0ip address 128.213.63.1 255.255.255.252!router ospf 10passive-interface serial 0network 203.250.0.0 0.0.255.255 area 0network 128.213.0.0 0.0.255.255 area 0!router bgp 100network 203.250.13.0 mask 255.255.255.0network 203.250.14.0 mask 255.255.255.0neighbor 128.213.63.2 remote-as 200neighbor 203.250.15.2 remote-as 100neighbor 203.250.15.2 update-source loopback 0Теперь, BGP таблица соседей на роутере «B» будет содержать следующие маршруты: