🌐

なぜMACアドレスとIPアドレスは両方必要なのか?

2022/05/05に公開3

この記事は,ネットワークの学習の序盤につまずくポイントである 「MACアドレスとIPアドレスってどっちか片方だけじゃだめなの?」「レイヤ2と3って結局何が違うの?」 という疑問について,私なりの回答をまとめた記事です。世に不正確な記事が出回っているように見受けられるので,正確な回答をまとめたく、長文になってしまいました。とはいえ,初学者向けにかなり初歩的なところから書いたつもりですので是非読んでみてください。

この記事について

この記事を読むと何が分かるか

  • MACアドレスとIPアドレスの役割の差が分かる
  • レイヤ2(=同一サブネットの通信)とレイヤ3(=サブネット間の通信)の仕組みが分かる
  • ネットワーク設計時にレイヤ2・レイヤ3のいずれで設計すべきか判断できる

なお,教科書的な説明ではなく,概念や捉え方の説明となっていますので,試験勉強には役立ちません。実務としてネットワーク設計を行う方の役に立つことを目指して書かれています。

想定読者

前提知識なくどなたでも読めるように工夫したつもりです。しかし,ネットワークエンジニアを目指す人,ネットワークに詳しくないがこれから勉強したい人,または勉強を始めたばかりの人が主な想定読者です。

はじめに

この章では「MACアドレスとIPアドレスとはそもそも何か」「どうしてタイトルのような疑問が生まれるか」を改めて説明します。不要な方は読み飛ばしてください。

そもそも何に使うのか

言葉の定義は,MACアドレスは「その機器を識別するためのハードウェア固有の番号」,IPアドレスは「機器に割り振られた機器を識別するための番号」です。少し難しいので,噛み砕いていきましょう。

その前に,通信ネットワークの仕組みを説明します。通信ネットワークでは,有線・無線にかかわらず,パケットと呼ばれるデータの塊ごとに宛先を明示するルールになっています。通常,一つの通信ネットワークには異なる複数の宛先宛の通信が混在しますから,ネットワークを構成する機器が送り先(「転送先」といいます)を知るために必要なルールです。

通信ネットワークはよく郵便に例えられます。郵便では,宛先を指定するために住所を使いますね。この住所のことをネットワークではアドレスと呼び,その代表例がMACアドレスとIPアドレスの2種類です。この2種類のアドレスは,「東京都千代田区千代田1-1」のような住所と同じで,ノートPCやスマートフォンといった機器(「端末」ともいいます)を特定するために使われます。

各アドレスの具体例

MACアドレスは 「00:00:5e:00:53:01」のように表記され,IPアドレスは「203.0.113.1」のように表記されるアドレスです。具体例も見てみましょう。

あなたがMac(MACアドレスではなくAppleのMacです)を使っていれば,ターミナルでifconfig en0とタイプすれば,自分の使っているMACアドレスとIPアドレスを確認できます。

% ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether 98:10:e8:XX:XX:XX
	inet 192.168.100.100 netmask 0xffffff00 broadcast 192.168.100.255

iOSの場合は,設定→Wi-Fiから確認できます。先ほどと同様に,こちらもMACアドレスとIPアドレスが両方表示されています。

iOSのWi-Fi設定画面。MACアドレスとIPアドレスが表示されている。
iOS設定

各アドレスの対応関係

前節で分かったように,一部の例外を除くと,ノートPCやスマートフォンなどの端末はMACアドレスとIPアドレスの両方を持ちます。必ず両方のアドレスを持っているのであれば,通信先を指定するための宛先アドレスはどちらか一方だけで十分のように思えてしまいます。

ネットワーク機器はIPアドレスとMACアドレスを1つずつ持っている。そのため,IPアドレスとMACアドレスは1:1の対応である。
IPアドレスとMACアドレスの対応

ネットワークを勉強した方は,ARP(Address Resolution Protocol)についても学んだかもしれません。ARPは,「このIPアドレスに対応するMACアドレスは何?」と聞く手続きのことです。Macの方は,ターミナルでarp -aとタイプすれば,その一覧を表示できます。

