Насколько я понимаю, когда буфер сокета (skb) выделяется стеком ядра (на пути Tx), указатели «голова» и «хвост» указывают на начало и конец зарезервированного пространства памяти.
Мой вопрос: что именно определяет это количество: (хвост - голова) октеты? Это максимальный MTU? Не похоже, так как небольшой эксперимент показывает, что количество байтов (хвост) может быть довольно маленьким (320 байт и т. д.). Так играет ли здесь роль сокет-приложение?
Кроме того, насколько мне известно, идея состоит в том, чтобы зарезервировать достаточно памяти, чтобы не требовалось никаких дополнительных распределений дальше по стеку протоколов, т. Е. Зарезервированное пространство может быть больше, чем полезная нагрузка. Если да, то как насчет случаев, когда выполняется дополнительная инкапсуляция (например, VoIP, SSL и т. д.?)?
Обновление. Помогает ли это ответить на вопросы?
Найдено в сети/ipv4/tcp_output.c:
... tcp_make_synack() { ... skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15 + s_data_desired, 1, GFP_ATOMIC); ... }
Кажется, это часть SYN-ACK состояния TCP m/c. Итак, таким образом, «размер», похоже, составляет около 320.
- Пакеты данных сегментов TCP .. по умолчанию «mss» - 512? ‹-- на основе tcp_base_mss?
ТИА!