Sockets 套接字端口与常规端口相同吗

Sockets 套接字端口与常规端口相同吗,sockets,tcp,server,client,port,Sockets,Tcp,Server,Client,Port,我读到一些与我目前对港口的理解相矛盾的东西。如果您在谷歌上搜索“一台服务器有多少个端口”,首先会出现以下情况: 无论连接了多少个客户端,服务器通常只使用一个端口。它是(客户端IP、客户端端口、, 服务器IP、服务器端口),对于每个TCP连接必须是唯一的- 因此,65535个端口的限制仅与连接数有关 单个客户机可以连接到单个服务器 我想每次客户端建立到服务器的连接时,都会使用常规端口创建一个套接字来连接这两个服务器 如果否,是否意味着一台服务器可以连接到比常规端口最大数量更多的客户端 我想每次客户

我读到一些与我目前对港口的理解相矛盾的东西。如果您在谷歌上搜索“一台服务器有多少个端口”,首先会出现以下情况:

无论连接了多少个客户端,服务器通常只使用一个端口。它是(客户端IP、客户端端口、, 服务器IP、服务器端口),对于每个TCP连接必须是唯一的- 因此,65535个端口的限制仅与连接数有关 单个客户机可以连接到单个服务器

我想每次客户端建立到服务器的连接时,都会使用常规端口创建一个套接字来连接这两个服务器

如果否,是否意味着一台服务器可以连接到比常规端口最大数量更多的客户端

我想每次客户端建立到服务器的连接时,都会使用常规端口创建一个套接字来连接这两个服务器

在这种情况下,术语“端口”主要用于描述地址。端口号与IP地址一起唯一标识网络的一个端点

不仅服务器端点通常只使用一个端口号,如果不使用,连接到服务器会困难得多,因为客户端端点将使用哪个端口号来请求连接?DNS允许客户端查找IP地址,如果IP地址还不知道,但是没有这样的端口号工具。因此,必须提前知道端口号

所以,不……并不是每次客户端建立连接时,都会使用“常规端口”创建一个套接字来连接两者。没有“常规端口”。只有“端口”,所有端口都是相同的,它们只是一个标识端点地址的数字

如果否,是否意味着一台服务器可以连接到比常规端口最大数量更多的客户端

是的,它可以。在服务器端,端口号(通常)总是相同的。例如,HTTP服务器(通常)将使用端口80。侦听套接字的端口号为“80”,每个连接的服务器端套接字也是如此

端口号可以像这样重用,因为每个套接字除了IP地址和端口号之外还有其他标识特征。特别是,服务器的侦听套接字是唯一的;服务器端只有一个套接字具有该IP地址、该端口号,并且没有连接(即正在侦听)

建立连接后,将创建一个新套接字来表示该连接。该套接字可以唯一标识,因为与侦听套接字不同,它确实具有与其关联的连接(即远程端点),以及IP地址和端口号。当客户端端点向服务器发送数据时,网络层可以告诉应该将数据发送到哪个套接字,因为该数据来自特定的远程端点,该端点还具有唯一的IP地址和端口号

服务器和客户端的唯一IP地址和端口号的组合唯一地标识了该连接,使其不同于服务器上可能具有相同服务器端端点IP地址和端口号的任何其他套接字

在您引用的文本中,这一部分正是对套接字的独特标识的描述:

它是(客户端IP、客户端端口、服务器IP、服务器端口)的元组,对于每个TCP连接都必须是唯一的

这样,服务器的IP地址和端口号可以无限次地使用(不包括服务器上的其他受限资源,如内存和保存网络连接状态的表)

端口号限制仅在尝试创建其他侦听套接字(用于服务器)或其他连接(用于客户端)时才起作用。服务器通常不会耗尽端口号,除非它们正在实现一个协议,该协议要求服务器创建一个到客户端侦听套接字的连接(这是不常见的),而客户端不会耗尽端口号,除非它们尝试进行大量连接

您引用的这部分文本所指的正是后一个限制:

65535端口的限制仅与单个客户端可以与单个服务器建立的连接数有关


问题是“服务器”一词模棱两可。它可以指物理机器及其所有软件,也可以仅指特定的服务。例如,“web服务器”可以指我身后的盒子,也可以指盒子提供的web服务器服务。如果你问我,“服务器使用了多少内存”,答案取决于你想要的“服务器”的含义。端口同上。web服务器可能只在端口80上侦听,但它可以有数百个到端口80的连接。每个连接都有自己的套接字,这样web服务器就可以读取和写入不同的连接,但它们都是web服务器上端口80的连接。这是一个很好的答案,我希望人们能够看到这一点,如果他们和我的情况相同的话。