% arp -a
? (192.168.100.1) at 50:c4:dd:XX:XX:XX on en0 ifscope [ethernet]
? (192.168.100.17) at 1c:f2:9a:XX:XX:XX on en0 ifscope [ethernet]
? (192.168.100.20) at ae:cd:33:XX:XX:XX on en0 ifscope [ethernet]
? (192.168.100.33) at ac:67:84:XX:XX:XX on en0 ifscope [ethernet]
? (192.168.100.42) at f8:10:93:XX:XX:XX on en0 ifscope [ethernet]

実は,設定や構成が変更されない限りこのARP応答が変わることはなく,通常は何度問い合わせても同じ結果です。さらに,ARPは誰でも問い合わせできますし,ほぼ確実に結果が返ってきます。まとめると,IPアドレスとMACアドレスは1:1に対応するのです。これではますます,2種類のアドレスが必要な理由が分かりませんね。

どうして2つ必要なのか?

この記事の本編です。一言で説明すると,大規模なネットワークと使いやすいネットワークを両立するために2つを使い分ける必要があるという感じです。詳しく説明します。

ネットワーク機器の違い

ネットワーク機器には複数の物理ポートがあり,どのポートにどのアドレスの端末が繋がっているか知る必要がある。
ネットワーク機器はポートとMAC/IPアドレスの対応を知る必要がある

前述の通り,MACアドレスやIPアドレスはネットワーク機器が送り先を決定するために必要です。ここで,ネットワーク機器は,MACアドレスを見て転送先を決める「スイッチ」と,IPアドレスを見て転送先を決める「ルータ」の2つに大きく分類されます。ちなみに,家庭用のスイッチは「ハブ」と呼ばれることもあります。いずれにしろ,この2種類の機器を使い分けるために2種類のアドレスが必要と捉えて良いでしょう。

たぶん,まだしっくりきませんよね。スイッチとルータ,どちらかだけではダメなのでしょうか?

ネットワーク機器が正しい送り先を知る方法

前述の疑問を理解するためには,スイッチやルータが正しい転送先を知るメカニズムを学ぶ必要があります。転送するメカニズムではなくて,そもそもどこに転送すればよいかを知るメカニズムであることがポイントです。


ルータとスイッチの概念図

ざっくりと,

  • スイッチ
    • 始めて通信が行われたときに 転送先を把握しようとする
    • 転送先が分からないときは とりあえず全員にコピーして送る
  • ルータ
    • あらかじめ 転送先を把握しておく
    • 転送先が分からないときは 何もしない(パケットを一切転送しない)

という仕組みです。以下で詳細を説明します。

スイッチは,宛先不明のパケットが到達した場合,全ポートにブロードキャストする
スイッチの動作(宛先不明パケットの場合)

スイッチは,原則,パケットをコピーして全ての物理ポートに転送します。これをブロードキャストといいます。一見非効率ですが,全員に送れば送りたい人にも届くでしょうから,全く通信できないリスクは少ない方式です。とはいえこれを毎回繰り返すのはあまりにも非効率なので,次回以降の通信はブロードキャストされない仕組みがあります。具体的には,最初の通信が行われたときに「この物理ポートの先にはこのMACアドレスを持つ機器がいる」という情報が分かるのでこれを記録しておき,次回以降の転送に使うという仕組みです。ここで,作られる情報(データベース)をMACテーブル,作る仕組みをMAC学習といいます。

ここで,宛先不明のパケットが到達したら自動的にMACテーブルが生成されたことに着目しましょう。つまり,スイッチは特に設定をしなくても端末間の通信ができるということです。言い換えると,スイッチに線を挿したらとりあえずネットワークに繋がるということです。

ルータは,宛先不明のパケットが到達した場合,パケットを破棄する
ルータの動作(宛先不明パケットの場合)

ルータは,ルーティングテーブルに従ってパケットを転送する
ルータの動作(正しく設定されている場合)

一方,ルータはあらかじめルーティング設定を行う必要があります。ルータにただ線を挿すだけで自動的にネットワークにつながることはありえません。「この物理ポートの先にはこのIPアドレスを持つ機器がいる」という情報(データベース)をルーティングテーブルといいますが,このルーティングテーブルを作るための設定が必要です。

