我了解每个IP地址拥有65,535个端口的最初原因:这是16位或2字节数字所能代表的最高数字,并且计算机永远无法获得更多比那些像港口这样微不足道的东西,或类似的东西。 实际上每个端口可能需要多于1个位,因为每个端口可以被打开,阻塞,“潜行”等等,但是由于某些原因,人们总是说端口以16位数字来操作。 如果我有这个错误的任何部分,一定要告诉我。
然而,在大多数计算机都是32位的世界里,有足够的内存空间可以腾出更多的端口,为什么我们仍然拥有这么多的端口呢? 我们正在转向HTML5,HTTP2.0,IPv6和其他完全不同的版本,那么为什么与端口不一样呢? 其中许多允许多于16位; 实际上,IPv6允许16 个字节 ! 据我所知,其中许多是几年甚至几十年,但为什么这些升级的喋喋不休,甚至没有窥视更多的港口(我,业余,听说过)?
我能看到的保留65535个端口的唯一两个理由是让大企业保留旧的遗留系统,这不是一个好的理由,embedded式系统的兴起,其中许多是微小的,只有很less的空间,内存等。 ,即将上网,很多是物联网的一部分。 有了这些embedded式系统,也许我们可以让它们拥有更less的端口,而当一台大型台式电脑试图连接到一台时,可以说它是温和的,因为婴儿embedded式系统只能使用约65,000个端口。
另一方面,我可以想出几个很好的理由来获得更多的端口,大部分都与NAT和其他系统有关,在这些系统中,超过一个私有IP地址必须使用相同的公共IP地址与其余的Internet进行通信,像在同一台计算机上的虚拟机的崛起,所有使用相同的IP地址。 从技术上讲,每个虚拟机IP地址有65535个端口,但实际上它们都使用主机的端口。 在这种情况下,这些系统可能会很快耗尽端口。 另一个具体情况是运营商级NAT,其中一个公共IP地址被转换成多个私有IP地址,并且这些私有地址中的至less一个被转换成另一组甚至更多的私有地址。 同样,每个私有IP地址在技术上都有其自己的一组65355个端口,但是这是一种幻想,因为当数据传到公共互联网时,它们正在使用公共IP端口。 我不确定我们是否一定需要NAT,但是我们需要类似的东西来保存地址,即使大量的IPv6会给我们。 当我们遇到这样的情况时,我们可以承担不超过65535个端口吗?
那么,为什么我们仍然只有65535个港口,还有什么计划让更多?
附言我知道有技术上每个IP地址65536个端口,但端口0通常不用于任何东西。
该端口是所使用的第4层协议的一部分 – 大部分是TCP或UDP ; 它与实际计算机的内存寻址无关,所以不要被现代操作系统的32位或64位内存寻址所困惑。
这些第4层协议的头部具有专门定义的结构 ,对于这些结构 ,源和目的端口只使用16位。 如果没有对整个互联网所依赖的第4层协议进行兼容性更改,则不能更改端口数量。 即使是较新的SCTP在端口上也有16位限制。
请记住,这些协议不仅基于接收端口识别stream量,而且还基于接收IP,发送端口和IP来识别stream量。 您仅限于65535个侦听TCP端口(但您没有那么多),而且您仅限于65535个连接到特定远程系统上的特定服务(在实践中较低,请参见临时端口 ),所以它并不常见以达到这些协议的限制,除非你有一个系统创build一个连接到一个特定的远程系统的大量。