據我所知,當內核棧(在Tx路徑上)分配一個套接字緩衝區(skb)時,'head'和'tail'指針指向保留內存空間的起始端&。分配給待傳輸數據包skb的空間數量究竟如何確定和分配?
我的問題是:究竟是什麼決定了這個數量:(尾 - 頭)八位組? 是最大MTU嗎?似乎並不像一點點的實驗表明,字節數(tail-head)可能非常小(320字節等)。那麼在這裏扮演角色的套接字應用程序呢?另外,AFAIK的想法是預留足夠的內存,使得在協議棧下面不需要進一步的分配,即保留的空間可以大於有效載荷。如果是這樣,那麼進一步封裝(如VoIP,SSL等)的情況呢?
更新: 這是否有助於回答問題?
在net /的IPv4/tcp_output.c實測值:
... tcp_make_synack() {... SKB = sock_wmalloc(SK,MAX_TCP_HEADER + 15 + s_data_desired,1,GFP_ATOMIC) ; ... }
這似乎是TCP狀態M/C的SYN-ACK的一部分。 所以,通過這種方式,「大小」似乎摸出周圍320
- TCP分段的數據包.. 默認的「MSS」是512? < - 基於tcp_base_mss?
TIA!
謝謝你! 什麼是MTU-40? – kaiwan
接口的MTU(1500)減去40。 – ugoren