第2章 アドレスのしくみ|2-1|コース全体 19本中5本目
MACアドレスとIPアドレスの違いと使い分け
IPアドレスは
前の記事 ・1-4 カプセル化とは ― ヘッダが増えるしくみ
IPアドレスは「住所」、MACアドレスは「次に渡す相手」
IPアドレスは、通信の最終的な届け先や送り主を示す住所です。途中でどれだけ中継されても、データの小包であるパケットが目的地に届くまで変わりません。
MACアドレスは、区間ごとに、次にデータを手渡す相手を示すアドレスです。ルータを1つ越えるたびに書き換わります。宅配便の配送員が中継地点ごとに交代するのと同じです。
この区別が分かると、ルータを越える通信で何が書き換わるかを追えます。ARPやルーティングも、この2つのアドレスの使い分けを前提にした仕組みです。
MACアドレスとIPアドレスの比較表
| 項目 | MACアドレス | IPアドレス |
|---|---|---|
| ビット数 | 48ビット | 32ビット |
| 表記 | 16進数・コロン区切り 例:AC:DE:48:00:11:22 | 10進数・ドット区切り 例:192.168.10.25 |
| 転送中に変わるか | ルータを越えるたびに書き換わる(スイッチは書き換えない) | 宛先に届くまで変わらない |
| 届く範囲 | 同一ネットワーク内のみ有効 | ネットワークをまたいで有効 |
| どの層か | 第2層(データリンク層) | 第3層(ネットワーク層) |
| 誰が割り当てるか | 製造時にメーカーが割り当てる | 設定やDHCPで割り当てる |
いちばんの違いは誰が割り当てるかです。MACアドレスは、機器の製造時に工場で書き込まれます。
先頭24ビットを見るとメーカーが分かり、この部分をOUIまたはベンダーIDと呼びます。
IPアドレスは、あとから自由に割り当てや変更ができます。割り当て方には、手で設定する方法と、IPアドレスなどを自動で配るDHCPがあります。
最近のスマホやPCには、接続するネットワークごとに別のランダムなMACアドレスを使う機能があります。この機能をMACアドレスランダム化と呼びます。店舗などでの位置追跡を防ぎ、プライバシーを保護するための仕組みです。
2つのアドレスが両方必要なのは、片方だけでは通信が成立しないからです。MACアドレスだけでは、どのネットワークの機器かが分かりません。IPアドレスだけでは、同じネットワーク内で次にどの機器へ渡せばよいかを特定できません。
そこで、最終的な宛先はIPアドレスで指定し、区間ごとの受け渡し相手はMACアドレスで指定します。
宅配便で考える
荷物を送るとき、伝票に書く宛先住所は最初から最後まで変わりません。これがIPアドレスです。
一方、荷物を実際に手で運ぶ配送員は、営業所を経由するたびに交代します。自宅から最寄りの営業所まで運ぶ人と、営業所間のトラック運転手と、最後に届ける配達員は別の人です。この配送員にあたるのがMACアドレスです。
パケットが転送されるとき、何が書き換わるか
まず、HTTPリクエストがEthernetフレーム(イーサネットで送るデータの単位)に組み立てられる様子を確認します。組み立ての流れはカプセル化の記事で説明しています。
ブラウザが、GET /index.html HTTP/1.1 というHTTPリクエストを作りました。この時点では、まだただの文字列です。どこへどう届けるかの情報は何も付いていません。
TCPヘッダが付きます。ヘッダには、送信元ポート52310 / 宛先ポート80やシーケンス番号、ACK番号などが入ります。これで、相手のどのアプリ宛てか、何番目のデータかが分かるようになります。
IPヘッダが付きます。ヘッダには、送信元 192.168.10.25 / 宛先 203.0.113.50 とTTLが入ります。ルータは、このヘッダを見てどこへ転送するかを決めます。
Ethernetヘッダが付きます。末尾には、誤りを検査するためのFCSも付きます。ヘッダの宛先MACアドレスは、最終目的地のものではありません。次に渡す相手である自宅ルータのものです。
完成したフレームは、0 と 1 の列になります。この列が、電気や光の信号、または電波として送り出されます。受信側は逆の順に、ヘッダを1枚ずつはがして上の層へ渡します。この作業を非カプセル化と呼びます。
ただし、上の図が示すのは、1つの区間でフレームが組み立てられる様子だけです。この1つの区間を1ホップと呼びます。
実際の通信では複数のルータを経由するので、区間ごとにEthernetヘッダが作り直されます。PCからサーバまで、ルータA・ルータBの2台を経由する例で確かめます。
| 区間 | 送信元MAC | 宛先MAC | 送信元IP | 宛先IP |
|---|---|---|---|---|
| PC → ルータA | AA:AA:AA:AA:AA:01 | AA:AA:AA:AA:AA:02 | 198.51.100.5 | 203.0.113.50 |
| ルータA → ルータB | AA:AA:AA:AA:AA:03 | AA:AA:AA:AA:AA:04 | 198.51.100.5 | 203.0.113.50 |
| ルータB → サーバ | AA:AA:AA:AA:AA:05 | AA:AA:AA:AA:AA:06 | 198.51.100.5 | 203.0.113.50 |
送信元MACと宛先MACは、区間が変わるたびに別の値に書き換わっています。一方、送信元IPと宛先IPは、表では3つの区間とも同じ値です。これはNAT後の値にそろえた書き方で、下の注記で説明します。
宛先IPアドレスは、最後まで変わりません。Ethernetヘッダの送信元MACアドレスと宛先MACアドレスは、ルータを越えるたびに作り直されます。
この表では、NATによる書き換えを省き、3区間ともNAT後の送信元 198.51.100.5 で書いています。
実際には、PCからルータAまでの区間の送信元は 192.168.10.25 です。自宅ルータであるルータAが、外へ送り出すときに送信元を 198.51.100.5 に書き換えます。
この書き換えがNATです。宛先IPは、NATがあっても変わりません。
ARPの役割
通信の相手を指定するときに使うのはIPアドレスですが、同じネットワーク内でデータを渡すにはMACアドレスが必要です。そのため、宛先のIPアドレスは分かっていても、対応するMACアドレスが分からない状況が起こります。
これを解決するのがARP(Address Resolution Protocol)です。ARPでは、まずネットワーク内の全員に「このIPアドレスの人はいますか」と問い合わせます。この問い合わせをARPリクエストと呼びます。
ARPリクエストはブロードキャストで全員に届きます。受け取った機器のうち、該当するIPアドレスを持つ機器だけが「私です、MACアドレスはこれです」と返します。この返事をARPリプライと呼びます。
自分の手元で確認する
ターミナルを開くと、自分のMACアドレスとIPアドレスを確認できます。同じネットワーク内の機器のIPアドレスとMACアドレスの対応表も確認できます。
$ 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 ? (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問)
正解:48ビット
MACアドレスは
正解:32ビット
IPv4アドレスは
正解:送信元MACアドレスと
IPヘッダの
正解:ARP
ARPは、
正解:MAC=第2層データリンク層、
MACアドレスは
選んでから「採点する」を押すと、解説つきで答え合わせができます。
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
