こんにちは!ネットワークエンジニアの皆さん、そして日々インフラの仕組みと格闘している学習者の皆さん。技術メディア「NetPulse」主筆の私です。
ネットワークの世界に足を踏み入れたとき、誰もが最初に直面する不思議な疑問がありますよね。「IPアドレスという宛先を知っているのに、なぜわざわざMACアドレスという別の番号を調べなきゃいけないんだろう?」と。
今回は、その謎を解く鍵であり、ローカルネットワークの裏方として静かに、しかし超重要な仕事をこなしている「ARP(Address Resolution Protocol)」、そしてその頭脳であるARPキャッシュテーブルの裏側に迫ります。教科書の文字面を追うだけでは見えてこない、パケットたちのドラマを一緒に覗いてみましょう!
—
1. ARPってなに? 郵便配達でイメージしてみよう
まずは、ARPの役割を身近な世界に例えてみましょう。
あなたは会社で、同じフロアにいる同僚の「佐藤さん(IPアドレスに相当)」に書類を渡したいとします。名前(IPアドレス)は分かっていますが、社内ニート…じゃなくてフリーアドレスのフロアでは、佐藤さんが今日「どの机の島(ネットワーク)」に座っているか、物理的な目印(MACアドレスに相当)までは分かりませんよね。
そこであなたは、フロア全体に向けてこう叫びます。
「すみません!『佐藤さん』という名前の方、今どの席に座っていますかーっ!」
これに対し、当の佐藤さんが「あ、私です!席は窓際の3番です!」と手を挙げて返事をします。これであなたは、佐藤さんの顔と物理的な席の場所を一致させ、直接書類を届けることができます。
この「名前から物理的な場所(アドレス)を聞き出す」やり取りこそが ARP です。
そして、毎回わざわざ大声でフロア中に叫ぶのは効率が悪いので、優秀なあなた(OS)は一度聞いた「佐藤さん=3番の席」という情報をメモ帳に控えておきます。このメモ帳こそが、今回主役となる「ARPキャッシュテーブル」なのです。
—
2. ARPキャッシュの「寿命」と更新のドラマ
OSのメモリの片隅にこっそり保持されているARPキャッシュテーブルですが、実はこのメモ帳、永遠には使えません。ネットワークの世界は常に変化しています。佐藤さんが別の席に移動するかもしれないし、PCが買い替えられるかもしれないからです。
生存期間(エイジアウト)の仕組み
ARPキャッシュのエントリには、いわゆる「賞味期限(TTL: Time-To-Live や エージングタイム)」が設定されています。
多くのOS(LinuxやWindowsなど)では、一度学習したARPエントリはおよそ数分から20分程度で自動的に消去(エイジアウト)されるようになっています。
「せっかく覚えたのに、なんで忘れちゃうの?」と思いますよね。
もしPCがネットワークから取り外されたり、MACアドレスが変わったりしたのに、古いメモを何年も信じ込んでいたらどうなるでしょう? パケットは永遠に届かない宛先へ投げ続けられ、通信は完全にフリーズしてしまいます。古い情報を「忘れる」ことは、ネットワークの健康を保つためにめちゃくちゃ重要な機能なんです。
通信発生時のエントリ更新
では、そのメモが消えかかる頃、あるいは新しく通信が発生したとき、OSはどのような挙動をするのでしょうか。
1. アクティブな通信の発生: あなたのPCから宛先IPアドレスへパケットを送ろうとします。
2. キャッシュの確認: OSはARPテーブルをチラ見します。「お、まだ佐藤さんのエントリがあるな(または無いな)」
3. エントリの延命・再学習: もし通信が発生して実際にMACフレームがやり取りされると、OSは「この宛先はまだ現役だ!」と判断し、そのエントリのタイマー(寿命)をリフレッシュ(延長)します。テーブルに存在しない場合は、新しく先ほどの「誰ですかー!」(ARP Request)をブロードキャストして再学習します。
—
3. 「Gratuitous ARP(G-ARP)」というおせっかいな自己紹介
ARPテーブルの更新条件で、もう一つ絶対に外せないのが 「Gratuitous ARP(無償ARP)」 という少し変わった仕組みです。
通常のARPは「誰か教えて!」と問いかけるものですが、Gratuitous ARPは誰も聞いていないのに、ネットワーク全体に向けて「ねえねえ、私のIPアドレスはこれ、MACアドレスはこれだから、みんなメモしておいてね!」と一方的にブロードキャスト(またはユニキャスト)で発信するパケットのことです。
どんなときに使われるの?
- IPアドレスの重複検知(DAD): 新しくネットワークに参加したPCが、「このIPアドレス、もう誰か使ってないよね?」と確認するために自分宛てのG-ARPを投げます。もし「オレのIPだぞ!」と返事(ARP Reply)が返ってきたら、「あ、IPが被ってる!」とアラートを上げることができます。
- フェイルオーバー(冗長化構成): クラスタリングやルーターのVRRPなどの高可用性構成で、メイン機がダウンし、スタンバイ機がIPアドレスを引き継いだ瞬間。スタンバイ機はすかさずG-ARPをぶ放ちます。これにより、スイッチや周りの端末のARPキャッシュテーブルが一瞬で書き換わり、「これからの通信は新しいこっちの機器に送ってね!」とシームレスに切り替わるのです。
まさに、部署異動してきたエリート社員が、フロア全体に名刺を配って回るようなスマートな動きですね。
—
4. 実務で役立つ!ARPテーブルの確認と操作(CLI実践)
一歩ずつ理解が深まったところで、実際のエンジニア現場で私たちがどのようにARPと向き合っているか、コマンドを叩いて確認してみましょう。
自分のPCが今、周りのネットワーク機器をどう認識しているのかを覗き見るのは、トラブルシューティングの第一歩です。
Linux環境でのARPテーブル確認
Linux(UbuntuやCentOSなど)では、ip コマンドを使って確認するのが現代のスタンダードです。
# 現在保持しているARPキャッシュテーブルの一覧を表示する
ip neighbor show
【出力例のイメージ】
192.168.1.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff REACHABLE
192.168.1.50 dev eth0 lladdr 11:22:33:44:55:66 STALE
192.168.1.1の部分は相手のIPアドレス、lladdrの後ろにあるaa:bb:cc:dd:ee:ffがMACアドレスです。- 末尾の
REACHABLEやSTALEというステータスに注目してください。STALEは「情報は持っているけれど、しばらく通信していないから、次に使うときには本当に生きているか確認(検証)するよ」という、まさに寿命が近づいている状態を示しています。
トラブルシューティング:ARPエントリの手動削除(フラッシュ)
「ネットワークの構成変更をしたのに、なぜか古いIPとMACの紐づきが残っていて繋がらない!」という現場の泥臭いトラブル、実は本当によくあります。そんなときは、手動でARPキャッシュを強制クリア(フラッシュ)して、強制的に再学習させます。
# 特定のIPアドレスのARPエントリを強制的に削除する
sudo ip neighbor flush 192.168.1.50
# もしくは、インターフェース全体(eth0)のARPキャッシュをごっそりクリアする
sudo ip neighbor flush dev eth0
このコマンドを叩いた瞬間にパケットキャプチャ(Wiresharkなど)を回すと、ネットワーク上に一斉にARP Requestが飛び交う様子が見て取れて、エンジニアとしては最高にワクワクする瞬間です(変態的ですみません!笑)。
—
5. まとめ
今回は、OSが隠し持つ「ARPキャッシュテーブル」の生存期間、通信発生時の更新、そしておせっかいで頼もしいGratuitous ARPの挙動について解説しました。
- ARPキャッシュは永遠のメモではない(古い情報を信じ込まないための寿命=エイジアウトがある)
- 通信が発生するとタイマーがリフレッシュされる
- Gratuitous ARPは、自ら名刺を配って周囲のテーブルを即座に更新させる強力な武器である
普段私たちが何気なくブラウザでWebサイトを見たり、社内ニート…ではなくチャットツールでメッセージを送ったりしている裏側では、こうした小さなパケットたちが挨拶を交わし、記憶の更新を猛烈なスピードで行っています。
「ネットワークは生き物である」――この感覚をぜひ、皆さんの日々のインフラ学習や実務に活かしてくださいね。それでは、また次回の技術コラムでお会いしましょう!
コメント