+ 作るログイン
図を読み込んでいます…
1 / 14
ネットワークのしくみ ― 場所を知らない相手に、なぜ届くのか / 全8章

ネットワークのしくみ 5:ARP ― 付け替わる MAC、変わらない IP

発行
アニメモ公式
版
第1版
改訂
コマ
全14

外のネットワークへ送るとき、PC は IP の宛先をサーバーのまま、MAC の宛先をルーターにします。そのルーターの MAC アドレスを知る仕組み(ARP)と、ルーターを越えるたびに MAC の札だけが付け替わり、IP の札は最後まで変わらない様子を、1区間ずつ追いかけます。

IP はサーバー宛て、MAC はルーター1宛て。でもその MAC は?

4本目の結論を思い出します。PC-A がサーバー(203.0.113.10)に送るとき、相手は外のネットワークにいるので、出口のルーター1(デフォルトゲートウェイ)に渡します。

そのとき、小包の荷札は次のようになります。

荷札宛先
IP の札サーバー(203.0.113.10)… 最終の宛先
MAC の札ルーター1 … 次に受け取る機械

ここで困ったことがあります。PC-A は、ルーター1の IP アドレス(192.168.1.1)は設定で知っています。でも、ルーター1の MAC アドレスは知りません。3本目で見たとおり、スイッチに小包を届けてもらうには、宛先 MAC アドレスが必要です。

この作品では、IP アドレスから MAC アドレスを知る仕組み(ARP)と、そのあと小包が区間ごとにどう書き換わっていくのかを見ていきます。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 1 / 14
  • IP はサーバー宛て、MAC はルーター1宛て。でもその MAC は?
  • PC-A
  • 192.168.1.10 MAC aa:aa
  • → サーバー
  • スイッチ
  • ルーター1
  • 10.0.0.0/30
  • ルーター2
  • サーバー
  • 192.168.1.1 MAC r1:r1
  • 10.0.0.2 MAC r2:r2
  • 203.0.113.10 MAC ss:ss
  • ネットワークB 203.0.113.0/24
  • PC-B
  • 192.168.1.20 MAC bb:bb
  • 宛先 MAC
  • ???(ルーター1の MAC)
  • 宛先 IP
  • 203.0.113.10(サーバー)… 最後まで同じ
  • ネットワークA 192.168.1.0/24
  • ルーター1の IP は知っている。でも MAC は知らない。

ARP:「この IP の人、MAC を教えて」と全員に聞く

ARP(Address Resolution Protocol)の考え方は単純です。

同じネットワークの全員に「192.168.1.1 の人、あなたの MAC アドレスを教えて」と聞く。その IP アドレスを持っている本人だけが答える。

誰に聞けばいいか分からないので、全員に聞く。3本目で見たブロードキャスト(全員宛て)は、まさにこのためにあります。

教室で「田中さんいますか?」と全員に聞くと、田中さん本人だけが「はい」と手を挙げるのと同じです。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 2 / 14
  • ARP:「この IP の人、MAC を教えて」と全員に聞く
  • 質問(全員へ)
  • 192.168.1.1 の人、MAC アドレスを教えて
  • 答え(質問した人へだけ)
  • 192.168.1.1 は私です。MAC は r1:r1
  • ARP = Address Resolution Protocol(アドレス解決)
  • 同じネットワークの全員に聞けば、その IP を持つ本人だけが答える。

質問は、ブロードキャストで全員に届く

PC-A は、ARP の質問の小包を作ります。

欄中身
宛先 MACff:ff:ff:ff:ff:ff(全員)
送信元 MACaa:aa(PC-A)
質問192.168.1.1 の MAC アドレスは?

宛先がブロードキャストなので、スイッチはこの小包を全部の口に流します。PC-B にも、ルーター1にも届きます。

ARP の小包は、IP の札を付けずに、MAC の札の中に直接入れて送ります。まだ相手の MAC を知らない段階で使うものなので、同じネットワークの中だけで完結する、いちばん下の層の仕組みです。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 3 / 14
  • 質問は、ブロードキャストで全員に届く
  • PC-A
  • 192.168.1.10 MAC aa:aa
  • スイッチ
  • ルーター1
  • 10.0.0.0/30
  • ルーター2
  • サーバー
  • ARP 質問
  • 192.168.1.1 MAC r1:r1
  • 10.0.0.2 MAC r2:r2
  • 203.0.113.10 MAC ss:ss
  • ネットワークB 203.0.113.0/24
  • PC-B
  • 192.168.1.20 MAC bb:bb
  • 宛先 MAC
  • ff:ff:ff:ff:ff:ff(全員)
  • 質問
  • 192.168.1.1 の MAC は?(聞いたのは aa:aa)
  • ネットワークA 192.168.1.0/24
  • 宛先 MAC は ff:ff:ff:ff:ff:ff(3本目)。スイッチは全部の口に流す。

