Show page source of internal22-260-送信処理時のルーティング #25338

[[PageNavi(internal22-navi)]]

{{{ comment
h2w-title:送信処理時のルーティング
}}}
 

= 送信処理時のルーティング = #SECTION07520000000000000000

あるパケットを目的のホストへ送信するとき、以下のことを解決しなければならない。

  *  どのネットワークインターフェイスから送信すべきか?
  *  ホストが同じネットワーク上にないとき、どのゲートウェイマシンに	対してパケットを送信すべきか?

パケット送信時にはソケットが持つルーティング情報(rtable構造体)とパケットのリンクを行い、その後そのルーティング情報に従い、送信処理を行う。

ルーティング情報検索高速化のため、ソケットのコネクション確立時、またはIPパケット送信(ip_queue_xmit関数)時にルーティング情報(rtable構造体)を入手(ip_route_output関数)し、ソケットにリンクしておく。

  1.  ip_route_output関数は、まずルーティングキャッシュ(rt_hash_table)に	目的とするルーティングテーブル(rtable)が登録されていないか検索する。	ルーティングキャッシュは、発信元アドレス/送信先アドレス/	インターフェイス情報を元にキャッシュされている。
  1.  ルーティングキャッシュ(rt_hash_table)に目的とするルーティング情報が	キャッシュされていない場合、大元のルーティングテーブル	(フォワーディングインフォメーションベース - fib -と呼んでいる)	からルーティング情報を引き出す操作(ip_route_output_slow関数)	を行う。 

    1.  発信アドレスを元に、発信元となるアドレスに対応する	ネットワークインターフェイスが存在するか確認する(ip_dev_find関数)。	(local_tableを検索)。
    1.  fibテーブルを検索(fib_lookup関数)し、目的のアドレスへ送信	するための経路情報を求める。fib_lookup関数はlocal_table,	main_tableの両方を検索する。
    1.  fibテーブルから得た情報を元に、ゲートウェイ情報、MTU情報、	ウィンドウサイズ情報、RTT情報を反映させる(rt_set_nexthop関数)。
    1.  経路情報に従い、出力関数としてip_output関数、	ip_mc_output関数(マルチキャスト時)、	ip_local_deliver関数(ローカルマシンへの配送時)を登録する。
    1.  fibテーブル上に、ルーティング情報が見つかった場合、	rtable構造体を一つ確保(dst_alloc関数)し、ルーティング	キャッシュ(rt_hash_table)に登録(rt_intern_hash関数)する。 

 [[Embed(internal22-images:img89.gif)]]
 

----

''(NIS)HirokazuTakahashi [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1

[[PageNavi(internal22-navi)]]