ChatGPT解决这个技术问题 Extra ChatGPT

IPv4 允许的最大 TCP/IP 网络端口号是多少?

可以使用的最高端口号是多少?


G
Greg Hewgill

端口号是一个无符号的 16 位整数,因此是 65535。


“嘿,Jim,我们应该支持多少个端口?” “只要把它设为 16 位就可以了。没有人会同时打开超过几百个,顶部。”
@JessieArr 并且由于您似乎从比尔盖特的书中摘取了他关于 RAM 的著名台词,这是很久以前发表的声明,即 640KB RAM 在未来很容易就足够了,当然不是......您还试图建议您认为 16 位/65536 还不够吗? (还有几百个开放端口怎么会让 65536 个端口不够用?)
@barlop 我建议当他们第一次创建端口时,一台具有数百个连接的机器可能被认为是最坏的情况。但是今天的 Web 服务器、网络设备等肯定会遇到端口数限制。 Microsoft 写了一篇关于如何在 Windows 环境中诊断和避免它的有趣的 Technet 文章:blogs.technet.microsoft.com/askds/2008/10/29/…
@JessieArr 在这两种情况下,这都不是真正的 65536 问题,而是 A)程序未释放连接,使它们处于 netstat 显示的“等待”状态与 B)一些较早的 Windows 版本仅从 1024-5000动态端口。即使那样,谁知道这是否曾经发生过,因为没有程序会费心向任何人报告它无法获得动态端口,windows也没有。所以这是一个理论问题,甚至不是由65536 号。Web 浏览器可能是最大的连接用户。我的 netstat 输出中有 297 行。远非 65K
@JessieArr 大多数 IP 堆栈使用源 IP 地址、源端口、目标 IP 地址和目标端口的元组作为连接的唯一标识符。这意味着服务器可以拥有比可用的开放端口多得多的活动连接,并且端口的数量只会限制(尽管非常大)单个源和单个目标之间的开放连接数量。我认为任何时候都不会有人在超过 65536 个端口上运行服务器(或侦听连接)。
R
Rohit Gupta

最大端口号是无符号短 2^16-1: 65535

注册端口是由 Internet Corporation for Assigned Names and Numbers (ICANN) 分配给特定用途的端口。每个注册端口都在 1024–49151 范围内。

自 2001 年 3 月 21 日起,注册机构为 ICANN;在那之前是IANA。

编号小于注册端口号的端口称为知名端口;编号大于已注册端口的端口称为动态和/或私有端口。

Wikipedia : Registered Ports


S
Smashery

据我了解,您最多只能使用 49151,因为从 49152 到 65535 保留给 Ephemeral ports


临时端口范围因系统而异。我正在使用 3.19.0-43-generic 内核运行 ubuntu linux。 $ cat /proc/sys/net/ipv4/ip_local_port_range 产生输出 32768 61000。至于是否应该或不应该使用系统临时端口范围内的端口,我怀疑大多数(如果不是全部)现代网络操作系统都会跳过已经在使用的端口。
C
Community

只是对 smashery 的回答的跟进。临时端口范围(至少在 Linux 上,我怀疑其他 Unices 也是如此)不是固定的。这可以通过写入 /proc/sys/net/ipv4/ip_local_port_range 来控制

唯一的限制(就 IANA 而言)是 1024 以下的端口被指定为知名端口。以上端口可免费使用。通常您会发现 1024 以下的端口仅限于超级用户访问,我相信正是出于这个原因。


E
Eldakka

根据 RFC 793,端口是 16 位无符号整数。

这意味着范围是 0 - 65535。

但是,在该范围内,端口 0 - 1023 通常保留用于特定目的。我说一般是因为除了端口 0 之外,通常不会执行 0-1023 保留。 TCP/UDP 实现通常不强制除 0 之外的保留。如果需要,您可以在端口 80、25 或 65535 上运行 Web 服务器的 TLS 端口,而不是标准的 443。同样,即使它是SMTP 服务器侦听端口 25 的标准,您可以在 80、443 或其他端口上运行它。

大多数实现为特定目的保留 0 - 随机端口分配。所以在大多数实现中,说“在端口 0 上监听”实际上意味着“我不在乎我使用什么端口,只需给我一些随机未分配的端口来监听”。

因此,使用 0-65535 范围内的端口(包括 0、临时保留范围等)的任何限制都是特定于实现(即操作系统/驱动程序)的,但是包括 0 在内的所有端口都是 RFC 793 中的有效端口。


M
Mosab Shaheen

端口的有效数字是:0 到 2^16-1 = 0 到 65535 这是因为端口号是 16 位长度的。

但是端口分为: 众所周知的端口:0 到 1023(用于系统服务,例如 HTTP、FTP、SSH、DHCP ...) 注册/用户端口:1024 到 49151(您可以将其用于您的服务器,但可以小心一些著名的应用程序:像 Microsoft SQL Server 数据库管理系统 (MSSQL) 服务器或 Apache Derby Network Server 已经在这个范围内,即不建议将 MSSQL 的端口分配给您的服务器,否则如果 MSSQL 正在运行,那么您的服务器最由于端口冲突,可能不会运行)动态/私有端口:49152 到 65535。(不用于服务器而不是客户端,例如在 NATing 服务中)

在编程中,您可以为您的服务器使用 0 到 65535 之间的任何数字,但是您应该坚持上面提到的范围,否则某些系统服务或某些应用程序将由于端口冲突而无法运行。
在此处查看大多数端口的列表: https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers


B
Bardi Harborow

这取决于您所说的范围,但动态范围最高可达 65535 或 2^16-1(16 位)。

http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers


a
apaderno

应该是 65535。