BGP на пальцах: как читать карту связности
AS, префиксы, AS-path, транзит и пиринг, Tier 1, RPKI и препенды. Ровно столько BGP, сколько нужно, чтобы понять, что нарисовано в досье хостера и чем грозит один апстрим.
Хостер пишет в рекламе «10 Гбит/с, магистральные каналы», а BGP знает, как всё обстоит на самом деле. Читать его не сложнее, чем traceroute, если знать пять слов.
Пять слов
| Термин | Что это |
|---|---|
| AS (автономная система) | Группа префиксов под управлением одного или нескольких операторов с единой, чётко заданной политикой маршрутизации (так её определяет RFC 1930). У каждой есть номер: AS9123, AS13335. |
| Префикс | Блок адресов вида 91.135.156.0/24, который анонсируется в BGP одной записью. |
| Анонс | Сообщение BGP «до этого префикса можно дойти через меня». Сеть, которая анонсирует свой префикс первой, называется origin. |
| AS-path | Список AS, через которые прошёл анонс. По нему видно, кто кому передаёт маршрут. |
| Апстрим | Сеть, у которой твоя AS покупает транзит, то есть доступ ко всему остальному интернету. |
Как читать AS-path
Каждый маршрутизатор, передавая анонс в соседнюю AS, дописывает свой номер в самую левую позицию пути (RFC 4271, раздел 5.1.2). Отсюда правило: справа origin, слева тот, кто показал тебе маршрут. Читать от origin нужно справа налево.
Реальный путь до префикса Timeweb, который видел один из пиров RIPE RIS 2026-09-23:
286 3257 12389 9123- AS9123 Timeweb
- AS12389 Ростелеком
- AS3257 GTT
- AS286
286 3257 12389 9123 из RIPE RIS looking glass для 91.135.156.0/24, 2026-09-23. Анонс идёт слева направо по схеме, в AS-path записан в обратном порядке.Что ещё следует из устройства AS-path:
- Защита от петель. Маршрут с петлёй в AS-path (свой номер уже в пути) исключается из выбора (RFC 4271, 9.1.2).
- Короче значит лучше, но не в первую очередь. Сначала работает локальная степень предпочтения (LOCAL_PREF, её каждая сеть выставляет сама, RFC 4271, 9.1.1), и только среди равных по ней сравнивается длина AS-path (9.1.2.2). Поэтому трафик не обязан идти по самому короткому пути.
Транзит, пиринг и кто кому платит
- Транзит. Клиент платит провайдеру за две вещи сразу: провайдер анонсирует маршруты клиента остальным сетям и отдаёт клиенту маршруты до всего остального интернета.
- Пиринг. Две сети обмениваются трафиком только между собой (и своими клиентами), чужой транзит через пиринг не гоняют. Часто без взаимных расчётов (settlement-free), напрямую или через точку обмена трафиком (IX).
Tier 1 это общепринятое, но неформальное понятие: сеть, которая достаёт до всего интернета только через бесплатный пиринг и сама транзит не покупает. Официального списка нет, никакая организация тиры не присваивает, договоры о пиринге обычно закрыты (см. статью Tier 1 network в Википедии и её источники). Там же отмечено, что примерно с 2010 года крупные контент-провайдеры и CDN подключаются к провайдерам напрямую, и иерархия стала заметно площе.
Заметка
Список Tier 1 в нашей карте связности зашит в код: 15 номеров (174, 701, 1299, 2914, 3257, 3320, 3356, 3491, 5511, 6453, 6461, 6762, 6830, 7018, 12956). Это рабочее соглашение для рисования графа, а не чей-то официальный реестр.
Как строится карта связности в досье
Карта есть в
досье ASN,
досье префикса и досье IP. Что делает код (worker/src/asgraph.ts):
- Берёт префиксы. Для AS это самый крупный анонсируемый IPv4-префикс и самый крупный IPv6. Для IP и префикса это сам префикс.
- Спрашивает RIPE RIS. RIS это платформа RIPE NCC, которая собирает BGP-таблицы через коллекторы (RRC), с которыми пирятся сети по всему миру. Эндпоинт looking-glass в RIPEstat отдаёт AS-path от каждого пира каждого коллектора, данные близки к реальному времени.
- Чистит пути. Схлопывает повторы (препенды), разворачивает путь так, чтобы он шёл от origin.
- Оставляет только дороги до Tier 1. Путь обрезается на первой Tier 1. Пути, где Tier 1 нет вовсе, отбрасываются: это пиринг. Если у сети вообще нет путей через Tier 1, рисуются первые четыре хопа.
- Рисует. Толщина линии пропорциональна числу путей через это ребро, в подсказке видна доля в процентах. Связи Tier 1 между собой не рисуются. На графе не больше 30 узлов: origin, все встреченные Tier 1 и самые нагруженные транзиты.
Поле «прямые апстримы» показывает AS, которая стоит сразу за origin, с долей путей, где она встретилась. Вот что получилось для Timeweb:
Важно
Проценты означают долю маршрутов, которые видят пиры RIS, а не долю трафика и не условия договора. По AS-path не определить, транзит это или пиринг: карта показывает, через кого сеть видна миру, а не сколько она кому платит. Пути без Tier 1 (например, через прямой пиринг на IX) на карту не попадают вовсе. В прямом запросе к looking glass по 91.135.156.0/24 (2026-09-23) пиры RIS показали 364 пути, и 301 из них обходился без Tier 1 из нашего списка.
Досье префикса: видимость и RPKI
В разделе «Маршрутизация и RPKI» на
host.pink/1.1.1.0/24 (2026-09-23): origin AS13335 Cloudflare, RPKI valid, видимость 110 из 111 пиров RIS.
- Видимость N из M берётся из RIPEstat routing-status. M означает число пиров RIS с полной таблицей для этого семейства адресов (IPv4 или IPv6), N показывает, сколько из них сейчас видят префикс. Если N заметно меньше M, часть интернета до тебя не доходит: фильтры, отзыв анонса, проблемы у апстрима.
- Впервые замечен, покрывающие и более узкие префиксы тоже из routing-status.
RPKI и ROA
ROA (Route Origin Authorization) это подписанный объект, в котором владелец адресов указывает, какой AS разрешено анонсировать его префиксы и до какой длины маски (maxLength), см. RFC 9582. Маршрутизатор сверяет анонс со списком проверенных ROA и присваивает ему одно из трёх состояний (RFC 6811):
| Состояние | Когда |
|---|---|
| Valid | Есть ROA, который покрывает префикс, совпадает по AS и допускает такую длину маски |
| Invalid | ROA на этот адресный блок есть, но ни один не совпадает: чужой AS или слишком длинная маска |
| NotFound | Ни один ROA этот префикс не покрывает |
RIPEstat, откуда досье берёт статус (валидатор Routinator), называет их valid, invalid_asn, invalid_length и unknown (это и есть NotFound). Если в досье не valid, открой RIPEstat по ссылке из досье и посмотри точный статус.
Зачем это нужно: сети, которые отбрасывают invalid-маршруты, не примут чужой анонс твоего префикса от другого AS. Чего RPKI не делает: он проверяет только origin, а не путь. RFC 6811 прямо пишет, что атакующему достаточно дописать в конец пути легитимный origin. RFC 9319 советует «минимальные» ROA: только те префиксы, которые реально анонсируются, и maxLength без необходимости не ставить, иначе остаётся место для угона более узкого префикса.
Отказ апстрима и почему нужно два
Один апстрим
твоя AS → A → Tier 1 → мирСессия с A упала: анонс отзывается везде. Видимость в досье падает к 0 из M, пока A не поднимется.
твоя AS → A → Tier 1
твоя AS → B → Tier 1Упал A: маршруты через B остаются в таблицах. После пересчёта BGP трафик идёт через B, префикс виден.
Два и больше
На карте одиночный апстрим выглядит как одна линия от origin, а если он к тому же не Tier 1, досье пишет: «Один апстрим. Упадёт он — упадёт всё». Для ноды, на которой висят платные клиенты, стоит выбирать хостера хотя бы с двумя независимыми апстримами. Опыт сообщества: хостеры меняют апстримов и ловят проблемы у них ( хроника за июнь 2026), а связность префикса проверяют через bgp.tools ( сервисы, мосты).
Prepend
Препенд означает повтор своего номера в AS-path, чтобы путь через этот стык выглядел длиннее и соседи выбирали его реже. В данных RIS для Timeweb он виден прямо: 1299 9123 9123, то есть в сторону Arelion номер Timeweb стоит дважды. Наша карта такие повторы схлопывает.
Рекомендации из черновика IETF GROW draft-ietf-grow-as-path-prepending (это ещё не RFC):
- больше пяти повторов почти никогда ничего не даёт;
- не препендить чужие номера AS;
- при одном апстриме препенд бессмыслен;
- сосед может безусловно предпочитать маршруты от клиентов (через LOCAL_PREF), и тогда препенд не работает вовсе. Проще спросить у него заранее.
Лайфхак
Быстрый чек-лист перед покупкой: открой host.pink/AS<номер хостера>. Хорошо, когда прямых апстримов несколько и ни у одного нет почти 100% путей. Плохо, когда RPKI не valid или видимость префикса заметно ниже числа пиров. Собственная ASN и подсеть стоят отдельных денег (цифры из сообщества в разделе
DNS и в
рынке подсетей).
Источники
- RFC 4271, A Border Gateway Protocol 4 (BGP-4): разделы 5.1.2 (AS_PATH), 9.1.2 (выбор маршрута)
- RFC 1930, Guidelines for creation, selection, and registration of an Autonomous System
- RFC 6811, BGP Prefix Origin Validation
- RFC 9582, A Profile for Route Origin Authorizations (ROAs)
- RFC 9319, The Use of maxLength in the RPKI
- IETF GROW: draft-ietf-grow-as-path-prepending (версия 19)
- RIPE NCC: RIS, Route Collectors
- RIPEstat Data API: Looking Glass, Routing Status, RPKI Validation
- Википедия: Tier 1 network, Internet transit, Peering
- Код карты связности host.pink:
worker/src/asgraph.ts; данные host.pink/AS9123 и host.pink/1.1.1.0/24, сняты 2026-09-23