タイトル: アプリケーション層(第4層)
SEOタイトル: TCP/IP アプリケーション層完全ガイド (HTTP/DNS/SMTP)
| この記事の要点 |
|
TCP/IP 4 層モデルにおけるアプリケーション層
TCP/IP モデル (DoD モデル) は実装重視で、ネットワーク通信を 4 層に整理しています。アプリケーション層 (第 4 層) はユーザーアプリケーションが直接利用するプロトコル群を含み、OSI 参照モデルの第 5 (セッション) / 第 6 (プレゼンテーション) / 第 7 (アプリケーション) を統合した位置づけです。
TCP/IP 4 層 (上→下) OSI 7 層 (上→下) プロトコル例
──────────────────── ──────────────────── ────────────────
第4層 アプリケーション層 ┐ 第7層 アプリケーション HTTP, FTP, DNS
│ 第6層 プレゼンテーション TLS, MIME
┘ 第5層 セッション NetBIOS
第3層 トランスポート層 第4層 トランスポート TCP, UDP
第2層 インターネット層 第3層 ネットワーク IP, ICMP
第1層 ネットワーク I/F 層 ┐ 第2層 データリンク Ethernet
┘ 第1層 物理 ケーブル, 電波
代表的アプリケーション層プロトコル一覧
| プロトコル | ポート (TCP/UDP) | 用途 |
|---|---|---|
| HTTP | 80 / TCP | Web アクセス |
| HTTPS | 443 / TCP | 暗号化 Web アクセス (TLS over HTTP) |
| FTP | 21 (制御) / 20 (データ) TCP | ファイル転送 |
| SFTP | 22 / TCP | SSH 上のファイル転送 |
| FTPS | 990 / TCP | FTP over TLS |
| SSH | 22 / TCP | 暗号化リモートシェル |
| Telnet | 23 / TCP | (旧) 平文リモートシェル ★非推奨 |
| SMTP | 25 (送信) / 587 (Submission) TCP | メール送信 |
| SMTPS | 465 / TCP | SMTP over TLS |
| POP3 | 110 / 995 (POP3S) TCP | メール受信 (ダウンロード型) |
| IMAP | 143 / 993 (IMAPS) TCP | メール受信 (サーバ管理型) |
| DNS | 53 / UDP (TCP も使用) | 名前解決 |
| DHCP | 67 (server) / 68 (client) UDP | IP アドレス自動配布 |
| SNMP | 161 / UDP, 162 (Trap) | ネットワーク機器監視 |
| NTP | 123 / UDP | 時刻同期 |
| LDAP | 389 / 636 (LDAPS) TCP | ディレクトリサービス |
| NFS | 2049 / TCP, UDP | Unix ネットワークファイル共有 |
| SMB / CIFS | 445 / TCP | Windows ファイル共有 |
| RDP | 3389 / TCP | Windows リモートデスクトップ |
| RADIUS | 1812 (認証) / 1813 (アカウンティング) UDP | 認証・課金 |
HTTP / HTTPS
Web の基盤プロトコル。リクエスト/レスポンスのテキストプロトコル (HTTP/2 以降はバイナリ)。
[HTTP リクエスト例]
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
[HTTP レスポンス例]
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
...
HTTP メソッド: GET / POST / PUT / DELETE / PATCH / HEAD / OPTIONS
ステータス: 1xx 情報 / 2xx 成功 / 3xx リダイレクト / 4xx クライアントエラー / 5xx サーバエラー
HTTPS = HTTP + TLS。443/TCP。
HTTP/2 (RFC 7540) : バイナリ多重化、HPACK ヘッダ圧縮
HTTP/3 (RFC 9114) : QUIC ベース、UDP 443
DNS
ドメイン名 ↔ IP アドレスの相互変換。階層的に世界中で分散運用されています。
# 名前解決の流れ
# 1. localhost が DNS リゾルバへ問合せ
# 2. リゾルバがルート DNS → TLD (com) → 権威 DNS (example.com) と再帰問合せ
# 3. 結果をキャッシュ (TTL の期間)
# 確認コマンド
dig example.com # 詳細 (Linux)
dig +trace example.com # 階層追跡
nslookup example.com # Windows / Linux 両対応
host example.com # 簡易
# レコードタイプ
# A : ホスト名 → IPv4
# AAAA : ホスト名 → IPv6
# CNAME : ホスト名 → 別ホスト名 (エイリアス)
# MX : メールサーバ
# NS : ネームサーバ
# TXT : SPF, DKIM, DMARC, ドメイン認証
# SOA : ゾーン管理情報
# PTR : IP → ホスト名 (逆引き)
SMTP / POP3 / IMAP
| プロトコル | 役割 | ポート |
|---|---|---|
| SMTP (Simple Mail Transfer Protocol) | メール送信 (サーバ間/クライアント→サーバ) | 25 / 587 / 465 (SMTPS) |
| POP3 (Post Office Protocol v3) | メール受信 (サーバから DL し削除型) | 110 / 995 (POP3S) |
| IMAP (Internet Message Access Protocol) | メール受信 (サーバ管理、フォルダ同期) | 143 / 993 (IMAPS) |
[SMTP 通信例 (Telnet で見る)]
S: 220 mail.example.com ESMTP
C: EHLO client.example.com
S: 250-mail.example.com
S: 250 STARTTLS
C: STARTTLS
S: 220 Ready to start TLS
... TLS ハンドシェイク ...
C: AUTH LOGIN
C: MAIL FROM:
S: 250 OK
C: RCPT TO:
S: 250 OK
C: DATA
C: Subject: Hello
C: ...
C: .
S: 250 Message accepted
C: QUIT
SSH / SFTP / Telnet
# SSH (Secure Shell): 暗号化リモートシェル
ssh user@host
ssh -p 2222 user@host # ポート変更
ssh -i ~/.ssh/key.pem user@host # 公開鍵認証
# SFTP: SSH 上のファイル転送
sftp user@host
> put localfile remotefile
> get remotefile localfile
# SCP: SSH 上のコピー
scp localfile user@host:/path/
# Telnet: 平文リモートシェル ★ 非推奨 (盗聴可能)
# 現代では HTTP/SMTP デバッグの簡易クライアントとしてのみ使用
telnet example.com 80
> GET / HTTP/1.1
> Host: example.com
> (空行)
FTP / SFTP / FTPS
| プロトコル | 暗号化 | ポート | 備考 |
|---|---|---|---|
| FTP | なし | 21 (制御) + 20 (Active) / Passive はランダム | ★ 平文認証、現代は非推奨 |
| FTPS | TLS | 990 + データ用 ephemeral | FTP の TLS 化 |
| SFTP | SSH | 22 (単一ポート) | ★ 推奨、ファイアウォール越しに容易 |
DHCP
[DHCP の 4 ステップ DORA]
1. Discover : クライアントがブロードキャスト「IP くれ」
2. Offer : DHCP サーバが候補 IP を提示
3. Request : クライアントが「その IP もらいます」
4. Ack : サーバが確定通知
リース情報:
- IP アドレス + サブネットマスク
- デフォルトゲートウェイ
- DNS サーバ
- リース期間 (TTL)
Linux 確認:
dhclient -v eth0
cat /var/lib/dhcp/dhclient.leases
Windows:
ipconfig /all # 現在の DHCP リース
ipconfig /release # リース解放
ipconfig /renew # 再取得
SNMP / NTP / LDAP
- SNMP (Simple Network Management Protocol): ルーター・サーバの CPU/メモリ/IF 統計を取得。Zabbix / PRTG が監視で利用。v3 で暗号化対応。
- NTP (Network Time Protocol): タイムサーバから時刻取得。ストラタム階層 (Stratum 0/1/2...)。Linux は chrony / ntpd、Windows は w32time。
- LDAP (Lightweight Directory Access Protocol): ユーザー・組織情報のディレクトリサービス。Active Directory / OpenLDAP。SSO 基盤。
NFS / SMB / RDP
| プロトコル | OS | 用途 |
|---|---|---|
| NFS (Network File System) | Unix / Linux | リモートディレクトリをローカルマウント |
| SMB / CIFS | Windows (Linux も Samba) | ファイル共有 (\\server\share) |
| RDP (Remote Desktop Protocol) | Windows | GUI でリモート操作 |
| VNC | OS 問わず | GUI リモート操作 (オープン) |
TLS は L6 か L7 か
厳密にはOSI 第 6 層 (プレゼンテーション) の暗号化機能に相当しますが、実装上は TCP の上で動き、アプリケーション層プロトコル (HTTP, SMTP 等) を包む形で機能します。そのためTCP/IP 4 層モデルではアプリケーション層に含めるのが一般的です。HTTPS = HTTP over TLS、SMTPS = SMTP over TLS など。
OSI と TCP/IP の対応 (詳細)
| OSI 層 | 主な責務 | TCP/IP での扱い |
|---|---|---|
| L7 アプリケーション | アプリ固有プロトコル | アプリケーション層に統合 |
| L6 プレゼンテーション | 文字コード/暗号化/圧縮 | |
| L5 セッション | セッション管理 |
TCP/IP は「実装するアプリ側で必要なら持てばよい」という発想で、3 層を 1 層に統合しました。例えば HTTPS は HTTP (L7) + TLS (L6) を組み合わせて 1 つのプロトコルとして実装されます。
FAQ
Q: ポート番号はどう決まる?
A: IANA (Internet Assigned Numbers Authority) が管理。0-1023 は Well-Known Ports (HTTP=80 等)、1024-49151 が Registered Ports、49152-65535 が Dynamic/Private Ports。
Q: HTTP と HTTPS、TLS なしでも見える?
A: HTTP は平文 → 経路途中で盗聴・改ざん可能。現代の Web はHTTPS 必須。Let's Encrypt で無料 SSL 取得可。
Q: 同じプロトコルで TCP と UDP どちらも使うものは?
A: DNS が代表例。通常の問合せは UDP/53、大きな応答 (DNSSEC、ゾーン転送) は TCP/53 を使う。