ポート (コンピュータネットワーク)

ポートはIPネットワークの各ホスト上で、複数アプリケーションへ通信を振り分けるために用意された、論理的な情報の送受信口である。TCP・UDPで定義される。

1. 概要
-----

Internet Protocolを用いたネットワークはホスト間通信を可能にする。この場合あるホストへの全信号を1つのアプリケーションのみが受け取るため、単一ホスト上で動作する複数アプリケーションへ同時には通信できない。

これを解決する手法がポートである。IPの上で動作するプロトコルにおいて「ヘッダに記された番号に基づき、このホスト内のある送受信口へデータをルーティングする」という規則を定めれば、1ホスト内複数アプリケーションへ通信を振り分けられる。このホスト内送受信口という概念がポートである。ポートを指定する番号をポート番号という。ホストのIPアドレスを「マンションの住所」にたとえるなら、ポート番号は「部屋番号」に相当する。ポートの概念を導入することでアプリケーション間通信が可能になる。

ポート番号は、通信プロトコルの種類と密接に関係している。65536個のポート番号のうち、システムポート番号以前はウェルノウンポート番号 (langと呼ばれる1024個は、慣例的に予約され、特定のサービスのために使用される。そのため、ポート番号を参照することにより、その通信が利用しているサービスを知ることができる場合がある。

2. ポートとソケット
-----------

プログラムでポートを用いて通信するには、一般にソケットと呼ばれる仕組みを用いる。ソケットとは通信の端点のことで、2台のコンピュータが通信しているとき、その通信路の両端、すなわちそれぞれのコンピュータにソケットが存在する。また、ソケットのインターフェイスやソケットを扱うライブラリプログラムも併せてソケットと呼ぶこともある。ソケットを利用したプログラムを記述することをソケットプログラミングと呼ぶ。

ソケットを用いた通信は、以下のような手順で行われる。

サーバ機でサービスを提供するプログラムは、ソケットを作成し、サービス固有のポート番号をソケットに割り当て 、待ち行列を用意し 、クライアントからの接続を待ち受ける 。
サービスを利用するクライアントプログラムは、ソケットを作成し、そのソケットの通信相手としてサーバ機のIPアドレスとサービスのポート番号を指定し 、接続を行う。
サーバは接続を受け付けると、新規にソケットを作成し、そのソケットとクライアントとの間に通信を確立する。もとのソケットは再び待ち受けに戻る。
通信が終わると、2.および3.で作成したソケットは破棄される。WWW  の場合、原則としてHTMLファイルや画像ファイルを1件取得するたびに上記2.〜4.の手順が繰り返されるため、アクセスが集中するとサーバの負荷が非常に高くなる。

このように、ポート番号とはサーバ上のサービスを特定するための番号であるといえる。そのため、サーバ側のポート番号は重要であるが、クライアント側のポート番号は通常問題とされず、空いている番号を適当に自動で割り当てる。

なお、上記手順の3.で作成されるソケットは、待ち受け用のソケットと同じIPアドレス・ポート番号・プロトコル  を有する。 すなわち、1台のサーバ機に、同じIPアドレス・ポート番号・プロトコルのソケットが複数存在し得ることに注意が必要である。 この様子は、同時に複数の相手と通信を行っているWebサーバなどで、netstatコマンドを実行してみるとよくわかる。

$ netstat tcp4 0 0 xxx.yyy.zzz.www.80 aaa.bbb.ccc.ddd.39321 ESTABLISHED tcp4 0 0 xxx.yyy.zzz.www.80 eee.fff.ggg.hhh.56047 TIME_WAIT tcp4 0 0 xxx.yyy.zzz.www.80 iii.jjj.kkk.lll.41358 TIME_WAIT tcp4 0 0 xxx.yyy.zzz.www.80 mmm.nnn.ooo.ppp.3356 FIN_WAIT_2 tcp4 0 0 xxx.yyy.zzz.www.80 qqq.rrr.sss.ttt.3355 FIN_WAIT_2

ここでxxx.yyy.zzz.wwwはこのWebサーバ機のIPアドレス、80はWebサーバプログラムのポート番号、右側は各クライアントのIPアドレスおよびポート番号である。

3. ポート番号の種類
-----------

ポート番号は大別して3種類に分けられる。

システムポート  番号は、基本的なシステムサービスやプロトコルで使用される、よく知られたポート番号であり、Internet Assigned Numbers Authority  が管理している。ユーザーポート  番号に関しても、IANAが利便性を考慮して公開している。いずれの用途にも該当しないポート番号を使用する場合は、49152番以降を使用する。

クライアントが用いるポートはエフェメラルポートと呼ばれる。かつては、動的・私用ポート  の範囲のポート番号を用いることが一般的であったが、 RFC 6056 によって現在では1024から65535までの範囲を用いるべきとされている。

1992年まではウェルノウンポート番号は1〜255までだった。

ただし、これはあくまで指針であり強制力はない。これに従わず任意のポート番号を勝手に用いて通信することも技術的には可能だが、使用するポートが意図せず重複した場合、不具合を起こす可能性がある。

なお、Unix系のOSでは、0〜1023番のポートを使用するには、通常、root権限が必要で、予約ポートとも呼ばれる。

4. ポート番号一覧
----------

以下は、一般的に使用されるポート番号の一覧である。

TCP/20 : FTP 
TCP/21 : FTP 
TCP/22 : SSH
TCP/23 : Telnet
TCP/25 : SMTP
UDP/53 : DNS
UDP/67 : DHCP
UDP/68 : DHCP
TCP/80 : HTTP
TCP/110 : POP3
TCP/119 : NNTP
UDP/123 : NTP
UDP/137〜138 : NetBIOS
TCP/139 : NetBIOS
TCP/143 : IMAP
TCP/443 : HTTPS
TCP/445 : ダイレクトホスティングSMBサービス
TCP/587 : Submissionプロトコル名称とポートの対応表は、Unix系OSやmacOSでは/etc/servicesに、Windows NT系では%SystemRoot%\System32\drivers\etc\servicesにテキストファイルとして存在する。ただしIANAに登録されているものがすべて記載されているとは限らない。

5. ポートと不正アクセス
-------------

一般に、コンピュータ内には様々なプログラムが動いている。近年は通信処理を行うのに十分な能力を持つコンピュータが安価になったことから、家庭用のPC内でもいわゆるサーバ機能を有するプログラムが多数動作している。これらのプログラムはポートにバインドされたソケットを作成して接続を待ち受けているが、プログラムの不備があると、ある特別なデータを受信した時にプログラムが誤作動することがある。悪意を持って巧妙に作られたデータの場合、本来通信データとして送信してはいけない情報を勝手に送信してしまうような誤動作をさせられることもある。このような誤作動の元となるプログラムの不備のことをセキュリティホールと呼ぶ。

セキュリティホールのないソフトウェアを用いるのが最善の策であるが、プログラムが人間によって作られるものである限り誤りを完全になくすことはできない。また、セキュリティホールになりえる動作でも用途によっては便利な機能であることがあり、悪意のあるデータが送られてこないことが保証されていればそのソフトウェアを動かしたい場合も多い。

このような場合のために、安全を確保しやすい内部のLANと何者がいるかわからない外部のインターネット網との間の通信に介入し、不正な通信の一部を遮断するということが行われる。この遮断機能をファイアウォールと呼ぶ。

ファイアウォールにはいくつかの手法があるが、最も多く用いられているのはソケットのバインドを規制するものである。特定のポート番号とのバインドができないようにしたり、逆に特定のポート番号とのバインドしかできないようにしたりすることにより、ユーザが気づかないうちにコンピュータが外部と勝手に通信してしまうのを防ぐ。また、TCPのように通信回線確立の手順があるプロトコルにおいては、LAN側からインターネット上にあるサーバに対して接続開始を要求するのは認めるが、インターネット側からLAN上のコンピュータへの接続開始の要求は通さないということもよく行われる。

ファイアウォールはソフトウェアまたはハードウェアの形態を取り、その機能はルーターに内蔵されたり、コンピュータ内部に導入されたりする 。パーソナルコンピュータ  向けのIDSは特にパーソナルファイアウォールと呼ばれる。

一般論として、ネットワーク経由で記憶媒体を共有する、いわゆる「ファイル共有」を実現するサービスは、処理の高速化などの必要性からプロトコルが単純化されておりセキュリティ面での脆弱性を持つことが多い。特にMicrosoft Windowsがファイル共有などの実現に用いているNetBIOSと呼ばれるプロトコルは非常に広く用いられているにもかかわらずプロトコルの脆弱性が高いといわれている。このため、NetBIOS用として定義されているポート番号137番〜139番については、インターネットとLANを接続するルーターにおいて通信を遮断することが強く推奨されている。市販のルーターでは工場出荷状態でこれらのポートの通信遮断設定が入っていることが多い。

6. ポートフォワード
-----------

IPアドレス枯渇問題の対処方法としては、IPv6を用いる場合もあるが、ネットワークアドレス変換も多用されている。

NATを利用する場合、「電子メールの受信サービスを行うのはAというコンピュータ」「WWWのサービスを行うのはBというコンピュータ」というように、処理をするコンピュータをサービス毎に変えるようにするためには、「ポート番号25番の通信はAへ」「ポート番号80番の通信はBへ」というようにポート番号毎に通信先を振り分ければよい。このポート番号による通信コンピュータの振り分けの機能を「ポートフォワード 」または「ポート転送」と呼ぶ。

類似のパケット転送機能として「DMZ」と呼ばれる機能を持つルーターもある。

7. 脚注
-----

7.1. 注釈
-------

7.2. 出典
-------

8. 関連項目
-------

TCP/IP
インターネット
ポートマップ
エフェメラルポート
TCPやUDPにおけるポート番号の一覧

9. 外部リンク
--------

[1]: IANAによるポート番号の一覧
[2]