下位レイヤがIPパケットを受信すると、IPプロトコルスタック中の ip_rcv関数が呼び出される。
ip_rcv関数は、IPパケットのヘッダ整合性チェックや、自ホストに対するIPパケットか転送しなければならないIPパケットで あるかの判定を行う(ip_route_input関数)。その後IP拡張オプションがあれば そのオプションに対する処理(ip_option_compile関数)なども行う。
IPパケットが自ホスト宛であった場合、ip_rcv関数はip_local_deliver関数を 呼び出す。(マルチキャストの場合はip_mr_input関数のこともある)ip_local_deliver関数は、分割(フラグメント化)されたパケットであれば、すぐには上位レイヤに上げずにこの関数内でIPパケットの復元(リアセンブル)を行う(ip_defrag関数)。その後、IPヘッダ内のプロトコルIDをチェックし、プロトコルIDに対応する 上位レイヤ(ICMP, UDP, TCPなど)にIPパケットを上げる (inet_protocolテーブルを検索し、上位プロトコルスタックの 受信関数を呼び出す)。
IPパケットを覗きみるためのrawアクセス用socketがあれば、受信IPパケットを 複製(skb_clone関数)し、raw_rcv関数も呼び出す。
(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST