ARPとは?IPアドレスからMACアドレスを調べる仕組みを図解

  • URLをコピーしました!

前の記事では、 IPアドレスとサブネットマスクを使うことで、 通信相手が自分と同じネットワークにいるか判断できる ことを学びました。

たとえば、次の2台が同じ 192.168.1.0/24 ネットワークに存在するとします。

💻 PC-A 192.168.1.10
💻 PC-B 192.168.1.20

PC-Aはサブネットマスクを使って、 PC-Bが同じネットワークにいることを判断できます。

しかし、ここで問題があります。

PC-BのIPアドレスは「192.168.1.20」と分かっている。
でもEthernetで送信するために必要な MACアドレスが分からない。

前の記事で学習したとおり、 Ethernetフレームを送信するには 宛先MACアドレスが必要です。

そこで利用される仕組みが ARP(Address Resolution Protocol)です。

🌐 NETWORK BEGINNER

この記事はネットワーク初級講座の一部です。 学習順を確認したい場合は講座一覧から確認できます。

ネットワーク初級講座を見る →
LESSON GOAL この記事のゴール

ARPという言葉を覚えるだけではなく、 「IPアドレスは分かっているがMACアドレスが分からないとき、 ARP RequestとARP ReplyによってMACアドレスを調べる」 という通信の流れを説明できる状態を目指します。

目次

ARPとは?

ARP(Address Resolution Protocol)は、 IPv4ネットワークにおいて、 同一リンク上で通信するために必要なMACアドレスを、 IPアドレスを手がかりに調べる仕組み です。

KNOW IPアドレス 192.168.1.20
→ ARP →
FIND MACアドレス BB:BB:BB:BB:BB:BB

つまり初学者の段階では、

ARP=IPアドレスからMACアドレスを調べる仕組み

と理解しておけばOKです。 ただし、ARPが使われる範囲や別ネットワークへの通信では 少し注意点があるため、この記事で順番に確認します。

なぜIPアドレスだけでは通信できないのか

PC-AがPC-BへIPパケットを送りたいとします。

💻 PC-A IP:192.168.1.10 MAC:AA-AA-AA-AA-AA-AA
💻 PC-B IP:192.168.1.20 MAC:BB-BB-BB-BB-BB-BB

IPレベルでは、 宛先は 192.168.1.20 だと分かっています。

しかし、Ethernetで実際にフレームを送信する場合は、 次のような情報が必要です。

DESTINATION MAC ???
SOURCE MAC AA-AA…
DATA IP Packet

この 「???」を調べるためにARPが必要 になります。

ARPの基本的な流れ

ARPによるMACアドレス解決は、 大きく次の4ステップで考えると分かりやすくなります。

01 ARPテーブルを確認

すでにIPアドレスとMACアドレスの対応を 知っていないか確認します。

02 ARP Request

分からない場合、 LAN内へ「このIPを持っている人は誰?」と問い合わせます。

03 ARP Reply

該当する端末が 自分のMACアドレスを返します。

04 Ethernet通信

判明したMACアドレスを使って Ethernetフレームを送信します。

STEP 1:まずARPテーブルを確認する

PCは通信するたびに必ずARP Requestを送るわけではありません。

過去のARP通信などによって取得した IPアドレスとMACアドレスの対応情報を、 ARPテーブル(ARPキャッシュ) として一定期間保持します。

IPアドレス MACアドレス
192.168.1.1 11-11-11-11-11-11
192.168.1.30 CC-CC-CC-CC-CC-CC

今回通信したいのは 192.168.1.20 ですが、ARPテーブルには存在しません。

192.168.1.20 ARP Tableを確認 未登録 → ARP Requestへ

STEP 2:ARP Requestをブロードキャストする

相手のMACアドレスが分からない場合、 PC-Aは ARP Request を送信します。

内容を人間の言葉で表すと、 次のようなイメージです。

ARP REQUEST 「192.168.1.20を持っている端末は誰ですか?」

「私は192.168.1.10 / AA-AA-AA-AA-AA-AAです」

しかし、この時点では 192.168.1.20のMACアドレスが分かりません。

そのため、 特定のMACアドレス宛てには送れません。

そこでARP Requestでは、 Ethernetの ブロードキャストMACアドレス を利用します。

DESTINATION MAC FF:FF:FF:FF:FF:FF

同じブロードキャストドメイン内の端末へ届ける

これは前のMACアドレスの記事で学習した ブロードキャストMACアドレスです。

