目次
現代のアプリケーションは、ネットワークなしでは成り立たない。Web ブラウザからのリクエスト、マイクロサービス間の通信、データベースへの接続——すべてがネットワークを介して行われている。本記事では、OSI 参照モデルから TCP/IP プロトコル、HTTP/HTTPS、DNS 名前解決、負荷分散の基本概念までを体系的に解説する。
ネットワークの階層モデル
コンピューターネットワークは、**階層化(Layering)**という考え方に基づいて設計されている。複雑な処理を複数の層に分割し、各層が特定の役割を担当する。
OSI 参照モデル
OSI(Open Systems Interconnection)参照モデルは、ネットワーク機能を 7 つの階層に分類した国際標準モデルだ。
【OSI 参照モデルの 7 階層】
+-------+------------------------------------------+------------------+
| 階層 | 名称 | 主なプロトコル |
+-------+------------------------------------------+------------------+
| 7 | アプリケーション層 | HTTP, HTTPS, |
| | (Application) | SMTP, DNS, SSH |
+-------+------------------------------------------+------------------+
| 6 | プレゼンテーション層 | SSL/TLS, |
| | (Presentation) | JPEG, ASCII |
+-------+------------------------------------------+------------------+
| 5 | セッション層 | RPC, NetBIOS |
| | (Session) | |
+-------+------------------------------------------+------------------+
| 4 | トランスポート層 | TCP, UDP |
| | (Transport) | |
+-------+------------------------------------------+------------------+
| 3 | ネットワーク層 | IP, ICMP, |
| | (Network) | ルーティング |
+-------+------------------------------------------+------------------+
| 2 | データリンク層 | Ethernet, |
| | (Data Link) | Wi-Fi, PPP |
+-------+------------------------------------------+------------------+
| 1 | 物理層 | 電気信号、 |
| | (Physical) | 光ファイバー |
+-------+------------------------------------------+------------------+
各階層は下位層のサービスを利用し、上位層にサービスを提供する。この階層化によって、特定の層だけを交換したり改良したりすることが可能になる。
TCP/IP モデル
実際のインターネットで使われているTCP/IP モデルは、OSI モデルを簡略化した 4 階層モデルだ。
【OSI モデル vs TCP/IP モデル】
OSI 参照モデル TCP/IP モデル 主なプロトコル
+----------------+ +----------------+
| アプリケーション | | | HTTP, HTTPS, DNS,
| プレゼンテーション |───→ | アプリケーション | SSH, SMTP, FTP
| セッション | | |
+----------------+ +----------------+
| トランスポート | ───→ | トランスポート | TCP, UDP
+----------------+ +----------------+
| ネットワーク | ───→ | インターネット | IP, ICMP
+----------------+ +----------------+
| データリンク | | |
| 物理層 | ───→ | ネットワーク | Ethernet, Wi-Fi,
+----------------+ | アクセス | IP, PPP
+----------------+
TCP/IP モデルは、OSI モデルの上位 3 層をアプリケーション層に統合し、下位 2 層をネットワークアクセス層に統合している。
トランスポート層——TCP と UDP
トランスポート層は、アプリケーション間の通信を担当する。主要なプロトコルにTCPとUDPがある。
TCP(Transmission Control Protocol)
TCPは、信頼性の高い通信を提供するコネクション型プロトコルだ。
【TCP の主な特徴】
1. コネクション型通信
- 通信前に 3 ウェイハンドシェイクで接続確立
- 順序正しいデータ転送を保証
2. 信頼性
- 再送制御:到達しないデータは自動で再送
- 順序制御:到着順を並び替えて交付
- フロー制御:受信側の処理能力に合わせる
3. 輻輳制御
- ネットワークの混雑を検知して送信速度を調整
- 緩やかな増加、急激な減少(AIMD)
【TCP 3 ウェイハンドシェイク】
クライアント サーバー
↓ ↓
│────── SYN (seq=100) ───────────────→│ 1. 接続要求
│ │
│←───── SYN-ACK (seq=200, ack=101) ───│ 2. 接続要求の応答
│ │
│────── ACK (seq=101, ack=201) ──────→│ 3. 接続確立
│ │
│══════════ 通信開始 ══════════════════│
UDP(User Datagram Protocol)
UDPは、信頼性よりも速度を重視するコネクションレス型プロトコルだ。
【UDP の主な特徴】
1. コネクションレス型通信
- 接続確立なしにデータを送信
- オーバーヘッドが小さい
2. ベストエフォート型
- 到達保証なし
- 順序保証なし
- 再送制御なし
3. 用途
- 動画配信(一部の欠落より遅延重視)
- VoIP(リアルタイム性重視)
- DNS クエリ(1 リクエスト 1 レスポンス)
- オンラインゲーム
TCP vs UDP 比較
| 特徴 | TCP | UDP |
|---|---|---|
| 接続タイプ | コネクション型 | コネクションレス |
| 信頼性 | 高い(再送・順序制御) | 低い(ベストエフォート) |
| 速度 | やや遅い | 高速 |
| オーバーヘッド | 大きい | 小さい |
| 輻輳制御 | あり | なし |
| 使用例 | Web(HTTPS), メール, ファイル転送 | 動画配信,VoIP, DNS, ゲーム |
ネットワーク層——IP アドレスとルーティング
ネットワーク層は、異なるネットワーク間でのデータ転送を担当する。
IP アドレス
IP アドレスは、ネットワークに接続された各デバイスに割り当てられる住所だ。
【IPv4 vs IPv6】
| 特徴 | IPv4 | IPv6 |
|------|------|------|
| **アドレス長** | 32 ビット | 128 ビット |
| **表記** | 192.168.1.1 (10 進数) | 2001:0db8::1 (16 進数) |
| **アドレス数** | 約 43 億個 | 約 3.4×10^38 個 |
| **ヘッダサイズ** | 20-60 バイト | 40 バイト(固定) |
| **NAT** | 必要 | 原則不要 |
| **セキュリティ** | オプション (IPSec) | 標準対応 (IPSec) |
【IP アドレスの構成:IPv4 の例】
192.168.1.100/24
├─ ネットワーク部:192.168.1.0/24 (上位 24 ビット)
└─ ホスト部:.100 (下位 8 ビット)
サブネットマスク:255.255.255.0
使用可能ホスト数:2^8 - 2 = 254 個
(ネットワークアドレスとブロードキャストを除く)
パケット転送の仕組み
【パケット転送の流れ】
送信元 (192.168.1.100) → 宛先 (10.0.0.50)
1. 送信元ホスト
├─ 宛先 IP を確認
├─ 同一ネットワークか判断
└─ 異なる場合、デフォルトゲートウェイへ
2. ルーター A (192.168.1.1)
├─ 宛先 IP を確認
├─ ルーティングテーブルを参照
└─ 次のホップ(ルーター B)へ転送
3. ルーター B (10.0.0.1)
├─ 宛先 IP を確認
├─ 直接接続されたネットワークと判断
└─ 宛先ホストへ交付
【ルーティングテーブルの例】
宛先ネットワーク | ゲートウェイ | インターフェース
-----------------|-------------|----------------
192.168.1.0/24 | - | eth0 (直接)
10.0.0.0/24 | - | eth1 (直接)
0.0.0.0/0 | 203.0.113.1 | eth0 (デフォルト)
アプリケーション層——HTTP プロトコル
**HTTP(Hypertext Transfer Protocol)**は、Web ブラウザとサーバー間の通信に使われるプロトコルだ。
HTTP の基本構造
【HTTP リクエストの例】
GET /api/users/123 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
├─ 1 行目:リクエストライン(メソッド + URL + バージョン)
├─ 2 行目以降:ヘッダー(メタ情報)
└─ 空行の後:ボディ(POST/PUT 時)
【HTTP レスポンスの例】
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 45
Cache-Control: max-age=3600
Set-Cookie: session_id=abc123; Path=/; HttpOnly
{"id": 123, "name": "山田太郎"}
├─ 1 行目:ステータスライン(バージョン + ステータスコード)
├─ 2 行目以降:ヘッダー(メタ情報)
└─ 空行の後:ボディ(レスポンスデータ)
主要 HTTP メソッド
| メソッド | 意味 | 冪等性 | 用途 |
|---|---|---|---|
| GET | リソース取得 | あり | データ読み取り |
| POST | リソース作成 | なし | データ送信・作成 |
| PUT | リソース置換 | あり | データ更新 |
| PATCH | リソース一部更新 | なし | データ一部更新 |
| DELETE | リソース削除 | あり | データ削除 |
| HEAD | ヘッダーのみ取得 | あり | リソース存在確認 |
| OPTIONS | 利用可能メソッド確認 | あり | CORS プリフライト |
HTTP ステータスコード
【ステータスコードの分類】
1xx (Informational): 情報処理中
101 Switching Protocols (プロトコル切り替え)
2xx (Success): 成功
200 OK (正常終了)
201 Created (リソース作成)
204 No Content (成功だが返す内容なし)
3xx (Redirection): リダイレクト
301 Moved Permanently (恒久的なリダイレクト)
302 Found (一時的なリダイレクト)
304 Not Modified (キャッシュ使用可)
4xx (Client Error): クライアントエラー
400 Bad Request (不正なリクエスト)
401 Unauthorized (認証が必要)
403 Forbidden (アクセス権限なし)
404 Not Found (リソースが見つからない)
409 Conflict (競合)
429 Too Many Requests (レート制限)
5xx (Server Error): サーバーエラー
500 Internal Server Error (内部エラー)
502 Bad Gateway (不正なゲートウェイレスポンス)
503 Service Unavailable (サービス利用不可)
504 Gateway Timeout (ゲートウェイレスポンス待ち)
HTTPS と TLS——安全な通信
HTTPSは、HTTP に暗号化プロトコル**TLS(Transport Layer Security)**を組み合わせたものだ。
TLS ハンドシェイク
【TLS 1.3 ハンドシェイクの流れ】
クライアント サーバー
↓ ↓
│────── ClientHello ─────────────────→│
│ (サポートバージョン,暗号スイート) │
│ │
│←───── ServerHello ──────────────────│
│ (選択バージョン,暗号スイート) │
│←───── Certificate ──────────────────│
│ (サーバー証明書) │
│←───── ServerKeyShare ───────────────│
│ (サーバーの公開鍵) │
│ │
│────── ClientKeyShare ──────────────→│
│ (クライアントの公開鍵) │
│────── Finished ────────────────────→│
│ (ハンドシェイク完了) │
│ │
│←══════ 暗号化通信開始 ══════════════│
証明書と PKI
【証明書の階層構造】
ルート認証局 (Root CA)
│ 自己署名証明書
│ ブラウザに信頼済みとして事前登録
▼
中間認証局 (Intermediate CA)
│ ルート CA が署名
│ 実際のエンドユーザー証明書に署名
▼
サーバー証明書 (End Entity)
│ 中間 CA が署名
│ example.com の公開鍵を含む
【証明書の内容】
・コモンネーム (CN): 証明書が発行されたドメイン名
・有効期限:証明書の有効期間(通常 90 日〜1 年)
・発行者:どの認証局が発行したか
・公開鍵:サーバーの公開鍵(RSA 2048/4096, ECDSA)
・署名アルゴリズム:SHA256 with RSA など
・サブジェクト Alternative Name (SAN): 複数のドメイン名
DNS——ドメイン名システム
**DNS(Domain Name System)**は、人間が覚えやすいドメイン名(example.com)を、コンピューターが扱う IP アドレス(93.184.216.34)に変換するシステムだ。
DNS 名前解決の流れ
【再帰的検索のプロセス】
ユーザー DNS サーバー
↓ ↓
│─「example.com の IP は?」────────→│
│ │
│ │─「.com の DNS は?」──→ ルート DNS
│ │←「192.5.6.30 です」───│
│ │
│ │─「example.com の IP は?」─→ TLD DNS (.com)
│ │←「93.184.216.34 です」───│
│ │
│←「93.184.216.34 です」─────────────│
│ │
│ (ブラウザは 93.184.216.34 に接続) │
DNS レコードの種類
| レコードタイプ | 用途 | 例 |
|---|---|---|
| A | ドメイン→IPv4 アドレス | example.com → 93.184.216.34 |
| AAAA | ドメイン→IPv6 アドレス | example.com → 2606:2800:220:1:: |
| CNAME | ドメインの別名 | www.example.com → example.com |
| MX | メールサーバー | example.com → mail.example.com |
| TXT | テキスト情報 | SPF, DKIM, 認証情報 |
| NS | 権威 DNS サーバー | example.com → ns1.registrar.com |
| SOA | 権威情報の開始 | ドメインの管理情報 |
【DNS レコードの例】
; 権威 DNS サーバーのレコード
example.com. IN SOA ns1.example.com. admin.example.com. (
2025062201 ; シリアル
3600 ; 更新間隔
900 ; リトライ間隔
604800 ; 有効期限
86400 ) ; 最低 TTL
example.com. IN NS ns1.example.com.
example.com. IN NS ns2.example.com.
example.com. IN A 93.184.216.34
www.example.com. IN CNAME example.com.
example.com. IN MX 10 mail.example.com.
DNS キャッシュ
【DNS キャッシュの階層】
1. ブラウザキャッシュ
- ブラウザが保持(Chrome, Firefox など)
- TTL: 数分〜数十分
2. OS キャッシュ(リゾルバキャッシュ)
- OS が保持(Windows: DNS Client, macOS: mDNSResponder)
- TTL: レコードの設定値に従う
3. ルーターキャッシュ
- 家庭用ルーターが保持
- TTL: 数分〜数時間
4. ISP 再帰 DNS サーバー
- プロバイダーが運営
- TTL: レコードの設定値に従う
【TTL(Time To Live)】
・レコードごとに設定される有効期限
・短い TTL: 変更が早い(例:300 秒)
・長い TTL: キャッシュヒット率高い(例:86400 秒)
負荷分散——スケーラビリティの確保
**負荷分散(Load Balancing)**は、複数のサーバーにトラフィックを分散し、処理能力を向上させる技術だ。
負荷分散の目的
【負荷分散のメリット】
1. スケーラビリティ
- 単一サーバーの限界を突破
- 水平スケーリングが可能
2. 可用性
- 1 台のサーバーがダウンしても他で処理
- 無停止メンテナンスが可能
3. 性能向上
- 地理的に分散したユーザーに最適化
- レイテンシ低減
負荷分散アルゴリズム
【主要な分散アルゴリズム】
1. ラウンドロビン(Round Robin)
サーバー A → サーバー B → サーバー C → サーバー A → ...
・単純で公平
・サーバーの性能差を考慮しない
2. 最少接続(Least Connections)
接続数:A=10, B=5, C=15 → B に分散
・現在の負荷に基づいて分散
・長時間接続に効果的
3. IP ハッシュ(IP Hash)
同一 IP → 同一サーバー
・セッション維持が可能
・特定 IP 集中のリスク
4. 応答時間(Response Time)
応答:A=50ms, B=200ms, C=100ms → A に分散
・最も応答の速いサーバーを選択
・リアルタイム負荷を反映
負荷分散のアプローチ
【レイヤー 4 負荷分散(トランスポート層)】
クライアント
↓
[ロードバランサー]
│ TCP/UDP パケットを転送
├─→ サーバー A
├─→ サーバー B
└─→ サーバー C
・IP アドレスとポート番号に基づく
・高速(パケットを深く検査しない)
・HTTP コンテンツに基づくルーティング不可
【レイヤー 7 負荷分散(アプリケーション層)】
クライアント
↓
[ロードバランサー]
│ HTTP リクエストを検査
│ /api/* → API サーバー群
│ /static/* → 静的ファイルサーバー群
├─→ サーバー A(API)
├─→ サーバー B(静的)
└─→ サーバー C(API)
・HTTP ヘッダー・URL・メソッドに基づく
・きめ細かなルーティングが可能
・SSL ターミネーション機能
グローバル負荷分散
【GSLB(Global Server Load Balancing)】
ユーザー
/ | \
/ | \
東京 PoP 大阪 PoP 米国 PoP
↓ ↓ ↓
DC-AP-1 DC-AP-2 DC-US-1
・DNS ベースの地理的分散
・ユーザーに最も近い PoP へ誘導
・災害時のフェイルオーバー
・CDN との連携
ネットワークセキュリティの基本
ファイアウォール
【ファイアウォールの役割】
信頼されたネットワーク(社内)
│
┌───┴───┐
│ FW │ ← トラフィックを検査
└───┬───┘
│
信頼されていないネットワーク(インターネット)
【フィルタリング基準】
・送信元/宛先 IP アドレス
・ポート番号
・プロトコル(TCP/UDP)
・アプリケーション層の情報(次世代 FW)
セキュリティグループ
【クラウドのセキュリティグループ】
┌─────────────────────────┐
│ セキュリティグループ │
│ (ステートフル FW) │
├─────────────────────────┤
│ インバウンドルール: │
│ ・TCP/80 (HTTP) 許可 │
│ ・TCP/443 (HTTPS) 許可 │
│ ・TCP/22 (SSH) 10.0.0.0/8 のみ│
├─────────────────────────┤
│ アウトバウンドルール: │
│ ・全許可(デフォルト) │
└─────────────────────────┘
↓
EC2 インスタンス
DDoS 対策
【DDoS 攻撃の種類と対策】
| 攻撃タイプ | 説明 | 対策 |
|-----------|------|------|
| **ボリューム型** | 帯域幅を枯渇(UDP フラッド)| CDN, Anycast, スケーリング |
| **プロトコル型** | 接続テーブルを枯渇(SYN フラッド)| SYN キューキット、レート制限 |
| **アプリケーション型** | アプリ処理を枯渇(HTTP フラッド)| WAF, レート制限、ボット検出 |
【DDoS 対策サービス】
・AWS Shield / AWS WAF
・Cloudflare
・Akamai Prolexic
・NS1
まとめ
コンピューターネットワークの核心:
- 階層モデル: OSI 7 階層、TCP/IP 4 階層で機能を分割
- トランスポート層: TCP(信頼性重視)と UDP(速度重視)
- ネットワーク層: IP アドレスとルーティングで経路制御
- アプリケーション層: HTTP/HTTPS が Web 通信を支える
- DNS: ドメイン名を IP アドレスに変換
- 負荷分散: 複数サーバーでスケーラビリティを確保
- セキュリティ: ファイアウォール、TLS、DDoS 対策
参考資料
- 「TCP/IP Illustrated, Volume 1: The Protocols」W. Richard Stevens
- 「计算机网络」Andrew S. Tanenbaum 著
- 「HTTP 権威ガイド」O'Reilly
- RFC 791 (Internet Protocol): https://datatracker.ietf.org/doc/html/rfc791
- RFC 793 (Transmission Control Protocol): https://datatracker.ietf.org/doc/html/rfc793
- RFC 9110 (HTTP Semantics): https://datatracker.ietf.org/doc/html/rfc9110
- Cloudflare Learning Center: https://www.cloudflare.com/ja-jp/learning/
免責事項 — 掲載情報は執筆時点のものです。料金・機能は変更される場合があります。最新情報は各公式サイトをご確認ください。