題 進程ID和端口號之間有什麼區別和關係?


流程是一個執行程序。例如。 Firefox瀏覽器。 我不理解“過程”和“端口”這兩個術語之間的關係和區別。

當我跑 netstat -no -p -TCP 在cmd上我可以看到多個端口號與每個進程相關聯,如下所示。但是,端口和進程之間的關係對我來說還不清楚。

screenshot: cmd output of "netstat -no -p -TCP"


4
2018-01-04 05:30


起源


與員工ID號和辦公室號碼之間的差異相同。 - chrylis
根據MaQleod的回复 en.wikipedia.org/wiki/Network_socket  套接字的特徵在於至少一個本地套接字和一個端口。 - barlop
BTW OP,你的CMD窗口中的文字看起來被壓扁了。我在許多已經從7或8升級到Windows 10的PC上看到了這一點。您可以通過更改字體大小,保存然後再將其更改來修復它。 - wjandrea
@wjandrea我注意到如果選擇光柵會被壓扁,然後使用光柵你會得到一些有趣的尺寸選項,你甚至可以預覽並看起來很有趣。但是如果選擇新的快遞那麼你就不會得到荒謬的尺寸選擇,並且可能會有一些輕微的擺弄你可以確保設置是正確的。 - barlop


答案:


要直接回答問題:進程ID和端口號之間沒有任何關聯。他們列舉了完全不同的東西。

PID標識進程(例如,Firefox會話:每個選項卡可以作為不同的進程運行),端口號標識該進程用於通信的端口。特定端口號確實具有常規用途:80通常用於HTTP,443用於HTTPS。但是進程可以獲取任何PID編號,具體取決於它何時啟動。

如您所見,本地端口號按順序使用,既不與目標端口號相關,也與使用它們的進程的PID相關。


32
2018-01-04 07:55



隱喻地,如果可能不是字面意思,他們是 指數 進入不同的數組。 - Pieter Geerkens
從技術上講, init 這幾天保留了PID 1。但除此之外,應該沒有辦法知道一個過程將獲得哪個PID。 - Kat
我會說最後一句話是“你的 資源 端口號是按順序使用的。“看來這是一個不在任何端口上監聽的工作站,但對於其他人來說,可能正在談論服務器的答案,這是一個重要的區別。 - Monty Harder
“您的本地端口號按順序使用“ - 它對我來說看起來並不是特別順序,有一些差距,我們也不知道連接打開的時間。它們只是在特定屏幕截圖中按升序排列。 - Bergi
並且為了完整性,應該注意將會有許多過程不會使用 任何 端口根本(雖然根據定義,這些將不會被列出 netstat 命令)。 - TripeHound


僅顯示PID,以便您可以識別執行通信的特定進程,並且與端口號無關。

如果您有一個程序的多個副本正在運行並且它們都通過網絡進行通信,那麼顯示程序名稱將不足以唯一地標識哪個端口屬於該程序的哪個副本。

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


12
2018-01-04 07:16



如果您只是將流程定義為“程序副本”,而不是一個明確的定義。複製到兩個不同目錄的程序,或者復製到別處或使用其他名稱的程序文件之間存在很大差異。或者RAM中的程序實例。 - barlop


處理

什麼是流程?

一個過程基本上是一個程序的副本。因此,如果您多次運行類似記事本的程序,每個特定時間將獲得自己的進程。進程使用資源,例如計算機上的可用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]。這樣,當遠程計算機響應並且傳入流量被定義為[LOCAL PORT 54499,REMOTE / FOREIGN PORT 443]時,您的計算機知道流量不適用於您的本地電子郵件程序。實際上,您的Web瀏覽器可以創建多個TCP連接,以便執行類似下載多個圖形的操作。當您的計算機接收到圖形數據時,端口號可以幫助您的Web瀏覽器知道數據所針對的連接,以便Web瀏覽器可以知道接收數據的圖形。

(注意:方括號只是我編寫的一個符號,使該段更容易閱讀。在Netstat的輸出中,端口號顯示在冒號後面。我通常不喜歡使用術語“外來”來描述端口號,但我在這種情況下做了,因為這是netstat使用的術語。)

如何分配端口號?

通常,大多數軟件只是告訴“網絡堆棧”它想要建立網絡連接。在現代操作系統中,“網絡堆棧”作為操作系統的一部分內置(儘管在Windows 3.1時代,通常在安裝Microsoft Internet Explorer或Trumpet Winsock等軟件程序時添加網絡堆棧) 。軟件程序通常會告訴網絡堆棧類似“創建到遠程端口443的新TCP連接”。網絡堆棧將確定它要使用的源端口號。

摘要

進程和端口號是非常不同的東西。我同意其他答案中的大部分或全部信息。 (但是,我在這裡添加了自己的答案,因為我認為更多的細節,比如從中分配數字的位置,可能有助於使區分更清晰。)


9
2018-01-04 13:38



這個答案有點不錯,但我認為最好告訴軟件如何獲得某些特定的數字,即使他們使用的是具有指定端口號的協議但仍然是+1 - DreadfulWeather
@DreadfulWeather:首先,“他們”這個詞是指什麼?第二,我的答案不是那樣做的,例如, “如何分配端口號?”部分。我四次閱讀你的評論,看看我是否能掌握你想要傳達的內容,但我很遺憾地說我只是無法理解你的評論。 - TOOGAM


有點簡化:

PID是計算機內部用於引用任何特定進程的數字。處理器一次只能做一件事,但它有多個任務要做,因此它在為不同進程工作之間交替,而PID是處理器用來識別每個進程的標記。

端口號是一個給所有網絡通信的標籤,這樣當答案從網絡返回時,家庭網絡上的路由器知道哪個計算機等待該答案,當答案到達計算機時,計算機知道哪個進程等待信息。

例如,端口標記確保當您從Stackexchange的服務器請求此頁面並且站點數據到達您的路由器時,您的路由器知道它是您的計算機,而不是您兄弟的智能手機或任何其他想要的設備他們。當他們到達您的計算機時,您的計算機可以告訴它是Firefox需要它們,而不是Word。


2
2018-01-04 09:49





在大多數情況下,進程是一個正在運行的程序。像Firefox這樣的程序實際上可以包含多個進程協同工作,但就操作系統而言,它們是基本的工作單元:每個進程都有一個映像(正在運行的可執行文件),一個工作目錄,句柄(資源分配),內存地址空間,CPU和I / O優先級等。如果運行記事本,則使用notepad.exe啟動進程,並打開一個窗口供您進行交互。

端口是一種資源。操作系統具有一定數量的可用端口(65535),並且進程可以請求句柄以獲得端口的獨占使用。進程可以獲取任意數量的其他未使用端口的句柄。網絡通信需要一個端口。為傳出連接選擇的端口號(如連接到Web服務器的瀏覽器)基本上是任意的;他們沒有必要關心你的意義。

這是一個簡化的概述,所以不要把它當成  準確。


2
2018-01-04 11:41