本人(ルーター1)だけが、質問した人に答える

質問を受け取った機械は、それぞれ「192.168.1.1 は自分か?」を確かめます。

PC-B は自分の IP アドレスが 192.168.1.20 なので、黙って捨てます。ルーター1は自分の IP アドレスが 192.168.1.1 なので、答えを返します。

欄中身
宛先 MACaa:aa(質問した PC-A)
送信元 MACr1:r1(ルーター1)
答え192.168.1.1 の MAC アドレスは r1:r1

答えは全員に叫ぶ必要がないので、質問した PC-A だけに送ります。質問の小包に PC-A の MAC アドレスが書いてあったので、宛先が分かります。

ついでに、スイッチもこのやりとりで、aa:aa と r1:r1 がどの口にいるかを学習します(3本目)。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 4 / 14
  • 本人(ルーター1)だけが、質問した人に答える
  • PC-A
  • 192.168.1.10 MAC aa:aa
  • スイッチ
  • ルーター1
  • 10.0.0.0/30
  • ルーター2
  • サーバー
  • ARP 答え
  • 192.168.1.1 MAC r1:r1
  • 10.0.0.2 MAC r2:r2
  • 203.0.113.10 MAC ss:ss
  • ネットワークB 203.0.113.0/24
  • PC-B
  • 192.168.1.20 MAC bb:bb
  • 宛先 MAC
  • aa:aa(質問した PC-A)
  • 答え
  • 192.168.1.1 の MAC は r1:r1
  • ネットワークA 192.168.1.0/24
  • PC-B も質問を受け取るが、自分の IP ではないので黙っている。

答えは、しばらく覚えておく(ARP テーブル)

小包を送るたびに ARP で聞いていたら、ネットワークがブロードキャストだらけになってしまいます。そこで PC は、答えをしばらく覚えておきます。この表を ARP テーブル(ARP キャッシュ)と呼びます。

覚えておく時間は機械によって違い、数分から数十分程度です。3本目のスイッチの表と同じく、古い情報を持ち続けないように、時間が経つと忘れます。

自分の PC のターミナルで arp -a と打つと、自分の ARP テーブルを見ることができます。家のネットワークなら、ルーター(デフォルトゲートウェイ)の IP アドレスと MAC アドレスの組が、ほぼ必ず載っているはずです。

混同しやすいので整理しておきます。

表持っている機械中身
MAC アドレステーブル(3本目)スイッチMAC アドレス → 口(ポート)
ARP テーブル(この作品)PC・ルーターIP アドレス → MAC アドレス
  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 5 / 14
  • 答えは、しばらく覚えておく(ARP テーブル)
  • PC-A の ARP テーブル
  • 自分の PC で 「arp -a」を打つと 見られる
  • 192.168.1.1 → r1:r1
  • 192.168.1.20 → bb:bb
  • 3本目のスイッチの表(MAC → 口)とは別物。こちらは IP → MAC
  • 毎回聞くのは無駄なので、数分から数十分は覚えておく。

1区間目:PC-A → ルーター1

ルーター1の MAC アドレスが分かったので、PC-A はようやく本来の小包を送れます。

荷札の欄中身
宛先 MACr1:r1(ルーター1)
送信元 MACaa:aa(PC-A)
宛先 IP203.0.113.10(サーバー)
送信元 IP192.168.1.10(PC-A)
TTL64

MAC の宛先はルーター1、IP の宛先はサーバー。2つの宛先が食い違っています。これが外宛ての小包の普通の姿です。

スイッチは MAC の札だけを見て、ルーター1の口に流します。IP の札は見ません。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 6 / 14
  • 1区間目:PC-A → ルーター1
  • PC-A
  • 192.168.1.10 MAC aa:aa
  • → サーバー
  • スイッチ
  • ルーター1
  • 10.0.0.0/30
  • ルーター2
  • サーバー
  • 192.168.1.1 MAC r1:r1
  • 10.0.0.2 MAC r2:r2
  • 203.0.113.10 MAC ss:ss
  • ネットワークB 203.0.113.0/24
  • PC-B
  • 192.168.1.20 MAC bb:bb
  • 宛先 MAC
  • r1:r1(ルーター1)
  • 送信元 MAC
  • aa:aa(PC-A)
  • 宛先 IP
  • 203.0.113.10(サーバー)… 最後まで同じ
  • ネットワークA 192.168.1.0/24
  • TTL
  • 64
  • MAC はルーター1宛て。IP はサーバー宛て。2つの宛先が食い違っている。

