私が理解していることから、カーネル スタック (Tx パス上) によってソケット バッファー (skb) が割り当てられると、「ヘッド」ポインターと「テール」ポインターは、予約されたメモリ空間の開始と終了を指します。
私のqsは次のとおりです:この量を正確に決定するもの:(テール-ヘッド)オクテット? 最大MTUですか?少しの実験で、バイト数 (テールヘッド) が非常に小さい (320 バイトなど) 可能性があることが示されているため、そのようには見えません。ここで役割を果たすのはソケットアプリですか?
また、私の知る限り、アイデアは、プロトコルスタックのそれ以上の割り当てが必要ないように十分なメモリを予約することです。つまり、予約されたスペースはペイロードを超える可能性があります。もしそうなら、さらなるカプセル化が行われる場合 (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 に基づく ?
ティア!