为什么只有 65,535 个端口,我们还会有更多吗?

try*_*sis 23 nat ip virtual-machines port

我理解每个 IP 地址有 65,535 个端口背后的最初原因:这是 16 位或 2 字节数字可以表示的最高数字,而且无法想象计算机能够节省更多而不是像端口这样微不足道的东西,或者类似的东西。实际上,每个端口可能需要超过 1 位,因为每个端口都可以打开、阻止、“隐藏”或其他,但出于某种原因,人们总是说端口以 16 位数字运行。如果我有这方面的任何错误,请务必告诉我。

然而,在一个大多数计算机都是 32 位的世界,并且有足够的内存/空间来腾出几个端口,为什么我们仍然有这么多端口?我们正在迁移到 HTML5、HTTP2.0、IPv6 和其他绝对不同的版本,那么为什么端口不一样呢?其中许多允许超过 16 位;事实上,IPv6 允许 16个字节!我知道其中许多需要几年甚至几十年的时间,但是为什么所有关于这些升级的喋喋不休,甚至没有看到更多端口(我,一个业余爱好者,听说过)?

我能看到的保留 65,535 个端口的唯一两个原因是让大企业保留他们旧的遗留系统,这几乎不是一个很好的理由,以及嵌入式系统的兴起,其中许多很小,空间、内存等都很少。 ,很快就会进入互联网,很多都是物联网的一部分。有了这些嵌入式系统,也许我们可以让它们少一些端口,当一台大型台式电脑尝试连接时,可以说是温和的,因为婴儿嵌入式系统只能使用~65,000个端口。

另一方面,我可以想到一些拥有更多端口的好理由,其中大部分与 NAT 和其他系统有关,其中多个私有 IP 地址必须使用相同的公共 IP 地址与 Internet 的其余部分通信,就像 VM 在同一台计算机上的兴起一样,都使用相同的 IP 地址。从技术上讲,每个 VM IP 地址有 65,535 个端口,但实际上它们都使用主机的端口。在这种情况下,这些系统可能会很快耗尽端口。另一种特殊情况是运营商级 NAT,其中一个公共 IP 地址被转换为多个私有 IP 地址,并且这些私有地址中的至少一个被转换为另一组甚至更多的私有地址。同样,每个私有 IP 地址在技术上都有自己的一组 65,535 个端口,但这是一种错觉,当数据传到公共互联网时,他们正在使用公共 IP 的端口。我不确定我们是否一定需要 NAT 本身,但我们将需要类似的东西来保存地址,即使 IPv6 会给我们提供大量的地址。当我们有这样的情况时,我们甚至能承受不超过 65,535 个端口吗?

那么,为什么我们仍然只有 65,535 个端口,是否有计划允许更多?

PS 我知道技术上每个 IP 地址有 65,536 个端口,但端口 0 通常不用于任何事情。

Sha*_*den 32

大多数情况下,端口是使用的第 4 层协议的一部分 - TCPUDP;它与实际计算机的内存寻址无关,所以不要被现代操作系统的 32 位或 64 位内存寻址所迷惑。

这些第 4 层协议的标头具有专门定义的结构,对于这些结构,源端口和目标端口正好使用 16 位。如果不对整个互联网所依赖的第 4 层协议进行兼容性破坏性更改,则无法更改端口数量。即使是较新的SCTP对端口也有 16 位限制。

请记住,这些协议不仅基于接收端口识别流量,还基于接收 IP 以及发送端口和 IP;您仅限于 65535 个侦听 TCP 端口(但您没有那么多),并且您仅限于与特定远程系统上的特定服务的 65535 个连接(在实践中较低,请参阅临时端口),因此这并不常见遇到这些协议的限制,除非您有一个系统创建了到特定远程系统的大量连接。

  • 它总是归结为向后兼容性,不是吗?为什么我们可以更改为 IPv6,它允许更多的 IP 地址,这很荒谬,但我们不能有更多的端口?这是我的主要烦恼。 (4认同)
  • @trysis 正确 - 从 IPv4 迁移到 IPv6 与迁移到 TCP 版本和 UDP 版本(在端口的标头中具有更多位)所需要的相比是一个很好的比较。如果您还没有注意到,即使将全球 IPv6 部署到现在的位置(全球 1-2% 的流量都在使用它),这也是一个缓慢而痛苦的过程。对于 IPv4,迫切需要迁移——地址耗尽。另一方面,在这些协议上耗尽端口空间并不是一个常见问题,因此没有必要进行大量更改来实现它。 (4认同)