1

ソケット バッファを使用する必要がある Linux カーネルで新しいネット デバイスを作成しています。

headソケット バッファの構造を調べると、、、、という 4 つのフィールドが表示さdatatailますend。ソケット バッファのヘッド ルームとテール ルームの目的は何ですか。

4

1 に答える 1

5

ソケット バッファ (別名 skbuff) は、カーネル全体のネットワーク層に沿って渡されます。つまり、それらはトランスポート層からネットワーク層などに渡されます。これの主な理由はパフォーマンスであり、カーネルがバッファーを通過するたびにコピーして再作成する必要がなくなります。

これは、skbuff データが異なる層を通過する際に、対応するプロトコル ヘッダー データで満たされることを意味します。たとえば、トランスポート層では TCP ヘッダーを取得し、ネットワーク層では IP ヘッダーなどを取得します。

最適化として、Linux カーネルはこれらのヘッダーにスペースを事前に割り当てます。これは、実際には が指す skbuff 内のバッファーheadです。ここで、データが開始する場所、つまり現在構築されているパケットの最初のバイトが で示されdataます。同様に、現在構築されているパケットの最後と、事前に割り当てられたバッファーのtail最後を指します。end

この画像は私の言葉を理解するのに役立つかもしれません: http://www.kernelchina.org/files/image_thumb_3_4.png

現在、実際にメモリを再割り当てしてバイトをコピーするよりも、これらのポインターを移動してカーネルが送受信しようとしているパケットを (再) 構築する方が、計算量がはるかに少なくなります。

于 2012-10-30T03:11:58.970 に答える