LESSON 2

アプリが動くしくみ

Lesson 1 では「どこで動くか」でアプリを分類しました。今回は、アプリがネットワークを通じて どうやってデータをやりとりし、画面を表示しているのかを学びます。 入り口は、通信のしくみを整理した「OSI参照モデル」です。

1. クライアントとサーバー

アプリの通信は、ほとんどが「お願いする側」と「応える側」の関係でできています。

クライアント(お願いする側)

ユーザーが操作する端末やアプリ。ブラウザ、スマホアプリ、IoT機器など。「このページを見せて」「このデータを保存して」とリクエスト(要求)を送ります。

サーバー(応える側)

リクエストを受け取って処理し、結果をレスポンス(応答)として返すコンピュータ。データの保存や計算を集中して担当します。

この形をクライアントサーバシステムと呼びます。 レストランにたとえると、クライアントは「注文するお客さん」、サーバーは「注文を受けて料理を出す厨房」です。

2. 通信のルール「プロトコル」

世界中のメーカー・OS・アプリが問題なく通信できるのは、共通のルール(プロトコル)が決められているからです。 手紙で言えば「宛名の書き方」「切手の貼り方」「郵便番号の形式」が決まっているようなものです。

ただし、通信には「電気信号をどう流すか」から「Webページをどう要求するか」まで、たくさんの段階があります。 それを役割ごとに7つの階層に整理したのが、次の OSI参照モデルです。

3. OSI参照モデル(7階層)

OSI参照モデルは、国際標準化機構(ISO)が定めた「通信の役割分担表」です。 通信の機能を7つの層に分け、各層は自分の担当だけに集中し、上下の層とだけやりとりするという考え方です。 こうすることで、例えば「ケーブルを有線から Wi-Fi に変えても、Webブラウザは何も変えなくてよい」という仕組みが実現できています。

層 名称 役割(ざっくり) 代表的なプロトコル・キーワード 動作する機器 TCP/IP
モデル
7 アプリケーション層 アプリごとの具体的なやりとりを決める(Webページの取得、メール送信など) HTTP、HTTPS、SMTP、POP3、IMAP、FTP、DNS、DHCP ゲートウェイ アプリケーション層
6 プレゼンテーション層 データの表現形式をそろえる(文字コード、圧縮、暗号化など) 文字コード(UTF-8 など)、JPEG、MPEG
5 セッション層 通信の開始から終了までの「会話」を管理する セッションの確立・維持・終了
4 トランスポート層 データを確実に(または速く)届ける。どのアプリ宛てかをポート番号で区別する TCP(確実)、UDP(高速)、ポート番号(HTTP:80、HTTPS:443) ゲートウェイ トランスポート層
3 ネットワーク層 IPアドレスを使って、離れたネットワークの宛先まで経路を選んで届ける(ルーティング) IP、ICMP(ping)、IPアドレス ルータ、L3スイッチ インターネット層
2 データリンク層 同じネットワーク内の隣の機器へ届ける。MACアドレスで相手を識別する イーサネット、Wi-Fi(無線LAN)、MACアドレス ブリッジ、L2スイッチ ネットワーク
インタフェース層
1 物理層 0と1を電気信号・光・電波に変えて実際に流す LANケーブル、光ファイバ、コネクタ形状 リピータ、ハブ

実際のインターネットは「TCP/IP」の4階層

OSI参照モデルは「考え方の物差し」で、実際のインターネットでは表の右端にある TCP/IP モデル(4階層)が使われています。 それでも OSI の7階層は、エンジニア同士の会話で「それは L3(第3層)の問題だね」のように共通言語として今も使われます。

4. データは「封筒」に包まれて届く

送る側では、データが上の層から下の層へ渡されるたびに、その層の情報(ヘッダ)が付け足されます。 封筒にさらに封筒をかぶせていくイメージで、これをカプセル化と呼びます。受け取る側では逆に、下の層から順に封筒を開けていきます。

