我的浏览器如何知道从服务器获取数据的位置?

这很可能不是正确的论坛上发布这样的事情,但它的一个问题让我困惑多年。

我非常清楚服务器本身是如何工作的,而且对大多数计算机都相当熟悉。

以serverfault.com为例。

我在我的浏览器地址栏中inputhttp://www.serverfault.com/ 。 在这一点上,我的电脑执行反向 DNS查找来获取IP地址。

我知道DNS信息位于DNS服务器上,但是我的电脑如何知道在哪里可以立即查找? 有我的电脑自动寻找的固定IP地址的DNS服务器?

其次,一旦我的电脑有了serverfault.com的IP地址,它就会(在我的情况下)comcast开始进入serverfaults服务器。 这个过程如何工作? 当运行一个跟踪路由到serverfault.com时,它发出大约16跳,直到find我正在寻找的东西。

很明显,它不能直接连接到serverfault.com,因为这将直接到服务器的物理路由,但通过networking控制请求? 在跟踪路线中看到的路线是什么?

我知道这个问题是疯狂的开放,但如果我能至less得到一些外部来源的链接,或知道什么谷歌search将是非常有益的。

(我迟到了,但是看看我能做些什么。)

你在问两个截然不同的东西 – 通过DNS和IP路由的名字parsing。 我们单独处理它们。

DNS部分

我知道DNS信息位于DNS服务器上,但是我的电脑如何知道在哪里可以立即查找? 有我的电脑自动寻找的固定IP地址的DNS服务器?

通常情况下,客户端计算机会通过其DHCP服务器提供给他们的“选项”中的数据通知客户端计算机的IP地址(服务器为客户端提供“未使用的IP地址”“租赁”使用)。

某些计算机不使用DHCP获取IP地址,而是使用静态分配的IP地址。 在计算机具有静态分配IP地址的情况下,DNS服务器IP地址也在计算机的configuration中静态分配。

(对于客户端获取DNS服务器信息有更深奥的方法,但是上述两种方法覆盖了90%以上的情况)。

这听起来就像您的电脑在家庭networking中,可能是从您的家庭networking中的路由器上运行的DHCP服务器或ISP上的DHCP服务器获取其IP地址。

在家庭路由器的情况下,它将从您的ISP的DHCP服务器获得一个IP地址,并且在获取该IP地址的过程中,您将了解到ISP打算使用的DNS服务器的IP地址。 一些家庭路由器将提供ISP DNS服务器地址给路由器的DHCP服务器的客户端。 其他家庭路由器将自己运行一个“迷你”DNS服务器,并将DHCP客户端引导到它自己的“迷你”DNS服务器。 通常,这个“小型”DNS服务器只会将请求转发到ISP的DNS服务器。

如果您的计算机直接连接到ISP的无线路由器networking,很可能您的计算机将通过ISP的DHCP服务器提供ISP的DNS服务器的IP地址。

IP数据报包含目标IP地址,而不是人类可读的名称。 为了“通话”远程服务器,您的计算机需要该远程服务器的IP地址。 将“可视名称”“parsing”为IP地址(适合包含在IP数据报中作为目的地址)的过程称为正向DNS查找。

我不会在这里详细描述recursion转发的DNSparsing,但是,基本上,您的客户端计算机向其DNS服务器(从DHCP了解的或静态configuration的)发送请求,名称为“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地址)。 这个“默认网关”只不过是您的计算机“传递”数据包以便传送到Internet的另一台计算机(通常是路由器)的IP地址。 假设你使用的是以太网,你的计算机如何“释放”一个IP数据报的细节涉及到ARP协议和对这个答案可能有点太深的细节。

您可能会问:您的计算机如何知道其默认网关的IP地址是什么?

与计算机从DHCP计算机接收其DNS服务器地址的方式类似,通过从DHCP获得IP地址“租用”给DHCP服务器的“选项”提供了“默认网关”。 如果一台计算机有一个静态分配的IP地址,那么通常它的“默认网关”也将被静态分配。

