Kodama's home / tips.

IPパケットが出て行くとき

Ether ネットでつながれている(同じセグメントとして直接繋がれている) コンピュータ間で どのようにパケットをやりとりしているのか概説します.

物理的に 10BASE-T などで接続している場合, ネットワークインターフェース同士は MACアドレスによって互いを認識してイーサネットパケットを送りあいます. IP パケットはこの イーサネットパケットにカプセル化して送られます. この過程をコンピュ−タの気持になって手順を追ってみて下さい.

送信側のコンピュ−タでパケットを投げる際に 宛先アドレスのネットワ−ク部分を調べ 次の2種類の動作を選択しています.

  1. パケットを直に投げる. (同一ネットワ−クに属する)
  2. ル−タに投げる. (同一ネットワ−クに属さない)
設定は route か netstat -r で見る事ができます.

これは, 送信側のコンピュータが相手のIPアドレスだけでなく, ネットマスク, ネットワークアドレス, ルータのIPアドレスを知っているという意味です. (更に, ブロードキャスト IP アドレスを知っている.)

投げ先が決まったら ARP(Address Resolution Protocol)で宛先のMACアドレスを取得します. まず, イーサネットのブロードキャストパケット (受け取りMACアドレス指定部分が FF:FF:FF:FF:FF:FF)に 要求元のIPアドレスとMACアドレス, MACアドレスを知りたいIPアドレスを入れて送ります. ネットワーク上の(同じセグメントの)全てのマシンが このパケットを受け取り, 自分のIPアドレスと比較します. もし一致すれば自分のMACアドレスを入れたARP応答パケットを要求元に送ります. (取得した結果は arp -a コマンドで見ることができます.)

送信側は IPパケットを イーサパケット(デ−タリンクレイヤのフレ−ム)に カプセル化して(詰め込んで)相手先ノ−ドに送り込みます. (ここは Etherレベル/第2層のはなし)

受け取り側が Etherパケットを受け取ったら, IP パケット内の宛先IPアドレスと自分のIPアドレス宛又は IPブロ−ドキャストアドレスと比較し, 一致していれば IPレベルで受け取ります. (つまり Ether レベルでの ブロ−ドキャスト でむりやり パケットを受け取らせても, IP レベルで捨てられる.) (受信側はブロードキャスト IP アドレスを知っている必要があります.)

ついでに云うとインタ−フェ−スを promiscuous モ−ドにすると Ether レベルではすべてのパケットを受け取ってしまいます. tcpdump 等の動作時はこのモ−ドになってます.


Kodama's home / tips.