awesome-everything EN
↑ Обратно к восхождению

Сети и протоколы

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

Суть QUIC идентифицирует соединения непрозрачным Connection ID вместо 4-тупла — соединения переживают смену IP-адреса (WiFi на мобильную) без переподключения.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 10 min

Вы выходите из офиса, и телефон переключается с 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. Путь проверен — сервер обновляет текущий адрес соединения и разблокирует полную скорость отправки.

Всё состояние потоков, окна управления потоком и состояние перегрузки переживают миграцию. Соединение продолжается, как будто ничего не произошло.

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 при миграции, чтобы наблюдатели не могли связать две сетевые идентичности.

Связанные уроки
встречается в258
Продолжить восхождение ↑Обнаружение потерь и управление перегрузкой
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.