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

Posted

技术标签:

【中文标题】IPv4 允许的最大 TCP/IP 网络端口号是多少?【英文标题】:What is the largest TCP/IP network port number allowable for IPv4? 【发布时间】:2010-09-11 21:50:50 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

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

注册端口是由互联网名称与数字地址分配机构 (ICANN) 分配给特定用途的端口。每个注册端口都在 1024–49151 范围内。

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

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

Wikipedia : Registered Ports

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

应该是 65535。

【讨论】:

【参考方案5】:

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

【讨论】:

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

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

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

【讨论】:

【参考方案7】:

根据 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 中的端口。

【讨论】:

【参考方案8】:

端口的有效数字是: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

【讨论】:

以上是关于IPv4 允许的最大 TCP/IP 网络端口号是多少?的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP网络编程之地址族与数据序列

TCP/IP网络编程系列之三(初级)

windows怎么设置二层代理

网络编程TCP/UDP协议(传输层特性)

Linux 124课程 11网络管理

LWIP网络开发 | TCP/IP协议簇二