Networking 计算机网络中的端口号问题

Networking 计算机网络中的端口号问题,networking,network-programming,network-protocols,Networking,Network Programming,Network Protocols,根据我的理解,端口号就像电话分机。正如业务电话交换机可以使用一个主电话号码并为每个员工分配一个分机号码(如x100、x101等),计算机也有一个主地址和一组端口号来处理传入和传出连接 但问题是: 分配端口号的依据是什么?流程还是应用程序 根据我使用防火墙的经验,我通常为特定的应用程序打开一个端口。因此,端口号应该根据应用程序进行分配但如果同一台计算机上运行着同一应用程序的多个实例,该怎么办。每个实例使用相同的端口号。因此,如果消息到达该端口号,系统如何判断该消息应该发送到哪个实例 另一个问题

根据我的理解,端口号就像电话分机。正如业务电话交换机可以使用一个主电话号码并为每个员工分配一个分机号码(如x100、x101等),计算机也有一个主地址和一组端口号来处理传入和传出连接

但问题是:

  • 分配端口号的依据是什么?流程还是应用程序
根据我使用防火墙的经验,我通常为特定的应用程序打开一个端口。因此,端口号应该根据应用程序进行分配但如果同一台计算机上运行着同一应用程序的多个实例,该怎么办。每个实例使用相同的端口号。因此,如果消息到达该端口号,系统如何判断该消息应该发送到哪个实例

另一个问题也与港口有关

如果将web服务器设置为侦听端口80,则客户端浏览器应始终与端口80联系。我不确定以下关于web浏览器和web服务器之间通信的图示是否正确

  • 客户端浏览器已向服务器发送请求,消息应包含以下信息:

    收件人:

    发件人:

  • 服务器已向客户端浏览器发送响应,如下所示:

    收件人:

    发件人:

所以问题是,服务器是否会选择其他端口号向客户端发送消息?因为我觉得一个80端口看起来不够

Add-1-21:16 2010/12/19
在我上面的帖子中,单词“应用程序”表示系统知道的静态程序文件。可以启动此应用程序的多个指令,它们是多个“进程”

网络堆栈将TCP连接区分为三重,因此知道客户端地址和端口就足以正常工作。

如果不是进程,应用程序是什么?在防火墙中,您为可执行文件打开端口。它可以被视为一个应用程序,并且在运行时是一个进程

多个侦听器无法侦听同一端口。同一进程可以侦听多个端口


端口被分配给侦听器。根据防火墙(及其配置),您可以允许进程(可执行文件)侦听多个端口,或为侦听多个端口的同一进程创建多个异常。

在计算机上,只有一个进程可以侦听特定端口号。例如,如果Apache进程正在侦听端口80,则没有其他应用程序也可以侦听端口80

Apache通常预先派生几个进程,其中只有一个在端口80上侦听。该进程的任务是尽可能快速高效地将任何连接的处理移交给其他Apache进程池中的一个

到端口80的许多并发连接中的每一个都通过其源IP地址和源TCP端口号(客户端计算机从未使用的集合中随机选择)来区分


(编辑)

我非常确定Web服务器有一个进程(或线程)侦听,它接受传入的连接并将相应的文件句柄传递给工作进程(或线程)。EJP建议情况并非如此

Apache似乎有几种不同的方法影响它如何分散响应多个并发请求的负载。例如:及

Jeff Pozkaner写了一篇关于HTTP服务器设计的文章,我觉得很有趣:

web服务器的基本操作是接受请求并发回响应。最早的web服务器可能就是这样编写的。毫无疑问,他们的用户很快就注意到,当服务器向其他人发送响应时,他们自己的请求无法得到服务。会有很长很烦人的停顿

第二代web服务器通过为每个请求分叉一个子进程来解决这个问题

这类服务器的一个轻微变体使用“轻量级进程”或“线程”,而不是完整的Unix进程

第三代服务器称为“预分叉”。他们没有为每个请求启动一个新的子流程,而是保留了一个子流程池并可重复使用

第四代。只有一个过程。没有非便携线程/LWP。使用非阻塞I/O并发发送多个文件,调用select()/poll()/kqueue()以告知哪些文件已准备好接收更多数据


我不知道你所说的“过程”和“应用程序”的区别是什么意思。一切都只是在你的盒子上执行的代码

无论如何,进程/应用程序将侦听/绑定到应用程序作者配置的任何端口号。按照惯例,许多端口号是为特定类型的应用程序保留的,即使用特定协议进行通信的应用程序。例如,使用HTTP的web服务器通常在端口80上运行。SMTP服务器在端口22上运行。HTTPS是443等等

当然,您可以将web服务器(例如apache httpd)配置为在您喜欢的任何端口上运行—但是您的客户机需要知道,它将采用端口80


两个进程/应用程序可能绑定到同一端口。如果您尝试在已使用的端口上启动另一个进程/应用程序,您将收到一个错误:无法绑定到端口或类似的内容。

每个客户端连接都将由服务器上的套接字表示。套接字由以下4条信息的组合唯一表示:

  • 对等IP地址
  • 对等端口
  • 本地IP地址
  • 本地港口
客户端选择一个随机端口,因此如果