从根本上讲,IP路由是一种将数据包从一台计算机(路由器)“分发”到另一台计算机的游戏,直到数据包到达目的地(或者如果数据包被转发太多时“死亡尝试”)。 每个路由器都有许多networking接口,将其连接到其他路由器。 当接收到一个数据包时,路由器“决定”哪个networking接口将是该数据包“最佳”的离开,并且在做出“路由决定”之后,通过选定的networking接口把数据包交给另一个路由器。 该过程重复,直到你的数据包到达目的地。

我的史诗分网答案讨论了静态IP路由的基础知识。 在静态IP路由中,每个路由器都有一个静态分配的目标networking列表,并理解networking到路由器networking接口的“邻接关系”。 在现实生活中,静态IP路由不在大型networking中使用,因为维护起来太麻烦,而且没有考虑到拥塞或链接失败的路由。

您执行的“traceroute”向您显示路由器沿着数据包path的每个“跳跃”所做的路由决策结果。 这些路由器使用dynamic路由协议,如边界网关协议(BGP)或开放式最短path优先(OSPF)来决定如何将数据包路由到其他路由器。 这些dynamic路由协议可以考虑诸如链路拥塞或可用性,数据包沿着每个预期path传播的相对“距离”以及可能的其他因素(包括诸如对等协议的“政治”因素)来确定数据包的去向。

个别dynamic路由协议如何工作的细节远远超出了这个答案。 幸运的是,互联网的体系结构是这样的,端点(比如你的电脑,或者Serverfault.com上的服务器)不需要知道任何有关“云”中数据包路由的知识。 只要networking中的所有路由器按照适当的规则进行播放(尽pipeIP允许无序传送和丢失分组 – 高层协议负责处理这些事件)。 更好的是,新的dynamic路由协议可以在“云”内部devise和实现,并且不需要改变所有的端点来利用改进的路由。

在这一点上,我的电脑执行反向DNS查找来获取IP地址。

其实,它做了一个正向查找。 反向DNS查询是当您想要将IP地址映射到域时

我的电脑怎么知道在哪里立即寻找?

每个域都有其名称服务器logging。 这些名称服务器logging指向域的授权DNS服务器。 您的电脑通过转到其预先configuration的DNS服务器来查找。 您可以在Windows上确认:

  C:\ Users \用户mark.henderson> NSLOOKUP
默认服务器:enetsdc1.enets.local
地址:192.168.161.2

 > set q = ns
 > serverfault.com
服务器:enetsdc1.enets.local
地址:192.168.161.2

非权威的回答:
 serverfault.com nameserver = ns1.serverfault.com 
  serverfault.com nameserver = ns2.serverfault.com 
  serverfault.com nameserver = ns3.serverfault.com

 ns1.serverfault.com因特网地址= 64.34.119.33
 ns2.serverfault.comurl= 64.34.119.34
 ns3.serverfault.comurl= 69.59.196.217 

有我的电脑自动寻找的固定IP地址的DNS服务器?

是。 有点。 有根服务器 ,但您的本地机器不太可能使用它们。 如果你在公司networking上,那么它很可能会使用根服务器,否则你的ISP可能会使用它们

它(在我的情况下)comcast开始进入serverfaults服务器的方式。 这个过程如何工作?

您的计算机configuration有默认网关(IPConfig可见)

  C:\ Users \用户mark.henderson> IPCONFIG

 Windows IPconfiguration
