【Linux】ポート確認の基礎を理解しよう
【Linux】ポート確認の基礎を理解しよう
今回はLinuxでのポートを確認する方法を紹介していきます。サーバー運用を行う際のポート管理などは必要不可欠な知識となりますのでしっかりと理解しておきましょう。手順を覚えるだけよりも、ポートの基礎や仕組みなども併せて理解することで理解が深まるだけでなく、自ら状況を判断し対処できる技術を持つことができるようになります。
ポートとは
一般的にはネットワーク機器をケーブルを使って接続する際のコネクタの差込口のことを指しています。しかし、今回のようなLinuxにおける「ポート」とは、インターネット通信での標準プロトコル(通信の規格)であるTCP/IP通信でソフトウェアがどのように通信するかという指定する際に番号を用います。この時の番号を「ポート番号」といい、IP通信ではIPアドレスを利用して通信が行われていることはよく知られていますが、これは宛先、つまり通信相手を指定できるだけで、通信内容やプロロトコル、そしてどのプログラムがデータを扱えばいいか通信相手に伝えることはできません。そこで、同じ通信相手でもプロトコルや取り扱うプログラムを識別・指定する番号としてポート番号が用意されています。IPアドレスが「住所」であり、ポートはネットワークでの通信の際にデータのやり取りを行う際の「ドア」と考えると理解しやすいでしょう。
主なポートの種類(ウェルノウンポート)
ポート番号にはウェルノウンポートという規格があります。ウェルノウンポートとは、TCP/IPによる通信で利用されるTCPやUDPのポート番号のうち、サービスやプロトコルが利用するために予約されている0番から1023番のポート番号のことを言います。特に有名なものはHTTP通信での80番、ファイルのやり取りを行うFTP通信での20・21番、HTTPS通信の443番などがあります。一般的にはこれらの番号を指定すればウェルノウンポートでの通信を行うことができますが、サーバ上でポート番号を設定できるため、必ずしもウェルノウンポートを使用しなければならないというわけではありません。ウェルノウンポートはinuxだけではなく、ネットワークに関する共通する知識となっています。
では今回なぜ、ウェルノウンポートの紹介をしたかというと、ウェルノウンポートをしっかりと理解できていれば、この後紹介するポート番号を確認する操作を行ったときに情報が理解しやすくなるからです。Linuxに関する知識はインターネットを調べるだけでもお豊富にあり、また設定を細かく確認したり、ソフトウェアやプログラムの解説を読めば操作の手順を知ることができますが、基本的な知識を知っているかそうでないかは理解度が大きく変わってくるでしょう。
TCPとUDP
TCP
TCP(テーシーピー、Transmission Control Protocol)はIP通信の際のデータの損失や整合性を確保するために、通信の信頼性を確保する機能を持っています。TCPはデータのやり取りを行う前に、コネクションと呼ばれる仮想的な通信回線を送信元と宛先との間に確立します。TCPはしっかりとコネクションを確立させてから通信を行うため、コネクション型プロトコルと呼ばれます
UDP
UDP(ユーディーピー、User Datagram Protocol)はTCPと違い、コネクションを確立しないのでコネクションレス型プロトコルと呼ばれます。UDPでは、信頼性が低い為、上位のアプリケーション側で必要とする通信制御を施すことになります。またコンピュータの資源を消費しないのでTCPと違い通信相手の数にとくに制限はありません。UDPコネクションを確立させず素早く通信を行える為、リアルタイムで通信をしたい場合、つまりIP電話でのやりとりなどで使用されています。これらの知識もLinuxだけでなく、ネットワーク運用の知識として必須となります。
ポートを確認するコマンド「lsof」
「lsof」コマンドは、Linuxが使用しているプロセス名や実行ユーザー名の情報を確認することが出来ます。この「lsof」コマンドにオプションコマンドである「-i」を追加することで、ポートの利用情報を確認することができます。注意点として、「lsof」コマンド確認できるのは、実行したユーザーが読み取ることができるファイルだけに限ります。つまり、Linuxが動作している環境全てのポートの利用状況を確認したい場合はrootユーザーで操作を行わなければなりません。
ですので、ルートユーザーのログインを行ってから
# lsof -i
上記のコマンドを記述するか、Linuxではルートユーザーでの操作を行うことのできる「sudo」をつけてコマンドを記述する必要があります。(「sudo」をつけた場合でもログイン操作は必要です。)
「sudo」をつけると
$ sudo lsof -i
となります。このように情報が表示されます。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 41u IPv4 18693 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 42u IPv4 18694 0t0 UDP *:sunrpc
systemd 1 root 43u IPv6 18695 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 44u IPv6 18696 0t0 UDP *:sunrpc
rpcbind 850 rpc 4u IPv4 18693 0t0 TCP *:sunrpc (LISTEN)
rpcbind 850 rpc 5u IPv4 18694 0t0 UDP *:sunrpc
rpcbind 850 rpc 6u IPv6 18695 0t0 TCP *:sunrpc (LISTEN)
rpcbind 850 rpc 7u I Pv6 18696 0t0 UDP *:sunrpc
各項目の情報は以下の通りです。
・COMMAND……実行プログラム
・PID……プロセス番号
・USER……実行ユーザー
・FD……ファイルディスクリプタ(ファイル読み書きのモード)
・TYPE……種類
・DEVICE……デバイス
・SIZE/OFF……ファイルサイズまたはオフセット
・NODE……プロトコル
・NAME……ポート
・(LISTEN)……待ち受け状態
この他の使い方として、特定のポート番号を使用しているプロセスを確認するには、lsofコマンドにオプション「-i」を付け、「:」(コロン)で区切って特定のポート番号を指定て実行します。
例) HTTP通信のみを確認する
# lsof -i:80
まとめ
いかがでしたでしょうか。Linuxにおけるポートの確認方法についてしっかりと理解しておきましょう。Linuxでは、この他にも様々な情報を確認できるコマンドがありますので、一つひとつしっかりと理解していきましょう。