メインコンテンツまでスキップ

OSI 7階層ネットワークプロトコル

· 約10分

ネットワーク障害を調査するとき、最もよく使う考え方が層ごとの切り分けです。ケーブルはつながっているか、IP に ping は通るか、ポートは Listen しているか、アプリケーションは何を返しているか。この考え方の源流が OSI 7階層モデルです。ここでは各層が解決する問題を一通りおさらいし、自分用の備忘録としてまとめます。

まず、なぜ層に分けるのかという話から。ネットワーク通信で扱うべきことは非常に多岐にわたります。信号を媒体上でどう伝送するか、エラーが起きたらどうするか、ネットワークをまたいで相手をどう見つけるか、アプリケーション同士でデータ形式をどう取り決めるか。これらの問題を責務ごとに切り分け、各層は下位層が提供するサービスにのみ依存し、上位層にはインターフェースだけを公開する。そうすることで、各層を独立して設計・置き換えできるようになります。OSI モデルは通信の全過程を 7 つの層に分割し、下から順に、物理層、データリンク層、ネットワーク層、トランスポート層、セッション層、プレゼンテーション層、アプリケーション層となっています。

物理層

二つのハードウェア間でどう通信するかという問題を解決します。代表的な物理媒体には光ファイバー、ケーブル、リピーターなどがあります。主に物理デバイスの規格を定義する層で、LAN ケーブルのコネクタ形状、光ファイバーのインターフェース種別、各種伝送媒体の伝送速度などが対象です。

主な役割はビット列の伝送です(1 と 0 を電流の強弱に変換して伝送し、宛先に届いたら再び 1 と 0 に戻す、いわゆる D/A 変換と A/D 変換です)。この層のデータはビットと呼ばれます。

言い換えると、物理層が関心を持つのは電気的特性と機械的特性だけです。電圧が何ボルトなら 1 なのか、コネクタはどんな形か、1 秒間に何ビット送れるのか。伝えている内容が何であるかはまったく関知しません。NIC の物理ポートやハブはこの層で動作します。

データリンク層

コンピュータネットワークにはさまざまな干渉が存在するため、物理リンクは信頼できるものではありません。この層の主な機能は、各種の制御プロトコルによって、誤りのある物理チャネルを、誤りなくデータフレームを確実に伝送できるデータリンクへと変えることです。

具体的な仕事としては、物理層から届くビット列の形のデータを受け取り、フレームにカプセル化して上位層に渡します。同様に、上位層から来たデータフレームをビット列の形に分解して物理層へ転送します。この層のデータはフレームと呼ばれます。

フレームにカプセル化することで初めて、「ひとまとまりのデータがどこから始まりどこで終わるのか」という境界が生まれ、フレーム末尾にチェックサムフィールドを付けて誤り検出ができるようになります。壊れたフレームは受信時にそのまま破棄されます。この層では MAC アドレスで同一リンク上のデバイスを識別します。イーサネットやスイッチはこの層で動作するため、スイッチはレイヤー 2(L2)デバイスとも呼ばれます。

ネットワーク層

ネットワークに複数のコンピュータがある場合、送信先のコンピュータをどう見つけるか。途中に複数のノードがある場合、どの経路を選ぶか。これがルーティングの仕事です。

この層の主なタスクは、経路選択アルゴリズムを使って、パケット(この層のデータ単位で、上位層のデータをまとめたもの)が通信サブネットを通過する最適な経路を選ぶことです。この層で定義されるのが IP アドレスで、IP アドレスによるアドレッシングのために IP プロトコルが生まれました。

データリンク層との違いは有効範囲にあります。MAC アドレスは同一リンク内でのみ有効なのに対し、IP アドレスはネットワーク全体でのアドレッシングに使えます。パケットがルーターを一つ通過するたびに、リンク層のフレームは剥がされて再カプセル化されますが、IP 層の送信元アドレスと宛先アドレスは終始変わりません。注意すべきは、IP プロトコル自体は「ベストエフォート」だということです。パケットを宛先に向けて送ることだけを担当し、到達も順序も保証しません。信頼性の問題は上位層に委ねられます。ルーターは典型的なレイヤー 3(L3)デバイスです。

トランスポート層

大量のデータを送信すると、パケットロスが発生する可能性があります。受信側のコンピュータは、すべてのパケットを完全に受け取れたかどうかを伝える必要があります。欠けていれば、どのパケットが失われたかを知らせ、すべて受信できるまで再送してもらいます。

簡単に言えば、トランスポート層の主な機能は、データ伝送サービスの品質を監視し、データの正しい伝送を保証することです。

