3 Minutes NetWorking
No.26

3Minutes NetWorking

第26回レイヤ3 ARP

■ 4つのアドレス・おさらいのおさらい

インター博士

まだまだ4つのアドレスの話は続く。
前回までで、送信元の2つのアドレスは手に入った。残りは2つ。

ネット助手

宛先のMACアドレスとIPアドレスですね。

インター博士

うむ。
話を先に進める前におさらいだ。送信元の2つのアドレスの取得方法を答えなさい。

ネット助手

送信元、つまり自分のMACアドレスはNICを取り付けた段階でわかるんでしたよね。
…。前回も全く同じ事を言った記憶があるんですけど。

インター博士

奇遇だな、ネット君。
私も全く同じ科白を聞いた記憶がある。

ネット助手

こういうのって、奇遇っていうんですか?

インター博士

ともかく、送信元MACアドレスはその通りだ。
もう1つ送信元IPアドレスはというと…。

ネット助手

管理者に教えてもらったアドレスを直接手動で入力する静的と。
DHCPにより自動で割り振られる動的。この2つの方法でしたよね。

インター博士

うむ。これにより、送信元の、自分自身のアドレスはわかったわけだ。
残る問題は、データの転送を行いたい相手のアドレスをどのように知るかという一点にかかっている。

ネット助手

ですね。

インター博士

今回は、宛先MACアドレスを知る方法を説明する。
これにはARPというプロトコルを使用する。▼ link

ネット助手

えーあーるぴー?

■ アドレス解決プロトコル

インター博士

アープと読む。
アドレス解決プロトコルと日本語では訳される。

ネット助手

アドレスを解決するプロトコル。
なんのアドレスを解決するんです?

インター博士

「宛先のMACアドレスがわからない」という状態を「解決」してくれるプロトコル、という意味だ。
だから、「アドレス解決プロトコル」。

ネット助手

なるほど。

インター博士

まず、ARPは宛先のIPアドレスが決定した時点で実行される。

ネット助手

宛先のIPアドレスが決定?
どうやって宛先のIPアドレスが決定されるんですか?

インター博士

それは次回の話だ。
実際に例を出して説明しよう。例えばネット君が、このサイト「Roads to Node」を見たいと思ったとする。

ネット助手

はい。

インター博士

そうすると、ブラウザに「Roads to Node」のURLを入力するよな。
「http://www5e.biglobe.ne.jp/~aji/」と。

ネット助手

ページの場所ですよね。

インター博士

そうだ。
そうすると、次回説明するが、DNSという機能が働いて、サイトが置いてあるサーバのIPアドレスを教えてもらえる

ネット助手

でぃーえぬえす?

インター博士

うむ、それは次回だ。
宛先IPアドレスを教えてもらうとデータ転送に必要なアドレスは、宛先MACアドレスだけになる。

ネット助手

そうですね。

インター博士

そこで、「このIPアドレスのホスト、あなたのMACアドレスを教えて。」と聞く
これがARPだ

ネット助手

ははぁ。
なのでIPアドレスがわかった時点ってことなんですね。

■ ARPテーブル

インター博士

さて、実際のARPの説明をする。
まず、データ転送を希望するホストは、宛先のIPアドレスを取得する。

ネット助手

DNSでしたっけ。

インター博士

DNS以外にもあるがな。
ともかく、宛先IPアドレスが決定した時点で、宛先MACアドレスを知るためにARPテーブルを参照する。

ネット助手

ARPてーぶる?何ですかそれ?

インター博士

IPアドレスとMACアドレスの対応表だ。
このIPアドレスのホストのMACアドレスはコレ、という情報が載っている。実物を見てもらった方が早いな。

  • c:\>arp -a

ARPテーブル

[Figure26-01:ARPテーブル]

インター博士

自宅のLANなので、対象が少ないのが残念だ。
ともかく、「192.168.0.1のMACアドレスは00-40-26-f4-1a-02です」という表があるわけだ。

ネット助手

ARPエントリのタイプってのは?

インター博士

うむ、static(静的)とdynamic(動的)の2つがある。
dynamicはこれから説明するARPによって取得したIPアドレスとMACアドレスの対応、という意味だ。staticは手動で対応を入力した、という意味になる。

ARPテーブルの追加と削除

[Figure26-02:ARPテーブルの追加と削除] 

ネット助手

ははぁ。

インター博士

このARPテーブルに宛先IPと宛先MACの対応があれば、その時点で宛先MACアドレスがわかるわけだ。

ネット助手

なるほど。
じゃあARPテーブルがあれば、いちいちMACアドレスを聞く必要がないわけですね。

インター博士

そうなる。
問題は、ARPテーブルに宛先IPと宛先MACの対応がない場合だ。その場合、ARPテーブルに知りたいIPとMACの対応を載せなければならない。

ネット助手

知りたい情報がないから、その情報を付け加える必要があるわけですね。

インター博士

