コラム: なぜポート443なのか
所要時間: 15分
はじめに
Webブラウザで https://example.com にアクセスするとき、暗黙的にポート443に接続しています。HTTPは80、HTTPSは443。この数字はどこから来たのでしょうか?
http://example.com → example.com:80
https://example.com → example.com:443
この「当たり前」の裏には、インターネット標準化の歴史があります。
Well-Known Ports(0-1023)
特権ポートの概念
ポート番号0〜1023は「Well-Known Ports」または「特権ポート」と呼ばれます。
┌─────────────────────────────────────────────────────┐
│ ポート番号の区分 │
├─────────────────────────────────────────────────────┤
│ 0 - 1023 │ Well-Known Ports(特権ポート) │
│ │ → root権限が必要(Unix系OS) │
├─────────────────────────────────────────────────────┤
│ 1024 - 49151│ Registered Ports(登録済みポート) │
│ │ → IANAに登録されたサービス用 │
├─────────────────────────────────────────────────────┤
│ 49152 - 65535│ Dynamic/Private Ports │
│ │ → 一時的な接続用(エフェメラルポート)│
└─────────────────────────────────────────────────────┘
Unix系OSでは、1023以下のポートでリッスンするにはroot権限が必要です。これはセキュリティ上の設計で、一般 ユーザーが重要なサービスを偽装することを防ぎます。
# 一般ユーザーでは失敗
$ python -m http.server 80
PermissionError: [Errno 13] Permission denied
# rootなら成功
$ sudo python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 ...
歴史的な割り当て
初期のインターネットでは、ポート番号は必要に応じて割り当てられました。
| ポート | サービス | 割り当て時期 | 備考 |
|---|---|---|---|
| 20, 21 | FTP | 1971年頃 | データ転送(20)と制御(21) |
| 22 | SSH | 1995年 | Telnet(23)の次の空き番号 |
| 23 | Telnet | 1969年頃 | 最古のプロトコルの一つ |
| 25 | SMTP | 1982年 | メール送信 |
| 53 | DNS | 1983年 | 名前解決 |
| 80 | HTTP | 1991年 | Tim Berners-Leeが選択 |
| 443 | HTTPS | 1994年 | Netscapeが申請 |
なぜ80と443なのか
HTTPとポート80
1989年、Tim Berners-LeeがCERNでWorld Wide Webを発明しました。HTTPプロトコルを設計する際、ポート番号が必要でした。
当時の状況:
- ポート1〜79は既に主要サービスで使用済み
- ポート80は未使用
- 「80」という覚えやすい数字
Tim Berners-Leeは特に深い理由なく80を選んだとされています。「たまたま空いていた」というのが実情です。