我知道DNS告诉一个网址的IP地址。但是客户端如何知道特定网站正在侦听哪个端口?FTP、Telnet 和 SMTP 等其他服务也是如此。我知道 HTTP、HTTPS、SMTP、FTP、Telnet 有众所周知的端口,但Gmail smtp不会侦听众所周知的 smtp 端口。
我的 PC 是否预先设置了所有服务器(web、FTP、smtp 等)的所有端口号?或者它联系一些像 DNS 这样的服务来查询它
我知道DNS告诉一个网址的IP地址。但是客户端如何知道特定网站正在侦听哪个端口?FTP、Telnet 和 SMTP 等其他服务也是如此。我知道 HTTP、HTTPS、SMTP、FTP、Telnet 有众所周知的端口,但Gmail smtp不会侦听众所周知的 smtp 端口。
我的 PC 是否预先设置了所有服务器(web、FTP、smtp 等)的所有端口号?或者它联系一些像 DNS 这样的服务来查询它
端口通常被硬编码到程序本身中(例如,在没有额外端口信息的情况下指定
http://
或https://
在浏览器中)或由用户通过程序的接口定义(例如,对于许多 FTP/电子邮件客户端,服务提供商告诉用户使用哪些端口)。SRV 记录(确实通过 DNS 区域运行)是一个例外,但我的印象是它们通常以有限的方式使用。
正如评论中所指出的,Gmail确实使用众所周知的、被广泛接受的电子邮件端口。端口 465 和 587 (SMTP) 以及 993 (IMAP) 都被主要的电子邮件提供商(例如 Yahoo、Comcast 等)在与客户打交道时代替旧端口用于相同的服务。
客户端不知道要连接到服务器上的哪个端口。主要原因是服务器通常可以在任何端口上运行服务(Web、邮件、ftp 等)。有用于服务的标准化端口。有关列表,请参阅此 Wikipedia 文章。服务器管理员可以选择在标准端口 80 或他选择的任何其他端口上运行网站,只要其他服务尚未绑定到该端口即可。
大多数客户端默认使用标准端口。例如,当您在浏览器中键入http://somewebsite.com时,浏览器假定端口 80。这并不神奇,因为 80 是标准,并且有人将浏览器编程为默认访问该端口。您可以在浏览器中键入http://somewebsite.com:80,这会明确告诉浏览器转到端口 80。如果服务器管理员将 Web 服务器设置为在端口 12345 上运行并且您转到http://somewebsite .com,该网站不会出现。您特别需要告诉浏览器访问http://somewebsite.com:12345。