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

461

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

8个回答

638

端口号是一个无符号的16位整数,最大值为65535。


256
“嗨,吉姆,我们应该支持多少个端口?” “为了保险起见,让它支持16位。最多也只有几百个端口同时打开,不会超过这个数量的。” - JessieArr
4
我建议当最初创建端口时,单台机器有数百个连接可能被认为是最坏的情况。但是今天的Web服务器、网络设备等肯定会遇到端口计数限制。微软撰写了一篇有趣的Technet文章,介绍如何在Windows环境中诊断和避免这种情况:https://blogs.technet.microsoft.com/askds/2008/10/29/port-exhaustion-and-you-or-why-the-netstat-tool-is-your-friend/。 - JessieArr
3
在这两种情况下,问题并不是一个65536的问题,而是A)程序没有释放连接,使它们处于 netstat 显示的“等待”状态,再加上B)一些早期的Windows版本只使用1024-5000 作为动态端口。即便如此,谁知道是否真的发生了这种情况,因为没有任何程序向任何人报告它无法获得动态端口,也没有 Windows 报告过。因此,这是一个理论上的问题,实际上并不是由65536这个数字引起的。Web浏览器可能是连接的最大用户。我的netstat输出有297行,远远不到65K。 - barlop
6
大多数 IP 协议栈使用源 IP 地址、源端口、目标 IP 地址和目标端口的四元组作为连接的唯一标识符。这意味着一个服务器可以有比可用开放端口更多的活动连接,而端口数量仅限制单个源与单个目标之间的开放连接数量(尽管这是一个非常大的限制)。我认为没有人会在任何时候同时在超过 65536 个端口上运行服务器或监听连接。 - jduncanator
1
我认为问题在于软件“占用”端口的数量。比如Tomcat的“8080”,NetData的“19999”等等... 我是一名Web开发人员,我担心使用已经被占用的端口来构建我的微服务基础架构。 - Magno C
显示剩余5条评论

154

最大的端口号是一个无符号短整型 2^16-1: 65535

已注册的端口是由互联网名称分配机构(ICANN)分配给某个用途的端口。每个注册端口在1024-49151范围内。

自2001年3月21日以来,注册机构为ICANN; 在此之前,它是IANA。

端口号小于已注册端口的被称为公认端口; 端口号大于已注册端口的被称为动态和/或私有端口。

维基百科:已注册端口


76

据我的理解,你应该只使用49151及以下的端口号。因为从49152到65535的端口号是短暂端口所保留。


13
临时端口范围因系统而异。我正在运行 3.19.0-43 通用内核的 Ubuntu Linux。运行命令 $ cat /proc/sys/net/ipv4/ip_local_port_range 后输出结果为 32768 61000。至于是否应该使用系统的临时端口范围中的端口,我怀疑现代大多数网络操作系统都会跳过已经在使用中的端口。 - Keith Reynolds

38

关于smashery的回答,这里是跟进。短暂端口范围(至少在Linux上是这样,我认为其他Unix系统也是)并不是一个固定值。这可以通过写入/proc/sys/net/ipv4/ip_local_port_range进行控制。

根据IANA的规定,唯一的限制是低于1024的端口被指定为公共端口,高于此范围的端口是自由使用的。通常,你会发现低于1024的端口受到超级用户访问权限的限制,我认为这正是出于这个原因。


18
根据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中都是有效的端口。

17

端口号的有效数字范围为: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


11

7
应该是65535。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接