ネットワーク●●○○○

OSI参照モデル

OSI Model ・ おーえすあいさんしょうもでる

通信を7つの階層に分けて整理する思考の枠組み。「L4」「L7」の語源で、障害の切り分けにも使う。

✦ 30秒で試す — 航海手紙は、配達の区間ごとに封筒を丸ごと取り替えて進むルータを通過したあと、書き換わっている宛名は?予想してみる

概要

OSI 参照モデルは、コンピュータ間の通信という複雑な営みを、役割の異なる7つの階層(レイヤ)に分けて整理する思考の枠組みです。ケーブルを流れる電気信号から、HTTP のようなアプリケーション同士の会話まで、通信には性質のまったく違う仕事が積み重なっています。それを「各層は自分の仕事だけに責任を持ち、すぐ下の層のサービスを使い、すぐ上の層にサービスを提供する」という積み木として捉えるのがこのモデルです。

実務で「L4 のロードバランサ」「L7 で振り分ける」「それは L2 の問題」といった言い方を耳にしたことがあれば、その L(Layer)の番号が OSI 参照モデルの階層です。実際のインターネットは TCP/IP で動いていて、OSI のプロトコルはほぼ使われていません。それでも、ネットワークを語る共通の言葉として今も現役の語彙です。

なぜ生まれたか

1970年代、コンピュータネットワークはメーカーごとの独自の世界でした。IBM には SNA、DEC には DECnet という具合に通信方式がばらばらで、異なるメーカーの機器同士は原則としてつながりません。ネットワークを導入することは特定のメーカーに縛られることと同じで、別の機器をつなぐたびに場当たり的な変換装置が必要でした。

この乱立を解消するため、国際標準化機構(ISO)が1984年に標準化したのが OSI(Open Systems Interconnection、開放型システム間相互接続)の参照モデルです。狙いは2つありました。ひとつはメーカーに依存しない開かれた標準を作ること。もうひとつは、通信を階層に分けることで「各層を独立に設計し、差し替えられる」ようにすることです。媒体をケーブルから無線に替えても上の層は変わらず、アプリケーションを替えても下の層はそのまま使える。この分業の考え方が、モデルとして残った最大の遺産です。同じころ、米国の研究ネットワークから育った TCP/IP も、同じ分業の発想で設計されていました。

詳細

7つの階層と TCP/IP との対応

下から順に見ていきます。L1 物理層は、電気信号・光・電波でビットを運びます。L2 データリンク層は、同じネットワークの中で隣り合う機器の間にフレームを届けます(Ethernet や Wi-Fi、MACアドレスの世界)。L3 ネットワーク層は、ネットワークをまたいで宛先の機器まで経路を選びます(IP と IPアドレス、ルーティングの世界)。L4 トランスポート層は、機器の中のアプリケーションまで届け、通信の品質を担います(TCP/IP の TCP や UDP、ポート番号の世界)。L5 セッション層は対話の開始・維持・終了、L6 プレゼンテーション層は文字コードや暗号化などデータの表現の変換、L7 アプリケーション層は HTTP・SMTP・DNS などアプリの会話そのものです。

現実のインターネットを支える TCP/IP は、これをより粗い4階層で捉えます。両者を並べると、L5〜L7 が TCP/IP では1つのアプリケーション層にまとめられていることが分かります。セッションの管理や暗号化は、TCP/IP ではアプリケーションやライブラリの中で行われるからです。

OSI 参照モデルTCP/IP モデルL7 アプリケーション層L6 プレゼンテーション層L5 セッション層L4 トランスポート層L3 ネットワーク層L2 データリンク層L1 物理層アプリケーション層HTTP・SMTP・DNS・TLS などトランスポート層TCP・UDPインターネット層IPリンク層Ethernet・Wi-Fi など金色の枠は実務の会話で特によく登場する層。L4 と L7 の区別は今も日常語
OSI 7階層と TCP/IP 4階層の対応。上の3層は TCP/IP では区別しない

