From ede260d4fabd77d66be49aa353f76e683af33fb4 Mon Sep 17 00:00:00 2001 From: bol-van Date: Sun, 14 Dec 2025 21:54:19 +0300 Subject: [PATCH] update docs --- docs/manual.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/manual.md b/docs/manual.md index eba0991..5f84861 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -1234,3 +1234,14 @@ mss, winsize, scale передаются от одной стороны соед mss дублируется в поле `desync.tcp_mss` независимо от наличия conntrack. Значение там уже рассчитано на то, что оно будет использовано для вычисления размера пакета для отсылки. Если вдруг conntrack нет или mss не был согласован сторонами, выставляется значение по умолчанию - DEFAULT_MSS (1220). + +При работе с sequence нужно учитывать их 32-битную беззнаковую природу. +Если к 4294967280 (0xFFFFFFF0) прибавить 100, будет не 4294967380 (0x100000054), а 84 (0x54). +Если вы сложите в LUA эти числа - вы получите 4294967380, потому что там используется представление чисел с разрядностью более 32 и со знаком. +Для операций с sequence и их сравнения рекомендуется использовать C функции u32add и bitand. +Например, выражение `0==bitand(u32add(seq1, -seq2), 0x80000000)` соответствует `seq1>=seq2`. +Но последний простой вариант не будет работать корректно, а первый - будет, если seq1 ушел от seq2 не более, чем на 2 GB. +Большее и не отследить через sequence. Нужно всегда учитывать, что при передаче больших обьемов данных они не могут служить счетчикам. +`p*counter` являются 64-битными счетчикам, поэтому у них этой проблемы нет. + +