【基本】ポートについて
はじめに
ネットワーク通信において「ポート(Port)」や「ポート番号」という言葉を一度は聞いたことがあると思います。
これらは、データが正しい相手に届くための「住所の部屋番号」のようなもので、特にネットワークやサーバー構築、APIの実装に関わるなら、「ポートが開いているか?」「競合していないか?」といった判断が日常的に必要になります。
今回は、ポートの基本を初心者向けにざっくりわかりやすく解説します。
ポートとは
※https://it-infomation.com/network-port/ より
ポートは、データの出入り口のことで、具体的にはネットワーク上の1台のコンピュータ内でアプリケーションを識別する番号のことを指します。1つのIPアドレスの中で複数の通信を区別するための番号です
。
※1つのIPアドレスにつき、65535のポートが理論上使用できます。ただし、事前に専用サービスでの使用のために使用できないポート番号も存在します。詳しくは下記にて。
これによって、同じIPアドレスを使用していても、ポート番号が異なることで正しく宛先のアプリケーションにデータを送信することができます。
IPアドレスが「住所」だとすれば、ポート番号は「部屋番号」に相当します。
IPアドレスで接続先のコンピュータを特定し、ポート番号でその中のアプリケーション(サービス)を特定します。
(例)
・WebブラウザでGoogleにアクセス
・メールソフトでGmailを受信
・オンラインゲームで友達と接続
これらの通信を整理するために、「ポート」という番号付きの出入り口が使われます。
ポートの役割
※https://it-infomation.com/network-port/ より
「どのアプリにデータを渡すか」を決めます。
「◯◯番の部屋(ポート)にデータを届けて!」 という仕組みで、正しいアプリにデータを渡します。
先ほどと一部重複しますが、IPアドレスで宛先はわかりますが、どの部屋までかはわからないため、ポート番号で明らかにします。
ポート番号の分類
ポート番号は 0~65535 まであり、主に3つの範囲に分けられます。
主要なサービス(HTTP, SSHなど)は決まったポート番号を使う
① ウェルノウンポート (0-1023)
HTTP, SSHなどインターネットの基盤サービスはあらかじめ決まった専用のポート番号を使用します。
これは、全世界で統一された番号で管理者権限が必要になります。
(例)
80: HTTP (普通のWebサイト)
443: HTTPS (安全なWebサイト)
22: SSH (安全な遠隔操作)
② 登録済みポート (1024-49151)
各種アプリケーションが使用し、正式登録することによって固定利用が可能となります。
ウェルノウンポートより緩やかな規制であることが特徴的です。
例えば、データベース、ゲーム、業務アプリなどに利用され、
3306: MySQLデータベース
3389: リモートデスクトップ
25565: Minecraftサーバー
といった形式で登録されています。
③ 動的/プライベートポート (49152-65535)
一時的な通信のために専用で使用されるポートです。
OSが自動的に割り当て、通信終了後は再利用が可能になります。
主な用途として、ブラウザの接続、オンラインゲームのクライアント側などに利用されます。
(例)49152番以降: ChromeやFirefoxがサイトに接続する際に使用
※https://it-infomation.com/network-port/ より
※ポート番号が0〜65535(2の16乗)まであるというのは、TCP/IPで定義された「理論上のポート番号の範囲」です。これは「各デバイスで使える最大数のポート番号」であって、「各デバイスで常にその数分用意されている」とか「全部同時に使える」というわけではありません。
ポートの使われ方
通信の流れ(例:Webサイト閲覧)
- ブラウザが「google.com」にアクセスする
- 「Googleのサーバー(IPアドレス)の80番ポート(HTTP)に接続」 とリクエストをブラウザがサーバーに送信
- Googleサーバーは「80番ポート経由でHTMLデータを返信」
- ブラウザがデータを受け取り、Webページを表示する
仮にポートがないとすると、すべての通信が同じ出入り口に集中してしまい、どのアプリにデータを渡すかわからなくなってしまうという問題が発生します。
例えば、メールのデータがゲームアプリに届いてしまったり、Webサイトのデータが音楽プレイヤーに届いてしまったり、といったことが発生してしまいます。
ポートを意識する場面
ネットワーク設定でポートを指定する
(例)Webサーバーを立てる
「80番ポート(HTTP)を開放する」と設定しないと、外部からアクセスすることができません。
サーバーは一般的に固定ポートを使います。
サーバーを外部から通信可能にするときは、通信するポート番号を決める必要があるため、人が手動で設定する必要があるのです。
まとめ
参考・画像引用元URL
Discussion