todo/Zapret/manual/zapret2_05.md
loop-uh 0ad0bcc8dd
Some checks failed
Published content check / validate (push) Failing after 5s
seo+зеркало: [!mirror]-плашка со ссылкой на вики и description во frontmatter всех заметок
Каждая публикуемая заметка получила callout-шапку со ссылкой на свою страницу
wiki.zapret.moe (на самой вики она вырезается транформером RemoveMirrorCallout,
видна только на зеркале Obsidian Publish и в Forgejo) и SEO-поле description —
1–2 предложения для meta description обоих сайтов.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-26 22:05:57 +03:00

98 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date: 2026-01-21
tags:
- zapret
- zapret2
- payload
- lua
- learning
aliases:
- Zapret2 учебник 05
description: "Учебник Zapret2, часть 5: типы payload (http_req, tls_client_hello), сборка reasm_data, replay и маркеры host/midsld для multisplit и multidisorder."
---
> [!mirror] Резервное зеркало
> Актуальная версия этой страницы — на основной вики: [wiki.zapret.moe/Zapret/manual/zapret2_05](https://wiki.zapret.moe/Zapret/manual/zapret2_05)
# Zapret2 для новичков — 05: payload types, reasm/replay и маркеры
Цель: понять, как zapret2 отличает `http_req` от `tls_client_hello`, зачем нужен `reasm_data` и почему “маркеры” (host/midsld/…) иногда не работают.
## 1) `l7proto` vs `l7payload`
Это разные уровни классификации:
- `l7proto`: “какой протокол потока” (tls/http/quic/…)
- `l7payload`: “какой именно тип полезной нагрузки” (http_req, tls_client_hello, quic_initial, …)
В CLI это отражается так:
- `--filter-l7=tls,http,quic` — фильтр протокола потока
- `--payload=tls_client_hello` — фильтр типов payload внутри профиля
## 2) Почему payload важнее для Lua стратегий
Многие стратегии должны срабатывать только на “первом важном пакете”:
- HTTP request (где виден Host)
- TLS ClientHello (где виден SNI)
- QUIC Initial (где тоже “есть hello”, но шифрованнее и сложнее)
Поэтому фильтрация по payload экономит CPU и делает поведение предсказуемым.
## 3) `reasm_data`: когда один payload приходит в нескольких TCP сегментах
Иногда полезная нагрузка не помещается в один TCP сегмент (например TLS ClientHello с kyber).
Тогда zapret2 может собрать несколько сегментов в один “логический payload”:
- `desync.reasm_data` — полный собранный блок
Ключевой момент:
- стратегии типа `multisplit`/`multidisorder` работают “умнее”, если видят `reasm_data`: они режут **весь reasm**, а не только текущий кусок.
## 4) `replay`: почему пакеты иногда “задерживают и переигрывают”
Если нужно сначала накопить части payload (для reasm) или выполнить серию Luaинстансов, система может:
1) временно задержать часть пакетов
2) когда готово состояние (`reasm_data`), “переиграть” (replay) эти пакеты
Отсюда поля типа:
- `desync.replay`, `desync.replay_piece`, `desync.replay_piece_count`
И поведение:
- многие стратегии делают основную работу только на `replay_first(...)`, а дальше дропают “повторные” части, потому что уже отправили reasm в нужной форме.
## 5) Маркеры: что это и зачем
Маркеры — это способ указать позицию “логически”, а не байтовым смещением.
Примеры маркеров:
- `method` (HTTP метод)
- `host`, `endhost`, `midsld` (позиции внутри Host/SNI домена)
- `sniext`, `extlen` (TLS структуры)
Можно писать:
- `midsld+1`, `endhost-2`, `-10`, `100`
И использовать в:
- `multisplit:pos=...`
- `multidisorder:pos=...:seqovl=...`
Почему маркер может “не сработать”:
- payload не распознан (l7payload = unknown)
- в payload нет нужной структуры (например нет SNI)
- маркер невалиден для данного payload типа
## 6) Мини‑практика: “проверить, распознан ли payload”
Добавь:
```bash
--lua-desync=luaexec:code="DLOG('l7payload '..tostring(desync.l7payload)..' l7proto '..tostring(desync.l7proto))"
```
И сравни с ожиданиями.
## 7) Что читать дальше
- `[[Zapret2 - 06 - Lua pipeline: инстансы, args, дебаг]]`
- `[[multisplit]]` и `[[multidisorder]]` (там маркеры используются в реальной технике)