Інтернет не є однією мережею, а тисячами людьми, які погоджуються спілкуватися
Публічний інтернет – це федерація приблизно 70 000 незалежно керованих мереж, кожна з яких називається Автономною системою (АС) та ідентифікується числом — AS15169 належить Google, AS7922 – Comcast, а AS13335 – Cloudflare. Жоден центральний орган не вказує їм, як досягати інших мереж. Замість цього кожна АС використовує Протокол Border Gateway (BGP), спілкуючись з безпосередніми сусідами через TCP порт 179, і інформація про доступність поширюється стрибком за стрибком, поки кожна АС на шляху не отримає оголошення для заданого блоку IP-адрес.
Це протокол-вектор шляху, який є компромісом між двома старішими ідеями. Протоколи-вектори відстаней (наприклад, ранній RIP) обмінюються лише відстанню в стрибках, що дешево, але не дає інформації — маршрутизатор не може визначити, чи повертається шлях через себе. Протоколи стану зв’язків (наприклад, OSPF) поширюють всю топологію до кожного маршрутизатора, що є точним, але не масштабується за межами однієї організації. BGP досягає компромісу, оголошуючи повний шлях АС з кожним маршрутом: не лише «Я можу дістатися 8.8.8.0/24», а й «Я можу дістатися через AS15169, AS3356, AS6453». Маршрутизатор, який бачить свій номер АС у отриманому шляху, видаляє його негайно — це єдина перевірка, що використовується BGP як механізм запобігання петлі.
Що насправді оголошується
AS не оголошує окремі IP-адреси – воно оголошує префікси, блоки, такі як 8.8.8.0/24 (де /24 означає, що перші 24 біти фіксовані, надаючи 256 адрес). Кожне оголошення – BGP UPDATE повідомлення – містить префікс плюс набір атрибутів шляху: AS_PATH (кожний AS, через який пройшов маршрут, від старого до новішого), NEXT_HOP (маршрутизатор, до якого потрібно надсилати пакети), та необов’язкові атрибути, такі як MED і комунітес, що використовуються для оптимізації трафіку. Коли маршрутизатор отримує UPDATE, він додає свій власний AS номер до шляху перед повторним оголошенням його далі, що й пояснює, чому шлях збільшується на один хід на межі AS, та чому підрахунок хопів в AS_PATH є приблизною мірою відстані мережі.
Вибір найкращого шляху: це бізнес-рішення, а не найкоротший шлях
Це може здивувати людей, які знайомі з маршрутизацією IGP (OSPF, маршрутизація за найкоротшим шляхом всередині однієї мережі): BGP за замовчуванням не обирає найкоротший AS-шлях. Реальні ISP комерційно класифікують кожного сусіда в одну з трьох категорій, і ця класифікація визначає, який маршрут виграє, перш ніж навіть враховувати довжину шляху:
клієнт → мережа, яка платить вам за транзит (ви несете їхній трафік будь-де) сусід → мережа, з якою ви обмінюєтеся трафіком безкоштовно (зазвичай мережі однакового розміру) постачальник → мережа, за транзитом в яку ви платите (вона несе ваш трафік будь-де) Стандартний порядок пріоритетів: маршрут клієнта > маршрут сусіда > маршрут постачальника (маршрут клієнта приносить вам гроші; маршрут постачальника коштує вам грошей) Це модель Gao-Rexford, формалізована на основі спостережень за поведінкою ISP у 2001 році, яка генерує відоме правило про відсутність долин (valley-free rule): легітимний AS-шлях піднімається через нуль або більше зв’язків постачальника, перетинає не більше один зв'язок сусіда на вершині, а потім спускається через нуль або більше зв’язків клієнта. Шлях постачальник → сусід → постачальник («долина») означав би, що AS надає безкоштовний транзит між двома мережами, для яких у нього немає комерційної причини субсидизувати, і в практиці такі шляхи фільтруються або просто ніколи не оголошуються.
Після визначення комерційних відносин BGP повертається до процедури розв’язання суперечок за допомогою ланцюжка пріоритетів: найкоротший AS_PATH, найнижчий тип вихідного пункту (origin type), найнижча MED (підказка від сусіднього AS щодо його власної внутрішної переваги), eBGP маршрути переважають над iBGP маршрутами, найнижча вартість IGP до наступного хопу, і нарешті, найнижчий ID маршрутизатора як крайній захід. Той факт, що кожен з цих кроків існує, гарантує, що два маршрутизатори, застосовуючи абсолютно однаковий детермінований набір правил до абсолютно тих самих вхідних маршрутів, досягають абсолютно одного й того ж результату – інакше мережа буде коливатися.
customer → a network that pays you for transit (you carry their traffic anywhere) peer → a network you exchange traffic with for free (usually equal-sized networks) provider → a network you pay for transit (they carry your traffic anywhere) Standard preference order: customer route > peer route > provider route (a customer route earns you money; a provider route costs you money)
Збіжність: чому інтернет повільно відновлюється
Коли виходить з ладу з’єднувальний елемент або AS відкликає префікс, ця інформація поширюється по мережі шарами, перевіряючи кожний AS, який мав маршрут через несправність, і кожен маршрутизатор вздовж шляху обчислює свій найкращий шлях та потенційно досліджує кілька альтернатив перед тим, як закріпитися – явище, яке називається дослідженням шляхів. Виміряна збіжність після реальної аварії зазвичай становить десятки секунд до кількох хвилин, а не мілісекунд, оскільки BGP навмисно обмежує швидкість повторного оголошення мережу, що зависає (MinRouteAdvertisementInterval, історично 30 секунд), щоб запобігти надсиланню в усі мережеві сегменти оновлень кожного разу, коли виходить з ладу з’єднувальний елемент.
У симуляції на цій сторінці реалізовано саме цей механізм: оголошення потрапляє в один AS, кожен сусід оцінює його за політикою клієнта/партнера/провайдера, пов'язаною з’єднувальним елементом, який він отримав, і – якщо виграє – повторно оголошує його зовні, додаючи свій номер AS до шляху, від покоління до покоління, поки мережа не досягне стабільного набору найкращих шляхів.
Коли все йде не так: витік маршрутів та захоплення маршрутів
BGP був розроблений у 1989 році на припущенні про добросовісність: кожне AS чесно оголошує лише префікси, які він дійсно володіє або має право переносити. У базовому протоколі немає криптографічного доказу, який би підтверджував легітимність оголошення, що й пояснює, чому витік маршрутів (випадкове повторне оголошення маршрутів постачальника іншому постачальнику, створюючи «долину») та захоплення BGP (оголошення префікса, який не належить, навмисно або через помилки налаштування) призводили до реальних та повторюваних відключень інтернету — типовим прикладом є випадкове захоплення YouTube'ом префікса Google Pakistan у 2008 році. Сучасним захистом є RPKI (Інфраструктура публічних ключів ресурсів), яка дозволяє власнику префіксу криптографічно підписати заяву про те, які AS дозволено використовувати для його походження, що дозволяє маршрутизаторам відхиляти очевидно сфальсифіковані оголошення замість того, щоб бездумно їх поширювати.
Часті запитання
Чи завжди BGP обирає найкоротший шлях?
Ні. Комерційні зв’язки важливіші за довжину шляху: маршрут, отриманий від платячого клієнта, переважно використовується над маршрутом, отриманим від партнера без оплати, який, у свою чергу, переважно використовується над маршрутом, отриманим від постачальника транзиту на основі оплати. Лише коли два кандидата маршрути збігаються за класом відносин, BGP повертається до порівняння довжини шляху AS.
Що таке шлях без ущелини?
Шлях AS, який лише піднімається через постачальників, перетинає не більше один зв’язок між партнерами, а потім спускається через клієнтів – ніколи не через постачальника, потім партнера, потім постачальника знову. Ця форма відображає, хто готовий безкоштовно перевозити трафік іншого, а шляхи, які її порушують, є сильним сигналом про витік маршруту.
Чому інтернету потрібно так довго, щоб помітити відключення?
Оновлення повинно поширюватися крок за кроком через кожний AS на ураженому шляху, кожен з яких переоцінює свій найкращий маршрут і іноді досліджує кілька проміжних кандидатів перед тим, як остаточно затвердити – плюс маршрутизатори навмисно обмежують частоту повторного оголошення маршруту, щоб уникнути надсилання великої кількості інформації в Інтернет під час відключення. Реальне збіжність після серйозної аварії зазвичай займає десятки секунд до кількох хвилин.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте BGP Route Propagation і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію BGP Route Propagation