需要有关互联网从头到尾的工作方式的采访问题的更多技术性答案。


13

在过去的两周中,我曾与5位独立人士进行了访谈,而这5位中的3位都问了我这个问题: 说明点击“ Google.com”和屏幕上出现的页面之间会发生什么。 基本上,互联网是如何工作的。我想过三遍,如果我再次遇到这个问题,我会更好的准备。

我知道一些事情,但是我不完全相信我的回答足够好。基本上,我提到DNS服务器将“ google.com”转换为IP地址。我对TCP / IP有所了解,然后讨论一下从字面上提供请求的页面的Web服务器,这些请求的页面被发送回浏览器,然后由浏览器解释并显示。

正如我之前所说,我不相信我的回答足够技术性。我遗漏的步骤是什么?

就其价值而言,这三次中有两次曾在同一家公司工作过,我被要求与他们进行第三次面试,所以我不能对它进行猛烈的轰炸。


1
您面试的职位的性质是什么?
smp7d 2013年

3
如果五分之二的访调员提出了这个问题,那么您该进行一些研究/研究并获得一个很好的答案,表明您完全理解该问题了。 如果您被要求在同一家公司进行第三次面试,并且再次被问到问题,那么您要么证明您足够关心以积累自己的知识,要么没有。
罗伯特·哈维

1
另外,我会尝试通过询问他们最感兴趣的过程来缩小问题的范围。例如,他们可能并不关心您对OSI模型的七层之类的知识是否很了解,但是您应该仍然具有工作知识。
罗伯特·哈维

1
另一方面,也许答案太技术性了。也许他们希望看到您如何以非技术方式将信息与人们联系起来?
马特

1
如果询问该问题以查看您的沟通水平,那么最好回问有关该问题的问题,而不是仅仅回答一个非常广泛的问题。您可以给出非常详细的技术答案,并花一整天的时间对其进行解释。我认为这不是问题的目的。
马特

Answers:


29
  1. 您的浏览器首先让OS在其“主机”文件中查找将域名转换为IP地址的条目。这是从ARPANET继承的一项旧功能,当单个文本文件可能包含可通过ARPANET访问的每台计算机以及与其连接的每台计算机具有较新副本的可理解名称时。在没有NetBIOS或类似节点命名协议的小型计算机网络中,它曾经有一些剩余价值,但如今,它很可能成为黑客的目标(谁可以使用它绕过DNS并将您的计算机指向站点)他们控制)对客户端计算机或其用户/所有者具有任何合法用途。
  2. 假设您的计算机没有该域的HOSTS条目,您的浏览器就会向操作系统的Internet设置中为所使用的连接配置的DNS服务器发送UDP请求,并传递请求的“主机名”(也就是所有域名)在“ http://”和后跟的第一个冒号或正斜杠之间;即“ www.google.com”)。该DNS服务器通常属于您的公司或您本地的Internet服务提供商。
    • UDP代表“通用数据报协议”,是与TCP相同类别的“传输层”协议(在“网络层” IP协议之上,在“应用层”协议(例如HTTP,FTP,SMTP等)之下)。TCP提供了许多错误检查和容错功能(添加额外的数据并因此增加了开销),而UDP则采用了一种更为轻量级的方法,从而增加了净数据带宽。折衷是该协议不支持TCP中可用的功能,例如将大数据拆分为多个数据包(因此消息必须很小)或重新发送传输中丢失的数据包。它适用于小的,简单的消息(例如DNS)和流式遥测类型的数据,而丢失一个数据包则无关紧要。
  3. 该DNS服务器将了解以下三件事之一:如何将域名直接转换为IP地址(意味着它是该域的“权威名称服务器”或ANS);ANS或其父级的IP地址;或它自己的父域名服务器,它更可能知道如何到达ANS。如果服务器本身不翻译请求,它将“向下”转发给已知的ANS,或者将“向上”转发给其父NS,然后递归重复此过程。
    • 该树结构的“根”是一台服务器,除了将接收到的任何请求转发到许多“顶级域”或TLD服务器之一之外,什么都不做。例如,有一个“ .com”名称服务器,他知道如何查找地球上任何“ .com”域的IP地址(通过将这些请求向下转发到ISP级别的名称服务器)。这些TLD转发对属于ISP的互联网的特定“分支”中的任何DNS都不知道的域名服务器的请求。
  4. 找到权威名称服务器并将域名转换为IP地址后,该地址将返回给客户端及其浏览器。如果在请求的“生存时间”(TTL;在服务器之间转发请求的最大次数,以避免在错误配置的服务器之间无限循环)内找不到ANS,则节点会将错误返回给客户端请求“超时”(或者是域的权威服务器但不能转换特定域前缀的节点)。
  5. 对于HTTP连接,浏览器随后向IP地址和指定的端口(或默认的HTTP端口80)发送“ TCP SYN”请求以建立连接。这是协议级别的请求,位于“网络级别” IP报头之上,其中包含诸如客户端的首选响应端口(“源端口”),TCP通信首选项(例如段大小,窗口比例)之类的信息,并使用可选的协议功能。
  6. 该请求通过互联网的结构在“链接级别”(控制实际电路如何传输包含在网络,传输和应用层的数据)进行路由;通常,数据将通过电线或光纤传输到您家或企业的“中央办公室”(这称为“最后一英里”,通常是代表带宽最大瓶颈的电路),这或多或少是信息高速公路。然后,CO可以访问高带宽管道(T载波,SONET等),这些管道将您的请求以及数十亿个其他请求在全球范围内传输到目标的CO,再将其转发到目标服务器或网络。
    • 这种“ IP路由”在概念上与DNS解析类似。ICANN为“顶级” ISP分配了整个“ A类” IP网络(可能的每个地址,给定一个已知的第一个字节),其他ISP知道谁拥有该A类网络以及如何将数据获取到该网络的最近“前端”使用“路由表”中的信息。然后,该顶级ISP将地址块租用,其中一些租用给本地ISP,其他则直接租给公司用户,这些ISP和公司的路由器使用IP地址(和它们自己的路由表)来确定是否将数据包向下发送给其他人。附近的电路,侧向其他本地ISP路由器或更高级别的中继和路由器。
  7. 服务器接收到此请求(前提是未在较低的抽象层(如套接字或防火墙)拒绝该请求),并且如果服务器决定接受连接,它将发送“ SYN-ACK”请求-响应步骤,两者均确认请求并指定其自己的首选项(包括它可以适应的任何客户首选项,但更改不能或未指定的任何首选项)。
  8. 如果客户端使用服务器提供的选项集支持通信,它将发送ACK响应,并且现在“建立”了连接。
  9. 浏览器接下来发送“ HTTP GET”请求。该请求包含浏览器请求的资源的完整URI(即使我们知道我们正在与www.google.com进行通信,我们也会将该字符串作为请求的一部分进行发送,以便服务器可以根据需要进一步解释指示请求的域名)。该请求可能包括“ cookies”;可以将存储在客户端上的数据提供给服务器,以帮助有效和方便地处理请求(例如,识别用户的偏好)。
  10. 服务器接收到GET请求,然后首先确定是否希望兑现它(服务器可能一直在侦听TCP端口80的请求,但是期望来自其他应用程序协议(例如FTP或VoIP)的消息;这对于端口80很少见,但对于其他类型的端口更常见)。我们假定它确实接受它;然后服务器返回一个HTTP响应,其中包含请求的资源(在这种情况下,默认页面的HTML是Google的无处不在的搜索页面)。响应还可能包括“ cookies”,服务器要求客户端存储“ cookies”(客户端可能会也可能不会)。
  11. HTML被浏览器摘要并呈现以在浏览器窗口中绘制页面。发生这种情况时,客户端会发送更多对Javascript,样式表,图像和其他数据的HTTP GET请求,这些请求需要以HTML规定的方式显示页面的所有内容,并且由客户端提供结果数据。服务器。
  12. 在过去的时代,谷歌是基于静态形式的。您在文本框中输入了要搜索的内容,然后点击“搜索”(或“我很幸运”)。执行此操作时,客户端会将HTTP POST请求发送到服务器。请求中包含客户端指定的信息应发送到的位置,当然还有信息本身。服务器会消化该信息,并使用它来查找搜索结果,服务器会构建这些结果的页面并发送给您。或者,它可以将搜索词转换为“查询字符串”,并通过“重定向”进行响应;浏览器向消息中指定的其他URI发送另一个请求的请求。浏览器将执行此操作,然后服务器将构建并传输页面。
  13. 在现代,Google的首页更具活力。在您输入内容时,在浏览器内的客户端执行的JavaScript会通过“副渠道”将您输入的内容发送给Google(它使用相同的协议进行通讯,但是因为它不是浏览器本身发送整个页面的请求,浏览器屏幕无法完全清除并重新绘制)。对于首页,它用于提供查询提示(由于其他人最近搜索的内容,它会自动为您搜索的内容提供自动建议);在结果页面上,它具有相同的功能,但也可以用于提供实时搜索结果并完全重绘页面,而无需浏览器重新加载整个页面。这些技巧属于AJAX(异步JavaScript和XML,

这部电影是他们在大学展示给我的新生的“ IT入门”课的基础,以友好,相似的格式进行了介绍。它绝不是技术性的,但是它为这个难题的各个部分提供了很好的概念概述。


1
这是一个很好的答案,但是掩盖了许多人认为不必要的许多细节。(我并不是说您需要添加这些详细信息;我只是指出,发生的事情比您的帖子所建议的要多。)
greyfade

1
是的,您需要进入TCP vs UDP进行DNS查找。如果是TCP,则应进入TCP 3向握手。可以安全地假设系统已经以某种方式定义了域名服务器(预先通过DHCP或网络配置)....
Alan Shutko 2013年

1
@AlanShutko-我确实提到了三向握手;来回SYN / SYN-ACK / ACK。我没有提到UDP,尽管它是DNS的主要协议。
KeithS 2013年

@KeithS,糟糕,您是对的,我在检查DNS时一直在寻找它,而不是稍后。如果响应大于512字节并且被截断,则DNS可能会回退到TCP。
艾伦·舒特科

1
ANS-“权威名称服务器”,直接了解特定域名的端点并对其负责的DNS服务器。ALD是一个错字。对该帖子进行了编辑,以使这两个方面都更加清晰。
KeithS 2015年

1

遗漏Cookie和防火墙将是此处缺少的几件事。对于发送Cookie来说要说些什么,以便“ Google.com”可以识别用户并提供与未登录Google的用户可能不同的页面。还有一个问题是该人在哪里查找:智能手机,平板电脑或普通计算机(笔记本电脑或台式机)?

我想知道您是否想问一些附带问题,但这不是这里的一个因素。这更多地是关于Web如何像Internet一样工作的问题,它包括电子邮件和我认为的其他内容。


我的猜测是,这更多地是对您的沟通能力的考验。您能否提出一个相当技术性的问题并将其分解,以便技术和非技术性的人都能理解?在被要求解释某人在其浏览器中打开“ Google.com”首页时,您会返回什么样的问题?您是否做出一堆假设或提出问题?在某些方面,我认为这与白板问题类似,在白板问题中,事情变得如此模糊,以至于您要么提出问题,以便给出准确正确的答案,要么在给出答案时做出假设。


5
在我看来,关于互联网的问题将更多地是关于联网的问题。如何找到路线?数据包的目的和意义是什么,它们如何传输信息?数据包上的TCP抽象如何工作,为什么?但是问题确实很模糊,可能是询问HTTP,HTML,网络交换机,ISP和骨干网或其他任何东西,也许它想知道如何抓取NIC帧缓冲区以及OS,CPU或NIC是否这样做...
吉米·霍法2013年

@JimmyHoffa:确实,这是一个广泛的问题。要求它的访问者用这样的方式措辞,我认为重点放在事物的网络方面-从页面请求到页面获取。发生了很多事情,我怀疑不管我走哪条路线,只要技术足够,而且我知道我在说什么,他们都会很高兴。
Megacannon 2013年

1
我也认为他们是在寻求非技术性的答案,以了解您如何交流思想。我们经常为树木而迷失森林,看不到广阔的前景。
马特

@JimmyHoffa,好点。您可能应该从DNS服务器的IP地址开始,并通过网络掩码确定它们是否在同一子网中,如果是,则使用ARP查找它们。否则,将数据包发送到网关。
艾伦·舒特科
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.