ルーター1は MAC の札を捨て、IP の札を見る

小包を受け取ったルーター1は、まず MAC の札を確かめます。宛先が自分(r1:r1)なので受け取ります。

ここで、MAC の札は役目を終えます。MAC の札の役目は「この線の上で、ルーター1まで届けること」だったからです。ルーター1は MAC の札を捨てます。

次に、ルーター1は IP の札を見ます。宛先は 203.0.113.10 です。自分宛てではありません。そこで、自分のルーティングテーブル(道しるべの表)を確かめます。「203.0.113.0/24 宛ては、次はルーター2(10.0.0.2)へ」と書いてあります。

この「表を見て次を決める」部分は、次の作品で詳しく見ます。ここでは「次はルーター2」と決まった、とだけ押さえてください。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 7 / 14
  • ルーター1は MAC の札を捨て、IP の札を見る
  • PC-A
  • 192.168.1.10 MAC aa:aa
  • → サーバー
  • スイッチ
  • ルーター1
  • 10.0.0.0/30
  • ルーター2
  • サーバー
  • 192.168.1.1 MAC r1:r1
  • 10.0.0.2 MAC r2:r2
  • 203.0.113.10 MAC ss:ss
  • ネットワークB 203.0.113.0/24
  • PC-B
  • 192.168.1.20 MAC bb:bb
  • 宛先 MAC
  • (捨てた)
  • 送信元 MAC
  • (捨てた)
  • 宛先 IP
  • 203.0.113.10(サーバー)… 最後まで同じ
  • ネットワークA 192.168.1.0/24
  • 判断
  • 203.0.113.0/24 宛て → 次はルーター2(10.0.0.2)
  • MAC の札は「隣まで」の役目を終えた。次の行き先は IP の札で決める。

新しい MAC の札を付けて、次の区間へ

次の渡し先がルーター2(10.0.0.2)と決まりました。ルーター1は、ルーター2の MAC アドレスを知る必要があります。どうするかというと、PC-A がやったのとまったく同じように、ARP で聞きます(覚えていればそれを使います)。

そして、新しい MAC の札を付けます。

荷札の欄中身
宛先 MACr2:r2(ルーター2)
送信元 MACr1:w(ルーター1の右側の口)
宛先 IP203.0.113.10(サーバー)… 同じ
TTL63(1減った)

ルーターは口ごとに別の MAC アドレスを持っています。左側(ネットワーク A 側)の口は r1:r1、右側(ルーター2側)の口は r1:w です。ルーターは複数のネットワークの境目に立っているので、それぞれのネットワークに1つずつ口を持っているのです。

IP の札は書き換えません。ただし、TTL だけは1減らします(2本目)。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 8 / 14
  • 新しい MAC の札を付けて、次の区間へ
  • PC-A
  • 192.168.1.10 MAC aa:aa
  • → サーバー
  • スイッチ
  • ルーター1
  • 10.0.0.0/30
  • ルーター2
  • サーバー
  • 192.168.1.1 MAC r1:r1
  • 10.0.0.2 MAC r2:r2
  • 203.0.113.10 MAC ss:ss
  • ネットワークB 203.0.113.0/24
  • PC-B
  • 192.168.1.20 MAC bb:bb
  • 宛先 MAC
  • r2:r2(ルーター2)
  • 送信元 MAC
  • r1:w(ルーター1の右側の口)
  • 宛先 IP
  • 203.0.113.10(サーバー)… 最後まで同じ
  • ネットワークA 192.168.1.0/24
  • TTL
  • 63(1減った)
  • 宛先はルーター2の MAC。これも ARP で調べておく。TTL を1減らす。

最後の区間:ルーター2 → サーバー

ルーター2も、同じことを繰り返します。MAC の札を捨て、IP の札の宛先 203.0.113.10 を見て、表を確かめます。

今度は、宛先がルーター2の右側のネットワーク(203.0.113.0/24)の中にいます。つまり、4本目の言葉で言えば「同じネットワーク」です。だから、ほかのルーターに渡すのではなく、サーバー本人に直接渡します。ARP でサーバーの MAC アドレス(ss:ss)を聞いて、MAC の札を付けます。

