- ベストアンサー
NICを2枚さしたときのパケットの流れ
こんにちわ。 1つのPCに2枚のNICを挿して、AとBのネットワークにつなげています。 デフォルトゲートウェイはAのネットワークのみを指定しています。 で、Bのネットワーク向けのFTPなどをしてもちゃんとBの先のサーバに通信できているのですが、 このときのパケットは、どういう動きというか流れをしているのでしょうか。 Aのルータが受け取って、これはBのルータ向けだよとPCに戻して、 PCがB用のNICを見つけて、Bのルータに向けてパケットを出すのでしょうか? あまりに初心者ですいません。。 よろしくおねがいします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
OSがルーティングテーブルを見て、送信先のIPアドレスから送信に使用するNICを決定します。 コマンドプロンプトから、route printを実行するとルーティングテーブルを参照可能です。 質問者のPCのように、複数のネットワークに足を出している形態のことを、 一般にマルチホーミングと呼びます。 実際にマルチホームしているPCのルーティングテーブルの例ですが、こんな感じです。 192.168.1.0/24と192.168.168.0/24にマルチホームしています。 自分自身のIPアドレスは、192.168.1.129、192.168.168.1です。 デフォルトゲートウェイは192.168.1.1です。 Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.129 1 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.1.0 255.255.255.0 192.168.1.129 192.168.1.129 1 192.168.1.129 255.255.255.255 127.0.0.1 127.0.0.1 1 192.168.1.255 255.255.255.255 192.168.1.129 192.168.1.129 1 192.168.168.0 255.255.255.0 192.168.168.1 192.168.168.1 1 192.168.168.1 255.255.255.255 127.0.0.1 127.0.0.1 1 192.168.168.255 255.255.255.255 192.168.168.1 192.168.168.1 1 224.0.0.0 240.0.0.0 192.168.1.129 192.168.1.129 1 224.0.0.0 240.0.0.0 192.168.168.1 192.168.168.1 1 255.255.255.255 255.255.255.255 192.168.1.129 192.168.1.129 1 255.255.255.255 255.255.255.255 192.168.168.1 192.168.168.1 1 全ての通信の宛先IPアドレスは、この行のいずれか1つに必ず合致します。 合致するかどうか、比較する際の基準は、longest matchと呼ばれます。 比較の方法は、若干専門的な説明になりますが、以下のとおりです。 宛先IPとNetmaskを、数学でANDと呼ばれる計算方法で計算します。 得られた値とNetwork Destinationが一致していれば、その行は合致する候補になります。 複数の行が合致候補になった場合、Netmaskが一番大きい行が最終的な合致結果となります。 Netmaskも同じ大きさの場合は、Metricが小さいほうが最終的な合致結果となります。 最終的に合致する行が見つかったら、Interfaceのところで示されているNICを使って送信します。 また、Gatewayのところで示されているIPアドレスが自分自身のものと同一の場合は、 自分が宛先への送信について責任を持って、直接送信を行います。 そうでない場合は、Gatewayに転送することで、以降の送信については任せる形になります。 より詳しく知りたい場合は参考URLをご覧ください。 いくつか具体例を挙げて説明します。 例1:宛先IP=192.168.1.2の場合 もっとも長く一致する行は Network Destination Netmask Gateway Interface Metric 192.168.1.0 255.255.255.0 192.168.1.129 192.168.1.129 1 なので、192.168.1.129のインタフェースが選択されます。 送信の際使用する送信元アドレスは、選択されたインタフェースのアドレスになります。 ゲートウェイは自分自身のIPなので、宛先IPアドレスに対して自分自身が直接送信を行います。 例2:宛先IP=192.168.168.2の場合 もっとも長く一致する行は Network Destination Netmask Gateway Interface Metric 192.168.168.0 255.255.255.0 192.168.168.1 192.168.168.1 1 なので、192.168.168.1のインタフェースが選択されます。 送信の際使用する送信元アドレスは、選択されたインタフェースのアドレスになります。 ゲートウェイは自分自身のIPなので、宛先IPアドレスにに対して自分自身が直接送信を行います。 例3:宛先IP=192.168.2.1の場合 もっとも長く一致する行は、 Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.129 1 なので、192.168.1.129のインタフェースが選択されます。 送信の際使用する送信元アドレスは、選択されたインタフェースのアドレスになります。 ゲートウェイは自分自身のIPではないので、192.168.1.1に対して送信を行い、 あとは192.168.1.1に任せます。 このルーティングテーブルは、管理者権限を持っているユーザであれば、 行を追加したり削除したりすることが可能です。 このルーティングテーブルに基づいて、送信インタフェースとゲートウェイを決定した後は、 送信に使われるメディアに合わせてアドレス解決等の処理を行った上で、 実際の送信が行われます。 ほとんどの場合、メディアはイーサネットだと思いますが、 その場合、MACアドレスが送信に必要なので、必要に応じてARPを使い、 相手のMACアドレスを調べた後、送信するということになります。 調べた結果はコマンドプロンプトでarp -aを実行すると分かるように、 一定時間記憶され、再利用します。 -------------------------------------------- 整理すると、 分かっているのは宛先IPアドレスのみの状態から、ルーティングテーブルを見て、 ・使用するインタフェース ・送信元IPアドレス ・直接相手に送るか、Gatewayに転送するか の3つを決定します。 その後、直接相手に送る場合は相手のMACアドレス、 Gatewayに転送する場合はGatewayのMACアドレスをARPで調べ、 NICからイーサネットに送り出す、という流れになります。
その他の回答 (2)
- anmochi
- ベストアンサー率65% (1332/2045)
これは、PCがB用のNICに対してパケット送信するね。仮に次の構成を考えてみる どこぞのWebサーバー(IP不明) | Aのルータ(192.168.1.254/24) | 君のパソコン ここより上がAのNIC、下がBのNIC | B用のFTPサーバ(192.168.2.200/24) ここで、君のパソコンのIPアドレスを、Aが192.168.1.1/24、Bが192.168.2.1/24としよう。FTPサーバのIPアドレスは簡単のために192.168.2.200とする。 まず、複数送信先候補がある場合、どこに投げるかというのは「ルーティング」と言う。 君のパソコンがB用のFTPサーバに接続する際、システムはまず、相手のIPアドレスのサブネットを特定する。と言っても、相手が設定しているサブネットがわかるわけではないので、自分の中に登録されているものを使う。 ルート先のサブネットと一致すれば、パソコンはそこに向かってパケットを送信する。ここでいうルート先とは、AのNICとBのNICだ。今回、FTPサーバはそのままBのNICのサブネットと一致するので、Bに送信する。 どこぞのWebサーバにデータを投げる際、どこに投げて良いか分からないので、デフォルトゲートウェイに投げる。実際、デフォルトゲートウェイとは、先ほど言ったルーティングのルールとして「全ての条件(あて先)に該当する」ルート先、と言える。 これが、制的ルーティングとデフォルトゲートウェイのお話だ。 ほかにも、動的ルーティングというものもあるけど割愛。 制的ルーティングにはルーティングテーブルという物を用いる。このテーブルを見るには、DOS窓を開いて、 C:\>route print とすると良い。
お礼
丁寧なご回答ありがとうございました。 当方はアプリのことしかわからないので、大変勉強になりました。
- ann_dv
- ベストアンサー率43% (528/1223)
BのサーバはBのNICに割り当てているIPと同一セグメントにあるんですよね? 例えば、Bに割り当てたIPが192.168.0.1、サブネットマスクが255.255.255.0であった場合、192.168.0.2~254のアドレス宛ての通信はルータを介しませんのでBのNICから直接宛先のサーバへ届きます。
お礼
すばやい回答、ありがとうございました。 またよろしくお願いいたします。
お礼
想像を絶する丁寧なご回答、大変ありがとうございました。 内容もわかりやすく、まさに現在知りたかったことがよく理解でき、とても勉強になりました。 ご紹介いただいたURLのバックナンバーを読んで勉強したいと思います。 本当にありがとうございました。