# Zapret2 для новичков — 01: сетевой стек (L2–L7) простыми словами Эта заметка нужна, чтобы дальше было легко понимать код zapret2 (nfqws2/winws2) и термины вроде “raw packet”, “payload”, “TTL”, “checksum”, “MSS”. ## 1) Главная идея Сеть можно представить как “слои”: - **L2 (канальный)**: Ethernet/Wi‑Fi — доставка “кадра” до следующего устройства. - **L3 (сетевой)**: IP — доставка “пакета” до удалённого адреса (маршрутизация). - **L4 (транспорт)**: TCP/UDP — доставка данных приложений + (в случае TCP) порядок, надёжность, контроль потока. - **L7 (прикладной)**: HTTP/TLS/QUIC/… — то, что реально “понимают” браузер и сервер. Zapret2 работает с **L3/L4 пакетами** (сырые IPv4/IPv6 пакеты) и иногда знает достаточно про L7, чтобы распознать тип полезной нагрузки (например `tls_client_hello`). ## 2) Что такое “пакет” и “payload” Упрощённо, для TCP: ``` IP header | TCP header | TCP payload (данные приложения: HTTP/TLS/...) ``` - **IP header**: “куда”, “откуда”, TTL/HL, флаги фрагментации, checksum (IPv4). - **TCP header**: порты, `seq/ack`, флаги (`SYN`, `ACK`, …), окно, опции (timestamp, SACK, …). - **payload**: байты приложения (например строка `GET / HTTP/1.1...` или TLS ClientHello). Zapret2: - умеет **разобрать** raw пакет в “диссект” (структуру полей), - и умеет **собрать обратно** raw пакет из диссекта (reconstruct), - а также может **отправлять** новые пакеты на основе текущего L3/L4 контекста. ## 3) TCP vs UDP (почему в zapret так много TCP-логики) ### TCP - есть “соединение” (логически), состояние, порядок, ретрансляции - важны `seq/ack`, MSS, окно, опции - многие DPI техники используют различия в том, как разные системы/устройства собирают поток TCP ### UDP - нет соединения и порядка “по умолчанию” - QUIC живёт поверх UDP, и “состояние” и шифрование реализуются на уровне QUIC Отсюда в zapret2: - много техник для TCP (`multisplit`, `multidisorder`, `seqovl`, …) - отдельная логика для QUIC (`quic_initial`, `decrypt_data`, …) ## 4) TTL/HL и почему это “инструмент” - **IPv4 TTL** и **IPv6 Hop Limit (HL)** уменьшаются на каждом маршрутизаторе. - Если TTL/HL станет 0 — пакет не дойдёт до сервера. Поэтому изменение TTL — популярная “заголовочная” техника: можно сделать так, чтобы пакет **принял DPI на пути**, но до сервера он не дошёл. В zapret2 это относится к **standard fooling** (см. `ip_ttl`, `ip6_ttl`, `ip_autottl`). ## 5) Checksum (очень коротко) Checksum — это контрольная сумма для проверки целостности. - у TCP/UDP есть checksum (на базе pseudo-header + payload) - если сделать checksum неправильной, ОС/стек часто выбросит пакет В zapret2 это используется как “fooling”: например `badsum`. ## 6) MSS, MTU, сегментация и фрагментация (не путать) Очень важно различать две вещи: ### TCP сегментация (L4) TCP может разбить большой payload на несколько TCP сегментов так, чтобы они влезли в MTU канала. Обычно это связано с **MSS** (Maximum Segment Size). ### IP фрагментация (L3) IP может разбить **один IP пакет** на несколько IP фрагментов (IPv4 или IPv6 fragment header). Это другой механизм, более низкого уровня. В zapret2: - “логические” разрезы типа `multisplit` делают **TCP сегменты** на уровне полезной нагрузки, - а опция `ipfrag` может потом сверху сделать **IP фрагменты** уже для собранных сегментов. ## 7) Мини‑словарь (запомнить) - **raw packet** — байты IP пакета как есть. - **dissect** — разобранная структура пакета (таблицы `ip/ip6/tcp/udp/payload`). - **reconstruct** — сборка raw пакета из диссекта. - **fooling** — “порча” заголовков, чтобы сервер пакет не принял, а DPI принял. - **payload type** — классификация полезной нагрузки (`http_req`, `tls_client_hello`, `quic_initial`). ## 8) Что читать дальше - `[[Zapret2 - 02 - TCP для новичков (seq/ack, окна, MSS)]]` - `[[Zapret2 - 03 - Перехват пакетов и вердикты (NFQUEUE/WinDivert)]]` - `[[Zapret2 - Roadmap обучения]]`