据我了解,当内核堆栈(在 Tx 路径上)分配套接字缓冲区(skb)时,“头”和“尾”指针指向保留内存空间的开始和结束。
我的问题是:究竟是什么决定了这个数量:(尾 - 头)八位字节?是最大 MTU 吗?看起来不像是一个小实验表明字节数(尾头)可能非常小(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 ?
蒂亚!