ARP RequestはLAN内の端末へ届く

ARP Requestを受信したスイッチは、 ブロードキャストフレームを 同一VLAN内の他のポートへ転送します。

💻 PC-A 192.168.1.10
🔀 Switch Broadcast
→ 💻 PC-B
192.168.1.20
→ 💻 PC-C
192.168.1.30
→ 🖨️ Printer
192.168.1.40

PC-B、PC-C、プリンターなど、 同じブロードキャストドメイン内の端末がARP Requestを受信します。

しかし、問い合わせられているIPアドレスは 192.168.1.20です。

そのため、該当するPC-Bが応答します。

STEP 3:該当端末がARP Replyを返す

自分のIPアドレスが問い合わせられていると分かったPC-Bは、 PC-Aへ ARP Reply を返します。

ARP REPLY 「192.168.1.20は私です」

「私のMACアドレスはBB-BB-BB-BB-BB-BBです」

💻 PC-B BB-BB-BB…
ARP Reply →
💻 PC-A AA-AA-AA…

ARP Replyは通常、 問い合わせ元のMACアドレスがすでに分かっているため、 ユニキャストで返すことができます。

REQUEST ARP Request

相手のMACが不明なので
ブロードキャスト

REPLY ARP Reply

問い合わせ元MACが分かるので
通常ユニキャスト

STEP 4:取得したMACアドレスをARPテーブルへ保存する

PC-AはARP Replyを受信すると、 IPアドレスとMACアドレスの対応をARPテーブルへ保存します。

IPアドレス MACアドレス
192.168.1.1 11-11-11-11-11-11
192.168.1.20 BB-BB-BB-BB-BB-BB
192.168.1.30 CC-CC-CC-CC-CC-CC

これでPC-Aは、

IPv4 192.168.1.20
MAC BB-BB-BB-BB-BB-BB

という対応を把握できました。

MACアドレスが分かったら実際のデータを送信する

ARPによるMACアドレス解決が完了すると、 ようやく本来送りたかったデータを Ethernetフレームとして送信できます。

DESTINATION MAC BB-BB-BB-BB-BB-BB
SOURCE MAC AA-AA-AA-AA-AA-AA
DESTINATION IP 192.168.1.20
DATA 実際の通信データ

ここまでを一連の流れにすると、

同一NW判定 IP + Subnet Mask
ARP Request IP → MACを問い合わせ
ARP Reply MACを取得
Ethernet送信 宛先MACを指定

となります。

ここまでの初級記事がつながる重要ポイント

IPアドレスで通信相手を識別し、 サブネットマスクで同一ネットワークか判断し、 ARPで必要なMACアドレスを取得し、 Ethernetで実際にフレームを送信します。

別ネットワークの相手にもARPするの?

ARPで特に間違えやすいのが、 別ネットワークへの通信です。

PC-Aからインターネット上のWebサーバーへ通信するとします。

💻 PC 192.168.1.10
📡 Router 192.168.1.1
🌐 Internet
🖥️ Web Server 別Network

Webサーバーは同じLANには存在しません。

そのためPCは、 Webサーバー自身のMACアドレスをARPで調べるのではなく、 最初にフレームを渡すデフォルトゲートウェイのMACアドレス を調べます。

DESTINATION IP Web Server

最終目的地

DESTINATION MAC Router

最初のL2転送先

ARPは「最終的な宛先MAC」を探すものではない

ARPは、そのEthernetリンク上で次に通信する相手の MACアドレスを調べるために使われます。 別ネットワークへの通信では、 通常デフォルトゲートウェイ側のMACアドレスが必要になります。

ここで実際に動かしてみよう:ARP通信シミュレーター

ARP Requestから実際のEthernet通信までを、 順番に動かして確認してみましょう。

INTERACTIVE LAB

ARP Resolution Simulator

ARP
💻 PC-A IP 192.168.1.10 MAC AA-AA
🔀 Switch
💻 PC-B IP 192.168.1.20 MAC BB-BB
1 ARP確認
2 Request
3 Reply
4 送信
STEP 1

ARPテーブルを確認

PC-Aは192.168.1.20に対応するMACアドレスを ARPテーブルから探します。 今回は未登録なのでARP Requestが必要です。

ARP Table:192.168.1.20 → 未登録

理解度チェック:誰のMACアドレスをARPで調べる?

通信相手の位置によって、 ARPで調べる対象が変わります。

