过程

过程

进程是正在执行的程序。例如 Firefox。我不明白“进程”和“端口”之间的关系和区别。

当我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 连接,端口号用于标识这些连接。例如,如果您的电子邮件程序正在接收电子邮件,则网络连接可能位于 [本地端口 52534,远程/外部端口 25] 之间,而您的 Web 浏览器可以使用 [本地端口 54499,远程/外部端口 443] 创建连接。这样,当远程计算机响应并且传入流量被定义为 [本地端口 54499,远程/外部端口 443] 时,您的计算机就知道该流量不是用于您的本地电子邮件程序。实际上,您的 Web 浏览器可以创建多个 TCP 连接,以便执行诸如同时下载多个图形之类的操作。当您的计算机接收图形数据时,端口号可以帮助您的 Web 浏览器知道数据是用于哪个连接的,因此 Web 浏览器可以知道收到的数据是用于哪个图形的。

(注:方括号只是我编造的符号,以使该段落更容易阅读。在 Netstat 的输出中,端口号显示在冒号后面。我通常不喜欢使用术语“外部”来描述端口号,但在这种情况下我这样做了,因为这是 netstat 使用的术语。)

端口号是如何分配的?

一般而言,大多数软件只是告诉“网络堆栈”它想要建立网络连接。在现代操作系统中,“网络堆栈”是作为操作系统的一部分内置的(尽管在 Windows 3.1 时代,网络堆栈通常是在安装 Microsoft Internet Explorer 或 Trumpet Winsock 等软件程序时添加的)。软件程序通常会告诉网络堆栈类似“创建到远程端口 443 的新 TCP 连接”的内容。网络堆栈将确定它想要使用的源端口号。

概括

进程和端口号是截然不同的东西。我同意这里其他答案中的大部分或全部信息。(不过,我在这里添加了自己的答案,因为我认为更详细一点,比如数字的分配位置,可能会有助于更清楚地区分。)

答案4

在大多数情况下,进程是正在运行的程序。像 Firefox 这样的程序实际上可以由多个协同工作的进程组成,但就操作系统而言,它们是基本的工作单元:每个进程都有一个映像(正在运行的可执行文件)、一个工作目录、句柄(资源分配)、内存地址空间、CPU 和 I/O 优先级等。如果您运行记事本,则会使用 notepad.exe 启动一个进程,并打开一个窗口供您交互。

端口是一种资源。操作系统有一定数量的可用端口(65535),进程可以请求句柄以获得端口的独占使用权。进程可以获得任意数量的未使用端口的句柄。网络通信需要端口。为传出连接(如浏览器连接到 Web 服务器)选择的端口号本质上是任意的;它们没有任何意义,您无需关心。

这只是一个简单的概述,所以不要把它当作极好的准确的。

相关内容