只需输入 localhost 和一串数字即可在 Web 浏览器中打开某些应用程序,例如localhost:123456
当我这样做时我究竟在做什么?
抱歉,这个问题听起来太简单,但网络上的答案并不令人满意。
例如,我发现很多答案都说:
操作系统根据 TCP 端口 123456 解析主机名 localhost
但这假设一个普通的 joe MS word 文档编写高中 VBA 级别的互联网用户,没有任何网络知识,知道什么
- 解决意味着
- 主机名意味着
- TCP 端口意味着
以及“操作系统”如何完成所有这些工作。
对这个问题有更人性化的解释吗?
我先开始吧:操作系统是一种软件...当您在网络浏览器中输入 localhost:123456 时...它会“解析”或者换句话说...这样就会打开您的应用程序。
答案1
解析意味着将人类可读的地址“localhost”转换为计算机地址(称为 IP 地址)。计算机通常通过联系所谓的 DNS 服务器(通常由您的 ISP 设置)来执行此操作。具有讽刺意味的是,localhost 是一个特殊情况,通常存储在映射到自身的本地配置中。
“主机名”是人类可读的名称,例如 google.com、localhost、superuser.com。它们允许人们输入名称或地址来连接到网站或服务器,而不是输入可能看起来像:192.168.1.155 的 IP 地址。
TCP 端口是允许多个不同服务与单个主机通信的端点。当您在 Web 浏览器的地址栏中输入“localhost”时,Web 浏览器实际上会填写端口号 80,这是 Web 服务器的默认端口号。许多不同的服务都使用标准端口。通过添加“:60344”,您就是在告诉 Web 浏览器尝试使用端口 60344 与本地主机地址的 Web 服务器建立连接。
另外,仅供参考,端口是 16 位的,因此最高端口号是 2^16 = 65,535。它们具有一系列已建立的预留端口。此外,当您连接到网站时,您的计算机实际上会打开一个动态端口来与服务器通信。因此,尽管您连接到端口 80,但您的本地端口不会是 80。
请理解,我试图让解释变得简单,因为每个步骤都涉及更多内容。我的目标是给出一个概述。
有关端口的更多信息:这里
答案2
localhost 是一个主机名,系统中有一个文件会告诉您的 PC,localhost 解析为 127.0.0.1 [或 ::1: 如果是 ipv6] - 它始终指向您的系统。我们稍后会讲到这一点。
实际上,仅使用 IP 的最大问题是它们很难记住,而且如果您以后真的想查找东西,就无法轻易更改它们。
主机名是一种更友好的命名方式 - 但互联网的后端仍然是机器。主机名解析基本上是一种连接主机名和 IP 地址的方法。
nslookup 告诉你在哪里解析
C:\Users\faile>nslookup localhost
Server: UnKnown
Address: 192.168.2.1
Name: localhost
Addresses: ::1
127.0.0.1
将其与 superuser.com 的 nslookup 进行比较
C:\Users\faile>nslookup superuser.com
Server: UnKnown
Address: 192.168.2.1
Non-authoritative answer:
Name: superuser.com
Addresses: 151.101.1.69
151.101.65.69
151.101.129.69
151.101.193.69
名称服务解析以两种方式进行。
(前两行是我的路由器。我们稍后会讲到)
系统上有一个文本文件,叫做hosts 文件。想象一下,这是一张贴在手机上的便签,上面写着电话号码。它的扩展性非常差,你不会需要所有这些电话号码。
在大多数现代设置中,我们改用 DNS 服务器。本质上,这是一种查找哪个 IP 与哪个服务器(如电话簿)关联的方法,该服务器会根据一组更新的“主”记录定期更新。
还有一个已知端口列表 - 对于 http 来说是端口 80,对于 https 来说是端口 443。如果没有明确指定端口 - 它将假定它是默认端口。
现在展示一个有用的工具是 netstat - 在这种情况下,我使用netstat -ban
它显示二进制名称所有连接和数字(而不是名称)。
那里有很多东西,但这对我们有用的部分
TCP 192.168.2.121:49800 151.101.1.69:443 ESTABLISHED
[vivaldi.exe]
您看到 2 个 IP 地址 - 我的电脑(192.168.2.121)通过端口 49800 连接到 151.101.1.49(我们已确定是超级用户),通过端口 443 建立连接。
为什么是 443 端口?
因为我正在发布这个答案 - 并且通过 https 连接到超级用户
查看我的浏览器
您会注意到缺少明确的端口。
因此,基本上,当没有明确设置时,你的浏览器需要被告知两件事
主机 - 可以是数字(理论上,我可以连接到 151.101.1.69 并到达我要从中获取数据的服务器,但还有更深层次的问题,涉及缓存服务器、负载平衡器和其他类似有趣的东西)或主机名。这很重要。
协议 - 对于 Web 浏览器,只有很窄的可用协议范围。如果没有明确说明,客户端将假定服务的知名端口。您可以明确说明端口,因为您通常无法从默认端口进行托管。但是,您的客户端将使用较高的随机端口进行连接。
从更深层次来看,TCP 和 UDP 并不是最终用户过于担心的事情。它们是通过 IP 发送消息的独立方式,并且通常只有在打开端口时才重要。它们适用于不同的事情,仅此而已。
答案3
这里有一个简单的观察方法:
- 解析 - 简单来说就是查找某物。就像现实世界的建筑物一样,互联网上的每样事物都有地址。
- 主机名 - 您正在查找的服务器的名称。当您在电话簿或 Google 中查找企业时,您会按名称进行查找。
- TCP 端口 - 就像建筑物中可能有多个不同的人和企业一样,端口是与他们交谈的正确“门”。
因此,当您键入时,localhost:12345
计算机会查找(解析)“localhost”的位置以获取其地址。Localhost 恰好hostname
是你的计算机。现在它有了你的地址,它需要知道要与哪个门(TCP 端口)对话。就是这样。