ポートとソケットを理解しよう
ストーリー
「DBサーバーに接続できないとき、まず何を確認する?」
「IPアドレスが正しいか...ですか?」
「それも大事だけど、ポートも確認しないとダメだ。MySQLは3306番、PostgreSQLは5432番。ポートが閉じてたら接続できない」
「ポートって、具体的にどういう仕組みなんですか?」
「IPアドレスが建物の住所だとしたら、ポートは部屋番号だ」
ポート番号とは
ポート番号は、1台のコンピュータ上でどのアプリケーションと通信するかを指定する番号です。
たとえ話
IPアドレス = ビルの住所(192.168.1.100)
ポート番号 = 部屋番号(:80, :443, :3306)
「192.168.1.100の80番の部屋(Webサーバー)に用事があります」
「192.168.1.100の3306番の部屋(MySQL)に用事があります」
ポート番号の範囲
| 範囲 | 名称 | 説明 |
|---|---|---|
| 0-1023 | ウェルノウンポート | 標準サービス用(管理者権限が必要) |
| 1024-49151 | 登録済みポート | アプリケーション用 |
| 49152-65535 | エフェメラルポート | クライアント側の一時ポート |
よく使うポート番号
必ず覚えるべきポート
| ポート | サービス | プロトコル |
|---|---|---|
| 22 | SSH | TCP |
| 80 | HTTP | TCP |
| 443 | HTTPS | TCP |
| 3306 | MySQL | TCP |
| 5432 | PostgreSQL | TCP |
覚えておくと便利なポート
| ポート | サービス | プロトコル |
|---|---|---|
| 21 | FTP | TCP |
| 25 | SMTP(メール送信) | TCP |
| 53 | DNS | UDP/TCP |
| 110 | POP3(メール受信) | TCP |
| 143 | IMAP(メール受信) | TCP |
| 6379 | Redis | TCP |
| 27017 | MongoDB | TCP |
| 8080 | HTTP(代替) | TCP |
| 8443 | HTTPS(代替) | TCP |
ソケッ トとは
ソケットは、IPアドレス + ポート番号の組み合わせで、通信の端点を表します。
ソケット = IPアドレス : ポート番号
例: 192.168.1.100:3306(MySQLサーバーのソケット)
192.168.1.50:54321 (クライアントのソケット)
TCP接続はソケットのペア
クライアントソケット → サーバーソケット
192.168.1.50:54321 → 192.168.1.100:3306
この「ソケットペア」が1つのTCP接続を識別します。
同じサーバーの同じポートに対して、複数のクライアントが接続できます。クライアント側のポート番号(エフェメラルポート)が異なるため、それぞれの接続を区別できます。
ポートの状態を確認する
LISTEN状態のポートを確認
bash
# ss コマンド(推奨)
ss -tln
# 出力例
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 80 0.0.0.0:3306 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*| オプション | 意味 |
|---|---|
| -t | TCPのみ表示 |
| -l | LISTEN状態のみ表示 |
| -n | ポート番号を数字で表示(サービス名ではなく) |
| -p | プロセス名も表示(管理者権限が必要) |
ESTABLISHED接続を確認
bash
# 確立されている接続
ss -tn state established
# 特定のポートに絞る
ss -tn | grep :3306ポートの到達確認
bash
# 特定のポートに接続できるか確認
# nc(netcat)コマンド
nc -zv 192.168.1.100 3306
# 成功: Connection to 192.168.1.100 port 3306 [tcp/mysql] succeeded!
# 失敗: nc: connect to 192.168.1.100 port 3306 (tcp) failed: Connection refused0.0.0.0 と 127.0.0.1 の違い
ポートの確認時に見かける重要なアドレスです。
| アドレス | 意味 | 外部からのアクセス |
|---|---|---|
| 0.0.0.0 | すべてのネットワークインターフェース | 可能 |
| 127.0.0.1 | ループバック(自分自身のみ) | 不可 |
bash
# 例: MySQLが 0.0.0.0:3306 でLISTEN → 外部から接続可能
# 例: MySQLが 127.0.0.1:3306 でLISTEN → ローカルからのみ接続可能DBサーバーが
127.0.0.1でしか LISTEN していない場合、外部からは接続できません。設定ファイルで bind-address を変更する必要があります。
よくあるポート関連のトラブル
| トラブル | 原因 | 確認コマンド |
|---|---|---|
| 接続拒否 | サービスが起動していない | ss -tln |
| 接続タイムアウト | ファイアウォールでブロック | nc -zv host port |
| ポート競合 | 同じポートを別のサービスが使用 | ss -tlnp |
| ローカルのみ | 127.0.0.1 でバインド | `ss -tln |
まとめ
| ポイント | 内容 |
|---|---|
| ポート番号 | アプリケーションを識別する番号(0-65535) |
| ウェルノウンポート | 0-1023(SSH:22, HTTP:80, HTTPS:443 等) |
| エフェメラルポート | 49152-65535(クライアント側の一時ポート) |
| ソケット | IPアドレス + ポート番号の組み合わせ |
| 確認コマンド | ss, nc で状態や到達性を確認 |
チェックリスト
- 主要なポート番号を5つ以上言える
- ソケットの概念を説明できる
- ss コマンドでLISTENポートを確認できる
- 0.0.0.0 と 127.0.0.1 の違いを説明できる
次のステップへ
ポートとソケットを理解しました。 次のセクションでは、ポートへのアクセスを制御する「ファイアウォール」を学びます。
推定読了時間: 20分