サーバーは、MAC の札を見て「自分宛てだ」、IP の札を見て「自分宛てだ」と確かめ、中身を受け取ります(2本目の「外側から開けていく」)。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 9 / 14
  • 最後の区間:ルーター2 → サーバー
  • PC-A
  • 192.168.1.10 MAC aa:aa
  • 着いた
  • スイッチ
  • ルーター1
  • 10.0.0.0/30
  • ルーター2
  • サーバー
  • 192.168.1.1 MAC r1:r1
  • 10.0.0.2 MAC r2:r2
  • 203.0.113.10 MAC ss:ss
  • ネットワークB 203.0.113.0/24
  • PC-B
  • 192.168.1.20 MAC bb:bb
  • 宛先 MAC
  • ss:ss(サーバー)
  • 送信元 MAC
  • r2:w(ルーター2の右側の口)
  • 宛先 IP
  • 203.0.113.10(サーバー)… 最後まで同じ
  • ネットワークA 192.168.1.0/24
  • TTL
  • 62
  • ルーター2から見ると、サーバーは自分の右側のネットワークにいる。直接渡す。

3つの区間を並べると

ここまでの3つの区間を並べてみます。

区間宛先 MAC宛先 IPTTL
PC-A → ルーター1r1:r1203.0.113.1064
ルーター1 → ルーター2r2:r2203.0.113.1063
ルーター2 → サーバーss:ss203.0.113.1062

MAC の札は3回とも別物です。区間ごとに、その区間の「隣」の MAC アドレスが書かれています。IP の札は1文字も変わっていません(TTL だけが減っています)。

1本目で「IP アドレスは最後まで変わらない。MAC アドレスは区間ごとに付け替わる」と書いたのは、このことです。郵便でいえば、封筒の宛名(IP)はそのままで、局から局へ運ぶときの配達伝票(MAC)だけを区間ごとに貼り替えている、ということになります。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 10 / 14
  • 3つの区間を並べると
  • 区間
  • 宛先 MAC / 宛先 IP
  • PC-A → ルーター1
  • r1:r1 / 203.0.113.10
  • ルーター1 → ルーター2
  • r2:r2 / 203.0.113.10
  • ルーター2 → サーバー
  • ss:ss / 203.0.113.10
  • 手紙の宛名(IP)はそのまま、配達伝票(MAC)だけを区間ごとに貼り替える
  • MAC の札は3回とも別物。IP の札は1文字も変わっていない。

なぜ、わざわざ2種類の宛先を使い分けるのか

なぜ、こんな二重の仕組みになっているのでしょうか。理由は2本目で見た層の分担です。

途中の区間は、有線の LAN、Wi-Fi、光ファイバー、携帯電話の回線と、さまざまです。区間ごとに「線の上でどうやって隣に渡すか」の方法は違っていてかまいません。MAC アドレスを使うのはイーサネットや Wi-Fi の場合で、別の種類の回線なら別の渡し方をします。

一方で、「最終的にどこへ向かうか」は、途中のどの区間でも共通の書き方でなければなりません。そうでないと、途中のルーターが「どっちへ向かえばいいか」を判断できません。

だから、区間ごとに変わってよいもの(MAC)と、旅の最初から最後まで共通のもの(IP)を、別の層の別の札に分けたのです。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 11 / 14
  • なぜ、わざわざ2種類の宛先を使い分けるのか
  • MAC の役目
  • IP の役目
  • いまの線の上で、どの機械に渡すか
  • 最終的に、どこへ向かうか
  • 途中の線は、有線・Wi-Fi・光・携帯の回線とさまざま。 線ごとに渡し方は違っていい。最終の宛先だけは全員で共通にする
  • 線の上で渡す仕組み(MAC)と、遠くへ運ぶ仕組み(IP)を、別の層に分けたから。

同じネットワーク宛てなら、相手本人の MAC を聞く

よくある勘違いを1つ整理しておきます。「ARP では、最終の宛先の MAC アドレスを聞く」と思いがちですが、違います。

ARP で聞くのは、「次に渡す相手」の MAC アドレスです。

宛先次に渡す相手ARP で聞く IP
外のネットワーク(サーバー)デフォルトゲートウェイ192.168.1.1(ルーター1)
同じネットワーク(PC-B)相手本人192.168.1.20(PC-B)

PC-A がサーバー本人の MAC アドレスを ARP で聞くことはありません。聞いても、サーバーは別のネットワークにいるので、ブロードキャストが届かず、誰も答えません。