ルーティングテーブルの作り方は2種類あり,直接ルータにテーブルの情報を設定する方法とルーティングプロトコルを使う方法があります。後者は,単にプロトコルを有効化するだけではなく,「どういうポリシーでどういう優先度付けをして経路を選ぶか」という設定をします。いずれにしろ,ルーティングテーブルがないとそもそもパケットを転送しませんから,ルータは最初の通信が行われる前にルーティングテーブルを作る点がポイントです。

このように,スイッチとルータは,使う情報がMACアドレスかIPアドレスかという違いだけではなく,MACテーブル/ルーティングテーブルといった転送先のデータベースを作るタイミングと作り方が異なります。でも,なんだかルータって設定がめんどくさそうですよね。「これならスイッチだけでネットワークを作る方が楽じゃない?」と思いません?

ブロードキャストドメインと経路テーブル

では,ルータが必要な理由を考えてみましょう。実際,例えば数十台の端末しか繋がっていないネットワークであれば,スイッチだけで十分構築可能です。一方,ルータは大規模なネットワークになると活躍します。

例えば,1万台の機器が繋がるネットワークがあったとします。スイッチだけで構築すると,主に以下2つの問題が発生します。

  1. 宛先不明の場合,1万台全てにブロードキャストが届いてしまう
  2. 宛先が分かっても,スイッチに1万台分のデータベースを持たせなくてはならない

一つのブロードキャストドメインに大量の端末がつながっている場合,大量のブロードキャストが発生する
一つのブロードキャストドメインに繋がる端末の数だけブロードキャストが発生する

一つ目はわかりやすいですね。これが数百万・数億台になれば,大変なことになりそうです。つまり,ブロードキャストが流通するエリア(ブロードキャストドメインといいます)を大きくしすぎると,ネットワーク内の流通量が増えていまいます。一方,ルータを使えば,通信発生前にルーティングテーブルを作るため,そもそも宛先不明のブロードキャストは発生しないのです。

二つ目はどういうことでしょう。確かに,データベースに1万台分のエントリを持つのは大変そうです。でも,「え?MACアドレスでもIPアドレスでもそれは同じじゃない?」と思いましたよね。実は違うんです。

なぜ違うかを考えるために,MACアドレスとIPアドレスの割り振り方法の違いを学びましょう。冒頭,MACアドレスは「その機器を識別するためのハードウェア固有の番号」,IPアドレスは「機器に割り振られた機器を識別するための番号」と説明しました。この説明は実は,ユニークさを担保する方法を示していました。すなわち,住所であるMACアドレスやIPアドレスが他人と重複しては困りますから,重複しない仕組みをどう実現するかという説明だったのです。

MACアドレスは,その重複を防ぐため機器(ハードウェア)に紐付けられています。つまり,あなたがノートPCやスマホを買ったその瞬間,あなたは世界で唯一のMACアドレスを入手します。一方,IPアドレスはそうではありません。ネットワークの管理者が,接続したい機器に対して払い出すアドレスです。違うネットワークにノートPCをつなぎ替えると,IPアドレスは変わりますがMACアドレスは変わらないのです。MACアドレスは「ハードウェア固有」・IPアドレスは「ネットワーク接続時に機器に割り振られる」 ということですね。


MACテーブルとルーティングテーブル

IPアドレスはネットワーク管理者が管理できるということは,近いネットワークにいる人はIPアドレスを連番にすることができます。その結果,IPアドレスのデータベースであるルーティングテーブルでは,「ここからここまでの範囲のIPアドレスは,この物理ポートね」というように,IPアドレスを範囲指定できるようになります。一方で,機器メーカーが決めるMACアドレスはこうは行きません。ほとんど乱数のようなものですから,IPアドレスのような指定は無理ですよね。

この性質を頭に置いて当初の話題に戻りましょう。スイッチとルータでは,機器の台数とデータベースのエントリ数の関係に違いがあると考えることができます。つまり,1万台繋がったスイッチは1万行のエントリ(MACアドレス)を覚える必要があるが,1万台繋がったルータはネットワーク管理者の次第でいくらでも覚えるべきエントリ(IPアドレス)数を少なくできるのです。

以上から,大規模なネットワークでは,ブロードキャストを減らしたりネットワーク機器の経路テーブルのエントリを減らしたりするために,ルータを使うべきということが分かります。

