ARP
Address Resolution Protocol ・ あーぷ
IPアドレスからMACアドレスを解決するプロトコル。同一ネットワーク内配送の橋渡し。
概要
ARP(Address Resolution Protocol)は、IPアドレスからMACアドレスを調べるためのプロトコルです。「192.168.1.10 にパケットを届けたいが、その機器のMACアドレスは何か」を同一ネットワーク内に問い合わせ、答えを得る — この一往復がARPのすべてです。
なぜそんな変換が必要かというと、インターネット越しの宛先指定に使うIPアドレスと、実際にケーブルや無線で隣の機器へフレームを届けるときに使うMACアドレスは、役割の異なる別の住所だからです。アプリケーションはIPアドレスしか知りませんが、LANの中で実際にデータを運ぶEthernetはMACアドレスでしか宛先を指定できません。この2つの世界の橋渡しを、通信のたびに裏で黙々と行っているのがARPです。
普段は完全に意識せずに済む縁の下のプロトコルですが、「pingは通るのに通信できない」といったLAN内トラブルの調査で arp -a を叩く場面や、ARPスプーフィングと呼ばれる古典的な攻撃の文脈で、突然表舞台に現れます。
なぜ生まれたか
1980年代初頭、TCP/IPをEthernet上で動かそうとしたとき、素朴な問題に突き当たりました。IPアドレスはネットワーク設計者が論理的に割り当てる住所であるのに対し、EthernetのMACアドレスは製造時にハードウェアへ焼き込まれる識別子で、両者の間に計算で導ける関係が何もないのです。IPパケットをEthernetフレームに載せて送るには宛先MACアドレスが必須なのに、それを知る手段がありませんでした。
すべての機器の対応表を手作業で管理する方法は、機器の追加・交換のたびに全員の表を更新する必要があり、すぐに破綻します。そこで1982年のRFC 826で標準化されたのがARPです。「このIPアドレスを持っている人、いたらMACアドレスを教えて」とネットワーク全体に呼びかけ、本人だけが返事をする — 対応表を誰も管理しなくても、必要なときに動的に解決できる仕組みが生まれました。
詳細
ブロードキャストで尋ね、ユニキャストで答える
ARPの動作は「全員への問いかけ」と「本人からの返答」の一往復です。ホストAが同じLAN内のホストB(192.168.1.20)へ通信したいのにMACアドレスが分からないとき、次の流れで解決します。
ARP要求は宛先MACアドレスを全ビット1のブロードキャストアドレス(ff:ff:ff:ff:ff:ff)にして送るため、同一ネットワークの全機器に届きます。各機器は要求内のIPアドレスを自分のものと見比べ、一致した機器だけが自分のMACアドレスを添えて送信元へ直接(ユニキャストで)返答します。
ARPテーブル — 毎回聞かないためのキャッシュ
通信のたびにブロードキャストを流すのは無駄が多いため、解決した「IPアドレス ↔ MACアドレス」の対応は各機器がARPテーブルにキャッシュします。エントリには数分程度の有効期限があり、期限が切れると再度ARPで解決し直します。この期限があるおかげで、機器の交換やIPアドレスの付け替えがあっても、しばらくすれば自然に正しい対応へ収束します。逆に言えば、付け替え直後は古いキャッシュが残って通信できない時間が生じることがあり、「NICを交換したら一部の機器から届かなくなった」という古典的トラブルの原因になります。arp -a(あるいは ip neigh)でテーブルを確認し、必要なら削除するのが定石です。
デフォルトゲートウェイとARPの守備範囲
重要なのは、ARPが働くのは同一ネットワーク(同一ブロードキャストドメイン)の中だけという点です。宛先IPアドレスが別のネットワークに属する場合、ホストは宛先本人のMACアドレスを調べるのではなく、デフォルトゲートウェイであるルータのMACアドレスをARPで解決し、そこへフレームを託します。つまり「IPアドレスで最終目的地を指し、MACアドレスで次の一区間の相手を指す」というOSI参照モデルのレイヤ2とレイヤ3の分業を、実際につなぎ合わせているのがARPです。インターネットを渡るパケットは、区間ごとにこのARP解決を繰り返しながらバケツリレーされていきます。
なお、IPv6 ではARPは使われず、同じ役割をICMPv6ベースの近隣探索(NDP: Neighbor Discovery Protocol)が担います。仕組みの発想は同じで、「論理アドレスからリンク層アドレスを動的に解決する」という課題設定ごと引き継がれています。
ARPスプーフィング — 性善説の代償
ARPには認証がありません。「私が 192.168.1.1 です」という応答を、誰でも・頼まれなくても送りつけられます。これを悪用するのがARPスプーフィング(ARPポイズニング)です。攻撃者が「ゲートウェイのIPアドレスは私のMACアドレスです」という偽のARP応答をLAN内にばらまくと、各機器のARPテーブルが汚染され、外向きの通信がすべて攻撃者経由になります。攻撃者は盗聴・改ざんしてから本物のゲートウェイへ転送すれば、被害者は異変に気づきません。典型的な中間者攻撃(MITM)です。
LANの内側は信頼できるという1980年代の前提が、この脆弱さの根本にあります。対策としては、スイッチ側でDHCPの払い出し記録と突き合わせて不正なARP応答を遮断するDynamic ARP Inspection、重要機器のエントリを静的に固定する方法などがありますが、より本質的には「経路が信頼できなくても内容を守る」TLS などの上位層の暗号化や、そもそもネットワークの内側を信頼しないゼロトラストの考え方が防波堤になります。ARPスプーフィングは「公衆Wi-FiでHTTPS必須と言われる理由」を最も具体的に説明してくれる攻撃でもあります。
