LAN内で2台のコンピュータが通信する場合、IPパケットは送信元と宛先のMACアドレスを持つイーサネットフレームにカプセル化されます。
しかし、送信側のデバイスはどのようにして宛先のMACアドレスを知るのでしょうか? そこで重要なのが、ARP (Address Resolution Protocol)です。
本記事では、ARPの基本的な仕組みをCiscoルータを使って詳しく説明します。。
以下の記事を先に読んでいただくことをお勧めします。
IPアドレスとMACアドレスの関係
IPアドレスはネットワーク上で通信を行うための論理アドレスであり、OSI参照モデルの第3層(ネットワーク層)で使用されます。一方、MACアドレスはデバイスに固有の物理アドレスで、OSI参照モデルの第2層(データリンク層)で使用されます。両者の違いや役割については、事前に理解しておくとARPの仕組みがよりわかりやすくなります。
R1とR2のARPテーブルの確認
まず、R1とR2のARPテーブルの内容を見てみましょう。
R1# show ip arp Protocol Address Age (min) Hardware Addr Type Interface Internet 192.168.12.1 - 0000.0000.1111 ARPA FastEthernet0/0.12 R2# show ip arp Protocol Address Age (min) Hardware Addr Type Interface Internet 192.168.12.2 - 0000.0000.2222 ARPA FastEthernet0/0.12
ここでは、R1はIPアドレス192.168.12.1とMACアドレス0000.0000.1111を、R2は192.168.12.2と0000.0000.2222を持っています。
R1からR2へのPing送信
では、R1(192.168.12.1)からR2(192.168.12.2)にPingを送信してみます。
R1# ping 192.168.12.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 8/22/40 ms
Pingの結果から、5回のリクエストのうち最初の1回が失敗し、残りの4回は成功しています。この現象はARPが関係しています。
このIPパケットの送信元IPアドレスは192.168.12.1で、宛先IPアドレスは192.168.12.2です。このIPパケットに送信元MACアドレスと宛先MACアドレスを含む イーサネットフレームへカプセル化して送信されます。
R1のARPテーブルを確認します。
R1# show ip arp Protocol Address Age (min) Hardware Addr Type Interface Internet 192.168.12.1 - 0000.0000.1111 ARPA FastEthernet0/0.12 Internet 192.168.12.2 0 0000.0000.2222 ARPA FastEthernet0/0.12
192.168.12.2 のMACアドレスが0000.0000.2222と学習しています。
そして、送信元MACアドレス0000.0000.1111と宛先MACアドレス0000.0000.2222 イーサネットフレームにカプセル化して送信されます。 では、R1はR2のMACアドレスをどのようにして知るのでしょうか。ここで、ARP(Address Resolution Protocol アドレス解決プロトコル)が使用されます。
ARPリクエスト
R1はR2のMACアドレスが何であるかはわからないので、R1はARPリクエストを送信します。
ARPリクエストの中身は「192.168.12.2を持っているのは誰で、MACアドレスは何ですか?」とブロードキャストMACアドレス宛(ff:ff:ff:ff:ff:ff)に送信します。ブロードキャストMACアドレス宛に送信されるため、スイッチはこのフレームをフラッディングします。
ARPリプライ
R2はARPリクエストを受信し、「私が192.168.12.2のIPアドレスを持っています」と応答します。このARPリプライは、R1のMACアドレス宛に送信され、R2のMACアドレス (0000.0000.2222) がデータ部分に含まれています。
初回のPingリクエストが失敗する理由
R1からR2への最初のPingリクエストが失敗するのは、R1がまだR2のMACアドレスを学習していないからです。ARPリクエストとリプライが完了するまでに時間がかかるため、最初のPingがタイムアウトすることがあります。これがPingの結果における最初の失敗の原因です。
R1# ping 192.168.12.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 8/22/40 ms
5回のリクエストのうち、最初のリクエストの応答がありません。
パケットキャプチャを見ると、次のような順序で通信が行われていることがわかります。
- R1がARPリクエストを送信
- R2がARPリプライを返送
- ARPテーブルが更新され、R1がR2のMACアドレスを学習
- その後のPingリクエストが正常に送信され、応答が得られる
まとめ
ARPは、IPアドレスからMACアドレスを解決するための重要なプロトコルです。ARPの動作をCiscoルータで観察することで、ネットワーク内でのアドレス解決の仕組みをより深く理解できます。
コメント