7〜5 アプリケーション
HTTPのデータ(「このページを見せて」)
4 トランスポート
TCPヘッダデータ
3 ネットワーク
IPヘッダTCPデータ
2 データリンク
EthernetヘッダIPTCPデータ末尾
1 物理
0101100111010…(電気・光・電波の信号)
TCPヘッダには「ポート番号(どのアプリ宛てか)」、IPヘッダには「IPアドレス(どのコンピュータ宛てか)」、 Ethernetヘッダには「MACアドレス(隣のどの機器宛てか)」が書かれています。

例:実際の電文の中身

パソコン(192.168.1.10)から Webサーバー(203.0.113.10)へ、 「トップページをください」と送るときの電文を、封筒を1枚ずつ開けるように外側から見てみましょう。

Ethernetフレーム第2層 データリンク層
宛先MACアドレス
00:1a:2b:3c:4d:5e(隣のルータ)
送信元MACアドレス
a4:83:e7:12:34:56(自分のパソコン)
タイプ
0x0800(中身は IPv4 のパケット)
IPパケット第3層 ネットワーク層
送信元IPアドレス
192.168.1.10(自分のパソコン)
宛先IPアドレス
203.0.113.10(Webサーバー)
TTL(生存時間)
64(ルータを1台通るごとに1減り、0になると破棄)
プロトコル
6(中身は TCP)
TCPセグメント第4層 トランスポート層
送信元ポート番号
52341(ブラウザ側で一時的に使う番号)
宛先ポート番号
80(HTTP = Webサーバーのプログラム宛て)
シーケンス番号
1001(データの順番。届かなければ再送する)
HTTPリクエスト第7層 アプリケーション層
GET / HTTP/1.1            ← 「トップページ(/)をください」
Host: example.com         ← どのサイト宛てか
User-Agent: Mozilla/5.0   ← 使っているブラウザの情報
Accept: text/html         ← HTML で返してほしい
FCS(末尾):途中でデータが壊れていないかを確かめるための検査用の値
※ 説明のため、各ヘッダの項目は主要なものだけを抜き出しています。

このリクエストを受け取ったサーバーは、同じように封筒に包んで次のようなレスポンスを返します。

HTTPレスポンス第7層 アプリケーション層
HTTP/1.1 200 OK                         ← 成功しました(ステータスコード 200)
Content-Type: text/html; charset=UTF-8  ← 中身は HTML、文字コードは UTF-8

<!doctype html>                         ← ここからが画面の本体(HTML)
<html>
  <head><title>Example</title></head>
  <body><h1>ようこそ</h1></body>
</html>
ポイント: IPアドレス(最終的な宛先)は最後まで変わりませんが、MACアドレス(隣の機器)はルータを通るたびに付け替えられます。 住所(IPアドレス)は同じまま、配達区間ごとに担当の配達員(MACアドレス)が交代していくイメージです。 なお、HTTPS の場合は HTTP の部分が暗号化されるため、途中で盗み見ても中身は読めません。 また、家庭や会社のネットワークでは、出口のルータで送信元IPアドレスが書き換えられる(NAT)のが一般的です。

たとえ話:会社に注文の手紙を送る

宅配便で会社に注文の手紙を送る場面に置き換えてみます。 実は上の電文と、まったく同じ入れ子の形になっています。

