Компьютерные сети
Anycast
Как один IP-адрес может существовать в 300 городах одновременно? Anycast нарушает интуицию об уникальности адресов - и это работает. 1.1.1.1 отвечает из Токио для японцев и из Лондона для европейцев.
- **Cloudflare 1.1.1.1** - anycast DNS в 300+ городах, один из самых быстрых публичных DNS
- **Корневые DNS-серверы** - 13 логических серверов, ~1500 физических благодаря anycast
- **AWS Route 53** - anycast DNS с latency-based routing для глобальных приложений
Предварительные знания
Unicast, Broadcast, Multicast, Anycast
В IP-сетях есть несколько способов адресации: **Unicast** (один к одному), **Broadcast** (один ко всем), **Multicast** (один к группе) и **Anycast** (один к ближайшему). Anycast - когда один IP-адрес анонсируется из нескольких мест, а BGP направляет пакеты к ближайшему.
**Anycast** работает благодаря BGP: несколько серверов анонсируют один и тот же IP-префикс. Маршрутизаторы интернета выбирают кратчайший путь - пакеты идут к ближайшему серверу.
Ключевое свойство anycast: **stateless протоколы** работают идеально (DNS, NTP), но **stateful** (TCP) требуют осторожности - если маршрут изменится посреди соединения, пакеты пойдут на другой сервер и соединение разорвётся.
Почему anycast хорошо работает для DNS, но проблематичен для HTTP?
Как BGP выбирает ближайший сервер
BGP использует несколько метрик для выбора пути: **AS path length** (сколько автономных систем пройти), **MED** (Multi-Exit Discriminator), **local preference**. Anycast работает благодаря тому, что BGP выбирает путь с минимальным AS path - обычно это географически ближайший сервер.
**Convergence time** - время, за которое BGP перенастраивает маршруты при изменениях. Может занять секунды или минуты. В это время anycast может работать нестабильно.
CDN-провайдеры размещают серверы в **точках обмена трафиком (IXP)** - там, где пересекаются сети многих провайдеров. Это минимизирует AS path до пользователей и улучшает anycast routing.
Почему CDN-провайдеры размещают серверы в IXP?
DNS и Anycast: идеальная пара
**DNS** - идеальный use case для anycast. Запрос-ответ по UDP, нет состояния. Все 13 корневых DNS-серверов используют anycast. `1.1.1.1` (Cloudflare) и `8.8.8.8` (Google) - anycast-адреса, работающие в сотнях точек мира.
**Почему 13 корневых серверов?** Ограничение UDP пакета: DNS-ответ с 13 адресами (IPv4) помещается в 512 байт. С EDNS0 можно больше, но 13 исторически закрепились.
Anycast DNS обеспечивает: **низкую latency** (ответ от ближайшего сервера), **высокую доступность** (падение сервера → трафик уходит на другой), **DDoS protection** (атака распределяется по всем точкам).
Что происходит, если anycast DNS-сервер падает?
Anycast для CDN и TCP
CDN используют anycast для HTTP/HTTPS несмотря на TCP. Как? **Stable BGP routing** - маршруты редко меняются, TCP-соединения живут. Если маршрут изменится - клиент просто переподключится (браузер делает это автоматически).
**QUIC (HTTP/3)** использует Connection ID вместо IP:port для идентификации соединения. Если anycast-маршрут изменится, соединение мигрирует на новый сервер без разрыва.
**DDoS protection** - главное преимущество anycast для CDN. Атака на один IP распределяется по всем edge-серверам автоматически. Атакующий не может перегрузить один сервер.
Anycast нельзя использовать для TCP-соединений
Anycast активно используется для HTTP/HTTPS. BGP обычно стабилен, а редкие разрывы TCP переносятся легко
CDN-гиганты (Cloudflare, Fastly, AWS) используют anycast для HTTP годами. TCP-соединения редко рвутся от смены маршрута. Браузеры автоматически переподключаются. HTTP/3 (QUIC) решает проблему полностью с connection migration.
Почему HTTP/3 (QUIC) лучше подходит для anycast, чем TCP?
Итоги
- **Anycast** - один IP анонсируется из множества мест, BGP направляет к ближайшему. Идеально для DNS (stateless UDP)
- **BGP routing** - выбирает путь по AS path length, local preference, MED. IXP обеспечивают минимальные хопы
- **CDN + Anycast** - работает для HTTP/TCP благодаря стабильности BGP. QUIC решает проблему connection migration
Связанные темы
Anycast опирается на знание BGP и применяется в CDN:
Вопросы для размышления
- Почему anycast отлично подходит для DDoS protection?
- Что случится с TCP-соединением, если BGP-маршрут изменится во время передачи данных?
- Почему корневых DNS-серверов ровно 13 (буквы A-M)?