トランスポート層はもう一つの問題も解決します。IP アドレスで特定できるのはホスト 1 台までですが、1 台のホスト上では多くのプロセスが動いています。データは結局誰に渡せばよいのか。答えはポート番号です。IP とポートの組み合わせで初めて特定のプロセスまで到達できます。この層で最も有名なプロトコルが TCP と UDP です。TCP はコネクション指向で、確認応答・再送・フロー制御によって信頼性を保証します。UDP はコネクションレスで、信頼性は保証しませんがオーバーヘッドが小さく、遅延に敏感で多少のロスが許容されるシーンに向いています。

セッション層

ここまでで、正しいコンピュータに、正しくカプセル化された情報を送ることはできるようになりました。しかし、毎回トランスポート層プロトコルを呼び出してパッキングし、さらに IP プロトコルを呼び出して経路を探す、というわけにはいきません。そこで、パケットの送受信とアドレッシングを自動化する機能が必要になります。こうして登場したのがセッション層です。その役割は、アプリケーション間の通信の確立と管理です。

担当するのはセッションの確立・維持・終了です。通信する双方が「対話を始める」ところから「対話を終える」ところまで、その全過程をこの層が管理します。

プレゼンテーション層

プレゼンテーション層はデータ形式の変換を担当します。アプリケーションが扱う情報をネットワーク伝送に適した形式に変換したり、下位層から来たデータを上位層が処理できる形式に変換したりします。

典型的な仕事には、文字エンコーディングの変換、データの暗号化・復号、圧縮・展開があります。2 台のマシンの内部データ表現は異なる場合がありますが、プレゼンテーション層は一方が送出したデータをもう一方が正しく理解できることを保証します。

アプリケーション層

アプリケーション層は、コンピュータのユーザーおよび各種アプリケーションとネットワークとの間のインターフェースです。その機能は、ユーザーに直接サービスを提供し、ユーザーがネットワーク上で行いたいさまざまな作業を実現することです。

普段最もよく付き合うプロトコルはすべてこの層にあります。Web を閲覧する HTTP、ファイルを転送する FTP、メールを送る SMTP、名前解決を行う DNS などです。

TCP/IP モデルとの関係

OSI は概念モデルであり、実際のインターネットで使われているプロトコルスタックは TCP/IP です。TCP/IP は通常 4 層に分けられます。ネットワークインターフェース層が OSI の物理層とデータリンク層に、インターネット層がネットワーク層に、トランスポート層がトランスポート層に対応し、セッション層・プレゼンテーション層・アプリケーション層は一つのアプリケーション層に統合されています。実際のプロトコルで独立したセッション層・プレゼンテーション層のプロトコルをほとんど見かけないのはこのためで、それらの責務の多くはアプリケーション層プロトコルやアプリケーション自身が担っています。

ハマりどころと注意点

1)各層のデータ単位は混同しやすいので注意。物理層はビット、データリンク層はフレーム、ネットワーク層はパケット、トランスポート層はセグメントです。トラブルシューティングでも面接でもよく使います。

2)機器と層の対応関係は覚えておく価値があります。ハブは物理層、スイッチはデータリンク層、ルーターはネットワーク層で動作します。「L2 スイッチ」「L3 スイッチ」という呼び方はここから来ています。

3)あるプロトコルがどの層に属するかは、名前の印象ではなく、それが解決する問題で判断します。たとえば DNS はインフラではありますがアプリケーション層プロトコルですし、ARP は IP から MAC への対応付けを行うもので、ネットワーク層とデータリンク層の間で動作します。

ヒント

層ごとに問題を切り分ける順序は固定してしまうとよいです。まず物理的な接続(ケーブル、NIC のランプ)、次にリンクと IP(ゲートウェイへの ping、対象への ping)、その次にトランスポート層(ポートは Listen しているか、ファイアウォールは通しているか)、最後にアプリケーション自身のログを見る。層を追って消去法で絞り込む方が、当てずっぽうに試すよりずっと速く解決できます。

まとめ

7階層モデルの核心は責務の分離です。各層は一種類の問題だけを解決し、上位にサービスを提供し、下位のサービスを利用します。物理層はビットを運び、データリンク層は一区間のリンクの信頼性を保証し、ネットワーク層はネットワーク全体のアドレッシングとルーティングを担い、トランスポート層はエンドツーエンドの伝送品質を保証し、上の三層はアプリケーションそのものに奉仕します。各層が解決する問題を理解すれば、個々のプロトコルを見たときにどこに位置づくべきか、そしてトラブル時にどの層から調べればよいかが分かるようになります。

COMMENTS