ネットワークの教科書NETWORK

第2章 アドレスのしくみ2-1コース全体 19回中5本目

入門読了 約8分

MACアドレスとIPアドレスの違い

どちらも「アドレス」と呼ばれて混同しがちなMACアドレスとIPアドレス。役割の違いと、複数のルータを経由するときに何が書き換わるのかを整理します。

結論

IPアドレスは「住所」、MACアドレスは「次に渡す相手」

IPアドレスは、通信の最終的な届け先(または送り主)を示す住所です。途中でどれだけ中継されても、 パケットが目的地に届くまで変わりません。

MACアドレスは、区間ごとに「次にこのデータを手渡す相手」を示すアドレスです。配送員が中継地点ごとに 入れ替わるように、ルータを1つ越えるたびに書き換わります。

この記事の核心パケットが複数のルータを経由するとき、IPヘッダの宛先は変わらず、Ethernetヘッダの宛先MACアドレスだけが ルータごとに書き換わります。この1点を押さえれば、両者の違いはほぼ理解できたことになります。
比較

MACアドレスとIPアドレスの比較表

項目MACアドレスIPアドレス(IPv4)
ビット数48ビット32ビット
表記16進数・コロン区切り
例:AC:DE:48:00:11:22
10進数・ドット区切り
例:192.168.10.25
転送中に変わるか中継のたびに書き換わる宛先に届くまで変わらない
届く範囲同一ネットワーク内のみ有効ネットワークをまたいで有効
どの層か第2層(データリンク層)第3層(ネットワーク層)
たとえ

宅配便で考える

荷物を送るとき、伝票に書く宛先住所は最初から最後まで変わりません。これがIPアドレスです。

一方、荷物を実際に手で運ぶ配送員は、営業所を経由するたびに交代します。自宅から最寄りの営業所まで運ぶ人と、 営業所間のトラック運転手と、最後に届ける配達員は、みんな別人です。これがMACアドレスにあたります。

配送員(次のルータ)は中継地点ごとに変わりますが、荷物に書かれた宛先住所(宛先IP)は最初から最後まで変わりません。
核心

パケットが転送されるとき、何が書き換わるか

まず、HTTPリクエストがEthernetフレームとして組み立てられるまでの様子(カプセル化)を確認します。

STEP 1 / 5
HTTPリクエストアプリのデータ
アプリケーション層 — データ
ブラウザが GET /index.html HTTP/1.1 というHTTPリクエストを作りました。この時点ではまだ「文章」でしかなく、どこへどう届くかの情報は何も付いていません。

ただし上のステッパーが見せているのは、1回の区間(1ホップ)でフレームが組み立てられる様子だけです。 実際の通信では複数のルータを経由するので、区間ごとにEthernetヘッダが作り直されます。 PCからサーバまで、ルータA・ルータBの2台を経由する例で見てみましょう。

区間送信元MAC宛先MAC送信元IP宛先IP
PC → ルータAAA:AA:AA:AA:AA:01AA:AA:AA:AA:AA:02192.168.10.25203.0.113.50
ルータA → ルータBAA:AA:AA:AA:AA:03AA:AA:AA:AA:AA:04192.168.10.25203.0.113.50
ルータB → サーバAA:AA:AA:AA:AA:05AA:AA:AA:AA:AA:06192.168.10.25203.0.113.50

送信元MACと宛先MACは区間が変わるたびに別の値に書き換わっています。一方で、送信元IPと宛先IPは 3つの区間を通じてずっと同じです。IPヘッダの宛先は変わらず、Ethernetヘッダの宛先MACだけが ルータごとに書き換わります。

この表は、途中でアドレス変換を行わない経路を前提にしています。家庭用ルータのようにNATを挟む場合は、そこで送信元IPがルータ側のアドレスに書き換わります。詳しくは2-4 プライベートIPアドレスとNATで扱います。
しくみ

ARPの役割

MACアドレスは自分で決めるものではないので、同じネットワーク内の相手について「IPアドレスは分かっているが、 MACアドレスが分からない」という状況が起こります。これを解決するのがARP(Address Resolution Protocol)です。

流れはシンプルです。ARPリクエスト(「このIPアドレスの人はいますか」とネットワーク内全員に問い合わせる ブロードキャスト)を送ると、該当するIPアドレスを持つ機器だけがARPリプライ(「私です、MACアドレスは これです」という返信)を返します。

実践

自分の手元で確認する

ターミナルで、自分のMACアドレス・IPアドレスと、同じネットワーク内の機器のIP↔MAC対応表を見てみましょう。

ip addr自分のMACアドレスとIPアドレスを見る(Linux)
$ ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    link/ether ac:de:48:00:11:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.25/24 brd 192.168.10.255 scope global eth0

# link/ether の行がMACアドレス、inet の行がIPアドレスです。
arp -a同一ネットワーク内の機器のIP↔MAC対応表を見る
$ arp -a
? (192.168.10.1) at ac:de:48:aa:bb:cc [ether] on eth0
? (192.168.10.30) at ac:de:48:dd:ee:ff [ether] on eth0

# これまでにARPで解決済みの、IPアドレスとMACアドレスの対応表です(ARPキャッシュ)。
練習

練習問題(全5問)

選んでから「採点する」を押すと、解説つきで答え合わせができます。

Q1MACアドレスは何ビット?
Q2IPv4アドレスは何ビット?
Q3PCからサーバまで複数のルータを経由するとき、パケットが中継されるたびに書き換わるのはどれ?
Q4同じネットワーク内の相手のIPアドレスは分かっているが、MACアドレスが分からないときに使う仕組みは?
Q5MACアドレスとIPアドレスが担当する層の組み合わせとして正しいものは?
次の回

コースを読み進める