アドレス流通範囲

「じゃあ,最初からルータだけで十分では?」と思いました?そうですね。実際,ルータだけでもインターネットは動くかもしれません。しかし,繰り返しですが,ルータは「刺せば繋がる」わけでなく,あらかじめネットワーク機器を設定しなくてはなりません。私が新しいノートPCを1台買ったからといって,世界中にある全てのネットワーク機器を設定し直したいですか?要するに面倒なんです。ですから,スイッチで十分なところにはスイッチを使います。つまり,ルータは中〜大規模なネットワークに,スイッチは小規模なネットワークに向いています

でも,鋭い方は気づいたかもしれません。「IPアドレスとMACアドレスが両方必要な理由を話していたのに,ルータとスイッチの話にすり替えられてないか?確かに,ルータとスイッチの使い分けはあってもいいけど,アドレスはIPアドレスだけでいいんじゃないのか?」と。

しかし,実際には全てのパケットに宛先MACアドレスと宛先IPアドレスが付与されます。両方必要なのです。なぜなのか考えてみましょう。

その答えを探すため,ブロードキャストドメインをまたぐ通信がどのように行われるかをみてみます。ざっくりと,以下のような動きとなります。

同一ブロードキャストドメインの通信ではMACアドレスやIPアドレスの書き換えは行われない。しかし,ブロードキャストドメインを跨ぐときは,ルータでMACアドレスを書き換える。
ブロードキャストドメインをまたがるパケットの動き(Life of Packet)

  • パケットの送信元端末(ノートPCやスマホなど)の動作
    • 宛先のIPアドレスと他のブロードキャストドメインへの転送を依頼したいルータ(「ネクストホップルータ」といいます)のMACアドレスを設定します。
    • 参考: 同じブロードキャストドメイン宛の通信であれば,宛先のIPアドレスと宛先のMACアドレスを設定します。
  • ネットワーク機器の動作
    • スイッチは,宛先MACアドレスを見て,MACテーブルに従って転送またはブロードキャストします。パケットは書き換えません。
    • ルータは,まず宛先MACアドレスを見て,自分宛であることを認識します。その後,宛先IPアドレスを見て,ルーティングテーブルを参照して転送先を決定します。その際,宛先MACアドレスを「パケットの送信元(ノートPCやスマホなど)の動作」に従って書き換えます。

なぜこのような動作になるのでしょうか。それは,端末やネットワーク機器はが同じブロードキャストドメインに居る人のMACアドレスは知るとしても,異なるブロードキャストドメインのMACアドレスを知らなくてよいようにするためです。言い換えると,MACアドレスは他のブロードキャストドメインに流通しないのです。対してIPアドレスは,全てのドメインのアドレスに流通します(もっと言えば,今後接続される予定の端末のIPアドレスを含んだIPアドレスの範囲で他のブロードキャストドメインに流通させておけば,あるブロードキャストドメインで端末を追加したときに他のブロードキャストドメインの設定を変える必要がありません)。つまり,他のブロードキャストドメイン宛の通信は,ここまで説明したような仕組みでMACアドレスを付け替える動作を行いうことで実現する必要があるのです。

この動作を頭に入れて,例えば,他のブロードキャストドメイン宛のパケットがブロードキャストされた場合を想像してみましょう。ブロードキャストですから,複数のルータにこのパケットが届く可能性があります。しかし,ルータはMACアドレスを見て自分宛であることを確認しますから,正しいルータだけがこのパケットを転送します。でも,もしこのMACアドレスの確認が行われないと,複数のルータが他のブロードキャストドメインにパケットを転送してしまうかもしれません。パケットが増えてしまいました。これは困りますね。

上記の例では,宛先MACアドレスの確認を行うことでそのパケットが確かに自分宛であったかを確認していました。実は,ネットワーク機器では必ず,MACアドレスの処理がIPアドレスの処理よりも先に行われるルールになっています。ブロードキャストをベースとした”不確実”な方法で通信をしている場合,その通信が確かに自分宛であるかどうかをきちんと確認しないと不具合が生じるということが分かります。この確認は,IPアドレスを使うだけでは不可能で,IPアドレスとMACアドレスの併用が必要ですね。MACアドレスは「同一ブロードキャストドメイン内での宛先を表すため」に使われ,IPアドレスは「最終的な宛先を表すため」に使われるということです。そのため,IPアドレスを使って通信先を指定したとしても,ルータではIPアドレスの確認に先立ってMACアドレスの確認も確かに行うことで,確実かつ効率的な通信を実現しているのです。

