zaco muraです。
ネットワークエンジニア・サーバエンジニアの方は一度は耳にしたことがあると思いますが、ARP(Address Resolution Protocol)は通信において重要な役割を持っています。
私が扱うシステムでもarpについてはトラブルなどの時に出てくるキーワードですが、実は中身についてあんまり知らなくて、漠然と「MACアドレスといえばARP」みたいなイメージでした。なので、この機会に仕組みや種類をまとめておこうかと思います。(あくまで私の理解です。間違っているところがあれば指摘していただけると嬉しいです)
arpとは
Address Resolution Protocolです。日本語で言えばアドレス解決プロトコルです。ここで言うアドレスとは、IPアドレスではなく物理アドレス(=MACアドレス)です。
なぜarpが必要なの?
パケット(正確にはフレーム)を送るときに、宛先の端末を特定するためです。もしarpが無いと、IPアドレスはわかるけどそれってどの端末なの?という状態になります。
人間に例えるなら、名前はわかるけど顔がわからないみたいな状態ですかね。そんな時は、「この中に山田さんはいますかー?」みたいな感じで山田さんは誰かを聞きますよね。その山田さん確認がarpです。
IPアドレスとMACアドレスの違いは?
ひとことで言うと、IPアドレス=論理的なアドレス、MACアドレス=物理的なアドレスです。IPアドレスは変更したり別端末に付け替えたりできますが、基本的にMACアドレスは端末に付与されたものを変えることはできません。先程の例で言うと、山田という呼び名は(ニックネームなど)変えることができますが、顔を変えることは基本的にできないですよね。
また、NW的に言うとレイヤが違います。レイヤについてはこのへんを参照してください。
IPアドレス = レイヤ3
MACアドレス= レイヤ2
です。
arpが使われる場面
arpを最も意識する場面は同一セグメント内の通信だと思います。例えば以下のような構成の時
自分の端末 : 192.168.0.101
山田の端末 : 192.168.0.102
自分の端末から山田の端末にpingを打とうとした時に、自分の端末は「相手は同じ192.168.0.0/24の端末だから同一セグメントだな、ということは直接フレームが届くからarpでMACアドレスを聞こう」と考えます。そして、arpによりお互いのMACアドレスを知る状態になり、pingを送ることができるようになります。
ちなみに、別セグメント宛の通信の場合は以下のようになります。
例)googleパブリックDNS(8.8.8.8)へのping
宛先MACアドレス : デフォルトゲートウェイのMACアドレス
宛先IPアドレス : 8.8.8.8
この時、自分の端末は「相手は自分とは違うセグメントの端末だから、デフォルトゲートウェイにパケットを送ろう。だからまずはデフォルトゲートウェイのMACアドレスを聞こう」と考え、まずデフォルトゲートウェイに対して arpを送ります。
arpの種類
ここまででarpについて説明してきましたが、実はarpには種類があります。それは送信元IP/MAC,宛先IP/MACの組み合わせで決まります。
以下がよく使われるarpです。
名称 | 用途 | 送信元IP | 送信元MAC | 宛先IP | 宛先MAC |
---|---|---|---|---|---|
arp request |
通信したいIPアドレスを持つ端末のMACアドレスを調べる | 自分のIP | 自分のMAC | 通信したい相手のIPアドレス | FF:FF:FF:FF:FF:FF |
arp reply |
requestに対する応答 | 自分のIP | 自分のMAC | requestを送ってきたIP | requestを送ってきたMAC |
arp probe |
IPアドレスが使われているかどうかの確認 (自分の端末へのIP設定時、重複していないことの確認に使う) |
0.0.0.0 | 自分のMAC | 使いたいIP | FF:FF:FF:FF:FF:FF |
gratuitous arp |
IPアドレスを使っていることの宣言 | 自分のIP | 自分のMAC | 自分のIP | FF:FF:FF:FF:FF:FF |
特にgratuitous arpはNW機器の冗長などに使われます。例えばHSRPなどで同じIPを複数端末に設定する場合、切り替わりのタイミングでgratuitous arpを投げることによって切り替わり(つまりIPアドレスに対応するMACアドレスが変わったこと)を周辺のNW機器に対して周知します。ちなみにグラテュータスアープと読むらしいですが、私はジャパニーズなので正しいかどうかはわかりません。
まとめ
通信できないとか通信が不安定になるといった時には結構arpが絡んでいるイメージです。より詳しく知りたい人はRFCを読むことをお勧めします。(参考: http://www.kasai.fm/wiki/rfc5227jp)