![港口及其作用](https://linux22.com/image/1247500/%E6%B8%AF%E5%8F%A3%E5%8F%8A%E5%85%B6%E4%BD%9C%E7%94%A8.png)
我很好奇端口号的作用。特定事物是否有特定的端口号?
我知道有 80 端口,顺便听说过 8000 端口。我不知道为什么这么叫,也不知道它到底是什么意思。
我可以有一个网页,比如 example.com:10 吗?我说 10 是一个随机数。端口的称呼重要吗?这些数字从何而来?我该如何设置一个带有端口号的开发环境,为什么要这样做?在开发过程中,我根据不同的情况看到各种各样的端口号。我一直想知道这些数字从何而来,以及他们如何配置服务器以使其工作。
答案1
将您的网络接口想象成一个巨大的装卸码头(如 UPS 枢纽或类似的东西)。每个货门都有一个编号。默认情况下,运载特定类型货物的卡车使用特定的装卸码头。通过拥有多个装卸码头,枢纽可以一次处理多辆卡车,并有助于将货物类型分开。
现在您有了这种可视化效果,计算机上的端口号是相似的。您有 TCP 和 UDP,其中 TCP 的端口范围为 1-65535。这就是这些数字的来源。现在,其中一些端口是为常见流量类型保留的。例如,80 用于 HTTP,443 用于 HTTP-SSL,21 用于 FTP,25 用于 SMTP,110 用于 POP3。当然还有更多,但我希望这有助于您形成总体思路。现在,您可以利用非保留端口来做您想做的事情,但我不会使用像 10 这样的低端口。如果您想在备用端口上托管您的网站,请选择 8080 或 8443(备用 HTTP-SSL 端口),一些未保留的数字或众所周知的 HTTP 流量备用端口。
使用备用端口是因为您一次只能让一个服务侦听特定端口。例如,您不能让 Apache 和 IIS 在同一台计算机上同时侦听端口 80 上的 Web 请求。这是因为这些服务是不同的,它们无法分辨谁应该获得哪些流量。通过使用不同的端口,这些服务知道该端口上的流量是发给它们的。
要进行设置,您的终端服务(Web 服务器、电子邮件、VPN 等)需要知道要监听哪个端口(站在哪个货舱旁边等待货物进出)。此外,您的防火墙也需要对该端口设置例外(您的中心保安人员会检查您是否被允许进入某些地方)。
答案2
端口号不做任何特别的事情。它们是唯一标识连接的方式之一。每个 TCP 连接由四个部分定义:每台机器的 IP 地址和每台机器上的端口号。每个传入的 IP 数据包都包含这四部分信息,允许网络层确定应该如何处理该数据包。例如,一个数据包到达时目标端口为 80,系统知道 Apache 正在监听端口 80,因此它会将其交给 Web 服务器(我略过了某些细节)。
客户端要连接到您的服务,需要知道您的 IP 以及您的服务正在监听的端口。由于您的 IP 和端口唯一地定义了任何传入连接的终端,因此一次只能有一个服务监听给定端口。如果您没有其他使用端口 10 的东西,您绝对可以在其上托管您的 Web 服务器,并且所有客户端都需要在您的主机名/IP 末尾指定 :10。端口 80 或 443 并没有什么神奇之处,只是它们是为 HTTP 和 HTTPS 定义的标准端口(因此如果用户未指定端口,客户端将使用这些端口)。
当客户端 (1.2.3.4) 通过默认 http 端口连接到 Web 服务器 (11.12.13.14) 时,它会选择其当前未使用的端口(例如 5307)并建立连接。现在该连接的唯一标识为 - 1.2.3.4:5307 <-> 11.12.13.14:80
如果同一客户端同时建立第二个连接,则需要另一个未使用的端口号(这次是 5308),因为连接的其余三个部分是不变的 - 服务的侦听端口和两个 IP 地址都已设置。这样,单个客户端就可以与同一服务建立多个可区分的连接。另一个客户端也可以使用 5307 进行连接,并且可以通过不同的 IP 地址将其与第一个客户端区分开来。
答案3
端口用于区分同一 IP 上的不同服务。因此同一台机器可能拥有电子邮件 (SMTP: 25) 和 Web 服务器 (HTTP: 80)。
1000 以下的端口号通常为众所周知的东西保留,就像我刚才提到的那些。为您自己的东西选择高于这个数字的数字,最高可达 65565(2 的幂)。
另外,请注意,您的 Web 服务器没有必要在众所周知的端口上运行。它只是每个人都会寻找它的地方。
如今,由于端口地址转换,您的路由器实际上会将您的内部流量转换为互联网 IP 上未使用的端口。这就是您看到一堆不同数字的原因。例如,您的 Web 客户端会向 google.com:80 请求页面。但来源将来自您的 IP,位于未使用的端口上。如下所示:
google.com:80 <=talks to=> 88.88.88.88:4502(无论您的 IP 是什么,端口就是您的 NAT 网关决定使用的端口)
顺便说一下,IP/端口的组合称为套接字。对于开发,您可能需要能够指定端口号以避免与其他内容冲突,但功能不应改变。
最后,如果您要通过防火墙,则需要打开端口。
答案4
假设您有一台服务器,其 IP 地址为XXX.XXX.XXX.XXX
。您可以连接到服务器来执行各种操作。您总是使用相同的 IP 地址连接到它,但您使用的端口号是服务器确定您要执行的操作的方式。
如果您想查看服务器上的网页,您可以使用端口 80 连接到服务器:XXX.XXX.XXX.XXX:80
。当服务器在端口 80 上接受您的连接时,它就知道您想要查看网页。
如果您想连接到服务器上运行的 FTP 程序,您可以连接到端口 21:XXX.XXX.XXX.XXX:2
1. 当服务器在端口 21 上接受您的连接时,它就知道您想要使用 FTP。
同样的情况SSH/SFTP(端口 22),HTTPS(端口 443),DNS 请求(端口 53)等等... 不同应用程序/服务有数千个标准化端口号。
端口基本上只是计算机确定向其发出的请求类型的一种方式。