■ 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
[Figure26-01:ARPテーブル]
自宅のLANなので、対象が少ないのが残念だ。
ともかく、「192.168.0.1のMACアドレスは00-40-26-f4-1a-02です」という表があるわけだ。
ARPエントリのタイプってのは?
うむ、static(静的)とdynamic(動的)の2つがある。
dynamicはこれから説明するARPによって取得したIPアドレスとMACアドレスの対応、という意味だ。staticは手動で対応を入力した、という意味になる。
[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以下でしか使わないので、上位レイヤの情報がいらないのだよ。
[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アドレスがわかった後。
- ARPテーブルを参照し、宛先IPアドレスに対応するMACアドレスがあるかどうか調べる。
- なければARP要求をブロードキャスト送信する。
- ARP要求を受け取った各ホストは、ARPパケットの中の宛先IPアドレスと自分のIPアドレスを比較する。
- 一致しなければ、無視。
- 一致した場合、ARP応答を送信。
- 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テーブルにエントリを追加する