配送伝票= Ethernetヘッダ(MACアドレス)
次の配達先
○○集配センター(隣の中継地点)
出発地
近所の営業所
外側の封筒の宛名= IPヘッダ(IPアドレス)
お届け先
大阪府大阪市○○ 1-2-3 株式会社サンプル商事
差出人
東京都千代田区△△ 4-5-6 山田 太郎
内側の封筒の宛名= TCPヘッダ(ポート番号)
宛先の部署
営業部 御中(会社の中のどの窓口宛てか)
通し番号
全3通のうち1通目(足りなければ再送をお願いする)
手紙の本文= HTTPリクエスト
商品カタログを1部送ってください。
送り先:山田 太郎
日本語の冊子でお願いします。
「開封厳禁」シール = FCS:途中で破れたり開けられたりしていないかの確認
層電文の項目手紙・宅配便でいうとポイント
7 アプリケーションHTTPリクエスト手紙の本文本当に伝えたい中身
4 トランスポートポート番号部署名(営業部 御中)会社(コンピュータ)の中のどの窓口(プログラム)宛てか
3 ネットワークIPアドレス封筒の住所・会社名最終的なお届け先。最後まで変わらない
2 データリンクMACアドレス配送伝票の「次の配達先」中継地点ごとに貼り替えられる
1 物理電気・光・電波の信号トラック・道路実際に荷物を運ぶ手段

受け取った会社では、まず配送伝票をはがし(データリンク層)、住所を確認して(ネットワーク層)、 「営業部宛てだ」と社内の担当へ回し(トランスポート層)、最後に営業部の人が手紙を読んで返事を書きます(アプリケーション層)。 外側から順に1枚ずつ開けていくのが、受け取る側の動きです。

5. URLを入力してから画面が出るまで

ここまでの知識を使って、ブラウザに https://example.com と入力してからページが表示されるまでを追ってみましょう。

  1. DNS で「住所」を調べるL7 アプリケーション

    コンピュータは example.com のような名前ではなく、IPアドレス(例:203.0.113.10)で相手を探します。 そこでまず DNSサーバーに「example.com の IPアドレスは?」と問い合わせます。これを名前解決と呼びます。電話帳で番号を調べるイメージです。

  2. TCP で接続を確立するL4 トランスポート

    調べた IPアドレスのサーバーに対し、HTTPS のポート番号 443 宛てに「つないでいいですか?」「どうぞ」「では始めます」の3回のやりとりで接続します(3ウェイハンドシェイク)。

  3. TLS で通信を暗号化する

    HTTPS の「S」は Secure。TLS という仕組みで、サーバーが本物かを証明書で確認し、通信内容を暗号化します。 ブラウザの鍵マークはこの確認ができた印です。

  4. HTTP リクエストを送るL7 アプリケーション

    「トップページ(/)をください」というリクエストを送ります。データは前の章のとおり封筒に包まれ、ルータを何台も経由してサーバーへ届きます。

  5. サーバーが処理する

    サーバーはリクエストを受け取り、必要に応じてプログラムを動かしたり、データベースから情報を取り出したりして、返す内容を作ります(詳しくは次の章)。

  6. HTTP レスポンスが返ってくるL7 アプリケーション

    HTML・CSS・JavaScript・画像などがレスポンスとして返されます。成功ならステータスコード 200、 ページが見つからなければおなじみの 404、サーバー側のエラーなら 500 が返ります。

  7. ブラウザが画面を描く

    ブラウザが HTML で構造を、CSS で見た目を組み立て、JavaScript で動きを付けて画面に表示します。ここが Lesson 1 で学んだフロントエンドの担当範囲です。

ポイント: 普段1秒もかからず表示されるWebページの裏では、これだけの手順が毎回行われています。 「ページが表示されない」というトラブルも、DNS の問題か、接続の問題か、サーバーの問題かと層ごとに切り分けて考えると原因を探しやすくなります。

6. サーバーの中身(3層構造)

Webアプリのサーバー側は、役割ごとに分けて作るのが一般的です。代表的な形が、次の3層クライアントサーバシステムです。

クライアントブラウザ
スマホアプリ
Webサーバーリクエストの受付
画面ファイルを返す
プレゼンテーション層
APサーバー業務処理・計算
(バックエンドのプログラム)
ファンクション層
DBサーバーデータの保存・検索
(データベース)
データ層
※ APサーバー=アプリケーションサーバー。3層クライアントサーバシステムの「プレゼンテーション層」は、OSI参照モデルの第6層とは別物なので混同に注意。

