基本的に通信というのはお互いのマシンを識別出来ればいいので、 Macアドレス同士だけでも通信できるし、 IPアドレス同士だけでも通信出来るはずである。 ただその状況下でなぜ両者を並行して利用しているのか?とふと疑問に。

「TCP/IPのルールだから」「MACアドレスだけではルーティング出来ないから」 といえばなんとなくその通りですが、 MACアドレス側にもルーティングなどのL3の機能を持たせることも設計的に可能だろうし、 その逆もしかりです。 実際なぜTCP/IPがそういうルールで落ち着いたのか?今回は自分なりの解釈をまとめます。

ネットワークの共通ルール: TCP/IP vs OSI

まずTCP/IPに入る前におさらい。 そもそもマルチベンダー間のネットワーク通信を実現するためには、 共通ルールが必要なことは間違いありません。

実際、1970年代頃のコンピュータ・ネットワークの通信プロトコルは ベンダー毎に独自の規格が乱立。 そのため、業界共通のネットワーク標準を作ろうという動きが自然に発生してゆきます。 主に電話会社など大手企業の主導でOSIという通信仕様を策定し、 同時期に米国国防高等研究計画局がデータ通信としてTCP/IPを生んだ。

TCP/IPのほうが必須の実装仕様自体がシンプルなため、結果としてこちらのほうが 普及していった。 電子メールの仕様でいえば、当初これほどまでに差があった。

  • OSI: 数冊の分厚い本
  • TCP/IP: RFC-871上に数十ページ

さらにOSIにはオプションなどの概念で変な柔軟性を もってしまった故に、皮肉なことにそれ故に相互の接続が出来ないということもあった。 対称的にTCP/IPでは実用的かつシンプルであり、 結果として爆発的に普及していった。

「ネットワークの役割を最低限まで減らす」というTCP/IPのポリシーが 開発者にも受け入れられた。

ハードウェアとソフトウェアのいい感じのバランス

ソフトウェアというのは「OSなどの上で動かす処理系」 ハードウェアは「組み込み用チップ、専用の機器で直接動かす処理系」と定義します。

種類 柔軟性 処理速度 実装
ソフトウェア 複雑なことが多い
ハードウェア シンプルなことが多い

これが一般的な考えかと思います。 双方にメリット・デメリットがあり、「柔軟性を取るか、処理速度を取るか」という 状態です。

  1. 両方のメリットを享受出来る効率的な処理バランス
  2. 安定した通信を実現するために、ハードウェア側は徹底的にやることを減らし、 バグらないようにした

というのが私の解釈です。

複雑なことをすればするだけ不具合が出る可能性が高くなります。 ハードウェアは一旦完成すると、変更するのが大変なので、 必然的に実装はシンプルな方向が良いと思います。

物理層、すなわちL2におけるイーサネットケーブルや、スイッチングハブですが、 これらも基本的な所は本当に難しいことはしていません。 データである電気信号の波形を銅線/光ケーブルを通じて遠くに伝えるだけです。 スイッチングハブに関して言えば、全部の通信を全ポートへ転送するのは多少ムダなため、 ポートに繋がっているマシンを記憶して、効率良く送信してくれます。言ってもそれだけです。

遠いマシンへの通信をどうするか?などをソフトウェア側に寄せることで、 開発スピードのサイクルを高め、結果として急速に発達したのではないでしょうか。

マシンもデータ処理が楽になる

特定の処理は得意な専用マシンがやってくれるほうが楽で効率が良いです。

例えば、マシンの視点からすると、次々に着信するデータを「自分のものか否か」 判定する必要があります。L2のMACアドレスという概念があれば、 NICの時点で「自分のMACアドレス宛のものだけ取り込む」ということが出来ます。 L3のIPだけで全ての処理を完結しようとしてしまうと、 マシンの上で動くOS側が着信したデータを常に自分宛のデータかを判定しなければなりません。

tcpdumpを実行すると視覚的に分かるように、 激流のごとく常にデータがパソコンの出入口に来ています。 これをOSという汎用マシンの上に動く仮想ソフトウェアが常に判定するのは、 効率が悪いです。

ある程度下処理を済ませた上で、それでも入ってきたデータ対して、処理をさせたほうが遥かに楽です。

住所と名前

私も個人的に好きなMACアドレスとIPアドレスの例えがあります。

種類
MACアドレス 名前
IPアドレス 住所

家に名前の違う人宛の荷物はその場で受け取らなければ良いです。 「前に住んでいた人の荷物かな」そんな感じです。 逆に自分が送り主として、名前だけ分かっていて荷物を送りたい場合でも、 内容を問い合わせて(RARP)、情報が分かれば送信もできるし、 MACアドレスとIPアドレスのセットであることで、より間違いなくデータも送れます。

UNIXとTCP/IP

結局の所、TCP/IPは実際に作りながら進めてみて 「シンプルで安定していていい感じに出来た!」 これに尽きるのではないかなぁと解釈しています。

UNIX哲学というは結構強力だと思うのですが、UNIX陣営からみても、 「TCP/IPも我々と同じような考えをしているではないか。実装に取り込もう」 こんな閣議決定があったのではないかと想像してしまいます。

MACアドレスとIPを見ただけでここまで話が膨らんでしまいました。 コンピュータのコミュニティは本当に面白いですね。今日はこのあたりで。