- 为什么计算机有 65,535 个 TCP 端口?
- 这个数字从何而来?
- 它代表什么?
答案1
- “为什么计算机有 65535 个 TCP 端口?“
计算机可以不是有端口。你提到的“端口”概念与TCP和UDP议定书TCP/IP 网络堆栈。从严格的技术角度来看,TCP 和 UDP 的结构都能够承载多种信息(源端口、目标端口、序列号、数据等)。由于“源端口”和“目标端口”的结构(在 TCP 和 UDP 数据包内)都是 16 位“字段”,因此限制如下:源端口和目标端口可以采用 16 位可以表示的所有值(即:从 0 到 65535);
- “这个数字从何而来?“
参见上文:源端口和目标端口可以采用 0 到 65535 之间的值,因为它们在各自的数据包中都用 16 位值表示
- “它实际上代表什么?“
简而言之,“源端口”和“目标端口”都起着非常重要的作用,因为它们让单个“主机”(单个“客户端”或单个“服务器”)“提供”不同的服务尽管只有一个 IP 地址,但面向网络客户端。换句话说,如果没有“端口”,那么要让单个“服务器”提供 Web 服务器(在 TCP 端口 80 上用于纯 HTTP;在 TCP 端口 443 上用于 HTTPS)、邮件服务器(在 TCP 端口 25 上用于入站 SMTP;在 TCP 端口 110 上用于 POP3 访问;在 TCP 端口 143 上用于 IMAP 访问)、数据库服务器(在 TCP/端口 3306 上用于 MySQL)等就困难得多。
“纯粹主义者”的读者可能会不同意我上述的过度简化,并且……他们会正确的:实际上,IP 地址和端口起着非常重要的作用,为了充分理解,需要正确理解“封装“概念(当然,这是这个答案中提出的概念中最重要的一个)。不幸的是,这通常需要很多需要正确“掌握”的时间...这就是为什么我上面过于简单化了:-)
答案2
TCP、UDP 以及其他 IP 服务使用端口通过 IP 网络在主机之间进行客户端和服务器进程之间的谨慎通信。
更多详细信息请见在这篇维基百科文章中。
从上而下的角度来看,端口代表两台主机之间的不同对话。例如,一台主机同时向其指定服务器发出多个 DNS 请求,每个请求都使用不同的源端口到目标端口 53。当服务器获取答案并处理请求时,它会将特定回复发送回同一端口,等待回复的不同进程会在此接收回复。
从自下而上的角度来看,端口是主机操作系统为不同进程保留一条 IP 通信线路的一种方式。虽然可能有多个进程向远程主机的同一端口发出请求,但每个进程都会使用不同的源端口来发送请求。这确保了回复会被相应的进程收到。
对于移植协议,数据包标头中保留了 32 位:16 位用于源端口,16 位用于目标端口。对于 TCP 和 UDP,这些是紧跟 IP 标头的前 32 位;它们从第 192 位开始。16 位数的值介于 0 到 65535 之间。
答案3
65,536 在计算中是一个非常常见的数字,因为它是 2 的 16 次方 (2^16)。2^8 是 256,而 65,536 是 256 的平方。
换句话说,16 位二进制数可以表示 65,536 个不同的整数。所以 65,535 个范围可能就是从这里来的。
但是等一下,你会想,我肯定少了一个数字,因为 65,535 等于 65,536 减 1!如果你从零开始数,情况就不一样了!例如,8 位图像编码 256 个值,但通常这些值从 0 开始,一直到 255。这就是为什么你经常在计算中看到 255 或 65,535 这样的数字。
我猜 TCP 端口最初是以 16 位数字存储的,因此有其上限。我不确定现在是否仍然如此。希望对您有所帮助!