TGViewer
Серверная Админа | Компьютерные сети Серверная Админа | Компьютерные сети @school_network · 26.5K subscribers
Post #2091 5.08K
👋 Привет, сетевой друг!

Сегодня покажу, как можно сжимать IPv4-заголовки вручную на C++

🟣В чём смысл: IPv4-заголовок - это всегда 20 байт (если без опций), и большая часть полей там почти не меняется. Вместо того чтобы передавать их каждый раз, мы сохраняем один эталон, а потом передаём только изменения. Это и есть дельта-сжатие.

🟣Как работает: Первый пакет метим как эталон

[0x00][ID][20 байт заголовка]


Все следующие — как дельта:

[0x01][ID][кол-во изменений][смещение_1][значение_1]...[смещение_N][значение_N]


На приёме просто восстанавливаем полный заголовок, применяя патчи к эталону

🟣Пример на C++: Условно, у нас есть два заголовка (вектор std::vector<uint8_t> по 20 байт). Второй отличается только TTL и длиной пакета. В этом случае дельта будет содержать всего пару байт отличий.

std::vector<uint8_t> baseHeader = ...; // эталон
std::vector<uint8_t> newHeader = ...; // новый

std::vector<uint8_t> delta = {0x01, 0x01}; // тип и ID
for (size_t i = 0; i < 20; ++i) {
if (baseHeader[i] != newHeader[i]) {
delta.push_back(i); // смещение
delta.push_back(newHeader[i]); // новое значение
}
}
delta.insert(delta.begin() + 2, delta.size() - 2); // количество изменений


🟣Восстановление на приёмнике:

std::vector<uint8_t> restored = baseHeader;
size_t count = delta[2];
for (size_t i = 0; i < count; ++i) {
size_t offset = delta[3 + i * 2];
uint8_t value = delta[3 + i * 2 + 1];
restored[offset] = value;
}


🟣Чем хорош подход: Это почти ничего не весит, легко дебажится и не требует сторонних библиотек. Работает хорошо, если трафик однотипный, например: ping, DNS или custom RPC.

🟣И да, не забываем следить за числом эталонов и временем жизни. Добавьте в дельту контрольную сумму, если боитесь ошибок. А ещё можно сделать автоудаление редко используемых шаблонов.

Серверная Админа | #Cplusplus
  • 👾 4
  • ❤ 1
More from @school_network
  1. Oct 7, 2026🗂 Пакет Безопасности — папка, которую админ собирал более 10 лет ⚡️ Слитые курсы по IT и…
  2. Oct 6, 2026👋 Привет, сетевой друг! Сегодня про Network Doctor - TUI для диагностики сети, который пы…
  3. Oct 6, 2026Как хаотичные подсети убивают масштабируемость В статье показывают, как случайные /24, пер…
  4. Oct 3, 2026Post #2894
  5. Oct 2, 2026👋 Привет, сетевой друг! Ещё три функции MikroTik, которые легко пропустить, пока не столк…
  6. Oct 2, 2026Для тех, кто работает с Kubernetes и облачной инфраструктурой, в октябре намечается отличн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →