いわりょのBlog

IT関連で学んだことを書いていきます。

ネットワーク基礎学習③ ARP

ARPとは

概要

ARP(Address Resolution Protocol)とは、IPアドレス」を元に「MACアドレス」が得られるプロトコルのこと。

なぜ ARPが必要か。

そもそもデータ通信を行うためには、以下の4つのアドレスが必要です。

  1. 送信元MACアドレス
  2. 宛先MACアドレス
  3. 送信元IPアドレス
  4. 宛先IPアドレス

f:id:Ryo10Leo:20200420220253p:plain

ネットワーク内のIPアドレス可変(住所で言うと引越可)なもので、 MACアドレス不変(住所で言うとそこに住む人)であるため、データ送信先の場所と、その場所にいるものがデータを受け取って欲しい機器であることが保証されている必要があります。

よって、「IPアドレス」は最終的なデータの送り先を「MACアドレス」はどの機器に伝送するかを識別するために必要だということです。

ARPリクエスト・ARPリプライ・アドレス解決

f:id:Ryo10Leo:20200420222338p:plain

宛先のMACアドレスを知るためには、まず「ブロードキャスト通信」でネットワーク内の全てのホストに「ARPリクエス」を投げます。例えるなら、館内放送で「どこどこにお住まいの○○さんいますかー?」と全体に聞かれてる感じですね。

あまり詳しく説明しませんが、ARPリクエストのフレームの中身はこんな感じ↓
f:id:Ryo10Leo:20200420225423p:plain

次に「ARPリプライ」ですが、、、、

f:id:Ryo10Leo:20200420224354p:plain

もしネットワーク内に、 IPアドレスに対応したホストがあれば、そのホストは自分のMACアドレスを格納した「ARPリプライ」を「ユニキャスト」で返します。
ホストCのように無関係の場合は、ARPリクエストをそのまま破棄します。

フレームの中身は、こんな感じ↓↓

f:id:Ryo10Leo:20200420230003p:plain

ブロードキャスト、ユニキャストの説明は以下の記事で解説してます。↓

ryo10leo.hatenablog.com


上記のようにARPの一連の動作によってMACアドレスを認識することを「アドレス解決」といいます。


ちなみに、先ほど紹介した動作は、同じセグメント内での動作になります。

インターネットを個々のネットワークに分割していった時の、一つ一つの「部分=ネットワーク」のことをセグメントと呼びます。

別セグメントのMACアドレスを知る

先に説明すると、ARPはセグメントごとに発生します。

例えば、ルーター(デフォルトゲートウェイ)を経由して、別のネットワーク(セグメント)にあるホストの MACアドレスを知りたい場合は以下のような動作になります。

f:id:Ryo10Leo:20200420233850p:plain

まずセグメントAの中で、ARPリクエストを投げます。

f:id:Ryo10Leo:20200420234204p:plain

セグメントAにない場合は、ルーター(デフォルトゲートウェイ)がルーター自身のMACアドレスARPリプライで返します。
これによってホストAは、セグメントBにあるホストに送信したい場合は、ルーターにデータを送信すればよくなります。(通常はセグメント内に目的のホストがなければ、デフォルトゲートウェイにデータがいくようにルーティングされています。)

f:id:Ryo10Leo:20200420234949p:plain

その後そのルーターが、「セグメントB」にARPリクエストを流し、宛先APアドレスから宛先のMACアドレスを調べます。

f:id:Ryo10Leo:20200420235618p:plain

宛先のホストが見つかれば、セグメントAの時と同様に、ARPリプライをルーターに返します
これによってルーターから目的のホストへデータを送信することができるようになりました。

このようにデータを送信する際に、経由するセグメントが増えれば増えるほど、セグメントごとにARPをすることになります。