うむ。そのため、先ほど説明したように「このIPアドレスのホスト、あなたのMACアドレスを教えて。」と聞き、その結果をARPテーブルに載せるということをするわけだ。
この「教えて」というのがARP要求だ。

ネット助手

ARPの要求ですか。

■ ARP要求&ARP応答

インター博士

さて、このARPだが、IPと同じくレイヤ3のプロトコルだ。
このARPにのっとって送信されるARP要求だが、IPを使わない

ネット助手

IPを使わない?
どういうことです?

インター博士

つまり、IPの代わりにARPでデータ転送を行う。
なので、IPパケットの代わりにARPパケットというちょっと特殊なパケットを使う。

ネット助手

ARPパケット…。
どう特殊なんです?

インター博士

ARPパケット自体がデータだ、という点だな。
上のレイヤのプロトコルを使わないのだよ。なので、IPのように上のレイヤからセグメントをもらって、パケットにするということをしない。

ネット助手

インター博士

うむ。
つまり、以下のような形で送るということだな。
ARPはレイヤ3以下でしか使わないので、上位レイヤの情報がいらないのだよ。

ARPパケット

[Figure26-03:ARPパケット]

ネット助手

ははぁ。

インター博士

ARPパケットの中身は、以下のようになっている。

バイト名前意味
4アドレスタイプアドレスの方式を表す
2アドレス長アドレスの長さを示す
2オペレーションコード要求か応答かを示す
6送信元MACアドレス送信元のMACアドレス
4送信元IPアドレス送信元のIPアドレス
6宛先MACアドレス宛先のMACアドレス
4宛先IPアドレス宛先のIPアドレス

[Table26-01:ARPパケット]

インター博士

上2つはともかく。
下の4つを見てわかるとおり、4つのアドレスすべてが入っている。これを送る。

ネット助手

あれ?
でも、宛先のMACアドレスはわからないんじゃないんですか?

インター博士

うむ。
それは実際の動作を見て納得してもらおう。まずは、文章で動作を説明するとこうなる。

  • 宛先にデータを転送しようとして、宛先IPアドレスがわかった後。
    1. ARPテーブルを参照し、宛先IPアドレスに対応するMACアドレスがあるかどうか調べる。
    2. なければARP要求ブロードキャスト送信する。
    3. ARP要求を受け取った各ホストは、ARPパケットの中の宛先IPアドレスと自分のIPアドレスを比較する。
      • 一致しなければ、無視。
      • 一致した場合、ARP応答を送信。
    4. ARP応答を受け取った(ARP要求を送った)ホストは、ARPテーブルにそのMACアドレスを追加する。
  • 4つのアドレスがそろい、宛先へのデータ転送が可能になる。
ネット助手

はは〜。わかったようなわからないような。

インター博士

そういうと思っていたよ。
では、動きのある説明を見てもらおう。

[Figure26-04:ARP]

ネット助手

ははぁ。
DHCPと同じように、ブロードキャストを使うんですね。

インター博士

うむ。
誰に送ったらいいかわからない、という時はブロードキャストをよく使う。

ネット助手

それと。
ARP要求を受け取ったら、その送信元を自分のARPテーブルに追加しておくんですね。

インター博士

そうすることによって、ARPを出す回数をなるべく減らすようにしているわけだ。
ARPが多発するのは望ましくないのでな。

■ ARPテーブルのエントリの問題

ネット助手

多発するのは何故望ましくないんですか?

インター博士

それは、ARPがブロードキャストだからだ。
ブロードキャストはなにしろ全員宛なので、ネットワークの帯域幅を多く消費する。

ネット助手

あれれ? でも、イーサネットって結局全員に届くんですよね。
別にブロードキャストでなくて、一人宛だとしても全員宛と同じになってしまいませんか?

インター博士

確かにそれはその通りだ。
だが、スイッチやブリッジなどのデバイスを使えば、事情は異なる。

ネット助手

あ、そうか。
スイッチやブリッジはフィルタリングして宛先のみに届くようにするんでしたっけ。

インター博士

そうだ。
だが、ブロードキャストはスイッチやブリッジではフィルタリングできない。なので、ブロードキャストの多発はトラフィックに影響を及ぼしやすいのだよ。

ネット助手

なるほど。

インター博士

ブロードキャストが多発しすぎると、ネットワーク全体が通信不能になってしまうことがある。
このような状態をブロードキャスト・ストームという。

ネット助手

ぶろーどきゃすと・すとーむ。
ブロードキャストの嵐?

インター博士

そうだ。なかなか直接的でわかりやすい比喩だろう?
ARPは、ホストのネットワーク情報のミスで簡単に多発するようになる場合があるので、注意が必要だ。

ネット助手

はは〜。

インター博士

では、そのARPの回数を減らす一番簡単な方法は何かわかるかね?

ネット助手

ARPの回数を減らす?
…?

インター博士

ARPは、ARPテーブルにエントリがあれば行われないのだったな。
ARPテーブルにエントリがあれば、いちいち聞きに行く必要がないからな。

ネット助手

