根据我从CS50x互联网上的每台计算机都有自己独特的公共 IP 地址。一些计算机在客户端用于访问网站,而其他计算机则用作响应请求的服务器(通过从其计算机数据库中提供数据,或更一般地说,为客户端提供某些“服务”)。当客户端访问网站时,他们必须通过地址栏向他们想要访问其服务的特定服务器发出请求,他们通常通过输入域名来完成此操作(创建域名的目的是为了让用户不必记住他们访问的网站的 IP 地址)。但是,然后必须将域名“转换”为 IP 地址才能处理请求,这是 DNS 负责的。到目前为止,有一点让我感到困惑:
为什么需要将域名转换为 IP 地址,以便客户端访问服务器?我的假设是,这与一个域名可以“映射到”多台计算机并因此映射到 IP 地址有关,因此需要分别识别每台计算机。此外,也许它允许以更标准化的方式识别“全球”网络上的“节点”(计算机网络)(因为不充当 Web 服务器的计算机没有域名)。无论如何,如果能提供更详尽的解释,我将不胜感激。
现在,我还了解到,有些网站无法托管在一台计算机上,因为它们的流量太大,这会使它们在一台计算机上运行速度太慢。这意味着该网站将使用多个 IP 地址来托管它。在这种情况下,DNS 如何将域名转换为 IP 地址?如果 DNS 在将域名提供给它时选择返回一个 IP 地址而不是另一个 IP 地址,那么客户端如何获得对网站中不“在该特定计算机服务器上”的部分的访问权限?我的意思是,假设我们正在考虑一个拥有庞大数据库的网站,例如 Yahoo Finance。可能有不止一台计算机服务器托管该网站。假设每台计算机都存储了数据库的一部分(因为数据库太大,一台计算机无法全部存储)。那么,如果客户端使用域名向服务器发出请求,DNS 如何知道返回包含用户正在寻找的信息的特定计算机的 IP 地址?
答案1
为什么需要将域名转换为IP地址才能让客户端访问服务器?
因为互联网依靠 IP 地址工作 - 无论是 IPv4 还是 IPv6。它由大量通过网关相互连接的 IP 网络组成。
您无法使用 DNS 名称进行路由。任何名称都需要转换为 IP 地址,然后才能发送请求。您可以将 DNS 视为附加组件或覆盖。基本上,它只为我们人类服务,所以我们不必记住 IP 地址(这不完全正确,但我们就此打住)。
那么,DNS 如何将域名转换为 IP 地址?
实现负载平衡的方法有很多种。您可以将单个 DNS 名称解析为多个 IP 地址,在服务器群集前使用负载平衡器,在多个命名服务器之间分配 Web 数据对象,在地理上分配具有相同 IP 地址的服务器(任播),等等,几乎可以以任意组合进行。
如果 DNS 在获得域名后选择返回一个 IP 地址而不是另一个 IP 地址,那么客户端如何访问不“在该特定计算机服务器上”的网站部分?
DNS 仅提供名称解析记录。客户端需要理解它。如果 DNS 记录解析为多个 IP 地址,通常客户端只会选择第一个或随机的一个。每个地址背后的服务器必须能够满足任何合理的请求。没有“不知道,请问另一个”的回复,客户端只有在无法建立连接时才会尝试另一个。
分布式数据库则完全不同。基本上,它们不是由客户端直接查询/使用,而是由服务器后端查询/使用。
答案2
为什么需要将域名转换为 IP 地址,以便客户端访问服务器?我的假设是,这与一个域名可以“映射到”多台计算机并因此映射到 IP 地址有关,因此需要分别识别每台计算机。此外,也许它允许以更标准化的方式识别“全球”网络上的“节点”(计算机网络)(因为不充当 Web 服务器的计算机没有域名)。无论如何,如果能提供更详尽的解释,我将不胜感激。
这与域名能够映射到不同的 IP 没有任何关系。这就是互联网的构建方式,就像@Zac67 所说的那样。
互联网上的每台计算机都分配有一个公共 IP 地址。一台计算机要将数据包发送到另一台计算机,它必须知道要向其发送数据包的计算机的 IP 地址(IP 存储在发送的每个数据包中)。
例如,当您通过域名访问网站时,您基本上是向其发送数据包以告诉它“嘿,给我这个网页的数据”,因此您首先需要知道它的 IP 地址。
那么,DNS 如何将域名转换为 IP 地址?
DNS 的工作方式有很多种。您自己的计算机上有一个 DNS 查找表(尝试hosts
在您的计算机上找到该文件)。您的 ISP 也会为您提供一组 DNS 服务器,如果您知道如何操作,您也可以为您的调制解调器指定自己的 DNS 服务器。
其中一些 DNS 查找表将优先于其他表。例如,您的本地 DNS 查找表将优先于所有内容(因此您可以使用它将流量路由到您想要的任何位置)。
如果 DNS 在获得域名后选择返回一个 IP 地址而不是另一个 IP 地址,那么客户端如何访问不“在该特定计算机服务器上”的网站部分?
这相当复杂。通常,大型网络服务器会将其计算机分为应用服务器(不包含任何数据)和 CDN 服务器/数据库(存储照片或个人数据等数据)。DNS 通常指向应用服务器,它只为您提供生成网页所需的代码。然后,这些生成的代码 1) 从数据库访问数据以提供服务,以及 2) 告诉客户端(您的浏览器)从 CDN 服务器检索媒体。
这些数据库和 CDN 服务器有跨不同服务器同步数据的方法,它们是专门为此而构建的。如果您想查看 CDN 的示例,只需查看 Facebook 上任何图像的 URL 即可。
那么,如果客户端使用域名向服务器发出请求,DNS 如何知道返回包含用户正在寻找的信息的特定计算机的 IP 地址?
参见上文。