我阅读了一些与当前对端口的理解相矛盾的内容。如果您用Google搜索“服务器有多少个端口”,首先出现的内容如下:
无论连接了多少个客户端,服务器通常只使用一个端口。它是(客户端IP,客户端端口, 服务器IP,服务器端口),每个TCP连接必须唯一- 因此65535个端口的限制仅与多少个连接有关 一个客户端可以访问一台服务器。
我想每次客户端建立与服务器的连接时,都在使用常规端口为两者之间的连接创建套接字吗?
如果否,是否意味着服务器可以连接的客户端数量超过常规端口的最大数量?
答案 0 :(得分:1)
我以为每次客户端建立与服务器的连接时,就会使用常规端口为两者之间的连接创建套接字吗?
在此上下文中,术语“端口”实际上是用来描述地址。端口号和IP地址一起唯一标识网络的一个端点。
服务器端点通常不仅仅使用单个端口号,而且如果不建立连接,则与服务器的连接将更加困难,因为客户端端点将使用哪个端口号来请求连接?如果IP地址尚不知道,DNS允许客户端查找IP地址,但是端口号没有这种功能。因此,端口号必须事先知道。
因此,不……并非并非每次客户端建立连接时,都使用“常规端口”为两者之间的连接创建套接字。没有“常规端口”。只有“端口”,所有端口都是相同的,它们只是一个数字,用于标识端点的地址。
如果否,是否意味着服务器可以连接的客户端数量超过常规端口的最大数量?
是的,可以。在服务器端,端口号(通常)始终相同。例如,HTTP服务器将(通常)使用端口80。侦听套接字的端口号为“ 80”,每个连接的服务器端套接字的端口号也将为端口号。
端口号可以像这样重复使用,因为每个套接字除了IP地址和端口号以外,还具有其他标识特性。特别是,服务器的 listening 套接字是唯一的;服务器端只有一个套接字,该套接字具有该IP地址,该端口号并且没有 连接(即正在监听)。
建立连接后,将创建一个新的套接字来表示该连接。而且该套接字可以唯一标识,因为与侦听套接字不同,它确实具有与之关联的连接(即远程端点)以及IP地址和端口号。当客户端端点将数据发送到服务器时,网络层可以告诉应该向哪个套接字传递数据,因为该数据来自特定的远程端点,该端点也具有唯一的IP地址和端口号。
服务器和客户端的唯一IP地址和端口号的组合唯一地标识了该连接,使其与服务器上可能具有相同服务器端端点的IP地址和端口号的任何其他套接字区分开。
在您引用的文本中,该部分恰好描述了套接字的这种独特的唯一标识:
(客户端IP,客户端端口,服务器IP,服务器端口)的元组对于每个TCP连接都必须是唯一的
通过这种方式,可以无限次地使用服务器的IP地址和端口号(不计算服务器上其他受约束的资源,例如保存网络连接状态的内存和表)。
仅当尝试创建其他侦听套接字(对于服务器)或其他连接(对于客户端)时,端口号限制才起作用。服务器通常不会用尽端口号,除非它们正在实现协议,该协议要求服务器创建回客户端监听套接字的连接(这是罕见的),并且客户端不会用尽端口号,除非它们尝试执行以下操作:建立大量的连接。
您引用的文本的这一部分所指的是这后一个限制
65535端口的限制仅与单个客户端可以与单个服务器建立的连接数量有关。