ポート番号とは?
同一サーバー内で動いているプログラムのアドレスになります。同一コンピュータ内でどのプログラムにアクセスするかを識別するために使用されます。
レイヤー4プロトコル(UDP/TCP)において最も重要です。
ポート番号決定方法
ポート番号は3種類の決定方法があります。
- System Ports(ウェルノウンポート)
- User Ports
- 動的に決定される。
System Ports(ウェルノウンポート)
- 0〜1023のポートでIANAによって管理されています。
- 「宛先ポート(サーバー側ポート)」に使用されます。
- サーバーでよく使われる一般的なプログラムに割り当てられています。(例えばSSHであれば22、HTTPであれば80)
- 接続元がポート番号を省略した場合はデフォルトでこの番号が使用されます。
ウェルノウンポート例
- 20:FTP(データ)
- 22:SSH
User Ports
- 1024〜49151までのポートで、IANAによって管理されています。
- 「宛先ポート(サーバー側ポート)」に使用されます。
- メーカー独自のアプリケーションで使用します。
メーカー独自アプリケーション例
- 1433:SQL Server
- 1521:Oracle
- 3306:MySQL
- 3389:Microsoft Remote Desktop
- 8080:Tomcat
動的に決定
- 49152〜65535(Windows)までのいずれかの整数値を取る。(Linuxだと、32768〜61000になります。)
- クライアント(接続元)側でコネクションを作る場合に、送信元ポート番号としてランダムに割り当てるポート番号
- 「送信元ポート(クライアント側ポート)」に使用されます。
- OSが他のポート番号が被らないようランダムに決める。
送信元ポートをランダムに割り当てることによって、コネクションを確立したサーバー側のプログラムがクライアントのどのポートに応答を返せば良いかがわかります。
lsofコマンド
lsofコマンドを使用すれば「どのポート番号で、どのプログラムを待ち受けているか」調査することが可能です。
オプション
-i
ネットワークソケットファイルを表示するオプションです。サーバーの待機ポートとプロセスを一覧で表示します。
-n
IPアドレスをホスト名に変換しないオプションです。
-P
ポート番号をサービス名に変換しないオプションです。
出力項目
NAME
待ち受けているポート番号やステータスを指します。「*22」や「*68」となっている場合もありますが、「*」は「全てのIPアドレスを接続元として受け付ける」という意味になります。
逆に、例えば「127.0.0.1:25」等となっているものは、他のコンピュータからの通信は受け付けないという意味になります。(127.0.0.1はループバックアドレスで自分のPCを指す。)
出力されるステータス
LISTEN
他のコンピュータから待ち受けをしているポートを示します。
ESTABLISHED
相手と現在通信中のポートを示します。相手にパケットを投げて返答があったら通信中であると判定されます。
ステータスが表示されない場合
UDPのデータを示します。UDPではデータを送りっぱなしで通信相手との疎通確認をしないので通信中という概念がありません。
この記事へのコメントはありません。