这很可能不是发布此类内容的正确论坛,但这个问题困扰了我多年。
我非常清楚服务器本身的工作原理,并且对大多数计算机相关知识相当精通。
以serverfault.com为例。
我输入http://www.serverfault.com/进入我的浏览器地址栏。此时我的计算机执行反向DNS 查找以获取 IP 地址。
我知道 DNS 信息位于 DNS 服务器上,但我的计算机如何知道在哪里立即查找该信息?是否有固定 IP 地址的 DNS 服务器可供我的计算机自动查找?
其次,一旦我的计算机有了 serverfault.com 的 IP 地址,它就会转到(就我而言)康卡斯特,开始前往 serverfaults 服务器。这个过程是如何工作的?当运行到 serverfault.com 的跟踪路由时,它会进行大约 16 次跳转,直到找到我正在寻找的内容。
显然它无法直接连接到 serverfault.com,因为那样会直接通过物理路由到达服务器,但是谁通过网络控制请求呢?是什么让它采用我在跟踪路由中看到的路由?
我知道这个问题非常开放,但如果我至少可以获得一些外部资源的链接或知道在谷歌上搜索什么,那将会非常有帮助。
答案1
(我迟到了,但无论如何,让我们看看我能做些什么。)
您问的是两个截然不同的问题——通过 DNS 进行的名称解析和 IP 路由。让我们分别解决它们。
DNS 部分
我知道 DNS 信息位于 DNS 服务器上,但我的计算机如何知道在哪里立即查找该信息?是否有固定 IP 地址的 DNS 服务器可供我的计算机自动查找?
通常,客户端计算机通过 DHCP 服务器(为客户端提供未使用的 IP 地址“租约”的服务器)提供给它们的“选项”中的数据获知它们要使用的 DNS 服务器的 IP 地址。
有些计算机不使用 DHCP 获取 IP 地址,而是静态分配 IP 地址。如果计算机具有静态分配的 IP 地址,则 DNS 服务器 IP 地址也会在计算机配置中静态分配。
(将 DNS 服务器信息传递给客户端还有更多深奥的方法,但上述两种方法可以满足 90% 以上的情况。)
听起来您的计算机在家庭网络上,并且可能从在您的家庭网络中的路由器或您的 ISP 的 DHCP 服务器上运行的 DHCP 服务器获取其 IP 地址。
对于家用路由器,它将从 ISP 的 DHCP 服务器获取 IP 地址,并在获取该 IP 地址的过程中获知 ISP 希望您使用的 DNS 服务器的 IP 地址。一些家用路由器会将 ISP DNS 服务器地址提供给路由器 DHCP 服务器的客户端。还有一些家用路由器会自行运行“微型”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 路由部分。
IP 路由部分
是什么让它采取我在跟踪路由中看到的路线?
所有这些 DNS 查询的结果将是一个 IP 地址(或者从技术角度讲是多个 IP 地址)。您的浏览器将启动与 DNS 查询返回的地址之一的 TCP 连接。这将导致您的计算机将 IP 数据报(目的地是我们之前的 DNS 查询返回的 IP 地址)发送到您的计算机已知的“默认网关”。该“默认网关”只不过是另一台计算机(通常是路由器)的 IP 地址,您的计算机将数据包“转交”给该 IP 地址以传送到 Internet。假设您使用的是以太网,那么您的计算机如何“转交”IP 数据报的细节涉及 ARP 协议,而这些细节可能对于这个答案来说有点太深奥了。
您可能会问:您的计算机如何知道其默认网关的 IP 地址是什么?
与计算机从 DHCP 接收 DNS 服务器地址的方式类似,计算机的“默认网关”由 DHCP 向其“租用”IP 地址时收到的“选项”提供。如果计算机具有静态分配的 IP 地址,则通常其“默认网关”也将是静态分配的。
从根本上讲,IP 路由就是将数据包从一台计算机(路由器)“传递”到另一台计算机,直到数据包到达目的地(或者如果数据包被转发太多次,则“失败”)。每个路由器都有许多网络接口,用于将其连接到其他路由器。当路由器收到数据包时,它会“决定”哪个网络接口最适合该数据包通过,在做出“路由决定”后,它会通过所选的网络接口将数据包传递给另一台路由器。这个过程会重复进行,直到您的数据包到达目的地。
我的史诗子网划分答案讨论静态 IP 路由的基础知识。在静态 IP 路由中,每个路由器都有一个静态分配的目标网络列表,并了解网络与路由器网络接口的“邻接关系”。在现实生活中,TM静态 IP 路由不用于大型网络,因为它维护起来太麻烦,并且没有考虑绕过拥塞或故障链路的路由。
您执行的“路由跟踪”会显示路由器在数据包路径的每一“跳”上做出的路由决策结果。这些路由器使用动态路由协议(如边界网关协议 (BGP) 或开放最短路径优先 (OSPF))来决定如何将数据包路由到另一个路由器。这些动态路由协议可以考虑诸如链路拥塞或可用性、数据包沿每条预期路径行进的相对“距离”以及可能的其他因素(包括对等协议等“政治”因素)来确定数据包的去向。
单个动态路由协议如何工作的细节远远超出了这个答案。幸运的是,互联网的架构使得端点(如您的计算机或 Serverfault.com 上的服务器)不需要知道有关“云”内数据包路由的任何信息。只要网络内的所有路由器都遵循正确的规则,数据包就会被传送(尽管 IP 允许无序传送和数据包丢失——更高级别的协议会处理这些情况)。更好的是,可以在“云”内设计和实施新的动态路由协议,并且所有端点都无需进行任何更改即可利用改进的路由。
答案2
此时,我的计算机执行反向 DNS 查找以获取 IP 地址。
实际上,它执行的是正向查找。反向 DNS 查找是指当您想要将 IP 地址映射到域时
我的计算机怎么知道在哪里立即查找它?
每个域都有其名称服务器记录。这些名称服务器记录指向域的权威 DNS 服务器。您的 PC 通过访问其自己的预配置 DNS 服务器来找到它。您可以在 Windows 上确认这一点:
C:\Users\mark.henderson>nslookup 默认服务器:enetsdc1.enets.local 地址:192.168.161.2 > 设置 q=ns > serverfault.com 服务器:enetsdc1.enets.local 地址:192.168.161.2 非权威答案: serverfault.com 名称服务器 = ns1.serverfault.com serverfault.com 名称服务器 = ns2.serverfault.com serverfault.com 名称服务器 = ns3.serverfault.com ns1.serverfault.com 互联网地址 = 64.34.119.33 ns2.serverfault.com 互联网地址 = 64.34.119.34 ns3.serverfault.com 互联网地址 = 69.59.196.217
是否存在固定 IP 地址的 DNS 服务器,以供我的计算机自动寻找?
是的。有点。有根服务器,但您的本地计算机不太可能使用它们。如果您在公司网络上,则它很可能会使用根服务器,否则您的 ISP 可能会使用它们
它会转到(就我而言)康卡斯特,然后开始进入 serverfaults 服务器。这个过程是如何进行的?
您的计算机配置了默认网关(可通过 IPConfig 查看)
C:\Users\mark.henderson>ipconfig Windows IP 配置 以太网适配器本地连接: 连接特定的 DNS 后缀 . : enets.local 链路本地 IPv6 地址.... .. .: fe80::a9e4:733:8949:f70a%11 IPv4 地址.................: 192.168.161.103 默认网关................:192.168.161.17
此默认网关是您通向世界的窗口。此默认网关有自己的默认网关(您的 ISP),并且该网关通常通过称为 BGP 的协议连接到互联网的其余部分。此 BGP 协议是一种宣布所有单独的跳数和路由到特定目的地(ServerFault IP 地址)的方式。它跳转到下一个路由器,然后重新计算到达那里的最佳方法、跳数,依此类推,直到您到达终点。因此,两个连续的数据包可能会无序到达目的地,因此 TCP 对此有内置的控制。
是什么让它采取我在跟踪路由中看到的路线?
BGP 协议维护其拥有的每个后续链路的运行状况,当该链路的运行状况发生变化(太忙或关闭等)时,它会选择另一个跳跃。
答案3
您的计算机可以找到 DNS 服务器,因为它被告知了其网络配置中的一个(最好是多个)DNS 服务器的地址。该信息要么是动态获取的(从另一个称为DHCP)或者是针对特定网络接口静态配置的。
到不在您的“物理” LAN 上的特定 IP 地址的流量通过(您猜对了) IP 路由器进行路由,该路由器具有部分和完整的表,描述了构成 Internet 的所有网络的互连。
执行跟踪路由时,您与所需主机之间的所有跳数都代表到该主机的许多可能路由之一(可能)。
答案4
域名系统 (DNS)
首先,从 www.serverfault.com 到 ww.xx.yy.zz 的过程称为向前DNS 查找。反向查找是从 IP 地址获取 DNS 名称的过程。
也就是说,您的计算机将转到其网络设置中设置的 DNS 服务器(由您的 ISP/工作场所运营,称为“递归服务器”)。如果计算机通过 DHCP 自动获取 IP 地址(IE如果您没有手动设置,DNS服务器地址通常也是通过DHCP获取的。
尽管涉及缓存,但递归器会首先从 DNS“根服务器”的十三个 IP 地址之一开始处理您的查询,但实际上,存在 13 个以上的根 DNS 服务器,它们使用一种称为“任播”的机制共享 IP 地址。
当然,根服务器不保存全部域名。相反,它只是将所有对 .com 域名的请求转发到其中一个 .com DNS 服务器。包含 serverfault.com 记录的 .com DNS 服务器将请求转发到该 DNS 服务器,该服务器包含我们正在寻找的记录:www.serverfault.com 的 IP 地址(称为 A 记录)。这一切都发生在 ISP 的递归器中(成功查找的结果可以保存以供以后使用),以保持流程高效顺利地运行;它只返回最终答案。
IP 路由
计算机的网络设置中还有一个“默认网关”的 IP 地址,即 LAN 上的防火墙或路由器的地址。计算机发送的所有数据包如果不是发往直接连接到 LAN 的计算机(由设置的子网掩码决定),则将直接发送到该网关。
路由器拥有一个“路由表”,其中包含 IP 地址范围列表以及发往这些地址的数据包的目的地。路由表通常是自动配置的。在您的 ISP 网络中,可以使用多种协议中的任何一种来实现这一点,包括路由信息协议 (RIP)。一旦数据包离开您自己的 ISP 网络(通过上游提供商(即 ISP 的 ISP)发送到开放互联网),就会使用一种称为边界网关协议 (BGP) 的协议。数据包继续在路由器之间转发,直到到达最终目的地。数据包以相同的方式返回您的计算机。
traceroute 是如何工作的?它操纵数据包中一个名为“生存时间”的字段,该字段在正常使用中旨在防止数据包在路由器配置出现错误时无限循环。它被定义为数据包允许通过的路由器数量。Traceroute 每次将 TTL 增加 1,并监听超过该限制时生成的错误消息(以 ICMP 数据包的形式)。它记录生成错误的路由器的 IP 地址,并可选地执行反向 DNS 查找以获取 DNS 名称,这可能会成功,也可能不会成功。