補足しますと,他の理由もあります。IPアドレスは機器の電源を入れた直後には設定されていませんが手動で設定するのは面倒なので,最も良く使われるIPアドレスであるIPv4アドレスをDHCP(Dynamic Host Configuration Protocol)を使って自動設定することが多いです。でも,DHCPを動作させるとき,当然ですがまだその機器はIPアドレスを持っていませんから,IPアドレスで宛先指定ができません。そこで,機器が必ず持っているMACアドレスを使う必要がある,という考え方もあります。しかし,IPv6アドレスにおいてこの考え方は必ずしも真ではないので,「そういう考え方もあるんだな」くらいに捉えるのがよいかと思います。

レイヤ2とレイヤ3のネットワークはどう設計するのか?


ネットワークはスイッチとルータが組み合わさって構成されている

ところで,実際のネットワークはスイッチとルータを組み合わせて構成されます。つまり,ある単位でブロードキャストドメインを区切り,その境界にルータを,それ以外にはスイッチを用いてネットワークを設計するということです。では,どのようにブロードキャストドメインを区切ってネットワークを設計するべきなのでしょうか。深くは説明できませんが,簡単に説明させてください。

言葉について補足します。「ブロードキャストドメインを区切る」ことを「ドメインを区切る」または「サブネットを切る」という場合があります。また,同一ドメインで構築することを 「レイヤ2(L2)で構築する」,ドメインを区切って構築することを 「レイヤ3(L3)で構築する」 ということが多いです。ネットワークエンジニアの皆さんはその現場や担当者によってさまざまな言い回しを聞くことがあると思いますが,ニュアンスにそこまで違いはありません。

この章は少し専門用語が多くなりますがご容赦ください。

1. ブロードキャストドメインの極小化


ネットワークエンジニアが辛い気持ちになるイラスト

レイヤ2で構築するときに最も怖いのは「ループ」です。「ループ」は,上図の左が一番わかりやすい例ですが,上図の右のような構成もループといえます。もし,あるブロードキャストドメインで誤ってループを作ってしまうと,永遠にブロードキャストが繰り返されます(「ブロードキャストストーム」といいます)。結果,そのブロードキャストドメインに属する端末は(ネットワーク側でなんらかの対策を行っていない限り)全て通信できなくなります。絶対に避けなくてはなりません。更に,ループしないとしても,1000台が繋がるL2ネットワークは残りの999台からブロードキャストがやってきます。非常に不安定で非効率なネットワークとなってしまいます。ですから,ブロードキャストドメイン(=L2のネットワーク)は可能な限り小さくすべきというのが鉄則です。

加えて,レイヤ2では経路の冗長化ができません。冗長な経路はループと同義だからです。対策として,STP(Spanning Tree Protocol)・LAG(Link Aggregation)・Stackingなどを使うことで冗長化する手法が知られていますが,いずれも本質的にはある通信はいずれか一つの経路しか通らない状態にすることで冗長化する手法であり,根本的な解決ではありません。言い換えると,設定を少しでも間違うとすぐにループしてしまう危険性があるということです。そのため,L2はL3に比べ経路の冗長化が難しいと捉えてよいでしょう。L2は壊れやすいのです。


他のブロードキャストドメインへはブロードキャストストームが伝播しない

以上から,ブロードキャストドメインの範囲=故障の影響が伝搬する範囲と考えて設計するとよいでしょう。設計としては,影響を極小化するような設計が必要です。例えば,ノートPCなどが繋がるオフィスネットワークでは組織やフロアで区切ることが考えられますし,サーバが繋がるデータセンタではラック・リージョン・サーバの所掌組織などサーバの管理単位で区切ることが考えられます。プライベートIPv4アドレスを/24で切り出して,/24の中で一つのブロードキャストドメインを形成するようなパターンが多いです。

2. 端末の管理


ブロードキャストドメインごとにIPアドレスの払い出しポリシがある

