抽象化とOSIモデル
ネットワークの抽象化レイヤーと OSI モデルを理解して、データがシステム間をどのように移動するかを明確に把握しましょう。
レイヤーが存在する理由
大規模なネットワークシステムは、抽象化なしでは管理できません。レイヤーは、責務を分離することで複雑さを制御するために存在します。
レイヤリングなし
すべてのコンポーネントは他のすべてのコンポーネントに依存しています。
レイヤリングあり
各レイヤーは隣接するレイヤーとだけやり取りします。
- レイヤーがなければ、すべてのコンポーネントが他のすべてのコンポーネントに直接依存してしまいます。
- 各レイヤーは、明確に定義された1つのシステム課題の解決に集中します。
- 抽象化によって、システムはスケールし、進化し、個別にデバッグできるようになります。
詳細
現代の通信システムには、ハードウェア信号、ローカルな配送ルール、グローバルなルーティング判断、信頼性の仕組み、暗号化標準、アプリケーションロジックが含まれます。これらの関心事が1つの巨大な設計に強く結び付けられていると、わずかな変更でも予測できない副作用が生じます。
レイヤリングは、厳密な境界を定義することでこれを解決します。あるレイヤーは自分の役割を果たし、内部の複雑さを公開せずに、上位レイヤーへきれいなインターフェースを提供します。たとえば、トランスポート層はビットが電気的にどのように伝わるかを理解する必要はなく、アプリケーション層はルーターがどのようにパケットを転送するかを知る必要はありません。
この分離により、認知負荷が下がります。エンジニアはシステム全体を同時に考えるのではなく、1つのレイヤーずつ理解できます。
OSIモデルは、この構造化された分離を形式化したものです。重要なのは7つの名前を暗記することではなく、抽象化がどのように分散システムを理解しやすく、保守しやすく、スケーラブルにするかを理解することです。
7つのレイヤー: 高レベル概要
OSIモデルはネットワーク通信を7つの順序立てられたレイヤーに整理します。一方、TCP/IPはインターネットで実際に使われている現実のスタックを表します。
OSIモデル(概念フレームワーク)
TCP/IPスタック(実世界の実装)
- OSIは、通信を生の信号からアプリケーションプロトコルまで、7つの明確な責務に分けます。
- TCP/IPは、これらの責務を実際のシステムで使われる4つの実用的なレイヤーに圧縮します。
詳細
下から上へ、OSIのレイヤーは次のとおりです:
L1 – 物理層: 生の電気信号または光信号を送信します。
L2 – データリンク層: MACアドレス指定を使ってローカルなフレーム配送を処理します。
L3 – ネットワーク層: ネットワーク間でIPを使ってパケットをルーティングします。
L4 – トランスポート層: 信頼性、順序制御、ポートベースの多重化を提供します。
L5 – セッション層: システム間の接続状態を維持します。
L6 – プレゼンテーション層: データの形式変換、エンコード、圧縮、暗号化を行います。
L7 – アプリケーション層: HTTP、SMTP、FTPなどのユーザー向けプロトコルを定義します.
実際には、インターネットは TCP/IP モデル を使います:
- Application(OSI 5–7 をカバー)
- Transport(OSI 4)
- Internet(OSI 3)
- Link(OSI 1–2)
OSIは主に 概念的なデバッグおよび学習のためのフレームワーク です。
TCP/IPは、実際のネットワークを動かしている 運用アーキテクチャ です。
OSIは責務を理解するための顕微鏡のようなものだと考えてください —
そしてTCP/IPは、実際にインターネット上でトラフィックを動かしているエンジンです。
レイヤーを通過するリクエスト
リクエストを送信すると、データはネットワークへ一気に飛ぶのではなく、OSIスタックを下るにつれて段階的に包み込まれ、準備されます。
メッセージは読みやすいテキストとして始まります。各レイヤーが追加のメタデータでそれを包み込み、下位へ押し下げます。反対側では、レイヤーが逆順にそれを剥がし、元の HTTP リクエストを復元します。
- 各レイヤーは、データを下位レイヤーへ渡す前に独自のヘッダーや変換を追加します。これをカプセル化と呼びます。
- 宛先では、各レイヤーが逆順にその処理を行います。
詳細
Webページを読み込むときに何が起こるかを考えてみましょう。
アプリケーション層 (L7) は、GET /index.html のような HTTP リクエストメッセージを作成します。
プレゼンテーション層 (L6) は、TLS を使ってそれを暗号化することがあります。
トランスポート層 (L4) は、データを分割し、信頼性のために TCP ヘッダーを追加します。
ネットワーク層 (L3) は、ルーティングを決定するために IP ヘッダーを付加します。
データリンク層 (L2) は、ローカルネットワーク内で配信するためにパケットをフレーム化します。
最後に、物理層 (L1) がすべてを電気信号または光信号に変換します。
各レイヤーは、自分の役割に必要な追加情報をデータに付け加えて包みます。この構造化された包み込みを カプセル化 と呼びます。
データが宛先に届くと、処理は逆順で進みます。各レイヤーがヘッダーを取り除き、残りのペイロードを上位レイヤーへ渡していき、最終的にアプリケーションが元のメッセージを受け取ります。
一見すると単純なリクエストに見えますが、実際には複数の抽象化レイヤーをまたいで慎重に段階を踏んで変換されています。
レイヤー 1: 物理層
物理層は、生のビットが電気信号、光信号、または無線信号としてどのように表現されるかを定義します。
銅
シグナル: 電圧の変化
ファイバー
シグナル: 光パルス
無線
シグナル: 電波
- L1 は、媒体、コネクタ、信号タイミング、および伝送特性を扱います。
- この層では、データはパケットやメッセージではなく、ビットレベルの信号にすぎません。
- 物理的な問題によって、上位層の通信がすべて遮断されることがあります。
詳細
ネットワークは最終的には物理法則に依存します。銅線の Ethernet ケーブルは電圧の変化を伝送し、光ファイバーは光のパルスを伝送し、無線ネットワークは空中を電波で伝送します。
物理層は、電圧レベル、周波数範囲、変調方式、ビットタイミング、ケーブルの種類、コネクタの形状、最大距離といった厳密で測定可能な標準を定義します。これらのルールにより、あるデバイスの信号を別のデバイスのハードウェアが正しく解釈できるようになります。
この層には、IP アドレスも、ポートも、HTTP リクエストもありません。あるのは、物理現象として表現された 1 と 0 のストリームだけです。
一般的な障害には、ケーブルの断線、不十分なシールド、長距離での信号減衰、電磁干渉、またはネットワークインターフェースカードの故障などがあります。信号自体が不安定であれば、上位層は処理できる一貫したビットを受け取れません。
レイヤー 2: データリンク
データリンク層は、同じローカルネットワーク上のデバイス間でフレームを信頼性高く配送する役割を担います。
スイッチは MAC アドレスを読み取り、正しいデバイスへ転送します。
- L2 はビットをフレームにまとめ、ローカルなアドレス情報を追加します。
- 同じネットワーク内のデバイスを識別するために MAC アドレスを使用します。
- この層は、データが上位層へ進む前に送信エラーを検出します。
詳細
生のビットが Physical layer で送信されると、Data Link layer はそれらを frames と呼ばれる構造化された単位に整理します。フレームには、ペイロードに加えてローカル配送に必要な制御情報が含まれます。
この層では IP アドレスの代わりに、ローカルネットワークセグメント内でネットワークインターフェースを一意に識別する MAC (Media Access Control) addresses を使用します。Switch はこの層で動作し、MAC アドレスに基づいてフレームを転送します。
Data Link layer は、フレームチェックサムのような仕組みを使って基本的なエラー検出も行います。破損が検出された場合、そのフレームは上位層に届く前に破棄されることがあります。
重要なのは、L2 が扱うのは同じローカルネットワーク内での通信だけだという点です(家庭、オフィス、データセンターのラック内など)。より広い Internet 全体でデータがどのように移動するかは決定しません。その責任は Network layer にあります。
レイヤー 3: ネットワーク
ネットワーク層は、複数の相互接続されたネットワークをまたいでパケットがどのように宛先へ到達するかを決定します。
- L3 は論理アドレスを割り当て、ローカルネットワークを超えた通信を可能にします。
- ルーターは宛先 IP アドレスに基づいてパケットを転送します。
- この層は、信頼性やアプリケーションロジックではなく、経路選択に重点を置きます。
詳細
データリンク層が単一のローカルネットワーク内での配送を扱うのに対し、ネットワーク層は異なるネットワーク間の通信を可能にします。ここでは、グローバルなルーティングのために設計された論理アドレスである IP (Internet Protocol) アドレス を導入します。
パケットが作成されると、ネットワーク層は送信元 IP アドレスと宛先 IP アドレスを含む IP ヘッダーを追加します。ルーターはこの宛先アドレスを確認し、ルーティングテーブルを使って次のホップを決定します。各ルーターはローカルな転送判断を行い、パケットを最終的なネットワークへ少しずつ近づけます。
ネットワーク層は、配送、順序保証、エラー回復を保証しません。その役割は、パケットを正しい宛先ネットワークへ向けて移動させることだけです。
ルーティングテーブルが誤って設定されている場合、経路が利用できない場合、または途中でパケットが破棄された場合は、上位層がその結果を処理しなければなりません。L3 は信頼性ではなく、到達可能性と経路選択に関するものです。
レイヤー 4: トランスポート
トランスポート層は、データが正しく、順序どおりに、適切なアプリケーションプロセスへ届けられることを保証します。
送信者
受信者
パケット 3 は一度失われますが、その後再送されて配信されます。
- L4 はデータをセグメントに分割し、宛先で再構成します。
- ポート番号を使って、通信を正しいアプリケーションに振り分けます。
- TCP や UDP のようなプロトコルが、信頼性の動作を定義します。
詳細
ネットワーク層はパケットをインターネット上で移動できますが、データが壊れずに、または順序どおりに届くことまでは保証しません。トランスポート層は、その制御を追加します。
TCP (Transmission Control Protocol) では、データはセグメントに分割され、シーケンス識別子で番号付けされ、受信側から確認応答を受け取り、失われた場合は再送されます。これにより、Web トラフィックやファイル転送に適した、信頼性が高く順序保証のある通信が実現します。
UDP (User Datagram Protocol) では、データは確認応答や再送なしで送信されます。これによりオーバーヘッドと遅延が減り、ストリーミングやオンラインゲームのようなリアルタイムアプリケーションに役立ちます。
トランスポート層はまた、ポート番号を導入します。これにより、同じデバイス上の複数のアプリケーションが同時に通信できます。IP はマシンを識別し、ポートは特定のサービスを識別します。
要するに、L4 は通信をどれだけ厳密に制御するかを決め、データが受信側システム上の正しいソフトウェアプロセスに届くようにします。
レイヤー 5: セッション
セッション層は、アプリケーション間の論理的な接続を管理し、会話がどのように開始され、維持され、終了するかを制御します。
確立
認証
アクティブな対話
チェックポイント
終了
- L5 は通信セッションを確立、維持、終了します。
- システム間の対話制御と同期を調整します。
- 現代のネットワークでは、この機能の多くは TCP またはアプリケーションによって処理されます。
詳細
トランスポート層が信頼性の高い配信を提供した後でも、システムは 会話 そのものを管理する方法を必要とします。セッション層は、通信セッションがどのように作成され、維持され、終了されるかを定義します。
これには、認証のやり取り、セッショントークン、再接続ロジック、長時間のデータ転送中の同期チェックポイントの処理が含まれます。セッションが中断された場合、復旧メカニズムによって、最初からやり直すのではなく、既知の状態から通信を再開できることがあります。
実際には、OSI のセッション層は、ほとんどの現代的なインターネットスタックでは明確に分離された実装として存在しません。その責務の多くは、TCP(接続状態)や、HTTP セッションや認証フレームワークなどのアプリケーション層プロトコルによって処理されます。
抽象化されて見えにくいことが多いものの、この概念は重要です。信頼できるトランスポートだけでは十分ではなく、システムは時間を通じて構造化された会話も管理しなければなりません。
レイヤー 6: プレゼンテーション
プレゼンテーション層は、データが両方のシステムで同じように解釈されるように、データのフォーマット、エンコード、保護を行います。
生データ
構造化済み
圧縮済み
暗号化済み
準備完了
- L6 はデータのフォーマット、シリアライズ、圧縮、暗号化を扱います。
- 異なるシステム間で、データの表現方法について一致させます。
- 標準化されたエンコーディングがなければ、通信内容は読めなくなります。
詳細
2つのシステムが接続され、バイト列を確実にやり取りできたとしても、そのバイト列が何を意味するのかについては一致している必要があります。プレゼンテーション層は、構造化データがどのようにエンコードされ、解釈されるかを定義します。
例としては、JSON、XML、Protocol Buffers のようなシリアライズ形式があり、これらは構造化オブジェクトをバイトストリームへ変換する方法を定義します。圧縮アルゴリズムも、この層で帯域幅の使用量を減らすために動作することがあります。
TLS のような暗号化メカニズムは、送信前に読み取り可能なデータを安全な暗号文へ変換し、宛先でその逆の処理を行うため、論理的にはこの層に属します。
共有されたフォーマットとセキュリティ標準がなければ、2つのシステムはデータを正常に交換できても、その構造をまったく誤って解釈してしまう可能性があります。プレゼンテーション層は、データがアプリケーションロジックに届く前に、表現の一貫性を保証します。
レイヤー 7: アプリケーション
アプリケーション層は、ユーザー向けサービスを直接支える通信のルールと意味を定義します。
アプリケーション
Webページのリソースを要求する
サービス
- L7 は HTTP、FTP、SMTP、DNS などのプロトコルを定義します。
- 何が要求されているのか、また応答をどのように構成すべきかを指定します。
- この層は、配信と信頼性を下位層に完全に依存します。
詳細
アプリケーション層は、通信に意味が与えられる場所です。ここでは、システムが何を達成しようとしているのかを説明するプロトコルのルールを定義します。たとえば、Web ページの取得、メールの送信、ファイルの転送、ドメイン名の解決などです。
たとえば、HTTP は GET や POST のようなリクエストメソッド、200 や 404 のようなステータスコード、そしてヘッダー構造を定義します。これらのルールは意図と期待される動作を表しており、ビットが物理的にどのように移動するかは定義しません。
L7 は伝送の仕組みを扱わないことを理解することが重要です。データがネットワーク全体で信頼性高く移動することは、下位層(Transport、Network、Data Link、Physical)に任されています。
要するに、アプリケーション層は通信のロジックと意味を定義します。ユーザーの操作を構造化されたプロトコルメッセージに変換し、スタックの残りの層がそれをインターネット上で届けます。
OSIがデバッグに役立つ理由
OSIモデルは、問題を特定のレイヤーに絞り込むことで、障害を切り分けるための体系的な方法を提供します。
下から始めます。下位レイヤーが通過した場合のみ上へ進みます。
- 問題をレイヤーごとに分類すると、デバッグが সহজになります。
- 各症状は通常、スタック内の特定の責務に対応します。
- レイヤーごとに考えることで、当てずっぽうの推測を防ぎ、トラブルシューティングの時間を短縮できます。
詳細
ネットワーク化されたシステムで何かが失敗したとき、その障害はほとんど常に特定のレイヤーに属します。
ケーブルが抜けていたり、Wi-Fiの電波が弱かったりする場合、それは Physical (L1) の問題です。
同じLAN内でデバイス同士が通信できない場合は、Data Link (L2) の問題かもしれません。
パケットが別のネットワークに届かない場合は、Network (L3) のルーティングを示しています。
接続が頻繁に切れたり、データが順不同で届いたりする場合は、Transport (L4) の問題が考えられます。
ユーザーが500エラーや不正なレスポンスを受け取る場合、問題は Application (L7) レベルにある可能性が高いです。
システム全体を1つのブラックボックスとして扱うのではなく、OSIモデルは頭の中のチェックリストを提供します。各段階で前提を確認しながら、レイヤーごとに進めていきます。
このような体系的なアプローチは、ノイズを減らし、不要な変更を防ぎ、障害を診断するときに大規模な分散システムを扱いやすくします。
質問セクション
1 / 5