え〜っと。
ということは、ARPテーブルを事前に作っておく、ってことですか?

インター博士

うむ。
ARPテーブルに静的にエントリを作っておくのがARPの回数を減らす早道だ。
静的なエントリはずっと保持されるからな。

ネット助手

そうすれば、ARPは行われなくなりますよね。

インター博士

だが、実際ほとんどのデバイスでは、ARPテーブルを静的に作成することはない。
なぜならば、ARPテーブルが間違っている時点で、送信は絶対に不可能になるからだ。

ネット助手

絶対不可能…。
ARPテーブルが間違って記憶されていると、IPアドレスとMACアドレスが一致しないことになりますよね。

インター博士

うむ。イーサネットの所を思い出してもらおう。
自分のMACアドレスと一致しないフレームは破棄されるのだったな。

ネット助手

ははぁ。MACアドレスが違った時点でフレームを受け取ってもらえないことになりますね。

インター博士

そうだ。なのでARPテーブルの動的なエントリは一定時間ごとにクリアされるように作られている。
IPアドレスとMACアドレスの対応が間違うことのないように、だ。

ネット助手

なるほど。
でもそうなると、結局ARPは減りませんね。

インター博士

まぁ、そうなってしまうな。
逆に、ルータ等のまずIPもMACも変わらない上に、頻繁に送信する相手になるデバイスのエントリを、ARPテーブルに作っておくのはわりと効果的だ。

ネット助手

ははぁ、なんかおばあちゃんの知恵袋みたいな知識ですね。

インター博士

誰がおばあちゃんだ。
ただ、ARPテーブルは各ホストに1つずつあるので、それに全部エントリを追加していくのはかなり面倒なのも事実だ。手動入力しか方法がないのでな。

ネット助手

ははぁ、そりゃ面倒ですね。

■ デフォルトゲートウェイ

インター博士

さらにもう1つ。
ARPがブロードキャストである故におきる問題として、ルータの問題がある。

ネット助手

まだ問題があるんですか。

インター博士

先の回で説明するが、ルータはブロードキャストをフィルタリングする
なので、ルータの先のネットワークのホストに対してARPは届かない

ネット助手

ARPが届かないってことは。MACアドレスがわからないってことですよね。
MACアドレスがわからないと、アドレスが4つそろわないですよ。どうするんですか?

インター博士

そう慌てることもないのだが。
それについては先の回のデフォルトゲートウェイの所で話す。

ネット助手

でふぉるとげーとうぇい?

インター博士

うむ。それは先のお楽しみだ。
というわけで、今回はお終い。

ネット助手

はい。

インター博士

次回は、いよいよ「4つのアドレス」編の最後。
宛先IPアドレスを知る方法についてだ。

ネット助手

いつの間に「4つのアドレス」編という名前がついたんだろう…。

インター博士

何か?

ネット助手

い、いいえ。なんでもありません。

インター博士

では、また次回。

ネット助手

いぇっさー。
3分間ネットワーキングでした〜♪

ARP
[Address Resolution Protocol]
RFC826で規定。
ブラウザ
[web browser]
Webページを見るためのソフト。
Internet Explorer、Netsacpe Navigator、Mozilla、Operaなど。
Webサイトの閲覧はこのブラウザソフトを使うので、ブラウジングなどと呼ばれることもある。
URL
[Uniform Resource Locator]
インターネット上のWeb資源の位置を表す文字列のこと。
一般的には[プロトコル名]://[サーバ名].[ドメイン名]/[パス]という形で表記される。
DNS
[Domain Name System]
詳しくは先の回で。
これがARPだ
実際は、そのURLのIPアドレスを教えてもらうDNSサーバのMACアドレスを知るために、すでにARPが実行されていますが、簡略化のため省略しています。
ARPテーブル
[ARP table]
ARPキャッシュ[cache]とも言う。
ARPエントリ
[ARP entry]
ARPテーブルに登録された情報のこと。
画像
「arp -s IP MAC」でエントリ追加。
「arp -d IP」でエントリ削除。
ARP要求
[ARP request]
ARP応答
[ARP reply]
ブロードキャスト・ストーム
[broadcast strom]
デフォルトゲートウェイ
[default gateway]
他ネットワークへの入り口になるデバイス。
詳しくは先の回で。
ネット助手ネット君の今日のポイント
  • 宛先MACアドレスを知るにはARPを使用する。
  • ホストはIPアドレスとMACアドレスの対応表であるARPテーブルを持つ。
  • ARPテーブルは一定時間でクリアされる。
  • ARPテーブルに宛先のエントリがない場合、ARPが実行される。
    • ARP要求をブロードキャスト送信する。
    • ARP要求の宛先IPアドレス以外のホストはARP要求を破棄する。
    • ARP要求の宛先IPアドレスのホストは、ARP応答を返す。
    • ARP応答を受け取ったARP要求の送信ホストはARPテーブルにエントリを追加する

3 Minutes NetWorking No.26

管理人:aji-ssz(at)selene.is.dream.jp