最終更新
リンドくん
たなべ先生、ネットワークの勉強をしてるんですけど、ARPって何ですか?
IPアドレスとMACアドレスが関係してるみたいなんですが...
たなべ
ARPはAddress Resolution Protocolの略で、簡単に言うと「IPアドレスからMACアドレスを調べるための仕組み」なんだ。
ネットワーク通信では実はとても重要な役割を果たしているんだよ。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
インターネットや社内ネットワークでコンピュータ同士が通信する際、実は2種類のアドレスが使われていることをご存知でしょうか?
一つは皆さんもよく耳にするIPアドレス、もう一つはMACアドレスと呼ばれるものです。
これらのアドレスは異なる役割を持っており、ネットワーク通信を行うためには両方が必要になります。
しかし、自分たちが普段使っているのはIPアドレスだけです。Webサイトにアクセスする際も、他のコンピュータに接続する際も、IPアドレスを指定します。
では、MACアドレスはどうやって調べているのでしょうか?
その答えが、今回解説するARP(Address Resolution Protocol)という仕組みなのです。
ARPは、ネットワーク通信の裏側で静かに働き続けている、まさに縁の下の力持ちのような存在です。
この記事では、ネットワーク学習を始めたばかりの方でも理解できるよう、ARPとMACアドレス解決プロセスについて、基礎から丁寧に解説していきます。
リンドくん
そもそも、なぜアドレスが2種類も必要なんですか?1つじゃダメなんですか?
たなべ
それぞれのアドレスには異なる役割があるんだ。まず、その違いをしっかり理解しておくことが大切だよ。
IPアドレスは、ネットワーク上でコンピュータを識別するための論理的なアドレスです。
例えば、192.168.1.10のような形式で表され、以下のような特徴があります。
IPアドレスは、いわばインターネット上の住所のようなものです。郵便物を送る際に住所が必要なように、データを送信する際にはIPアドレスが必要になります。
一方、MACアドレスは、ネットワークインターフェースカード(NIC)に割り当てられた物理的なアドレスです。
例えば、00:1A:2B:3C:4D:5Eのような16進数の形式で表され、以下のような特徴があります。
MACアドレスは、ネットワーク機器の製造番号のようなものと考えるとわかりやすいでしょう。
では、なぜ両方のアドレスが必要なのでしょうか?理由は以下の通りです。
IPアドレスの役割 - 広域ネットワーク(インターネット)でのルーティングに使用され、データがどこに届くべきかを示します。
MACアドレスの役割 - ローカルネットワーク内での実際のデータ配送に使用され、物理的にどの機器に届けるかを特定します。
例えるなら、IPアドレスは「東京都渋谷区〇〇」という住所で、MACアドレスは「その建物の中の特定の部屋番号」といった関係です。
両方があることで、インターネット全体から特定の機器まで、確実にデータを届けることができるのです。
リンドくん
IPアドレスからMACアドレスを調べるって、具体的にどうやってるんですか?
たなべ
それがARPの出番なんだ!実際のプロセスを順番に見ていこう。とても論理的で面白い仕組みだよ。
ARPがMACアドレスを解決するプロセスは、以下のステップで行われます。
あるコンピュータ(送信元)が、特定のIPアドレスを持つコンピュータ(送信先)と通信したいとします。
しかし、送信先のMACアドレスが分からない場合、送信元はARPリクエストと呼ばれるメッセージをネットワーク全体にブロードキャスト(一斉送信)します。
ARPリクエストには、以下の情報が含まれています。
このメッセージは、ネットワーク内のすべての機器に届きます。
ブロードキャストされたARPリクエストを受け取った各機器は、そのメッセージを確認します。
もし自分のIPアドレスがリクエストで指定されているIPアドレスと一致すれば、その機器はARPリプライを送信元に返します。
ARPリプライには、以下の情報が含まれています。
この返信は、ブロードキャストではなく、ユニキャスト(特定の宛先への送信)で送信元にのみ届けられます。
送信元がARPリプライを受け取ると、そこに含まれる「IPアドレスとMACアドレスの対応関係」をARPテーブル(ARPキャッシュ)に保存します。
ARPテーブルは、過去に解決したIPアドレスとMACアドレスの対応を記録しておくための一時的なメモリです。
これにより、同じ宛先に再度通信する際には、ARPリクエストを送信せずに済むため、ネットワークの効率が向上します。
ARPテーブルは、ネットワーク通信の効率化に大きく貢献しています。
以下のような特徴があります。
実際に自分のコンピュータのARPテーブルを確認するには、以下のコマンドを使用します。
Windowsの場合
macOS / Linuxの場合
実行すると、以下のような形式で表示されます。
この表示から、どのIPアドレスがどのMACアドレスに対応しているかがわかります。
リンドくん
実際のネットワークでは、どんな場面でARPが使われるんですか?
たなべ
実は、君がWebサイトにアクセスしたり、ファイルをダウンロードしたりするほぼすべての通信の裏側でARPが動いているんだよ。具体例を見てみよう。
自分のコンピュータ(IPアドレス: 192.168.1.10)から、同じネットワーク内のWebサーバ(IPアドレス: 192.168.1.50)にアクセスする場合を考えてみましょう。
HTTPリクエストの準備 - ブラウザが「http://192.168.1.50」にアクセスしようとします
MACアドレスの確認 - システムはまず自分のARPテーブルを確認し、192.168.1.50のMACアドレスが登録されているかチェックします
ARPリクエストの送信(未登録の場合) - MACアドレスが分からなければ、ARPリクエストをブロードキャストします
ARPリプライの受信 - Webサーバが自分のMACアドレス(例: AA:BB:CC:DD:EE:FF)を返信します
データ送信 - 取得したMACアドレスを使って、HTTPリクエストをWebサーバに送信します
このプロセス全体は、ほんの数ミリ秒で完了します。自分たちが意識することはほとんどありませんが、裏側ではこのような処理が行われているのです。
同じネットワーク内ではなく、インターネット上のサーバ(例: www.example.com)にアクセスする場合はどうでしょうか?
この場合、直接相手のMACアドレスを調べることはできません。なぜなら、インターネット上の遠く離れたサーバは、同じローカルネットワーク内にいないからです。
そこで、以下のようなプロセスになります。
ゲートウェイ(ルータ)のMACアドレスを調べる - ARPを使って、自分のネットワークの出口であるルータのMACアドレスを取得します
ルータにデータを送信 - ルータのMACアドレス宛にデータを送り、後はルータに任せます
ルータが中継 - ルータがインターネット上でデータを次の中継地点に転送していきます
つまり、ローカルネットワーク内での通信にはARPが使われますが、インターネット通信では最初の一歩(ルータへの送信)でARPが使われるということです。
ARPは非常に便利な仕組みですが、セキュリティ上の弱点も持っています。
その一つがARPスプーフィングと呼ばれる攻撃です。
ARPスプーフィングとは、偽のARPリプライを送信して、他のコンピュータのARPテーブルを書き換える攻撃です。
これにより、通信内容を盗み見たり、改ざんしたりすることが可能になります。
例えば、攻撃者が「自分がルータです」という偽のARPリプライを送信すると、被害者のコンピュータは攻撃者にデータを送ってしまいます。
攻撃者はそのデータを盗み見た後、本物のルータに転送することで、通信を継続させることができるのです。
ARPスプーフィング対策としては、以下のような方法があります。
ネットワーク通信で問題が発生した際、ARPが原因となっていることがあります。
症状: 以前は通信できていたのに、突然通信できなくなった
原因: ARPテーブルに古い(間違った)MACアドレスが残っている
解決法: ARPキャッシュをクリアする
症状: 新しい機器と通信できない
原因: ARPテーブルのエントリ数が上限に達している
解決法: 不要なエントリを削除するか、システムを再起動する
症状: 通信が不安定になったり、接続できなくなったりする
原因: 同じIPアドレスを持つ機器が複数存在し、ARPの応答が混乱している
解決法: IPアドレスの重複を解消し、各機器に固有のIPアドレスを割り当てる
リンドくん
ARPって、普段意識しないけど、とても重要な仕組みなんですね!
たなべ
その通り!ネットワーク通信の基礎中の基礎だから、エンジニアを目指すならしっかり理解しておくことが大切なんだ。今日学んだことを、ぜひ実際に試してみてね。
この記事では、ARPとMACアドレス解決プロセスについて、基礎から詳しく解説してきました。
最後に、重要なポイントをおさらいしましょう。
ARPの役割
ARPの動作プロセス
実用的な知識
arp -aコマンドでARPテーブルを確認できますネットワーク技術は、実際に触れてみることで理解が深まります。
今回学んだARPの知識を土台に、さらに学習を進めていきましょう!