目次
ARPとは
ARP(Address Resolution Protocol)とはIPアドレスとMACアドレスを対応付けるためのプロトコルです。そして、IPアドレスとMACアドレスを対応付けることをアドレス解決と呼びます。ARPというプロトコルの名前の由来です。
ARPはイーサネットでIPパケットを転送するときに必要不可欠な大事なプロトコルです。
なぜMACアドレスも必要か?
TCP/IPの通信では、IPアドレスで宛先を指定しているのですが、なぜ、MACアドレスも必要なのでしょうか?
それは、IPだけでは最終的な宛先までデータを送り届けられないからです。IPには「0」「1」のビットを物理的な信号に変換して伝えていくような機能がありません。そこで、IPパケットをイーサネットやWi-Fiといったネットワークインタフェース層のプロトコルでカプセル化して、物理的な信号に変換して送り出さなければいけません。ネットワークインタフェース層プロトコルとして、イーサネットを利用しているときにIPパケットをイーサネットインタフェースから送り出すには、イーサネットヘッダを付加しなければいけません。
IPヘッダにはIPアドレスが必要です。そして、イーサネットヘッダにはMACアドレスが必要です。送信元IPアドレスと送信元MACアドレスはパケットを送信する機器のものなのでわかります。そして、TCP/IPの通信では必ずIPアドレスを指定するので、宛先IPアドレスは指定されたものを使えばよいです。あとは宛先MACアドレスが必要です。宛先IPアドレスに対応するMACアドレスを求めるためにARPがあります。
図で明示的に表していませんが、イーサネットインタフェースから送り出すときには、「0」「1」のデジタルデータを物理的な信号へ変換しています。
関連記事
「IPアドレスとMACアドレスの違い」、「なぜIPアドレスもMACアドレスも必要になるか」について以下の記事で詳しく解説しています。
「0」「1」のデジタルデータを物理的な信号に変換して転送するためによく利用するイーサネットおよび無線LAN(Wi-Fi)についての詳細は以下のリンクからご覧ください。
ARPの仕組み
ARPのアドレス解決の対象は同じネットワーク内のIPアドレスです。イーサネットインタフェースで接続されているPCなどの機器がIPパケットを送信するために宛先IPアドレスを指定したときに、自動的にARPの処理が行われます。ユーザはARPの動作について特に意識する必要はありませんが、ARPによってアドレス解決を行っているということはネットワークの仕組みを知る上でとても重要です。
ARPの動作の流れは、次のようになります。
- ARPリクエストをブロードキャスト
- ARPリクエストでIPアドレスに対応するMACアドレスを問い合わせる
- ARPリプライを返す
- 問い合わされたIPアドレスを持つホストがARPリプライでMACアドレスを教える
- ARPキャッシュを更新
- アドレス解決したIPアドレスとMACアドレスの対応をARPキャッシュに保存する
なお、ARPリクエストおよびARPリプライは、IPヘッダは付加せずイーサネットヘッダで直接カプセル化されます。
1.ARPリクエストで問い合わせ
IPアドレスを指定してIPパケットをイーサネットインタフェースから送り出すときに、まずARPリクエストを送信します。ARPリクエストの中身は「このIPアドレスのMACアドレスを教えてください」というものです。
ARPリクエストは同じネットワーク上のすべてのホストが受信するようにブロードキャストで送ります。ARPのアドレス解決は同じネットワークの中だけなのは、ブロードキャストを利用するからです。ブロードキャストは違うネットワークには転送されません。
なお、ARPリクエストはブロードキャストなので、同じネットワーク上のすべてのホストが受信しますが、問い合わせ対象のIPアドレス以外のホストはARPリクエストを受信しても破棄します。
問い合わせ対象ではないホストはARPリクエストをいったん受信してから、自身に関係ないと判断して破棄します。そのため、ARPリクエストに関係ないホストには若干の余計な負荷がかかります
2.ARPリプライでMACアドレスを教える
問い合わせ対象のIPアドレスのホストがARPリプライを返します。ARPリプライの内容は問い合わせされたMACアドレスです。ARPリプライでもとのホストは目的のIPアドレスに対するMACアドレスを認識できるようになります。
3.ARPキャシュの更新
IPパケットを送信するたびにARPのアドレス解決を行うのは効率よくありません。それに、IPアドレスとMACアドレスの対応はそうそう頻繁に変わるものではありません。そこで、いったん解決したIPアドレスをMACアドレスの対応を一定時間ARPキャッシュに保存します。なお、ARPキャッシュは問い合わせしたホストと問い合わせされたホストの両方で更新します。
ARPキャッシュにIPアドレスとMACアドレスの対応が存在していれば、ARPリクエストとリプライで名前解決する手順をスキップできます。ARPキャッシュ内の情報は時間が経つと削除されます。ARPキャッシュはARPテーブルとも呼びます。
ARPのアドレス解決の例
以下の図は、ARPのアドレス解決の例です。PC1から同じネットワーク上のPC3(IPアドレス 192.168.1.3)へデータを送信するときに、PC3のMACアドレスを解決する様子を表しています。
PC3のMACアドレスを解決できたら、イーサネットヘッダの宛先MACアドレスを指定して、イーサネットインタフェースをからPC3宛てのデータを送り出すことができます。
異なるネットワークへデータを転送するとき
ARPのアドレス解決は同じネットワーク上のIPアドレスに対してのみです。では、異なるネットワークへデータを転送するときには、どのようにMACアドレスを求めればよいのでしょうか?
異なるネットワークのIPアドレス宛てにデータを送るときには、まず、デフォルトゲートウェイに転送します。デフォルトゲートウェイとは、同じネットワーク上のルータです。他のネットワークへの入口です。ルータによって複数のネットワークが相互接続されています。つまり、異なるネットワークは同じネットワーク上のルータの先にあります。異なるネットワークへのデータを送るときには、ARPの問い合わせ対象のIPアドレスとしてデフォルトゲートウェイのIPアドレスでARPリクエストを送信します。デフォルトゲートウェイのルータがARPリプライを返して、送信元のホストはデフォルトゲートウェイのMACアドレスがわかるようになります。
デフォルトゲートウェイのIPアドレスに対するMACアドレスを解決すると、イーサネットヘッダでカプセル化して、データを送信します。イーサネットヘッダの宛先MACアドレスは、デフォルトゲートウェイのものです。ですが、宛先IPアドレスは最終的にデータを送り届けたいホストのものになります。
そして、デフォルトゲートウェイがデータを受信して、宛先IPアドレスに基づいてルーティングします。
ARPキャッシュの管理(Windows)
Windows OSでは、コマンドプロンプトからARPキャッシュを管理できます。ARPキャッシュの内容を表示したり、スタティックにIPアドレスとMACアドレスの対応を登録したり、ARPキャッシュの情報を削除する方法を解説します。
ARPキャッシュの表示
コマンドプロンプトからarp -aコマンドでARPキャッシュの内容を表示します。ネットワークインタフェースが複数存在する場合は、ネットワークインタフェースごとにARPキャッシュが表示されます。
C:\Users\gene>arp -a インターフェイス: 192.168.1.169 --- 0x3 インターネット アドレス 物理アドレス 種類 192.168.1.1 28-bd-89-d3-42-1c 動的 192.168.1.20 f4-f5-e8-4d-f8-92 動的 192.168.1.21 d8-6c-63-5a-ae-55 動的 192.168.1.30 f0-72-ea-15-1d-d0 動的 192.168.1.50 6c-62-6d-ec-8b-e2 動的 192.168.1.255 ff-ff-ff-ff-ff-ff 静的 224.0.0.2 01-00-5e-00-00-02 静的 224.0.0.22 01-00-5e-00-00-16 静的 224.0.0.251 01-00-5e-00-00-fb 静的 224.0.0.252 01-00-5e-00-00-fc 静的 239.255.255.250 01-00-5e-7f-ff-fa 静的 255.255.255.255 ff-ff-ff-ff-ff-ff 静的
ARPキャッシュのスタティック登録
arp -sコマンドでARPキャッシュにスタティックにIPアドレスとMACアドレスの情報を登録できます。arp -sコマンドのフォーマットは以下のようになります。arp -sコマンドは、管理者権限で実行します。
ARPキャッシュのスタティック登録
C:\>arp -s <ip-address> <mac-address>
<ip-address> : IPアドレス
<mac-address> : MACアドレス
以下は、IPアドレス「192.168.1.200」のMACアドレス「00-00-00-01-02-03」を登録する例です。
C:\WINDOWS\system32>arp -s 192.168.1.200 00-00-00-01-02-03 C:\WINDOWS\system32>arp -a インターフェイス: 192.168.1.169 --- 0x3 インターネット アドレス 物理アドレス 種類 192.168.1.1 28-bd-89-d3-42-1c 動的 192.168.1.20 f4-f5-e8-4d-f8-92 動的 192.168.1.21 d8-6c-63-5a-ae-55 動的 192.168.1.30 f0-72-ea-15-1d-d0 動的 192.168.1.50 6c-62-6d-ec-8b-e2 動的 192.168.1.200 00-00-00-01-02-03 静的 192.168.1.255 ff-ff-ff-ff-ff-ff 静的 224.0.0.2 01-00-5e-00-00-02 静的 224.0.0.22 01-00-5e-00-00-16 静的 224.0.0.251 01-00-5e-00-00-fb 静的 224.0.0.252 01-00-5e-00-00-fc 静的 239.255.255.250 01-00-5e-7f-ff-fa 静的 255.255.255.255 ff-ff-ff-ff-ff-ff 静的
ARPキャッシュの削除
arp -dコマンドでARPキャッシュ内のIPアドレスとMACアドレスのエントリを削除できます。arp -dコマンドのフォーマットは、以下のようになります。arp -dコマンドは、管理者権限で実行します。
ARPキャッシュの削除
C:\>arp -d <ip-address>
<ip-address> : 削除するARPキャッシュのIPアドレス。ワイルドカード「*」を指定するとすべて
以下は、IPアドレス「192.168.1.200」のARPキャッシュエントリを削除する例です。
C:\WINDOWS\system32>arp -a インターフェイス: 192.168.1.169 --- 0x3 インターネット アドレス 物理アドレス 種類 192.168.1.1 28-bd-89-d3-42-1c 動的 192.168.1.20 f4-f5-e8-4d-f8-92 動的 192.168.1.21 d8-6c-63-5a-ae-55 動的 192.168.1.30 f0-72-ea-15-1d-d0 動的 192.168.1.50 6c-62-6d-ec-8b-e2 動的 192.168.1.200 00-00-00-01-02-03 静的 192.168.1.255 ff-ff-ff-ff-ff-ff 静的 224.0.0.22 01-00-5e-00-00-16 静的 224.0.0.251 01-00-5e-00-00-fb 静的 224.0.0.252 01-00-5e-00-00-fc 静的 239.255.255.250 01-00-5e-7f-ff-fa 静的 255.255.255.255 ff-ff-ff-ff-ff-ff 静的 C:\WINDOWS\system32>arp -d 192.168.1.200 C:\WINDOWS\system32>arp -a インターフェイス: 192.168.1.169 --- 0x3 インターネット アドレス 物理アドレス 種類 192.168.1.1 28-bd-89-d3-42-1c 動的 192.168.1.20 f4-f5-e8-4d-f8-92 動的 192.168.1.21 d8-6c-63-5a-ae-55 動的 192.168.1.30 f0-72-ea-15-1d-d0 動的 192.168.1.50 6c-62-6d-ec-8b-e2 動的 192.168.1.255 ff-ff-ff-ff-ff-ff 静的 224.0.0.22 01-00-5e-00-00-16 静的 224.0.0.251 01-00-5e-00-00-fb 静的 224.0.0.252 01-00-5e-00-00-fc 静的 239.255.255.250 01-00-5e-7f-ff-fa 静的 255.255.255.255 ff-ff-ff-ff-ff-ff 静的
ARPフレームのMACアドレスは?
ARPは、IPパケットをイーサネットでカプセル化するときの宛先MACアドレスを求めるために利用します。では、「ARPフレームの宛先MACアドレス」はどうなるんでしょう?ARPフレーム、すなわち、ARPリクエストとARPリプライのMACアドレスは、以下のように指定します。
ARPリクエスト
宛先MACアドレス:FF-FF-FF-FF-FF-FF(ブロードキャスト)
送信元MACアドレス:ARPリクエストを送信するインタフェースのMACアドレス
ARPリプライ
宛先MACアドレス:ARPリクエストの送信元MACアドレス
送信元MACアドレス:ARPリプライを送信するインタフェースのMACアドレス
ARPリクエストの宛先MACアドレスを求めるなんてことは必要ありません。ARPリクエストの宛先MACアドレスはブロードキャストMACアドレス「FF-FF-FF-FF-FF-FF」を指定すればいいのです。そして、送信元MACアドレスはARPリクエストを送信するインタフェースのMACアドレスになります。
ARPリクエストの返事がARPリプライです。そのため、ARPリプライの宛先MACアドレスは、ARPリクエストの送信元MACアドレスを使えばいいだけです。また、送信元MACアドレスは、ARPリプライを送るインタフェースのMACアドレスです。
TCP/IP
- TCP/IPの階層
- IP(Internet Protocol) ~データを送り届ける~
- ICMP ~きちんとIPで転送できますか?~
- Ping ~きちんとデータは届きますか?~
- Windows OSのPingコマンド
- トレースルート ~データはどのルータを通っていますか?~
- tracertコマンド(Windows OS)
- ICMPリダイレクト
- トラブルはどこ? ~Pingとトレースルート~
- ARP ~IPアドレスとMACアドレスを対応付け~
- ARPフォーマット
- Gratuitous ARP(GARP)
- ポート番号 ~どのアプリケーションのデータなの?
- TCPの概要
- TCPの動作
- UDPの概要
- アプリケーションのデータが届くまでのまとめ
- DNS ~宛先IPアドレスを求める~
- nslookupコマンド ~DNSの名前解決の確認~
- DHCP ~IPアドレスを自動割り当て~
- Cisco IOS DHCPサーバの設定と確認コマンド
- Ciscoルータ DHCPサーバの設定例
- DHCPリレーエージェント
- DHCPリレーエージェントの設定例[Cisco]
- DHCPサーバ配置のまとめ
- TCP/IPの設定のまとめ
- ipconfigコマンド ~Windows OSのTCP/IP設定を確認~
- Linux(Ubuntu)でのTCP/IP設定の確認コマンド
- Webサイト
- HTMLとCSS ~Webページを作る~
- URL ~Webサイト(Webページ)のアドレス~
- HTTP ~HTMLファイルを転送する~
- Webアプリケーション ~Webブラウザだけあればいい~
- HTTP Cookie
- Webアプリケーションのセッション管理
- Webプロキシサーバ ~Webアクセスを代わりに~
- Webアクセスのまとめ
- 電子メール
- SMTP ~電子メール送信用プロトコル~
- POP3 ~メール受信用プロトコル~
- IMAP4 ~メールサーバ上でメールを管理~
- 電子メールのまとめ
- FTP ~代表的なファイル転送プロトコル~
- TFTP ~簡易的なファイル転送プロトコル~
- Windows10/11のTFTPクライアント
- ネットワークのトラブルの切り分け手順