では,ブロードキャストドメインはどこまで小さくすればよいのでしょうか?様々な設計指針が考えられますが,そもそもスイッチは「設定せずとも繋がる」「刺せば繋がる」ための便利な機器ですから,接続される端末管理が楽になるようにL2を設計するというのが良いでしょう。

前節の繰り返しになりますが,実際のネットワークでは,技術的要件ではなく,日常業務の担当者やインシデント対応の責任者など人の関係性・組織に応じてL2ネットワークを作ることが多いです。この考え方は間違ってはいません。ただし,少し技術的な観点から考察しましょう。

ネットワーク上の端末を管理するときに最初に考慮すべき技術的要件は,IPアドレスの払い出し方法です。自動で払い出すDHCPは,同一ブロードキャストドメインに所属する端末にしかIPアドレスを払い出せませんので,IPアドレスの払い出しの管理単位でL2ドメインを切るのが良いです。ルータはDHCPのパケットを転送できないからです(DHCPのためのサーバを全てのブロードキャストドメインに設置するのは非効率なため,実際のキャンパスやエンタープライズネットワークではDHCPリレーという技術によりルータ越えをさせる場合も多々あります)。

また,端末管理のためにMACアドレスを使った認証を行う場合もあります。通常,端末のMACアドレスはルータを超えることができませんので,これもL2ドメイン設計の材料になりえます。端末認証としてRADIUS認証が併用される場合もあるかと思いますが,RADIUSの話を始めるとそれだけで数本記事が書けてしまうので,ここでは詳細は割愛させてください。

加えて,許可リストや拒否リストを定義してアクセス可否を制御したいこともあるかと思います。この仕組みを「アクセスリスト」と呼び,ネットワークの上位では端末のMACアドレスが分からないのでIPアドレスでアクセスリストを書くしかありません。このとき,ブロードキャストドメイン単位(例:/24単位)でアクセスリストを定義することが多いです。ですから,アクセス可否の制御単位でL2ドメインを切るというのも一つの考え方です。

3. その他の特殊要件

ここまで紹介した2つが原則ですが,この原則に反する設計をせざるを得ない場合があります。具体的には,本当はL3で構築したいのにL2にしなくてはならない場合です。代表例を紹介します。

同一L2ドメインでないと動かないアプリケーションがある場合

本来,アプリケーション(「レイヤ7」「L7」ともいいます)は,その下で動いているプロトコルに依存すべきではありません。詳細は割愛しますが,気になる方は「OSI参照モデル」や「TCP/IPモデル」というキーワードで調べてみてください。しかし,この理想に従って実装することは現実的ではありません。

例として,サーバ間が別のリージョンにあるのに,「このシステムのサーバは全部同じブロードキャストドメインにいないとダメだよ」という要件が示されることがあります。先の例で,リージョン間はL3で繋ぎたいですが,一方そのサーバ同士はL2で繋いでくれということです。これは一見矛盾した要件に見えますね。ちなみに,よく聞く例としては,VMwareの一部機能(VMotion)を使うため,act/sby運用をするサーバ間で死活監視の都合で必要なため,データベース同期の都合で必要なためというケースでしょうか。

この場合には,L2延伸と呼ばれるテクニックを使って,L3ネットワークの上に仮想的なL2ネットワークを作ります。昨今だと,VXLAN(Virtual eXtensible Local Area Network)やL2TP(Layer 2 Tunneling Protocol)といった技術を使います。詳細は本題から外れるので割愛します。

なお,本当は同一L2ドメインである必要はないのに,アプリケーションエンジニアやサーバエンジニアが必要だと思い込んで勘違いしているケースがあります。私の経験上,非ネットワークエンジニアのエンジニアはL3を嫌がる傾向にあります。理由はおそらく,「挿しても繋がらないから」だと思います。この場合,チームで相談し,本当の要件を定義し,L2・L3のどちらが適切か判断しましょう。

IPアドレス割当上やむを得ない場合

IPv4アドレスは有限の資産です。そのため,最初の設計に失敗してしまうと,IPアドレスが不足するという事態に(しばしば)遭遇します。結果,ブロードキャストドメインを分けるなどという悠長なことができずに,残念ながら同じL2ドメインに収容せざるをえない例があります。他にも,/24は「視覚的にわかりやすい」サブネット長であるため,これ以上細かく区切らないようにしようという要件がある場合があります(なぜ「視覚的にわかりやすい」のかは考えてみましょう)。