以太网适配器本地连接:

   连接特定的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协议维护其每个后续链路的健康状况,当链路的健康状况发生变化(过于忙碌或下降,无论如何)时,则select另一跳。

  1. 您的计算机可以find一个DNS服务器,因为它被告知其networkingconfiguration中的一个(或更多)DNS服务器的地址。 该信息是dynamic获取的(来自另一个称为DHCP的协议),或者是为特定networking接口静态configuration的。

  2. 到达不在“物理”LAN上的特定IP地址的stream量通过(你猜对了)具有部分和完整表格的IP路由器进行路由,该表格描述了组成互联网的所有networking的互连。

  3. 在执行跟踪路由时,您和所需主机之间的所有跳数都代表了该主机的可能路由之一(可能)。

有我的电脑自动寻找的固定IP地址的DNS服务器?

如果您在计算机上查看您的IPconfiguration,则会发现它有一个要求的DNS服务器列表。 这是链接。 像使用路由器一样,DNS通常是通过DHCP进行configuration的。 它是IPconfiguration的一部分。

然后,提供商的DNS服务器将正常进入pipe理完整互联网(称为ROOT服务器)的已知DNS服务器的列表。 基本上他们是“区域”的“已知的权威”,这是最高级的区域。 技术上,“.com”是“。”的子域。 正如我alareday所说,根服务器的列表是“已知的”。

更多信息请访问http://www.root-servers.org/

在跟踪路线中看到的路线是什么?

在所有提供者所属的AS(自治系统)之间configuration的连接通过BGP协议在它们之间交换。 基本上,提供者从AS的中央登记处获得地址,并且将已知的其他系统发布到AS的边缘。 他们交换vviaBGP如何路由到其他networking。

更多信息请参见http://en.wikipedia.org/wiki/Border_Gateway_Protocol

域名系统(DNS)

首先,从www.serverfault.com到ww.xx.yy.zz的过程称为正向 DNS查询。 反向查找是用于从IP地址获取DNS名称的过程。

也就是说,您的计算机会转到设置在其networking设置中的DNS服务器(由您的ISP /工作站运行,称为“recursor”)。 如果计算机通过DHCP自动获取IP地址( 即,您没有手动设置),则DNS服务器地址通常也通过DHCP获得。

尽pipe涉及到caching,但recursion方式首先从DNS“根服务器”的十三个IP地址之一开始处理查询,尽pipe实际上存在超过13个根DNS服务器,使用称为“anycast”的机制共享IP地址。

根服务器当然不包含所有域名的DNS条目。 相反,它只是将.com域名的所有请求都引用到.com DNS服务器之一。 包含serverfault.com的logging的.com DNS服务器将请求引用到包含我们正在查找的logging的DNS服务器:www.serverfault.com的IP地址(称为Alogging)。 这一切都发生在ISP的recursor(成功的查找结果可以保存供以后使用),以保持stream程高效平稳地运行; 它只返回最后的答案。

IP路由

此外,在计算机的networking设置中,还有一个“默认网关”的IP地址,该网关是LAN上防火墙或路由器的地址。 如果你的计算机发送的所有数据包都不是直接连接到局域网的计算机,而是通过设置的子网掩码确定的,则它们将直接进入该网关。

路由器持有一个“路由表”,其中包含一个IP地址范围列表,以及发送给它们的数据包的位置。 路由表通常是自动configuration的。 在您的ISPnetworking中,可以使用几种协议中的任何一种来实现,包括路由信息协议(RIP)。 一旦数据包离开自己的ISPnetworking(通过上游供应商(ISP的ISP)向开放的互联网发送),就会使用称为边界网关协议(BGP)的协议。 数据包继续在路由器之间转发,直到到达最终目的地。 数据包以相同的方式返回到您的计算机。

traceroute如何工作? 它操纵数据包中的一个名为“Time to Live”的字段,在正常使用情况下,该字段旨在防止数据包在路由器configuration中出现错误时无限循环。 它被定义为允许数据包通过的路由器的数量。 Traceroute每次将TTL增加1,并侦听超出限制时产生的错误消息(以ICMP数据包的forms)。 它会logging生成错误的路由器的IP地址,并可select执行反向DNS查找以获取DNS名称,该DNS名称可能会也可能不会成功。