LESSON 20分

ポートとソケットを理解しよう

ストーリー

「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エフェメラルポートクライアント側の一時ポート

よく使うポート番号

必ず覚えるべきポート

ポートサービスプロトコル
22SSHTCP
80HTTPTCP
443HTTPSTCP
3306MySQLTCP
5432PostgreSQLTCP

覚えておくと便利なポート

ポートサービスプロトコル
21FTPTCP
25SMTP(メール送信)TCP
53DNSUDP/TCP
110POP3(メール受信)TCP
143IMAP(メール受信)TCP
6379RedisTCP
27017MongoDBTCP
8080HTTP(代替)TCP
8443HTTPS(代替)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:*
オプション意味
-tTCPのみ表示
-lLISTEN状態のみ表示
-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 refused

0.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分