【问题标题】:are socket ports the same as regular ports [duplicate]套接字端口是否与常规端口相同[重复]
【发布时间】:2019-07-31 15:29:39
【问题描述】:

我读到了一些与我目前对端口的理解相矛盾的东西。如果你用谷歌搜索“服务器有多少端口”,首先出现的内容如下:

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

我认为每次客户端建立与服务器的连接时,都会使用常规端口创建套接字以用于两者之间的连接?

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

【问题讨论】:

  • 问题是“服务器”这个词是模棱两可的。它可以指物理机器及其所有软件,也可以仅指特定服务。因此,例如,“网络服务器”可能意味着我身后的盒子,或者它可能意味着盒子提供的网络服务器服务。如果您问我“服务器使用了多少内存”,答案取决于您想要的“服务器”的含义。端口也是如此。
  • 一个 Web 服务器可能只监听 80 端口,但它可以有数百个连接到它,都连接到端口 80。每个连接都有自己的套接字,以便 Web 服务器可以从各种连接,但它们都是到 Web 服务器上的 80 端口的连接。

标签: sockets tcp server client port


【解决方案1】:

我认为每次客户端建立与服务器的连接时,都会使用常规端口创建套接字以用于两者之间的连接?

本文中的“端口”一词本质上是用来描述一个地址。端口号与 IP 地址一起唯一标识网络的一个端点。

不仅服务器端点通常只使用单个端口号,如果不使用它,与服务器建立连接会更加困难,因为客户端端点将使用哪个端口号来请求连接?如果 IP 地址尚不知道,DNS 允许客户端查找 IP 地址,但没有这样的端口号功能。所以必须提前知道端口号。

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

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

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

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

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

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

在您引用的文本中,这部分准确地描述了套接字的这种独特、唯一的标识:

每个 TCP 连接必须是唯一的 (client IP, client port, server IP, server port) 的元组

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

只有在尝试创建额外的侦听套接字(用于服务器)或额外的连接(用于客户端)时,端口号的限制才会发挥作用。服务器通常不会用完端口号,除非它们正在实现一个协议,该协议要求服务器创建一个返回到客户端侦听套接字的连接(这并不常见),并且客户端不会用尽端口号,除非他们尝试建立大量的连接。

您引用的这部分文字所指的是后一种限制:

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

【讨论】:

  • 这是一个绝妙的答案,我希望人们看看这个,如果他们和我的情况一样。
猜你喜欢
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 2014-02-06
相关资源
最近更新 更多