Сети и протоколы
IP-пакеты: трассируй, декодируй и почини path-MTU black hole
Читать про TTL, longest-prefix match и PMTUD black hole — не то же, что видеть их в живом захвате. Собери небольшой лаб, декодируй байты, которые IP реально кладёт на провод, построй реальный путь, затем намеренно создай самый частый тихий сбой на уровне IP — path-MTU black hole — и почини его так, как сделал бы on-call инженер, с доказательством на каждом шаге.
Преврати ментальную модель юнита в воспроизводимую петлю диагностики: захвати и руками декодируй IP header, трассируй путь и прочитай его поведение TTL, воспроизведи PMTUD black hole в контролируемом туннеле и докажи фикс MSS-clamp до/после захватами.
Подними небольшой сетевой лаб (два host плюс туннель с низким MTU — WireGuard, network namespace или два контейнера), затем используй его, чтобы декодировать IP header из живого захвата, построить путь через traceroute, воспроизвести PMTUD black hole и починить его без опоры на ICMP — доказывая каждую находку из packet-захватов и вывода команд, а не по памяти.
- Побайтно размеченный декод реального IPv4 и реального IPv6 header, каждое поле привязано к захваченным байтам.
- Вывод traceroute/mtr с письменным объяснением механики TTL и верным вердиктом минимум по одному hop со звёздочками/loss (скрытие ICMP против реальной потери на data plane).
- Вывод `ip route get` для нескольких destination, показывающий, что longest-prefix match выбирает самый специфичный prefix, а default route — последний резерв.
- Доказательство до/после PMTUD black hole: падающий захват большой передачи с повторными retransmit, затем проходящий захват после MSS clamping — с всё ещё заблокированным ICMP, доказывая независимость фикса от ICMP.
- Добавь одностраничный on-call runbook: шаги триажа для 'мелкие запросы работают, большие зависают', диагностические команды и выбор MSS-clamp против PLPMTUD против разблокировки ICMP.
- Изучи BGP и RPKI для prefix, который контролируешь, или публичного: через looking-glass посмотри его объявление с удалённой AS и проверь валидность RPKI (например через публичный валидатор), затем объясни, что состояние 'invalid' сделало бы с достижимостью.
- Продемонстрируй ограничение NAT-traversal: помести один host за двойной NAT, покажи, что неинициированное входящее соединение падает, и что relay (стиль TURN) или IPv6 заставляет его работать.
- Захвати и объясни сценарий spoofing/amplification в лабе (мелкий запрос, дающий крупный ответ) и опиши, как BCP 38 egress filtering в сети источника остановил бы его.
Это петля, которую ты будешь запускать в каждом реальном инциденте на уровне IP: сначала захвати и декодируй настоящие байты, построй путь через traceroute на основе TTL и прочитай его особенности верно, разреши forwarding через longest-prefix match, а когда появится ‘мелкое работает, большое зависает’ — распознай PMTUD black hole и почини его MSS clamping, а не ставкой на выживание ICMP. Сделав это раз в контролируемом лабе, ты превращаешь production-версию в мышечную память.