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