はじめに
同じネットワーク内の端末へデータを送るとき、送信元は相手のIPアドレスだけでなく、フレームの宛先となるMACアドレスも必要です。では、IPアドレスしか分からない状態から、どのようにMACアドレスを調べるのでしょうか。
IPv4でこの対応付けに使われるのがARP(Address Resolution Protocol)です。ARPの役割を理解すると、同じネットワーク内の端末へ送る場合と、ルーターを経由して別のネットワークへ送る場合で、なぜフレームの宛先MACアドレスが変わるのかも理解できます。
ARPとは
ARPは、IPv4通信でIPアドレスに対応するMACアドレスを調べるための仕組みです。この記事ではEthernetを例に説明します。Ethernetでは、IPパケットをデータリンク層のフレームに格納して次の機器へ渡すため、その相手のMACアドレスが必要になります。
ここで重要なのは、ARPがインターネット上の最終宛先のMACアドレスを探す仕組みではないことです。ARPで調べるのは、同じリンク上で次にフレームを渡す相手です。IPパケットがルーターを経由して1ホップずつ転送される全体像は、「IPとは?ネットワーク層の役割やルーティングを初心者向けに分かりやすく解説」で解説しています。
MACアドレスやフレームの役割については、「データリンク層とは?MACアドレスやフレームの役割を分かりやすく解説」で確認できます。
ARP RequestとARP Replyの仕組み
送信元が必要なMACアドレスをまだ知らない場合、ARP Requestを同じローカルネットワークへブロードキャストします。ARP Requestには「このIPアドレスを使っている機器のMACアドレスを教えてほしい」という問い合わせに必要な情報が含まれています。
同じネットワーク上の各機器はARP Requestを受信しますが、問い合わせ対象のIPアドレスを持つ機器が要求元へARP Replyを返します。送信元はReplyに含まれる対応関係からMACアドレスを知り、そのMACアドレスを宛先としてフレームを送信できるようになります。
基本的な流れは、MACアドレスが必要になる → ARP Requestをブロードキャストする → 対象機器がARP Replyを返す → 得られたMACアドレスを使ってフレームを送る、という4段階です。
同じネットワークと別ネットワークではARPする相手が違う
Ethernet上のIPv4通信では、最終的な通信相手が同じネットワークにいるか、ルーターの先にいるかによって、ARPでMACアドレスを調べる相手が変わります。
| 通信先 | ARPで調べるIPアドレス | フレームの宛先MACアドレス | IPパケットの宛先IPアドレス |
|---|---|---|---|
| 同じネットワーク | 通信相手のIPアドレス | 通信相手のMACアドレス | 通信相手のIPアドレス |
| 別のネットワーク | 次ホップとなるルーターのIPアドレス | ルーターのMACアドレス | 最終的な通信相手のIPアドレス |
たとえばPCから別ネットワーク上のWebサーバーへ通信する場合、PCがARPで調べるのはWebサーバーのMACアドレスではありません。PCはルーティング判断によって次ホップとなるルーターを選び、そのルーターのIPアドレスに対応するMACアドレスをARPで調べます。
そのため、ルーターを越えるとデータリンク層のフレームは次のリンク用に作り直されます。一方、通常のルーティングではIPパケットの宛先IPアドレスは最終的な通信相手を示したままです。ARPは、この「次にフレームを渡す相手」を決めるためのアドレス解決を担当します。
ARPキャッシュで毎回問い合わせる必要をなくす
一度取得したIPアドレスとMACアドレスの対応を毎回ARPで問い合わせると、不要なブロードキャストが増えてしまいます。そのため、端末は取得した対応関係をARPキャッシュとして一時的に保持し、利用できるエントリがある間はその情報を再利用します。
ただし、MACアドレスやネットワークの状態は変化する可能性があるため、古いARPキャッシュをいつまでも使い続けることはできません。古くなったキャッシュエントリを無効化する仕組みがあり、具体的な保持時間は実装や設定によって異なります。そのため、「ARPキャッシュは必ず数分で消える」と固定して考えないことが重要です。
IPv6ではARPを使わない
IPv6ではARPを使用せず、Neighbor Discoveryによって同じリンク上の相手のリンク層アドレスなどを確認します。Neighbor DiscoveryではNeighbor SolicitationやNeighbor AdvertisementなどのICMPv6メッセージが使われます。
IPv4のARPとIPv6のNeighbor Discoveryは、どちらも通信に必要なリンク層情報を得る役割を持ちますが、同じプロトコルではありません。IPv6の基本は「IPv6とは?IPv4との違いと128ビットアドレスの基本を解説」、ICMPv6の位置づけは「ICMPとは?pingとエラー通知でIP通信を補助する仕組みを解説」で解説しています。
まとめ
ARPは、IPv4通信でIPアドレスから、同じリンク上で次にフレームを渡す相手のMACアドレスを調べる仕組みです。MACアドレスが分からない場合はARP Requestをブロードキャストし、対象となる機器からARP Replyを受け取って対応関係を取得します。
同じネットワークへの通信では相手端末のMACアドレスを調べますが、別ネットワークへの通信では次ホップとなるルーターのMACアドレスを調べます。この違いを押さえると、IPによるネットワーク間転送と、フレームによる1ホップごとの転送の役割分担を理解しやすくなります。