Доколкото разбирам, когато буферът на сокет (skb) е разпределен от стека на ядрото (по пътя на Tx), указателите „head“ и „tail“ сочат към началото и края на запазеното пространство в паметта.
Въпросът ми е: какво точно определя това количество: (опашка - глава) октети? Макс. MTU ли е? Не изглежда така, тъй като малък експеримент показва, че # байтове (опашка-глава) може да бъде доста малък (320 байта и т.н.). И така, приложението на сокета играе ли роля тук?
Също така, AFAIK, идеята е да се резервира достатъчно памет, така че да не се изискват допълнителни разпределения по-надолу в протоколния стек, т.е. запазеното пространство може да бъде повече от полезния товар. Ако е така, какво ще кажете за случаите, в които се извършва допълнително капсулиране (като VoIP, SSL и т.н.?)?
Актуализация: Това помага ли да се отговори на qs?
Намерено в net/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?
TIA!