open atlas
↑ К треку
Сети и протоколы NET · 10 · 04

Connection ID и миграция сети

QUIC идентифицирует соединения непрозрачным Connection ID вместо 4-тупла — соединения переживают смену IP-адреса (WiFi на мобильную) без переподключения.

NET Middle ◷ 10 min
Уровень
ОсновыJuniorMiddleSenior

Вы выходите из офиса, и телефон переключается с WiFi на LTE. Все TCP-соединения умирают — каждое приложение переподключается, проходит аутентификацию заново, перезагружается. QUIC делает этот переход невидимым для приложения.

Почему TCP ломается при смене IP

TCP-соединения идентифицируются 4-туплом: IP клиента, порт клиента, IP сервера, порт сервера. Когда IP клиента меняется — WiFi на сотовую, переназначение NAT — 4-тупл ломается. Сервер видит пакеты из неизвестного источника и игнорирует их. Клиент должен начать новое TCP-рукопожатие, заново согласовать TLS и восстановить состояние приложения. Это занимает секунды и заметно пользователям.

Connection ID отделяет идентичность от адреса

QUIC вводит непрозрачный Connection ID (до 20 байт, обычно 8), выбираемый сервером. Connection ID переносится в заголовке каждого QUIC-пакета. Сервер сопоставляет Connection ID с состоянием соединения, а не с IP-адресами.

При смене IP клиента:

  1. Клиент отправляет QUIC-пакет с нового адреса с тем же Connection ID.
  2. Сервер узнаёт Connection ID, фиксирует новый адрес источника.
  3. Сервер отправляет фрейм PATH_CHALLENGE — случайный токен 8 байт.
  4. Клиент отражает токен в фрейме PATH_RESPONSE.
  5. Путь проверен — сервер обновляет текущий адрес соединения и разблокирует полную скорость отправки.

Всё состояние потоков, окна управления потоком и состояние перегрузки переживают миграцию. Соединение продолжается, как будто ничего не произошло. Вместе эти пять шагов означают: смена сети, которая вынудила бы TCP к полному переподключению, завершается в один PATH_CHALLENGE round trip; без шага 4 злоумышленник мог бы использовать это окно для reflection-атаки.

Timeline миграции WiFi на сотовую
t=0Клиент на WiFi: 192.168.1.100:54321, Connection ID 0x12345678
t=1сКлиент переходит на LTE: 203.0.113.50:55555 (тот же Connection ID)
t=1сСервер: видит Connection ID 0x12345678 с нового адреса — отправляет PATH_CHALLENGE
t=1.1сКлиент: отправляет PATH_RESPONSE — путь проверен
t=1.1сВсе потоки возобновляются на полной скорости — без переподключения, без повторной аутентификации

Антиамплификационный лимит

До проверки нового адреса клиента сервер может отправить не более чем 3× байт, которые он получил с этого адреса. Это предотвращает UDP-атаки амплификации: злоумышленник не может подделать адрес клиента, чтобы сервер отправил большие ответы жертве.

Клиенты должны отправлять Initial-пакеты, дополненные до минимум 1200 байт, чтобы серверы имели пространство для ~3600-байтового ответа. После проверки PATH_RESPONSE сервер разблокирует полную скорость отправки.

Проследи
1/5

Трассируйте клиента, переключающегося с WiFi на сотовую в середине соединения.

1
Step 1 of 5
Клиент на WiFi отправляет пакеты с Connection ID 0x12345678 с IP 192.168.1.100 порт 54321.
2
Locked
Клиент выходит на улицу, теряет WiFi, переключается на сотовую с новым IP 203.0.113.50 порт 55555.
3
Locked
Сервер получает пакет от 203.0.113.50:55555 с Connection ID 0x12345678. Что он делает?
4
Locked
Клиент отвечает PATH_RESPONSE. Сервер сразу отправляет на полной скорости на новый адрес?
5
Locked
Всё состояние потоков, окна управления потоком и состояние перегрузки переживают миграцию. Почему?
Викторина

В QUIC что предотвращает антиамплификационный лимит (правило 3×)?

Викторина

Почему QUIC может пережить смену IP клиента с WiFi на сотовую, а TCP нет?

Граничные случаи

Ротация Connection ID не позволяет наблюдателю связать старый и новый IP клиента через Connection ID. Сервер периодически отправляет фреймы NEW_CONNECTION_ID, предлагая новые ID; клиент переключается на новый при миграции. Это обеспечивает конфиденциальность — наблюдатель не может сопоставить WiFi-сессию пользователя с сотовой — не скрывая IP пользователя от сервера.

Вспомните перед уходом
  1. 01
    Объясните, почему QUIC может пережить смену IP клиента с WiFi на сотовую, а TCP нет, и какую роль играет Connection ID.
  2. 02
    Что такое антиамплификационный лимит в QUIC и зачем он нужен?
  3. 03
    Какие фреймы использует QUIC для проверки нового адреса клиента после миграции?
Итог

Фундаментальное допущение TCP — что соединение равно 4-туплу — ломается при каждой смене сети мобильным клиентом. QUIC обходит это, идентифицируя соединения непрозрачным Connection ID, который живёт в заголовке QUIC-пакета, а не в IP или UDP. При смене IP клиента Connection ID остаётся постоянным, и сервер может обнаружить миграцию: он отправляет PATH_CHALLENGE для проверки доступности нового адреса, ждёт PATH_RESPONSE, а затем мигрирует всё соединение — все потоки, всё состояние управления потоком — на новый путь. Во время проверки лимит антиамплификации 3× предотвращает использование окна миграции как вектора отражения. Ротация Connection ID дополнительно позволяет клиенту менять ID при миграции, чтобы наблюдатели не могли связать две сетевые идентичности. Теперь, когда увидите, что мобильное приложение не прерывается при выходе пользователя из зоны WiFi, вы знаете, что за этим стоит: Connection ID, переживающий смену IP-адреса, и один PATH_CHALLENGE round trip, соединяющий новый путь с существующей сессией.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено
Связанные уроки
встречается в287

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.