下の通信パターンを選んで確認してください。

ARP TARGET

相手PCのMACアドレス

相手が同じIPネットワークに存在するため、 Ethernetで直接送信する相手PCのMACアドレスを ARPによって調べます。

ARPテーブルはPCから確認できる

実際のWindowsやLinuxでは、 端末が保持しているARP・近隣情報を確認できます。

Windowsの場合

Windows
C:\> arp -a

環境によっては、たとえば次のような対応関係を確認できます。

Internet Address      Physical Address
192.168.1.1           11-11-11-11-11-11
192.168.1.20          bb-bb-bb-bb-bb-bb

Linuxの場合

Linux
$ ip neigh

Linuxでは現在、 ip neigh コマンドを使って近隣テーブルを確認する方法が一般的です。

IPv6ではARPを使わない

ARPはIPv4で使用される仕組みです。 IPv6ではNeighbor Discovery(ND)など、 ICMPv6を利用した別の仕組みが使用されます。 初級ではまずIPv4のARPを理解すれば十分です。

ARPを理解するとネットワーク障害の切り分けにも役立つ

ARPは実際のネットワーク運用でも重要です。

CASE 01 相手MACが取得できない

同一LANの相手へ通信できない場合、 ARPテーブルにMACアドレスが登録されるか確認できます。

CASE 02 デフォルトゲートウェイへ通信できない

ゲートウェイのMACアドレスを正常に解決できているか 確認することがあります。

CASE 03 IPとMACの対応がおかしい

ARP・近隣テーブルを確認すると、 現在どのIPとMACが対応しているか調査できます。

ARPを理解したら「名前からIPアドレスを調べる仕組み」へ進もう

ここまでで、 次の関係を理解できました。

ARP IPアドレス MACアドレス

しかし、普段Webサイトを見るとき、 私たちは

www.example.com

のような名前を入力します。

通常、ユーザーがWebサイトへアクセスするときに WebサーバーのIPアドレスを直接覚えているわけではありません。

「www.example.com」という名前から、 通信に必要なIPアドレスはどうやって調べるの?

そこで使われるのが、 次に学習する DNS(Domain Name System)です。

CURRENT ARP IP → MAC

確認問題:ARPの仕組みを理解できたか確認しよう

最後に3問の確認問題へ挑戦しましょう。

QUESTION 01

ARPの主な役割として正しいものはどれですか?

正解:B

ARPはIPv4通信において、 同一リンク上の通信で必要となるMACアドレスを IPアドレスから調べるために利用されます。

QUESTION 02

ARP Requestで使われるEthernet宛先MACアドレスとして代表的なものはどれですか?

正解:A

相手のMACアドレスが分からないため、 ARP RequestではEthernetのブロードキャストMACアドレス FF:FF:FF:FF:FF:FFが利用されます。

QUESTION 03

PCから別ネットワークのWebサーバーへ通信する場合、 PCがARPで調べるMACアドレスとして一般的なのはどれですか?

正解:C

Webサーバーは別ネットワークに存在するため、 最初のEthernet区間では デフォルトゲートウェイへフレームを渡します。 そのためゲートウェイのMACアドレスを解決します。

YOUR SCORE 0 / 3

3問に挑戦してみましょう。

まとめ

今回は、ARPによってIPアドレスからMACアドレスを調べる仕組みを解説しました。

01

ARPはIPv4ネットワークで IPアドレスから必要なMACアドレスを調べる ために利用される

02

MACアドレスがARPテーブルにない場合、 ARP Requestを送信する

03

ARP Requestでは相手MACが分からないため、 ブロードキャストが利用される

04

該当する端末は ARP Replyによって 自分のMACアドレスを知らせる

05

別ネットワークへの通信では、 通常ARPで デフォルトゲートウェイのMACアドレス を調べる

NEXT LESSON

次は「DNSとは?名前解決の仕組みを理解する」を学びましょう

ARPではIPアドレスを手がかりにMACアドレスを調べました。 しかし普段Webサイトへアクセスするとき、 私たちはIPアドレスではなくドメイン名を利用します。 次は「www.example.com」のような名前から IPアドレスを調べるDNSの仕組みを学習します。

次のレッスンへ進む
NETWORK BEGINNER

ネットワーク初級の学習一覧へ戻る

他のレッスンを確認したい場合は、 ネットワーク初級講座の一覧ページへ戻りましょう。

ネットワーク初級講座へ戻る
目次