todo/Zapret/manual/zapret2_01.md
loop-uh b4b7ede27f
Some checks failed
Published content check / validate (push) Failing after 5s
Исправить навигацию учебника Zapret2
Убраны слэши, ломавшие подписи wikilink-ссылок в Quartz, восстановлены переходы из первого урока и заменена пустая ссылка на оркестратор рабочей дорожной картой. Добавлены метаданные и обязательные Forgejo-футеры.
2026-09-01 16:42:45 +03:00

119 lines
7.2 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
- networking
- learning
aliases:
- Zapret2 учебник 01
- Сетевой стек для Zapret2
- Что такое L2 L3 L4 L7
- Пакеты TCP и UDP простыми словами
- MSS MTU и IP-фрагментация
description: "Сетевой стек L2L7 простыми словами для изучения Zapret2: пакеты и payload, TCP против UDP, TTL, checksum, MSS и IP-фрагментация."
---
> [!mirror] Резервное зеркало
> Актуальная версия этой страницы — на основной вики: [wiki.zapret.moe/Zapret/manual/zapret2_01](https://wiki.zapret.moe/Zapret/manual/zapret2_01)
# Zapret2 для новичков — 01: сетевой стек (L2L7) простыми словами
Эта заметка нужна, чтобы дальше было легко понимать код zapret2 (nfqws2/winws2) и термины вроде “raw packet”, “payload”, “TTL”, “checksum”, “MSS”.
## 1) Главная идея
Сеть можно представить как “слои”:
- **L2 (канальный)**: Ethernet/WiFi — доставка “кадра” до следующего устройства.
- **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) Что читать дальше
- [[Zapret/manual/zapret2_02|Урок 02: TCP — seq, ack, окно и MSS]]
- [[Zapret/manual/zapret2_03|Урок 03: перехват пакетов через NFQUEUE и WinDivert]]
- [[Zapret2/roadmap обучения|Полная дорожная карта обучения Zapret2]]
- [[Zapret/manual|Оглавление учебника Zapret2]]
---
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование доступно в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/Zapret/manual/zapret2_01.md) · [скачать весь репозиторий одним zip-архивом](https://git.zapret.moe/zapretdiscordyoutube/todo/archive/main.zip).