カプセル化 — 封筒に入れ、さらに大きな封筒に入れる

階層モデルの動きをつかむ鍵がカプセル化です。アプリケーションが送りたいデータは、下の層に渡されるたびに、その層のヘッダ(宛先や制御のための情報)を先頭に付けて包まれます。HTTP のメッセージは TCP のヘッダが付いてセグメントになり、IP のヘッダが付いてパケットになり、Ethernet のヘッダ(と末尾の誤り検出用の FCS)が付いてフレームになり、最後に電気信号として送り出されます。手紙を封筒に入れ、その封筒をさらに大きな封筒に入れて、外側ほど「近くの配達先」を書き足していくイメージです。

L7 メッセージHTTP のデータL4 セグメントTCPポートHTTP のデータL3 パケットIPIPアドレスTCPHTTP のデータL2 フレームEthernetMACアドレスIPTCPHTTP のデータFCSL1: フレームがビット列になり、電気・光・電波の信号として送り出される。受信側は下から順に1枚ずつ開ける
カプセル化。層を降りるたびに、その層のヘッダが先頭に付く。中身には手を触れない

受信側では逆に、下の層から順に封筒を1枚ずつ開けて、中身を上の層へ渡していきます。ここで大事なのは、各層は自分の封筒の宛名しか読まないという約束です。Ethernet は中身が IP か何かを気にせず隣の機器まで運び、TCP は中身が HTTP か SMTP かを知らずに順序を整えます。この約束があるから、ある層を丸ごと差し替えても上下の層は影響を受けません。

途中のルータは L3 までしか開けない

封筒の構造が効いてくるのは、途中の機器です。パソコンから遠くのサーバへ送るとき、フレームはまず同じネットワークにいるルータへ届きます。Ethernet の宛先 MAC アドレスは、最終的な宛先ではなく「次に渡す隣の機器」だからです。ルータは受け取ったフレームの Ethernet の封筒を開け、中の IP ヘッダの宛先 IP アドレスを読み、経路表から次の渡し先を選びます(ルーティング)。そして、次の区間用の新しい Ethernet の封筒で包み直して送り出します。このとき MAC アドレスは区間ごとに書き換わりますが、IP アドレスは端から端まで変わりません(TTL という残り中継回数だけ1つ減ります。NAT を通るときはアドレスも書き換わります)。ルータは TCP や HTTP の封筒には触れません。

送信PCルータ受信サーバL5〜7L4L3L2L1アプリ(HTTP)TCPIPEthernet物理IPEthernet物理アプリ(HTTP)TCPIPEthernet物理宛先MAC=ルータ宛先MAC=サーバIP アドレス(L3)は端から端まで同じ。MAC アドレス(L2)は区間ごとに書き換わる
送信側は全層を降り、ルータは L3 まで上がって L2 の封筒を付け替え、受信側は全層を上がる

下の部品で確かめてください。HTTP のメッセージを送信PCの塔へ落とすとヘッダが巻き付きながら降りていき、フレームをルータへ運ぶと、ルータが L2 の封筒だけを付け替えます。フレームをいきなりサーバへ運ぼうとするとどうなるかも試してみてください。

⚡ 体験: 封筒に包んで、層を降り、ルータを越える

立体を準備しています…

ネットワークA(家の LAN 192.168.1.0/24)ネットワークB(サーバ側 203.0.113.0/24)送信PCL1〜L7ルータL1〜L3 だけ受信サーバL1〜L7GET /index.htmlいまのパケットに付いている封筒(外側 → 内側)L2 Ethernet(MAC) まだない宛先 ルータ …00:01送信元 送信PC …11:01L3 IP(アドレス) まだない宛先 203.0.113.5送信元 192.168.1.10TTL 64L4 TCP(ポート) まだない宛先 443送信元 51234L7 HTTP まだないGET /index.htmlHost: example.com
塔へ落とす

送りたい HTTP のメッセージ(金のチップ)をつかんで、送信PCへ落としてください。層の塔を降りながら封筒に包まれていきます。

