cas*_*tis 3 networking domain-name-system topology
这很可能不是发布此类内容的正确论坛,但这是一个困扰我多年的问题。
我非常了解服务器本身是如何工作的,并且非常精通计算机的大多数事情。
以 serverfault.com 为例。
我在浏览器地址栏中输入http://www.serverfault.com/。此时,我的计算机执行反向dns 查找以获取 IP 地址。
我知道 dns 信息位于 DNS 服务器上,但我的计算机如何知道在哪里立即查找?是否有固定 IP 地址的 DNS 服务器可供我的计算机自动查找?
其次,一旦我的计算机具有 serverfault.com 的 IP 地址,它就会转到(在我的情况下)comcast 开始进入 serverfaults 服务器。这个过程是如何运作的?当运行到 serverfault.com 的跟踪路由时,它会进行大约 16 跳,直到找到我正在寻找的内容。
显然它不能直接连接到 serverfault.com,因为这将采用直接物理路由到服务器,但是什么控制通过网络的请求?是什么让它采用我在跟踪路由中看到的路由?
我知道这个问题非常开放,但如果我至少能得到一些外部资源的链接或知道在谷歌上搜索什么,那将是非常有帮助的。
(我参加这个聚会迟到了,但让我们看看无论如何我能做些什么。)
您问的是两个截然不同的事情——通过 DNS 和 IP 路由的名称解析。让我们分别解决它们。
我知道 dns 信息位于 DNS 服务器上,但我的计算机如何知道在哪里立即查找?是否有固定 IP 地址的 DNS 服务器可供我的计算机自动查找?
通常,客户端计算机通过其 DHCP 服务器(为客户端提供未使用 IP 地址的“租用”使用)。
某些计算机不使用 DHCP 来获取 IP 地址,而是静态分配其 IP 地址。在计算机静态分配 IP 地址的情况下,DNS 服务器 IP 地址也在计算机配置中静态分配。
(有更深奥的方法可以向客户端获取 DNS 服务器信息,但以上两种方法涵盖了超过 90% 的情况。)
听起来您的计算机位于家庭网络上,并且可能从家庭网络中的路由器或 ISP 的 DHCP 服务器上运行的 DHCP 服务器获取其 IP 地址。
如果是家用路由器,它将从您的 ISP 的 DHCP 服务器获得一个 IP 地址,并且在获得该 IP 地址的过程中,将获知您的 ISP 打算您使用的 DNS 服务器的 IP 地址. 一些家用路由器会向路由器的 DHCP 服务器的客户端提供 ISP DNS 服务器地址。还有一些家用路由器会自己运行“迷你”DNS 服务器,并将 DHCP 客户端定向到它自己的“迷你”DNS 服务器。通常,这个“迷你”DNS 服务器只会将请求转发到 ISP 的 DNS 服务器。
如果您的计算机通过路由器直接连接到 ISP 的网络,那么很有可能是 ISP 的 DHCP 服务器为您的计算机提供了 ISP 的 DNS 服务器的 IP 地址。
IP 数据报包含目标 IP 地址而不是人类可读的名称。为了与远程服务器“交谈”,您的计算机需要该远程服务器的 IP 地址。将人类可读的名称“解析”为 IP 地址(适合包含在 IP 数据报中作为目标地址)的过程称为正向 DNS 查找。
我不会在这里详细描述递归前向 DNS 解析,但是,基本上,您的客户端计算机向其 DNS 服务器(它从 DHCP 了解或静态配置的服务器)发送请求,请求名称为“www.serverfault .com”。该请求最终将到达您 ISP 的 DNS 服务器。您 ISP 的 DNS 服务器将向著名的“根 DNS 服务器”列表之一发出请求。根 DNS 服务器返回的答案将依次将 ISP 的 DNS 服务器的请求引导至“.com”DNS 服务器,然后引导至“serverfault.com”DNS 服务器。最终,ISP 的 DNS 服务器将向您的计算机返回一个答案(可能通过您家用路由器中的 DNS 服务器,如上所述)。
如果您对细节感兴趣,我鼓励您查看有关 DNS 协议如何工作的更多技术说明。
这让我们了解了您问题中与 DNS 相关的部分。现在,让我们转到问题的 IP 路由部分。
是什么让它采用我在跟踪路由中看到的路由?
所有这些 DNS 查询的结果将是一个 IP 地址(或多个 IP 地址,是技术性的)。您的浏览器将启动与 DNS 查询返回的地址之一的 TCP 连接。这将导致您的计算机向您的计算机已知的“默认网关”发送一个 IP 数据报(以我们之前的 DNS 查询返回的 IP 地址为目标)。该“默认网关”只不过是另一台计算机(通常是路由器)的 IP 地址,您的计算机将数据包“交给”以传送到 Internet。假设您正在使用以太网,那么您的计算机如何“处理”IP 数据报的细节涉及 ARP 协议和对于这个答案来说可能有点太深的细节。
您可能会问:您的计算机如何知道其默认网关的 IP 地址是什么?
类似于计算机从 DHCP 接收 DNS 服务器地址的方式,计算机通过从 DHCP 向计算机“租用”IP 地址时收到的“选项”提供“默认网关”。如果计算机具有静态分配的 IP 地址,则通常也将静态分配其“默认网关”。
从根本上说,IP 路由是一种将数据包从一台计算机(路由器)“传递”到另一台计算机,直到数据包到达其目的地(如果数据包被转发太多次,则“尝试失败”)的游戏。每个路由器都有许多网络接口,将其连接到其他路由器。当路由器接收到一个数据包时,它“决定”哪个网络接口将是该数据包离开的“最佳”网络接口,在做出“路由决定”之后,它通过选择的网络接口将数据包交给另一个路由器。该过程重复进行,直到您的数据包到达目的地。
我史诗般的子网划分答案讨论了静态 IP 路由的基础知识。在静态 IP 路由中,每个路由器都有一个静态分配的目标网络列表,并了解网络与路由器网络接口的“邻接”。在现实生活中,大型网络中不使用TM静态 IP 路由,因为它维护起来太麻烦,而且它没有考虑围绕拥塞或故障链接的路由。
您执行的“traceroute”向您显示路由器沿数据包路径的每个“跃点”做出的路由决策的结果。这些路由器使用动态路由协议,如边界网关协议 (BGP) 或开放最短路径优先 (OSPF) 来决定如何将您的数据包路由到另一个路由器。这些动态路由协议可以考虑诸如链路拥塞或可用性、数据包沿每条预期路径行进的相对“距离”以及可能的其他因素(包括对等协议等“政治”因素)等因素来确定数据包的去向.
各个动态路由协议如何工作的细节远远超出了这个答案。幸运的是,互联网的架构使得端点(如您的计算机或 Serverfault.com 上的服务器)不需要了解有关“云”内部数据包路由的任何信息。只要网络内的所有路由器按照正确的规则运行,数据包就会被传送(尽管 IP 允许无序传送和数据包丢失——更高级别的协议会处理这些事件)。更好的是,可以在“云”中设计和实施新的动态路由协议,所有端点都无需更改即可利用改进的路由。