なぜ分けるの?

役割ごとに分けると、アクセスが増えたときに足りない部分だけ増強でき、修正の影響範囲も小さくできます。

データベースと SQL

データは表形式で管理するリレーショナルデータベース(RDB)に保存するのが一般的です。データの取り出しや更新は SQL という言語で指示します。

SELECT 氏名 FROM 社員 WHERE 部署 = '開発'

7. クラウド(IaaS / PaaS / SaaS)

以前は自社でサーバー機を購入して設置するオンプレミスが主流でしたが、今は AWS・Azure・Google Cloud などの クラウドを借りて使うのが一般的です。どこまでをクラウド事業者に任せるかで、3つに分けられます。

種類事業者が用意するもの利用者が用意・管理するもの例
IaaSサーバー・ネットワークなどの基盤(インフラ)OS・ミドルウェア・アプリAmazon EC2 などの仮想サーバー
PaaS基盤 + OS・ミドルウェア(実行環境)アプリアプリの実行環境・データベースサービス
SaaSアプリまですべてなし(使うだけ)Gmail、Microsoft 365、Salesforce

覚え方:I(Infrastructure=基盤)→ P(Platform=実行環境)→ S(Software=アプリ)の順に、任せる範囲が広がります。

8. モバイル・組み込みの場合

基本的なしくみは Web と同じです。違うのは「何をやりとりするか」です。

モバイルアプリ

画面はアプリ自身が持っているので、サーバーとはデータだけをやりとりします。窓口となるのが API で、データは JSON という形式が主流です。

{"name": "山田", "point": 120}

組み込み・IoT 機器

センサーの値などを定期的にサーバー(クラウド)へ送ります。通信量や電力を抑えるため、MQTT などの軽量なプロトコルが使われることもあります。モバイル回線(4G/LTE)でつながる機器も多くあります。

どの種類のアプリでも、OSI参照モデルの下の層(TCP/IP)は共通です。 だからこそ、スマホも家電もパソコンも同じインターネットにつながることができます。

コラム:基本情報技術者試験とは

基本情報技術者試験(FE:Fundamental Information Technology Engineer Examination)

IPA(情報処理推進機構)が実施する国家試験で、「ITエンジニアの登竜門」とも呼ばれます。 ITを使う仕事に必要な基本的な知識・技能を、幅広く体系的に問う試験です。

  • 出題範囲が広い:ネットワーク、データベース、セキュリティ、アルゴリズム、プロジェクト管理、経営・法務まで。
  • 2つの科目:知識を問う科目Aと、アルゴリズムや情報セキュリティの考え方を問う科目B。
  • 通年で受験できる:全国のテストセンターでパソコンを使って受験する方式(CBT)です。

なぜ大切なの?

実はこのレッスンの内容も… OSI参照モデル、IPアドレスや DNS、3層クライアントサーバシステム、クラウドなど、今回学んだ内容は基本情報技術者試験にも出てくるテーマです。 このレッスンを読んで「ITってちょっと面白いかも」と思えたなら、それは立派な第一歩。 本格的にITに興味が出てきたら、ぜひ基本情報技術者試験の勉強にもチャレンジしてみてください。

確認クイズ

選択肢をクリックしてください。

Q1. ルータが動作する OSI参照モデルの層はどれ?

Q2. MACアドレスを使って、同じネットワーク内の機器にデータを届ける層はどれ?

Q3. HTTP が属する層はどれ?

Q4. 「example.com」のようなドメイン名から IPアドレスを調べる仕組みはどれ?

Q5. 確実性よりリアルタイム性が重要な音声通話でよく使われる、トランスポート層のプロトコルはどれ?

Q6. Gmail のように、アプリケーションまで含めてクラウド事業者が提供するサービス形態はどれ?

まとめ