我非常清楚服务器本身是如何工作的,并且在大多数计算机上都非常精通.
以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部分
I know that the dns information is located on a DNS server,but how does my computer know where to immediately look for that? Are there DNS servers at fixed IP addresses that my computer automatically goes looking for?
通常,客户端计算机通过其DHCP服务器(为客户端提供“租用”未使用的IP地址的“服务器”的“选项”中的数据通知他们将要使用的DNS服务器的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路由部分.
IP路由部分
What makes it take the route that I see in the trace route?
所有这些DNS查询的结果将是IP地址(或多个IP地址,是技术性的).您的浏览器将启动与DNS查询返回的地址之一的TCP连接.这将导致您的计算机将IP数据报(发往我们之前的DNS查询返回的IP地址)发送到您的计算机已知的“默认网关”. “默认网关”只不过是另一台计算机(通常是路由器)的IP地址,您的计算机将“切换”数据包以便传送到Internet.假设您正在使用以太网,那么您的计算机“切换”IP数据报的具体细节涉及ARP协议以及可能对此答案而言过于深入的细节.
您可能会问:您的计算机如何知道其默认网关的IP地址是什么?
类似于计算机从DHCP计算机接收其DNS服务器地址的方式,当从DHCP“租用”IP地址时,通过接收的“选项”向其提供“默认网关”.如果计算机具有静态分配的IP地址,则通常也会静态分配其“默认网关”.
从根本上说,IP路由是一种将数据包从一台计算机(路由器)“切换”到另一台计算机的游戏,直到数据包到达其目的地(如果数据包被转发太多次,则“尝试”).每个路由器都有许多网络接口,可将其连接到其他路由器.当它收到一个数据包时,路由器“决定”哪个网络接口将是该数据包通过的“最佳”,并且在做出“路由决定”之后,它通过所选择的网络接口将数据包交给另一个路由器.重复此过程,直到您的数据包到达目的地.
我的epic subnetting answer讨论了静态IP路由的基础知识.在静态IP路由中,每个路由器都有一个静态分配的目标网络列表,并了解网络与路由器网络接口的“邻接”.在Real LifeTM中,静态IP路由不在大型网络中使用,因为它的维护过于繁琐,并且没有考虑到拥塞或链路故障的路由.
您执行的“traceroute”显示路由器沿数据包路径的每个“跳”做出的路由决策的结果.这些路由器使用动态路由协议(如边界网关协议(BGP)或开放最短路径优先(OSPF))来决定如何将数据包路由到另一个路由器.这些动态路由协议可以考虑链路拥塞或可用性,数据包沿每条预期路径传输的相对“距离”等因素,以及可能的其他因素(包括“政治”因素,如对等协议),以确定数据包的去向.
各个动态路由协议如何工作的细节远远超出了这个答案.幸运的是,Internet的体系结构使得端点(如您的计算机或Serverfault.com上的服务器)不需要了解有关“云”内部数据包路由的任何信息.只要网络中的所有路由器都按照适当的规则播放,就会传送数据包(虽然IP允许无序传送和丢失数据包 – 更高级别的协议负责处理这些事件).更好的是,可以在“云”内设计和实施新的动态路由协议,并且不需要为所有端点改变以利用改进的路由.