我理解每个 IP 地址有 65,535 个端口的最初原因:这是 16 位或 2 字节数字可以表示的最大数字,并且无法想象计算机能够为诸如端口之类的小事腾出更多空间。实际上,每个端口可能需要超过 1 位,因为每个端口可以是开放的、阻止的、“隐身的”或其他,但出于某种原因,人们总是说端口使用 16 位数字运行。如果我有任何错误,请务必告诉我。
然而,在大多数计算机都是 32 位的世界中,并且有足够的内存/空间来容纳更多端口,为什么我们仍然有这么多端口?我们正在转向 HTML5、HTTP2.0、IPv6 和其他绝对不同的版本,那么为什么端口不能同样呢?其中许多允许远超过 16 位;事实上,IPv6 允许 16字节!我知道其中许多功能还需要几年甚至几十年的时间才能实现,但为什么大家都在谈论这些升级,却对更多的端口只字未提(我,一个业余爱好者,听说过)?
我认为保留 65,535 个端口的唯一两个原因是让大公司保留其旧的遗留系统(这很难说是一个好理由),以及嵌入式系统的兴起,其中许多系统非常小,空间、内存等都非常小,很快就会接入互联网,其中许多是物联网的一部分。有了这些嵌入式系统,也许我们可以让它们拥有更少的端口,当大型台式计算机试图连接到一个端口时,可以告诉它要小心,因为小型嵌入式系统只能使用约 65,000 个端口。
另一方面,我能想到几个拥有更多端口的好理由,大多数与 NAT 和其他系统有关,在这些系统中,超过 1 个私有 IP 地址必须使用相同的公共 IP 地址与互联网的其余部分进行通信,例如在同一台计算机上使用相同 IP 地址的 VM 的兴起。从技术上讲,每个 VM IP 地址都有 65,535 个端口,但实际上它们都使用主机的端口。在这种情况下,这些系统可能会很快用完端口。另一个特定情况是运营商级 NAT,其中一个公共 IP 地址被转换为几个私有 IP 地址,并且这些私有地址中的至少一个被转换为另一组甚至更多的私有地址。同样,每个私有 IP 地址在技术上都有自己的一组 65,535 个端口,但这是一种假象,因为当数据传到公共互联网时,它们正在使用公共 IP 的端口。我不确定我们是否一定需要 NAT,但即使 IPv6 为我们提供了大量地址,我们也需要类似的东西来节省地址。当我们遇到这种情况时,我们甚至能承受不超过 65,535 个端口吗?
那么,为什么我们仍然只有 65,535 个端口,并且有没有计划允许更多端口?
PS 我知道每个 IP 地址从技术上讲有 65,536 个端口,但端口 0 通常不用于任何用途。
答案1
该端口是正在使用的第 4 层协议的一部分 -TCP或者UDP,在大多数情况下;它与实际计算机的内存寻址无关,因此不要对现代操作系统的 32 位或 64 位内存寻址感到困惑。
这些第 4 层协议的报头具有明确定义的结构,源端口和目标端口正好使用 16 位。如果不对整个互联网所依赖的第 4 层协议进行兼容性破坏性更改,端口数量就无法更改。即使是较新的连续传输协议对端口有 16 位限制。
请记住,这些协议不仅根据接收端口识别流量,还根据接收 IP 和发送端口和 IP 识别流量;您最多只能监听 65535 个 TCP 端口(但您没有那么多),并且您最多只能与特定远程系统上的特定服务建立 65535 个连接(实际上会更低,请参阅临时端口),因此,除非您的系统与特定的远程系统建立了大量连接,否则很少会遇到这些协议的限制。