実装としては敗れ、語彙として生き残った

OSI は参照モデルだけでなく、実際のプロトコル群も策定しました。しかし普及の競争では TCP/IP に敗れます。委員会主導で仕様が重厚だった OSI に対し、TCP/IP は「まず動くものを作り、動いたものを標準にする」文化のもとで育ち、1983年にはカリフォルニア大学バークレー校の UNIX(4.2BSD)に実装が同梱されて大学や研究所へ広まりました。1990年代にはインターネットの普及とともに勝負がつき、現在のインターネットに OSI のプロトコルはほぼ残っていません。

それでも7階層のモデルが教科書と現場に残ったのは、通信の分業を語る言葉として優れていたからです。障害の切り分けでは、下の層から順に確かめるのが定石です。リンクのランプは点いているか(L1)、同じネットワークの機器に届くか・ARP で MAC アドレスが引けるか(L2)、ping で相手の IP に届くか(L3)、ポートにつながるか(L4)、HTTP の応答は正しいか(L7)。こう絞り込めば、ケーブルの問題なのか、経路の設定なのか、アプリの問題なのかを順序立てて見分けられます。実装は TCP/IP、語彙は OSI、というのが現代の姿です。

L4 と L7 — 実務で番号が意味を持つ場面

現場でとりわけよく使うのが L4 と L7 の区別です。ロードバランサには、IP アドレスとポート番号だけを見て接続単位で振り分ける L4 型と、HTTP の中身(URL のパスやヘッダ)まで読んでリクエスト単位で振り分ける L7 型があります。L4 は中身を読まないので速くて汎用的で、L7 は賢い振り分けができる代わりに、TLS を終端して中身を読む処理の重さを引き受けます。ファイアウォールも同じで、IP とポートで通すか決める L3/L4 のものと、HTTP の中身まで検査する L7 のもの(WAF など)があります。

一方で、現実のプロトコルは7つの層にきれいには収まりません。TLS は TCP の上でアプリの下にあり、L5〜L6 相当と言われますが、どちらか1つには決めきれません。VPN は IP のパケットをさらに別の IP パケットで包むので、層が入れ子になります。モデルは地図であって現実そのものではない、という距離感ごと覚えておくと、この語彙をうまく使いこなせます。

試問

家の LAN にある送信PCから、別のネットワークにある受信サーバへ、Web ページの要求(HTTP のメッセージ)を送ります。メッセージを送信PCへ落とすと、層を降りながら TCP・IP・Ethernet の封筒に包まれてフレームになり、下の表にそれぞれの封筒の宛先が出ます。フレームはつかんで、送信PC・ルータ・受信サーバのどれかへ運べます。

✦ 命題挑戦中

別のネットワークにあるサーバへ、フレームを自分の手で運んで届けよ。運ぶ先は、フレームに書かれた宛先で決める

  • HTTP のメッセージを送信PCの層に通して、フレームに包む
  • フレームを宛先 MAC の相手へ運び、封筒を付け替えてもらう
  • 受信サーバで封筒を開け、HTTP まで届ける
⚡ 体験: 封筒に包んで、層を降り、ルータを越える

立体を準備しています…

ネットワークA(家の LAN 192.168.1.0/24)ネットワークB(サーバ側 203.0.113.0/24)送信PCL1〜L7ルータL1〜L3 だけ受信サーバL1〜L7GET /index.htmlいまのパケットに付いている封筒(外側 → 内側)L2 Ethernet(MAC) まだない宛先 ルータ …00:01送信元 送信PC …11:01L3 IP(アドレス) まだない宛先 203.0.113.5送信元 192.168.1.10TTL 64L4 TCP(ポート) まだない宛先 443送信元 51234L7 HTTP まだないGET /index.htmlHost: example.com

送りたい HTTP のメッセージ(金のチップ)をつかんで、送信PCへ落としてください。層の塔を降りながら封筒に包まれていきます。