レイヤ3 ARP
レイヤ3 ARP
■4つのアドレス・おさらいのおさらい
送信元のアドレスを取得する方法について。
送信元、自分のMACアドレスはNICをとりつけた段階で分かる。
送信元IPアドレスは、管理者に教えてもらうアドレスを直接入力する静的と
DHCPにより自動で割り振られる動的。の二つの方法がある。
残る問題は、データの転送を行いたい相手のアドレスをどのように知るかという一点にかかっている。
宛先のMACアドレスを知る方法はARPというプロトコルを使用する。
■アドレス解決プロトコル
アープと読む。
アドレス解決プロトコルと日本語では訳される。
「宛先のMACアドレスが分からない」という状態を解決してくれるプロトコルという意味。
ARPは宛先のIPアドレスが決定した時点で実行される。
例えば、このサイト「Roads to Node」を見たいと思ったとする。
そうすると、ブラウザに「Roads to Node」のURLを入力する。
そうすると、DNSという機能が働いて、サイトが置いてあるサーバのIPアドレスを教えてもらえる。
そこで、「このIPアドレスのホスト、あなたのMACアドレスを教えて」と聞く。
これがARPだ。
■ARPテーブル
まず、データ転送を希望するホストは、宛先のIPアドレスを取得する。
※DNS
宛先IPアドレスが決定した時点で、宛先MACアドレスを知るためにARPテーブルを参照する。
ARPテーブルとは、IPアドレスとMACアドレスの対応表のこと。
「192.168.0.1のMACアドレスは00-40-26-f4-1a-02」です。という表がある。
<ARPエントリタイプは?>
static(静的)とdynamic(動的)の二つがある。
dynamicはARPによって取得したIPアドレスとMACアドレスの対応という意味。
staticは手動で対応を入力したという意味になる。
ARPテーブルに宛先IPと宛先MACの対応があれば、その時点でMACアドレスがわかる。
ARPテーブルがあれば、いちいちMACアドレスを聞く必要がない。
問題は、ARPテーブルに宛先IPと宛先MACの対応がない場合だ。
そのため、「このIPアドレスのホスト、あなたのMACアドレスを教えて」と聞きその結果をARPテーブルに載せることをする。
この「教えて」というのがARP要求だ。
このARPはIPと同じくレイヤ3のプロトコルだ。
このARPにのっとって送信されるARP要求だが、IPを使わない。
つまり、IPの代わりにARPでデータ転送を行う。
なので、IPパケットの代わりにARPパケットというちょっと特殊なパケットを使う。
特徴はARPパケット自体がデータという点。
上のレイヤのプロトコルを使わない。
つまり以下のような形で送るということ。
ARPパケットの中身は以下のようになっている。
下の4つを見てわかる通り、4つのアドレスすべてが入っている。
????
でも宛先のMACアドレスは分からないのでは?
まず、文章でで説明するとこのようになる。
▼宛先にデータを転送しようとして、宛先IPアドレスが分かったあと。
1.ARPテーブルを参照し、宛先IPアドレスに対応するMACアドレスがあるかどうかを調べる。
2.なければ、ARP要求をブロードキャスト送信する。
3.ARP要求を受け取っとホストは、ARPパケットの中の宛先IPアドレスと自分のIPアドレスを比較する。
└一致しなければ無視
└一致した場合、ARP対応を送信
4.ARP対応を受け取った(ARP要求を送った)ホストは、ARPテーブルにそのMACアドレスを追加する。
4つのアドレスがそろい、宛先へのデータ送信が可能になる。
DHCPと同じように、ブロードキャストを使う。
誰に送ったらいいか分からないときは、ブロードキャストをよく使う。
ARP要求を受け取ったら、その送信元を自分のARPテーブルに追加しておく。
そうすることによって、ARPを出す回数をなるべく減らすようにしている。
ARPが多発するのは望ましくない。
■ARPテーブルのエントリの問題
ARPが多発するのはなぜよくないのか?
それはARPがブロードキャストだから。
ブロードキャストはなにしろ、全員宛なので、ネットワークの帯域幅を多く消費する。
<でも、イーサネットは結局全員に届くのでは?別にブロードキャストでなくて、一人宛だとしても全員と同じになってしまわないか?>
確かにイーサネットだと全員に届く。
しかし、スイッチやブリッジなどのデバイスを使えば事情はことなる。
※スイッチやブリッジはフィルタリングして宛先のみに届く。
だが、ブロードキャストはスイッチやブリッジではフィルタリングできない。
なのでブロードキャストの多発はトラフィックに影響を及ぼしやすい。
ブロードキャストが多発しすぎると、ネットワーク全体が通信不能になってしまうことがある。
このような状態をブロードキャスト・ストームという。
では、そのARPの回数を減らす方法は?
答えは、ARPテーブルを事前に作っておくこと。
ARPテーブルを静的にエントリを作っておくのがARPの回数を減らす早道だ。
静的なエントリはずっと保持される。
そうすればARPは行われなくなる。
だが、実際ほとんどのデバイスでは、ARPテーブルを静的に作成することはできない。
なぜなら、ARPテーブルが間違っている時点で、送信は絶対に不可能になるからだ。
ARPテーブルが間違って記憶されると、IPアドレスとMACアドレスが一致しないことになる。
イーサネットの仕組みを思い出してもらいたい。
自分のMACアドレスと一致しないフレームは破棄される。
なので、MACアドレスが違った時点でフレームを受け取ってもらえないことになる。
だからARPテーブルの動的なエントリは一定時間ごとにクリアされるように作られている。
IPアドレスとMACアドレスの対応が間違うことのないように。
。。。。。でもそうなると、結局ARPは減らないよね?
結論、そうなってしまう。
<今日のポイント>
・宛先MACアドレスを知るにはARPを使用する
・ホストはIPアドレスとMACアドレスの対応表であるARPテーブルをもつ
・ARPテーブルは一定時間でクリアされる
・ARPテーブルに宛先のエントリがない場合、ARPが実行される
┗ARP要求をブロードキャストする
┗ARP要求の宛先IPアドレス以外のホストはARP要求を破棄する
┗ARP要求の宛先IPアドレスのホストは、ARP対応を返す
┗ARP対応を受け取ったARP要求の送信ホストはARPテーブルにエントリを追加する