ポート番号は、OSI 基本参照モデルのトランスポート層において、アプリケーションの識別を行うための番号です。 ルータやファイアウォール、セキュリティ問題においてもポートの概念は非常に重要です。 ポート番号は16ビットで表現される事から、0〜65535の範囲になります。 ネットワークに接続しているホストは、IP アドレスでお互いを認識して通信を行いますが、これだけでは相手を認識できてもアプリケーションまでは認識できません。 そこで、ポート番号とIP アドレスを組み合わせる事で、相手とアプリケーションを識別する事になります。 例えば、あるポート番号と特定のアプリケーションを結び付けておくと、○○のポート番号だからアプリケーションはXXXXだ、というように識別できます。 私達が、Web サイトを閲覧しながら、同時にメールの送受信やファイルの転送を行っても通信が正常であるのは、ポートという概念があるからです。 ポート番号はOS によって管理され、TCP/IP の通信ではプロトコル(TCP やUDP)の他に、送信元IP アドレス、送信元ポート番号、送信先IP アドレス、送信先ポート番号が必要になります。
例えば、サーバ側でWeb サービスは80番のポートで接続を待ち受けている、メール転送サービスは25番のポートで接続を待ち受けている・・・というようになっています。 クライアントは、Web サイトを閲覧したいのであればWeb サービスを提供しているサーバの80番ポートへ接続を試みます。 Web ブラウザは、デフォルトの状態では80番ポートへ接続するようになっています。 同様に、メールソフトやFTP ソフトも、デフォルトで接続する相手先のポート番号が決められています。 このように、アプリケーションによってデフォルトでポート番号が決められているのは、利便性を高めるために標準化されているからです。 ○○ポートは、XXXXのアプリケーションである事が分かりやすいようになっています。 標準的に決められているポート番号を、「Well-Known ポート」と呼び、0〜1023番までを指します。 トランスポート層には、TCP とUDP というプロトコルがありますが、各ポートはこれらのプロトコルを別に扱うので、プロトコルが別であれば同時に同じポートを使う事ができます。
一方、接続元であるクライアント側のポート番号は固定的に決められていません。 例えば、80番ポートで待ち受けているWeb サーバへ接続するのには、自分も80番ポートを使うという事はありません。 もしもお互いに80番ポートでWeb サービスを提供しているコンピュータだったならば、お互いの通信が衝突してなり立たなくなります。 このような事を避けるために、接続元であるクライアントが送信元ポート番号として使用するのはWell-Known ポート以外のポートです。 この1024番以降のポートを、「エフェメラルポート」あるいは「ダイナミックポート」と呼びます。 OS は、エフェメラルポートの範囲から空いているポートを動的に選択し、サーバへ接続を試みます。 基本的には、サーバが標準的なサービス(Web やメールなど)を提供する場合はWell-Known ポートを使用し、クライアントはエフェメラルポートを使用しますが、運用上の都合でデフォルトではWell-Known ポートで動作するサービスを、エフェメラルポートで動作させる場合もあります。
現在使用中のポート番号は、「netstat コマンド」で表示させる事ができます。 Windows ならばコマンドプロンプトから、Linux ならばコンソールから「netstat -a」と入力すれば、プロトコルやホスト、ポート番号の状態が表示されます。 主に使用されるWell-Known ポートの一例を以下に示します。
アプリケーション | ポート番号 |
FTP(Data) | 20 |
FTP(Control) | 21 |
SSH | 22 |
Telnet | 23 |
SMTP | 25 |
DNS | 53 |
HTTP | 80 |
POP3 | 110 |
NTP | 123 |
netbios-ns | 137 |
netbios-dgm | 138 |
netbios-ssn | 139 |
IMAP | 143 |
SNMP | 161 |
SNMPTRAP | 162 |
HTTPS | 443 |
Microsogt-DS | 445 |
printer | 515 |