Some checks failed
Published content check / validate (push) Failing after 5s
Убраны слэши, ломавшие подписи wikilink-ссылок в Quartz, восстановлены переходы из первого урока и заменена пустая ссылка на оркестратор рабочей дорожной картой. Добавлены метаданные и обязательные Forgejo-футеры.
119 lines
7.2 KiB
Markdown
119 lines
7.2 KiB
Markdown
---
|
||
date: 2026-01-21
|
||
tags:
|
||
- zapret
|
||
- zapret2
|
||
- networking
|
||
- learning
|
||
aliases:
|
||
- Zapret2 учебник 01
|
||
- Сетевой стек для Zapret2
|
||
- Что такое L2 L3 L4 L7
|
||
- Пакеты TCP и UDP простыми словами
|
||
- MSS MTU и IP-фрагментация
|
||
description: "Сетевой стек L2–L7 простыми словами для изучения 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: сетевой стек (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) Что читать дальше
|
||
|
||
- [[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).
|