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 обучения]]