プロセス

プロセス

プロセスは実行中のプログラムです。例: Firefox。「プロセス」と「ポート」という用語の関係と違いがわかりません。

cmd を実行すると、netstat -no -p -TCP以下に示すように、各プロセスに複数のポート番号が関連付けられていることがわかります。ただし、ポートとプロセスの関係は不明です。

スクリーンショット: 「netstat -no -p -TCP」の cmd 出力

答え1

質問に直接答えると、プロセス ID とポート番号の間には関係がありません。それらはまったく異なるものを列挙します。

PID はプロセスを識別し (例: Firefox セッション: 各タブは異なるプロセスとして実行される可能性があります)、ポート番号はプロセスが通信に使用しているポートを識別します。特定のポート番号には慣習的な用途があります。通常、80 は HTTP に使用され、443 は HTTPS に使用されます。ただし、プロセスは開始されたタイミングに応じて任意の PID 番号を取得できます。

ご覧のとおり、ローカル ポート番号は順番に使用されており、宛先ポート番号やそれらを使用するプロセスの PID とは関連がありません。

答え2

PID は、通信を行っている特定のプロセスを識別できるようにするためにのみ表示され、ポート番号とは関係ありません。

1 つのプログラムの複数のコピーが実行されていて、それらがすべてネットワーク経由で通信している場合、プログラム名を表示するだけでは、どのポートがプログラムのどのコピーに属しているかを一意に識別するには不十分です。

特定の接続を終了したいが、プログラムのすべてのコピーを終了したくない場合は、プログラム名ではなく PID を知る必要があります。

答え3

プロセス

プロセスとは何ですか?

プロセスは基本的にプログラムのコピーです。したがって、メモ帳などのプログラムを複数回実行すると、それぞれの特定の時間に独自のプロセスが設定されます。プロセスは、コンピューターで使用可能な RAM などのリソースを使用します。タスク マネージャーでプログラムが複数回実行されているのを確認した場合、プログラムの各実行は異なるプロセスである可能性があります。

プロセスはどのように割り当てられますか?

PID (プロセス ID) 番号は、新しいプロセスが作成されるたびにオペレーティング システムによって割り当てられます。

プロセスは何の役に立つのでしょうか?

プロセス ID (実行中のプログラムの正確な特定のコピーを識別する) を使用すると、そのプロセスがどのソフトウェア プログラムのインスタンスであるかを判断できます。これは、TaskList (コマンド ラインから)、WMIC PROCESS GET /FORMAT:LIST (コマンド ラインから)、またはタスク マネージャーを使用して実行できます。タスク マネージャーでは、Microsoft Windows の新しいバージョンによっては、[詳細] タブに移動する必要がある場合があります。PID を表示する列がない場合は、それを追加できます。(少なくとも Windows 10 では、列名を右クリックして、表示する列を選択できます。私の記憶が確かなら、Windows の古いバージョンには、このためのメニュー オプションがありました。)

役に立つかもしれないもう 1 つのコマンドは netstat です。netstat を使っているようですね。"-b" パラメータを追加してみてください。(このオプションは Microsoft Windows に固有のものです。プロンプトの C:\Users\User> から判断すると、Microsoft Windows を使用しているものと思われます。) これにより、Netstat は PID を使用して実行可能ファイルの名前を判別し、次の行にそれを出力します。

これらはすべてポート番号とはまったく関係ありません。

ポート番号

ポート番号とは何か

ポート番号は、ネットワーク接続の一部として使用されます。すべてのネットワーク通信がポート番号を使用するわけではありません。たとえば、TraceRoute (Microsoft Windows では「TRACERT」という名前) および Microsoft Windows の「ping」コマンドで使用される ICMP は、ポート番号を使用しません。ポート番号を使用する最も一般的なプロトコルは、UDP と TCP です (次に一般的なのは SCTP でしょうか)。HTTP(S) や SMTP (電子メール用) を含む多くのプロトコルは TCP を使用するため、ポート番号が使用されます。

ポート番号は何の役に立つのでしょうか?

同じコンピュータ間で複数の TCP 接続を確立することが可能であり、ポート番号はそれらの接続を識別するために使用されます。たとえば、電子メール プログラムが電子メールを受信する場合、ネットワーク接続は [ローカル ポート 52534、リモート/外部ポート 25] 間である可能性がありますが、Web ブラウザーは [ローカル ポート 54499、リモート/外部ポート 443] を使用して接続を作成できます。このように、リモート コンピュータが応答し、着信トラフィックが [ローカル ポート 54499、リモート/外部ポート 443] として定義されている場合、コンピュータはトラフィックがローカルの電子メール プログラム向けではないことを認識します。実際、Web ブラウザーは、複数のグラフィックを同時にダウンロードするなどの操作を行うために、複数の TCP 接続を作成することができます。コンピュータがグラフィック データを受信すると、ポート番号によって Web ブラウザーはデータがどの接続向けであるかを認識し、受信したデータがどのグラフィック向けであるかを認識できます。

(注: 角括弧は、この段落を少し読みやすくするために私が作った表記法です。Netstat の出力では、ポート番号はコロンの後に表示されます。私は通常、ポート番号を説明するのに「外部」という用語を使用することを好みませんが、この場合は netstat でその用語が使用されていたため、使用しました。)

ポート番号はどのように割り当てられますか?

一般的に、ほとんどのソフトウェアは、ネットワーク接続を確立したいことを「ネットワーク スタック」に伝えるだけです。最近のオペレーティング システムでは、「ネットワーク スタック」はオペレーティング システムの一部として組み込まれています (ただし、Windows 3.1 の時代では、ネットワーク スタックは Microsoft Internet Explorer や Trumpet Winsock などのソフトウェア プログラムのインストール時に追加されるのが一般的でした)。ソフトウェア プログラムは通常、ネットワーク スタックに「リモート ポート 443 への新しい TCP 接続を作成する」などの指示を出します。ネットワーク スタックは、使用するソース ポート番号を決定します。

まとめ

プロセスとポート番号はまったく異なるものです。私は、ここにある他の回答のほとんどまたはすべての情報に同意します。(ただし、番号の割り当て元など、もう少し詳しく説明すると、違いがもう少し明確になると思ったので、ここに自分の回答を追加しました。)

答え4

プロセスとは、ほとんどの場合、実行中のプログラムです。Firefox のようなプログラムは、実際には連携して動作する複数のプロセスで構成されている場合がありますが、オペレーティング システムに関する限り、プロセスは作業の基本単位です。すべてのプロセスには、イメージ (実行中の実行可能ファイル)、作業ディレクトリ、ハンドル (リソース割り当て)、メモリ アドレス空間、CPU および I/O の優先度などがあります。メモ帳を実行すると、notepad.exe を使用してプロセスが開始され、対話用のウィンドウが開きます。

ポートはリソースです。オペレーティング システムには利用可能なポートが一定数 (65535) あり、プロセスはポートの排他的使用を取得するためにハンドルを要求できます。プロセスは、未使用のポートのハンドルをいくつでも取得できます。ポートはネットワーク通信に必要です。発信接続 (Web サーバーに接続するブラウザーなど) 用に選択されるポート番号は基本的に任意です。気にする必要のある意味はありません。

これはすべて簡略化された概要なので、素晴らしい正確な。

関連情報