Show page source of internal24-208-パケット形式 #25097

[[PageNavi(internal24-navi)]]

{{{ comment
h2w-title:パケット形式
}}}
 

= パケット形式 = #SECTION05130000000000000000

全ての送受信データは、パケットに分割しsk_buffという構造体に詰めて管理する。各パケットは一つのデータバッファのみを管理する。

下図はTCPのパケットの場合の例である。バッファの領域、パケットしての有効領域、各プロトコル用のヘッダを指すポインタを保有している。

 [[Embed(internal24-images:img81.gif)]]
 

パケットの複製が必要な場合は、ヘッダ部分のみコピーしデータ領域は共有し、無駄にメモリ/CPU時間を消費しないように考慮されている。データ領域のケツにはそのデータ領域の参照数を保有している。

 [[Embed(internal24-images:img82.gif)]]
 

パケットがプロトコル階層を通っていく間に、データのコピーが発生しないように考慮された構造である。

 [[Embed(internal24-images:img83.gif)]]
 

sk_buffは下図のようにキューイングされる。ソケット(sock構造体)とネットワークドライバ管理構造体(net_device構造体)の両方に同時にリンクされることもある。

受信データはsock構造体のrecive_queueに溜められる。recv処理はこのrecive_queueからパケットを取り出すことをいう。

送信データはsock構造体のwrite_queueに溜められる。この送信データはそのうちネットワークドライバ管理構造体(net_device構造体)にリンクし直され、パケット内のデータはマシンの外へ送出される。

 [[Embed(internal24-images:img84.gif)]]
 

----

''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1

[[PageNavi(internal24-navi)]]