同じネットワークの PC-B 宛てなら、4本目の判定で「同じネットワーク」と分かるので、PC-B 本人の MAC アドレスを聞いて、直接渡します。ルーターは通りません。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 12 / 14
  • 同じネットワーク宛てなら、相手本人の MAC を聞く
  • PC-A
  • 192.168.1.10 MAC aa:aa
  • スイッチ
  • ルーター1
  • 10.0.0.0/30
  • ルーター2
  • サーバー
  • → PC-B
  • 192.168.1.1 MAC r1:r1
  • 10.0.0.2 MAC r2:r2
  • 203.0.113.10 MAC ss:ss
  • ネットワークB 203.0.113.0/24
  • PC-B
  • 192.168.1.20 MAC bb:bb
  • ARP で聞く
  • 192.168.1.20 の MAC は? → bb:bb
  • 宛先 MAC
  • bb:bb(PC-B 本人)
  • ネットワークA 192.168.1.0/24
  • 宛先 IP
  • 192.168.1.20(PC-B)
  • ARP で聞くのは「次に渡す相手」の MAC。外宛てならルーター、中宛てなら本人。

ARP は「言ったもの勝ち」。だから悪用もされる

ARP には弱点があります。答えに、本人である証拠が付いていないことです。

同じネットワークに悪意のある機械がいると、「192.168.1.1 は私です。MAC は ee:ee」と偽の答えを送れます。PC-A がそれを信じると、外宛ての小包をすべて、その悪意のある機械に渡してしまいます。中身を覗かれたり、書き換えられたりするおそれがあります。これを ARP スプーフィングと呼びます。

メールのしくみシリーズで見た「SMTP は差出人を確かめない」と、よく似た形です。古い仕組みは、同じネットワークの中にいる相手を信頼する前提で作られています。

対策として、会社のネットワークではスイッチに偽の答えを弾く機能を入れたりします。また、HTTPS のように通信の中身を暗号化しておけば、途中で横取りされても中身は読まれません。公共の Wi-Fi で HTTPS が大事なのは、このためでもあります。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 13 / 14
  • ARP は「言ったもの勝ち」。だから悪用もされる
  • 悪意ある機械
  • PC-A
  • 「192.168.1.1 は私です(ee:ee)」
  • 信じて ee:ee に渡してしまう
  • ARP の答えには、本人である証拠が付いていない。 対策:会社のスイッチの防御機能・通信の暗号化(HTTPS)
  • 偽の答えで「ルーターは私」と名乗られると、通信を横取りされうる。

まとめ:ARP と付け替わる MAC

この作品で見たことをまとめます。

項目内容
ARP「この IP の人、MAC を教えて」と全員に聞き、本人だけが答える
ARP テーブル答えをしばらく覚えておく(IP → MAC)
聞く相手次に渡す相手。外宛てならルーター、中宛てなら本人
ルーターの仕事MAC の札を捨て、IP の札を見て次を決め、新しい MAC の札を付ける
変わるものMAC の札(区間ごと)、TTL(1ずつ減る)
変わらないものIP の札(最終の宛先・送信元)

冒頭の疑問に引きつけると、小包は「最終の宛先は最後まで同じ札を持ち、隣への渡し方は区間ごとに付け替える」ことで、途中のさまざまな線を越えていきます。

残る疑問は、ルーター1が「203.0.113.0/24 宛ては、次はルーター2」と判断した、その表の中身と使い方です。次の作品で、ルーターとルーティングテーブルを見ていきます。

  • ネットワークのしくみ 5 / 8 ― ARP:付け替わる MAC
  • 14 / 14
  • まとめ:ARP と付け替わる MAC
  • PC-A
  • 192.168.1.10 MAC aa:aa
  • 着いた
  • スイッチ
  • ルーター1
  • 10.0.0.0/30
  • ルーター2
  • サーバー
  • 192.168.1.1 MAC r1:r1
  • 10.0.0.2 MAC r2:r2
  • 203.0.113.10 MAC ss:ss
  • ネットワークB 203.0.113.0/24
  • PC-B
  • 192.168.1.20 MAC bb:bb
  • ARP
  • IP から、次に渡す相手の MAC を知る
  • MAC
  • 区間ごとに付け替わる
  • ネットワークA 192.168.1.0/24
  • IP
  • 最後まで変わらない(TTL だけ減る)
  • 次の作品では、ルーターが「次はルーター2」と決めた、その表の中身を見る。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]