ポート番号
コンピュータネットワークにおいて、ポート(port)とは、オペレーティングシステムがデータ通信を行うためのエンドポイントである。「ポート」という言葉はハードウェア(入出力ポート)についても用いるが、ソフトウェアにおける「ポート」は、特定のプロセスやサービスの種類によって特定される論理的な構成概念である。
ポートは常にホストのIPアドレスおよび通信プロトコルの種類と関係しており、この3つで通信セッションの送信元と宛先が決定する。ポートはIPアドレスとプロトコルごとに16ビットの数値によって特定され、この数値のことをポート番号(port number)という。IPアドレスを建物の住所にたとえるなら、ポートは個別の部屋、ポート番号は部屋番号に相当する。
特定のポート番号は、特定のサービスを見分けるのにしばしば用いられる。65536個のポート番号のうち、ウェルノウンポート番号(well-known port numbers)と呼ばれる1024個(0 - 1023)は、慣例的に予約され、ホストで特定のサービスのために使用される。主にポートを使用するプロトコルはトランスポート層プロトコル(Transmission Control Protocol (TCP)やUser Datagram Protocol (UDP)などのインターネット・プロトコル・スイート)である。
目次
1 ポートとソケット
2 ポート番号の種類
3 ポート番号一覧
4 ポートと不正アクセス
5 ポートフォワード
6 関連項目
7 外部リンク
ポートとソケット
プログラムでポートを用いて通信するには、一般にソケットと呼ばれる仕組みを用いる(ソケットはBSDで開発されたため、特にBSDソケットとも呼ぶ)。ソケットとは通信の端点のことで、2台のコンピュータが通信しているとき、その通信路の両端、すなわちそれぞれのコンピュータにソケットが存在する。また、ソケットのインターフェースやソケットを扱うライブラリプログラムも併せてソケットと呼ぶこともある。
ソケットを用いた通信は、以下のような手順で行われる。
サーバ機でサービスを提供するプログラムは、ソケットを作成し、サービス固有のポート番号をソケットに割り当て (bind)、待ち行列を用意し (listen)、クライアントからの接続を待ち受ける (accept)。- サービスを利用するクライアントプログラムは、ソケットを作成し、そのソケットの通信相手としてサーバ機のIPアドレスとサービスのポート番号を指定し (connect)、接続を行う。
- サーバは接続を受け付けると、新規にソケットを作成し、そのソケットとクライアントとの間に通信を確立する。もとのソケットは再び待ち受けに戻る(これは、会社などで、受付係が来客を担当者に引き合わせ、その後また受付に戻るようなものと考えることができる)。
- 通信が終わると、2.および3.で作成したソケットは破棄される。
これらの手順に沿って通信を行うプログラムの形式は、ソケットプログラミングと呼ばれる。
WWW (HTTP) の場合、原則としてHTMLファイルや画像ファイルを1件取得するたびに上記2.〜4.の手順が繰り返されるため、アクセスが集中するとサーバの負荷が非常に高くなる(ただしHTTP 1.1では1回の接続で複数件のデータを取得する動作がデフォルトとなっている)。
このように、ポート番号とはサーバ上のサービスを特定するための番号であるといえる。そのため、サーバ側のポート番号は重要であるが、クライアント側のポート番号は通常問題とされず、空いている番号を適当に自動で割り当てる。
なお、上記手順の3.で作成されるソケットは、待ち受け用のソケットと同じIPアドレス・ポート番号・プロトコル (TCP/UDP) を有する。
すなわち、1台のサーバ機に、同じIPアドレス・ポート番号・プロトコルのソケットが複数存在し得る(ポートとソケットは一対多の対応となり得る)ことに注意が必要である。
この様子は、同時に複数の相手と通信を行っているWebサーバなどで、netstatコマンド(ソケットの通信状況を表示するコマンド)を実行してみるとよくわかる(最近のGNU/Linuxではiproute2への移行が進んでいるため前述のコマンドよりも$ ss --resolve --tcp --udp
などとしたほうがいいであろう)。
$ 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 種類に分けられる。
種類 | 範囲 | 内容 |
---|---|---|
WELL KNOWN PORT NUMBERS | 0番 - 1023番 | 一般的なポート番号 |
REGISTERED PORT NUMBERS | 1024番 - 49151番 | 登録済みポート番号 |
DYNAMIC AND/OR PRIVATE PORTS | 49152番 - 65535番 | 自由に使用できるポート番号 |
ウェルノウンポート番号(WELL KNOWN PORT NUMBER)は、Internet Assigned Numbers Authority (IANA) が管理している。REGISTERED PORT NUMBERSに関しても、IANAが利便性を考慮して公開している。クライアント側に割り当てられるポート番号など、ユーザが自由にポート番号を使用する場合は、49152番以降を使用する。クライアントのポート番号は俗にエフェメラルポート(短命なポート)と呼ばれる。
1992年まではWELL KNOWNポート番号は1〜255までだった。
ただし、これはあくまで指針であり強制力はない。これに従わず勝手なポート番号を用いて通信することも一応は可能であるが、混乱を招くであろう。
なお、Unix系のOSでは、0〜1023番のポートを使用するには、通常、root権限が必要で、予約ポートとも呼ばれる。
ポート番号一覧
以下は、一般的に使用されるポート番号の一覧である。
- 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%System32driversetcservicesにテキストファイルとして存在する。ただしIANAに登録されているものがすべて記載されているとは限らない。
ポートと不正アクセス
一般に、コンピュータ内には様々なプログラムが動いている。近年は通信処理を行うのに十分な能力を持つコンピュータが安価になったことから、家庭用のパソコン内でもいわゆるサーバ機能を有するプログラムが多数動作している。これらのプログラムはポートを作成して結合を待ち受けているが、プログラムの不備があると、ある特別なデータを受信した時にプログラムが誤作動することがある。悪意を持って巧妙に作られたデータの場合、本来通信データとして送信してはいけない情報(コンピュータ内に隠匿してあるはずのパスワードなど)を勝手に送信してしまうような誤動作をさせられることもある。このような誤作動の元となるプログラムの不備のことをセキュリティホールと呼ぶ。
セキュリティホールのないソフトウェアを用いるのが最善の策であるが、プログラムが人間によって作られるものである限り誤りを完全になくすことはできない。また、セキュリティホールになりえる動作でも用途によっては便利な機能であることがあり、悪意のあるデータが送られてこないことが保証されていればそのソフトウェアを動かしたい場合も多い。
このような場合のために、安全を確保しやすい内部のLANと何者がいるかわからない外部のインターネット網との間の通信に介入し、不正な通信の一部を遮断するということが行われる。この遮断機能をファイアウォールと呼ぶ。
ファイアーウォールにはいくつかの手法があるが、最も多く用いられているのはソケットのバインドを規制するものである(パケットフィルタ型)。特定のポート番号とのバインドができないようにしたり、逆に特定のポート番号とのバインドしかできないようにすることにより、ユーザが気づかないうちにコンピュータが外部と勝手に通信してしまうのを防ぐのである。また、TCPのように通信回線確立の手順があるプロトコルにおいては、LAN側からインターネット上にあるサーバに対して接続開始を要求するのは認めるが、インターネット側からLAN上のコンピュータへの接続開始の要求は通さないということもよく行われる。
ファイアーウォールはソフトウェアまたはハードウェアの形態を取り、その機能はルーター(LANとインターネットの接続点に位置する)に内蔵されたり、コンピュータ内部に導入されたりする (IDS)。パソコン向けのIDSは特にパーソナルファイアウォールと呼ばれる。
一般論として、ネットワーク経由で記憶媒体を共有する、いわゆる「ファイル共有」を実現するサービスは、処理の高速化などの必要性からプロトコルが単純化されておりセキュリティ面での脆弱性を持つ事が多い。特にMicrosoft Windowsがファイル共有などの実現に用いているNETBIOSと呼ばれるプロトコルは非常に広く用いられているにもかかわらずプロトコルの脆弱性が高いといわれている。このため、NETBIOS用として定義されているポート番号137番〜139番(TCPとUDP)については、インターネットとLANを接続するルータにおいて通信を遮断する事が強く推奨されている。市販のルータでは工場出荷状態でこれらのポートの通信遮断設定が入っている事が多い。
ポートフォワード
近年のインターネットの爆発的な拡大にともない、コンピュータ1台1台を識別するはずのIPアドレスの数がコンピュータの台数よりも遥かに少ないという状況が起こってしまった。IPv6を用いてIPアドレスの数を飛躍的に増加させるという動きもあるが、現状では一つのIPアドレスを複数のコンピュータで使い回すということが行われている。
この際、「電子メールの受信サービスを行うのはAというコンピュータ」「WWWのサービスを行うのはBというコンピュータ」というように、サービス毎に処理をするコンピュータが違うようにするためには、「ポート番号25番の通信はAへ」「ポート番号80番の通信はBへ」というようにポート番号毎に通信先を振り分ければよい。このポート番号による通信コンピュータの振り分けの機能を「ポートフォワード (port forward)」と呼ぶ。
一般に、ポートフォワードはNAPT(ルータによるIPアドレス/ポート変換)やパケットフィルタの機能の一部として実現される。
関連項目
- TCP/IP
- インターネット
- ポートマップ
- エフェメラルポート
- TCPやUDPにおけるポート番号の一覧
外部リンク
- yougetsignal.com
- IANAによるポート番号の一覧