過程

過程

進程是正在執行的程式。例如火狐瀏覽器。我不明白術語“進程”和“端口”之間的關係和區別。

當我netstat -no -p -TCP在 cmd 上運行時,我可以看到多個連接埠號碼與每個進程關聯,如下所示。然而,我不清楚連接埠和進程之間的關係。

螢幕截圖:「netstat -no -p -TCP」的 cmd 輸出

答案1

直接回答問題:進程ID和連接埠號碼之間沒有任何關聯。他們列舉了完全不同的事。

PID 標識一個進程(例如,Firefox 會話:每個選項卡可以作為不同的進程運行),連接埠號碼標識該進程正在使用哪個連接埠進行通訊。特定連接埠號碼確實有習慣用途:80 通常用於 HTTP,443 通常用於 HTTPS。但進程可以獲得任何 PID 號,具體取決於它啟動的時間。

正如您所看到的,您的本機連接埠號碼是按順序使用的,並且與目標連接埠號碼或使用它們的進程的 PID 無關。

答案2

顯示 PID 只是為了讓您識別進行通訊的特定進程,與連接埠號碼無關。

如果一個程式的多個副本正在運行,並且它們都透過網路進行通信,那麼顯示程式名稱不足以唯一標識哪個連接埠屬於該程式的哪個副本。

如果您想要終止特定連線而不是程式的所有副本,則需要知道 PID 而不是程式名稱。

答案3

過程

什麼是流程?

進程基本上是程序的副本。因此,如果您多次運行像記事本這樣的程序,每個特定時間都會獲得自己的進程。進程使用資源,例如電腦上的可用 RAM。如果您查看任務管理器並看到該程式多次運行,則該程式的每次不同出現都可能是不同的進程。

進程是如何分配的?

每次建立新進程時,作業系統都會指派 PID(「進程 ID」)號。

流程有什麼好處?

使用進程 ID(它標識正在運行的程式的精確、特定副本),您可以確定該進程是哪個軟體程式的實例。您可以使用 TaskList(從命令列)、WMIC PROCESS GET /FORMAT:LIST(從命令列)或工作管理員來執行此操作。在工作管理員中,在某些較新版本的 Microsoft Windows 上,您可能需要前往「詳細資料」標籤。如果沒有顯示 PID 的列,您可以新增它。 (至少在 Windows 10 中,您右鍵單擊列名稱,然後可以選擇可見列。據我所知,舊版的 Windows 有一個用於此目的的功能表選項。)

您可能會發現有用的另一個指令是 netstat。我看到你正在使用 netstat。嘗試新增“-b”參數。 (這個選項是特定於 Microsoft Windows 的,我認為您根據提示中的 C:\Users\User> 使用它。)這將使 Netstat 嘗試使用 PID 來找出可執行檔案的名稱,並在下一行列印它。

所有這些都與連接埠號碼完全無關。

連接埠號

什麼是連接埠號

連接埠號碼用作網路連線的一部分。並非所有網路通訊都使用連接埠號碼。例如,TraceRoute(在 Microsoft Windows 上名為「TRACERT」)和 Microsoft Windows「ping」指令使用的 ICMP 不使用連接埠號碼。最常見的協定是 UDP 和 TCP。 (也許 SCTP 是第二常見的?)許多協議,包括 HTTP(S) 和 SMTP(用於電子郵件)都使用 TCP,因此使用連接埠號碼。

連接埠號碼有什麼用?

同一台電腦之間可以有多個 TCP 連接,連接埠號碼用於識別這些連接。例如,如果您的電子郵件程式正在接收電子郵件,則網路連線可能位於[LOCAL PORT 52534, REMOTE/FOREIGN PORT 25] 之間,而您的Web 瀏覽器可以使用[LOCAL PORT 54499, REMOTE/FOREIGN] 建立連接埠 443]。這樣,當遠端電腦回應並且傳入流量被定義為 [本地連接埠 54499,遠端/外部連接埠 443] 時,您的電腦就知道該流量不是針對您的本機電子郵件程式的。實際上,您的 Web 瀏覽器可以建立多個 TCP 連接,以便執行諸如同時下載多個圖形之類的操作。當您的電腦接收圖形資料時,連接埠號碼可以幫助您的網頁瀏覽器了解該資料適用於哪個連接,因此網頁瀏覽器可以知道接收到的資料適用於哪個圖形。

(附註:方括號只是我寫的符號,以使該段落更易於閱讀。在 Netstat 的輸出中,連接埠號顯示在冒號後面。我通常不喜歡使用術語「外部」來表示描述連接埠號,但我在本例中這樣做是因為這是netstat 使用的術語。

連接埠號碼是如何分配的?

一般來說,大多數軟體只是告訴「網路堆疊」它想要建立網路連線。在現代作業系統中,「網路堆疊」作為作業系統的一部分內建(儘管早在 Windows 3.1 時代,通常在安裝 Microsoft Internet Explorer 或 Trumpet Winsock 等軟體程式期間新增網路堆疊) 。軟體程式通常會告訴網路堆疊「建立到遠端連接埠 443 的新 TCP 連線」之類的資訊。網路堆疊將確定它想要使用的來源連接埠號碼。

概括

進程和連接埠號碼是非常不同的東西。我同意這裡其他答案中的大部分或全部資訊。 (但是,我在這裡添加了自己的答案,因為我認為更多細節,例如數字從哪裡分配,可能有助於使差異更加清晰。)

答案4

在大多數情況下,進程是一個正在運行的程式。像Firefox 這樣的程式實際上可以由多個一起工作的進程組成,但就作業系統而言,它們是基本的工作單元:每個進程都有一個映像(正在運行的可執行檔)、工作目錄、句柄(資源分配)、記憶體位址空間、CPU 和 I/O 優先權等等。如果您執行記事本,則會使用 notepad.exe 啟動一個進程,並開啟一個視窗供您互動。

連接埠是一種資源。作業系統有一定數量的可用連接埠(65535),程序可以請求句柄以獲得連接埠的獨佔使用權。進程可以獲得任意數量的未使用連接埠的句柄。網路通訊需要連接埠。為傳出連線(如連接到 Web 伺服器的瀏覽器)選擇的連接埠號碼本質上是任意的;它們沒有你需要關心的意義。

這只是一個簡化的概述,所以不要認為它是極佳的準確的。

相關內容