前の記事では、 IPアドレスとサブネットマスクを使うことで、 通信相手が自分と同じネットワークにいるか判断できる ことを学びました。
たとえば、次の2台が同じ 192.168.1.0/24 ネットワークに存在するとします。
PC-Aはサブネットマスクを使って、 PC-Bが同じネットワークにいることを判断できます。
しかし、ここで問題があります。
でもEthernetで送信するために必要な MACアドレスが分からない。
前の記事で学習したとおり、 Ethernetフレームを送信するには 宛先MACアドレスが必要です。
そこで利用される仕組みが ARP(Address Resolution Protocol)です。
ARPという言葉を覚えるだけではなく、 「IPアドレスは分かっているがMACアドレスが分からないとき、 ARP RequestとARP ReplyによってMACアドレスを調べる」 という通信の流れを説明できる状態を目指します。
ARPとは?
ARP(Address Resolution Protocol)は、 IPv4ネットワークにおいて、 同一リンク上で通信するために必要なMACアドレスを、 IPアドレスを手がかりに調べる仕組み です。
192.168.1.20
BB:BB:BB:BB:BB:BB
つまり初学者の段階では、
と理解しておけばOKです。 ただし、ARPが使われる範囲や別ネットワークへの通信では 少し注意点があるため、この記事で順番に確認します。
なぜIPアドレスだけでは通信できないのか
PC-AがPC-BへIPパケットを送りたいとします。
IP:192.168.1.10
MAC:AA-AA-AA-AA-AA-AA
IP:192.168.1.20
MAC:BB-BB-BB-BB-BB-BB
IPレベルでは、 宛先は 192.168.1.20 だと分かっています。
しかし、Ethernetで実際にフレームを送信する場合は、 次のような情報が必要です。
この 「???」を調べるためにARPが必要 になります。
ARPの基本的な流れ
ARPによるMACアドレス解決は、 大きく次の4ステップで考えると分かりやすくなります。
すでにIPアドレスとMACアドレスの対応を 知っていないか確認します。
分からない場合、 LAN内へ「このIPを持っている人は誰?」と問い合わせます。
該当する端末が 自分のMACアドレスを返します。
判明した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テーブルには存在しません。
STEP 2:ARP Requestをブロードキャストする
相手のMACアドレスが分からない場合、 PC-Aは ARP Request を送信します。
内容を人間の言葉で表すと、 次のようなイメージです。
しかし、この時点では 192.168.1.20のMACアドレスが分かりません。
そのため、 特定のMACアドレス宛てには送れません。
そこでARP Requestでは、 Ethernetの ブロードキャストMACアドレス を利用します。
同じブロードキャストドメイン内の端末へ届ける
これは前のMACアドレスの記事で学習した ブロードキャストMACアドレスです。
ARP RequestはLAN内の端末へ届く
ARP Requestを受信したスイッチは、 ブロードキャストフレームを 同一VLAN内の他のポートへ転送します。
192.168.1.20
192.168.1.30
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は通常、 問い合わせ元のMACアドレスがすでに分かっているため、 ユニキャストで返すことができます。
相手のMACが不明なので
ブロードキャスト
問い合わせ元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は、
という対応を把握できました。
MACアドレスが分かったら実際のデータを送信する
ARPによるMACアドレス解決が完了すると、 ようやく本来送りたかったデータを Ethernetフレームとして送信できます。
ここまでを一連の流れにすると、
となります。
IPアドレスで通信相手を識別し、 サブネットマスクで同一ネットワークか判断し、 ARPで必要なMACアドレスを取得し、 Ethernetで実際にフレームを送信します。
別ネットワークの相手にもARPするの?
ARPで特に間違えやすいのが、 別ネットワークへの通信です。
PC-Aからインターネット上のWebサーバーへ通信するとします。
Webサーバーは同じLANには存在しません。
そのためPCは、 Webサーバー自身のMACアドレスをARPで調べるのではなく、 最初にフレームを渡すデフォルトゲートウェイのMACアドレス を調べます。
最終目的地
最初のL2転送先
ARPは、そのEthernetリンク上で次に通信する相手の MACアドレスを調べるために使われます。 別ネットワークへの通信では、 通常デフォルトゲートウェイ側のMACアドレスが必要になります。
ここで実際に動かしてみよう:ARP通信シミュレーター
ARP Requestから実際のEthernet通信までを、 順番に動かして確認してみましょう。
ARP Resolution Simulator
ARPテーブルを確認
PC-Aは192.168.1.20に対応するMACアドレスを ARPテーブルから探します。 今回は未登録なのでARP Requestが必要です。
理解度チェック:誰のMACアドレスをARPで調べる?
通信相手の位置によって、 ARPで調べる対象が変わります。
下の通信パターンを選んで確認してください。
相手PCのMACアドレス
相手が同じIPネットワークに存在するため、 Ethernetで直接送信する相手PCのMACアドレスを ARPによって調べます。
ARPテーブルはPCから確認できる
実際のWindowsやLinuxでは、 端末が保持しているARP・近隣情報を確認できます。
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の場合
$ ip neigh
Linuxでは現在、 ip neigh コマンドを使って近隣テーブルを確認する方法が一般的です。
ARPはIPv4で使用される仕組みです。 IPv6ではNeighbor Discovery(ND)など、 ICMPv6を利用した別の仕組みが使用されます。 初級ではまずIPv4のARPを理解すれば十分です。
ARPを理解するとネットワーク障害の切り分けにも役立つ
ARPは実際のネットワーク運用でも重要です。
同一LANの相手へ通信できない場合、 ARPテーブルにMACアドレスが登録されるか確認できます。
ゲートウェイのMACアドレスを正常に解決できているか 確認することがあります。
ARP・近隣テーブルを確認すると、 現在どのIPとMACが対応しているか調査できます。
ARPを理解したら「名前からIPアドレスを調べる仕組み」へ進もう
ここまでで、 次の関係を理解できました。
しかし、普段Webサイトを見るとき、 私たちは
のような名前を入力します。
通常、ユーザーがWebサイトへアクセスするときに WebサーバーのIPアドレスを直接覚えているわけではありません。
そこで使われるのが、 次に学習する DNS(Domain Name System)です。
確認問題:ARPの仕組みを理解できたか確認しよう
最後に3問の確認問題へ挑戦しましょう。
ARPの主な役割として正しいものはどれですか?
ARPはIPv4通信において、 同一リンク上の通信で必要となるMACアドレスを IPアドレスから調べるために利用されます。
ARP Requestで使われるEthernet宛先MACアドレスとして代表的なものはどれですか?
相手のMACアドレスが分からないため、 ARP RequestではEthernetのブロードキャストMACアドレス FF:FF:FF:FF:FF:FFが利用されます。
PCから別ネットワークのWebサーバーへ通信する場合、 PCがARPで調べるMACアドレスとして一般的なのはどれですか?
Webサーバーは別ネットワークに存在するため、 最初のEthernet区間では デフォルトゲートウェイへフレームを渡します。 そのためゲートウェイのMACアドレスを解決します。
3問に挑戦してみましょう。
まとめ
今回は、ARPによってIPアドレスからMACアドレスを調べる仕組みを解説しました。
ARPはIPv4ネットワークで IPアドレスから必要なMACアドレスを調べる ために利用される
MACアドレスがARPテーブルにない場合、 ARP Requestを送信する
ARP Requestでは相手MACが分からないため、 ブロードキャストが利用される
該当する端末は ARP Replyによって 自分のMACアドレスを知らせる
別ネットワークへの通信では、 通常ARPで デフォルトゲートウェイのMACアドレス を調べる
次は「DNSとは?名前解決の仕組みを理解する」を学びましょう
ARPではIPアドレスを手がかりにMACアドレスを調べました。 しかし普段Webサイトへアクセスするとき、 私たちはIPアドレスではなくドメイン名を利用します。 次は「www.example.com」のような名前から IPアドレスを調べるDNSの仕組みを学習します。
次のレッスンへ進む →