こういったイレギュラーな設計をした場合,ある組織がループを発生させてしまうと他の組織にも伝搬するということを忘れてはなりません。また,IPアドレスの払い出しポリシも考慮する必要があります。

一方,IPv6アドレスはほぼ無限ですので,あまりこういった事態には遭遇しません。しかし,同じL2ドメインに収容せざるを得ない場合もあります。例えば,プロバイダから/64のグローバルアドレスを割り振られ,本当はこれを4つのL3ドメインに分けたかったとします。もちろん,/66を4つ割り振ればよいのですが,IPv6の規格上/64より細かく区切ることは推奨されていません。ルータの実装上の問題やアドレス配布プロトコルの問題など,想定外の問題に当たる可能性があるためです。よほどの理由がなければ避けましょう。

あえて言及しなかったこと

  • OSI参照モデルやTCP/IPモデルについては可能な限り触れませんでした。この話をしてしまうと,「こういう規格だからそれに従いましょう」という結論になってしまうからです。
  • スイッチは一切の設定が不要かのように書きましたが,実際には多数の設定が必要なケースがほとんどです。この記事では「スイッチの本質的な機能に着目すると,設定は要らない」という意味で記載しています。
  • VLANについては触れませんでした。そもそもVLANというのは発展的な機能であり,なくてもネットワークは構築できます。この説明に関係ない上,VLAN間ルーティングだけがルーティングだと勘違いすることを防ぐため,VLANの話題を出しませんでした(どこかの国の国家資格試験の影響で「ルーティングとは,VLAN間が繋がるようにすることだよ」と思ってる人が多いんですよ・・・)。
  • 家庭用ルータはケーブルを挿すだけですぐに繋がるぞ,矛盾しているぞ!というクレームに対する回答は記載しませんでした。一言でいうと,あれはスイッチとルータを兼任しているから,ルータの設定は工場出荷時に行われているからです。

おわりに

いかがでしたか?ツッコミどころもいくつかあったかと思いますが,ある程度正確であり,かつある程度わかりやすく説明してみたつもりです。ネットワークの学習は,最初こういったところでつまづいてしまうとその先の勉強が苦になってしまいますから,基礎をしっかりと理解すると良いと思います。そのとき,教科書的な説明を丸暗記するのではなく,こういった「概念」や「設計のノウハウ」を合わせて学習することをおすすめします。それでは。

Discussion

はんはん

話題にしていただきているようなので補足させてください。結論として、記事の課題設定(特にタイトルの設定)がよくありませんでした。
私が書きたかった内容は、「現代のTCP/IPで、IPアドレスとMACアドレスはどういう用途で使われているか?それを考慮にいれたうえで、L2とL3はどう設計すべきか?」です。もっというと、設計の方がメインです。歴史的背景とかOSI参照モデルとかだけを理解してもネットワーク設計の役にはあんまりたたず、そこで苦労している方を見てきたので、その参考になればという想いの記事でした。
タイトルを変えると混乱を生むだけだと思いますので、悩みましたが、しばらくこのままにしておきます。

しょーちゃんしょーちゃん

ipエイリアスという機能もありますので、ipアドレスとmacアドレスは必ずしも1:1ではないかと思います

CARNAGECARNAGE

タイトルに対してストレートに答えるなら、「隣接するホストとの通信に責任を持つ層と、間接的に繋がっているホスト間での通信に責任を持つ層で課題を解決し易いように分割し、お互いの層が疎結合になるように外部仕様を決めたから」でしょうか。

隣接するホストと通信するためのホスト識別子に対する要求と、その先のリモートホストと通信するためのホスト識別子に対する要求が違うので、お互いを疎結合にするのであればそれぞれ異なる種類の識別子として定義するしか無いんだと言う理解です。

隣接するホストとの通信機能だけであればEthernetの実装だけでよく、ホストをまたいで通信するならEthernetを利用して通信する層を追加で別に設ければ良い、という階層型のアーキテクチャを前提にしていて、それぞれ役割が違う点を押さえられていれば良さそうです。