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

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

MTU и фрагментация

Суть Пакет превышающий MTU линка должен быть уменьшен или разбит. IPv4-роутеры могут фрагментировать; IPv6 запрещает это. PMTUD black holes возникают когда ICMP блокируется.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 12 min

Разработчик развёртывает сервис за VPN. Маленькие запросы работают нормально. Большие — загрузка файла, большой JSON-payload — тихо зависают. Никакого сообщения об ошибке. Сервер не получает ничего. Проблема — несоответствие размера пакета максимуму который может нести линк, плюс firewall блокирует сообщение об ошибке которое исправило бы это.

Что такое MTU

Maximum Transmission Unit (MTU) — наибольший IP-пакет (заголовок + payload) который линк может нести без фрагментации. Стандартный MTU Ethernet — 1500 байт. Разные технологии линков имеют разные MTU:

Типичные значения MTU
Ethernet (стандарт)
1500 байт
PPPoE (DSL)
1492 байта
Wi-Fi (802.11)
~1500 байт
Jumbo frames (10G/40G)
9000 байт
Минимальный обязательный MTU IPv6
1280 байт
VPN-туннели (WireGuard, IPSec)
1400–1450 байт

Path MTU — наименьший MTU на всём пути от источника до назначения. Пакет должен вписываться в Path MTU, иначе он будет дропнут где-то на пути.

Фрагментация IPv4

Когда IPv4-пакет приходит на роутер у которого исходящий линк имеет меньший MTU, роутер разбивает пакет на фрагменты:

  1. Роутер копирует поле identification во все фрагменты.
  2. Устанавливает флаг «more fragments» на всех кроме последнего.
  3. Каждый фрагмент несёт смещение внутри исходного пакета.
  4. Назначение переcобирает все фрагменты с одним ID + source IP.

Фрагментация дорогостоящая: потеря любого фрагмента вынуждает повторно передавать всю исходную датаграмму. Каждый фрагмент маршрутизируется независимо. Фрагментация на роутерах добавляет задержку и CPU-работу.

Бит DF (Don’t Fragment). Когда установлен в поле Flags IPv4-заголовка, роутер не может фрагментировать пакет. Если пакет не вписывается в MTU исходящего линка, роутер дропает его и шлёт ICMP «fragmentation needed» обратно к источнику. Это обеспечивает PMTUD.

IPv6 — без фрагментации роутерами

IPv6-роутеры никогда не фрагментируют. Если пакет слишком большой, роутер дропает его и шлёт ICMPv6 «Packet Too Big» обратно к отправителю. Отправитель должен уменьшить размер пакета и повторно передать. Это переносит сложность на отправителя и упрощает обработку роутером.

Отправители IPv6 обязаны поддерживать минимальный MTU 1280 байт (они всегда могут отправлять 1280-байтные пакеты к любому назначению). Path MTU Discovery обязателен для IPv6.

Path MTU Discovery (PMTUD)

PMTUD обнаруживает наименьший MTU на пути. Отправитель устанавливает DF=1 (IPv4) и шлёт полноразмерные пакеты. Когда роутер дропает один потому что он слишком большой, он шлёт ICMP «packet too big» (или «fragmentation needed») обратно. Отправитель уменьшает размер пакета и повторяет попытку.

PMTUD black holes возникают когда firewall или middlebox тихо дропает ICMP. Отправитель никогда не получает сигнал «packet too big». Он продолжает передавать полноразмерные пакеты, которые продолжают дропаться. Соединение зависает — маленькие запросы работают (они вписываются), большие зависают навсегда.

Симптомы PMTUD black hole:

  • Маленькие HTTP-запросы успешны; большие payload’ы или файлы зависают.
  • ping -M do -s 1450 destination завершается без ответа.
  • traceroute показывает путь нормально, но TCP-сессии зависают при больших размерах.

Решения для PMTUD black holes

TCP MSS clamping: MSS (Maximum Segment Size) согласовывается в TCP handshake. Роутер на пути (VPN-шлюз, PPPoE-терминатор) перезаписывает опцию MSS в SYN-пакетах до безопасного значения (например 1452 = 1500 - 20 IP - 20 TCP - 8 PPPoE). Эндпойнты никогда не согласовывают размер сегмента который создал бы oversized пакет. Это прагматичное исправление для большинства VPN и PPPoE развёртываний.

PLPMTUD (RFC 4821): Packetisation-Layer PMTUD. Отправитель зондирует всё большими TCP-сегментами; если зонд не получает ACK — отступает. Вообще не полагается на ICMP — устойчив к ICMP-фильтрации. Современные стеки по умолчанию используют PLPMTUD.

Открытые ICMP-политики: разрешить ICMP type 3 (destination unreachable) и ICMPv6 type 2 (packet too big) через firewall’ы. Фильтрация всего ICMP — распространённая но неверная «политика безопасности» которая ломает PMTUD и traceroute.

Проследи
1/5

Диагноз: пакеты тихо дропаются когда их размер превышает 1400 байт.

1
Step 1 of 5
Каков симптом с точки зрения пользователя?
2
Locked
Что происходит на сетевом уровне?
3
Locked
Почему это 'тихо' падает в некоторых случаях?
4
Locked
Диагностическая команда?
5
Locked
Исправление?
Викторина

Почему IPv6 запрещает фрагментацию на уровне роутера?

Викторина

Что такое PMTUD black hole?

Вспомните перед уходом
  1. 01
    Вы запускаете tcpdump и видите TCP-повторные передачи каждые ~1 секунду, потерь не обнаружено, соединение проходит через VPN-туннель. Какова вероятная PMTUD-связанная причина?
  2. 02
    Почему IPv6 требует чтобы отправитель выполнял PMTUD, тогда как IPv4-роутеры могут фрагментировать на лету?
  3. 03
    Что такое TCP MSS clamping и почему его используют вместо опоры на PMTUD?
Итог

MTU — максимальный размер фрейма на линке. Стандарт Ethernet — 1500 байт; VPN-туннели уменьшают его добавляя overhead заголовков. IPv4-роутеры могут разбивать oversized пакет на меньшие фрагменты, но потеря любого фрагмента вынуждает повторно передавать всю датаграмму. IPv6 полностью запрещает фрагментацию роутерами: если пакет слишком большой, роутер шлёт ICMPv6 «Packet Too Big» и отправитель должен уменьшить. Path MTU Discovery полагается на эти ICMP-сигналы — когда firewall тихо дропает ICMP, отправитель никогда не узнаёт что нужно уменьшить, и большие соединения зависают (PMTUD black hole). Прагматичные исправления: TCP MSS clamping (перезаписывает опцию MSS в SYN’ах до безопасного значения, устойчив к ICMP-фильтрации) и PLPMTUD (RFC 4821, зондирует через TCP-сегменты).

Связанные уроки
Продолжить восхождение ↑NAT, адресация и развёртывание IPv6
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.